Jerry~Mouse 发表于 2021-10-8 02:58:09

关于全局变量

result = []
def xiatiya(n):
    if n > 0:
      result.insert(0,n%10)
      xiatiya(n // 10)

xiatiya(12345)
print(result)

这里def为啥可以对result这个全局变量进行修改呢?我并没有声明global呀

suchocolate 发表于 2021-10-8 07:59:31

基础问题看教程:https://www.runoob.com/python3/python3-namespace-scope.html

小甲鱼的铁粉 发表于 2021-10-8 09:00:59

你把result写在了最外侧,没有程序块的包裹,不加global他也是全局变量

帅昊昊昊 发表于 2021-10-8 09:51:32

踩个点

傻眼貓咪 发表于 2021-10-8 10:05:16

本帖最后由 傻眼貓咪 于 2021-10-8 10:06 编辑

var = # 这是全局变量

def A():
    var.append("banana") # 这里的 var 是全局变量,增加新值

def B():
    var = # 定义一个新列表,取和函数外面的全局变量相同名字 var,虽然名字相同,但一个是局部变量,一个是全局变量
    var.append("apple") # 这里的 var 变成局部变量,增加新值,完全不影响全局变量(意思就是函数内部变量自己跟自己玩)

A() # 会影响全局变量
B() # 不影响全局变量

print(var)

def C():
    global var # 定义全局变量(意思就是说这里不管怎样,只要我用 var 就是全局变量)
    var = # 改变全局变量的地址和值
    var.append("小白") # 增加新值

C() # 会影响全局变量

print(var)

FK二十一 发表于 2021-10-8 11:30:50

因为result是列表,属于序列,不用声明,甲鱼讲过。{:10_256:}

Jerry~Mouse 发表于 2022-3-13 17:04:41

傻眼貓咪 发表于 2021-10-8 10:05


这就意味着 变量如果是列表的话不申明global全局变量就可以对全局变量进行更改,仅限于更改,例如append,insert,但是如果要重新定义一个同名函数的话,就会变成局部变量 就例如def B()这个例子,我能这么理解吗
页: [1]
查看完整版本: 关于全局变量