帅滴不要不要滴 发表于 2020-2-26 23:43:49

global var这行删掉会怎么样?

本帖最后由 帅滴不要不要滴 于 2020-2-26 23:55 编辑

var = ' Hi '

def fun1():
    global var
    var = ' Baby '
    return fun2(var)

def fun2(var):
    var += 'I love you'
    fun3(var)
    return var

def fun3(var):
    var = ' 小甲鱼 '

print(fun1())


global var这行删掉会怎么样?
跑了一遍的结果没变啊,声明全局变量的意义何在?

或者说:如果不声明global var,def fun2(var):中的var调用的是‘Hi’还是‘Baby’?

大佬帮忙看看{:5_108:}

ouyunfu 发表于 2020-2-27 00:21:41

如果不声明global var, 运行完后,var=‘Hi’, 在fun1()声明后var="Baby"

帅滴不要不要滴 发表于 2020-2-27 00:46:24

ouyunfu 发表于 2020-2-27 00:21
如果不声明global var, 运行完后,var=‘Hi’, 在fun1()声明后var="Baby"

不声明,fun2(var) 依旧调用的还是baby,这是我不懂的地方{:5_100:}麻烦大佬详细说一下

ouyunfu 发表于 2020-2-27 01:23:22

帅滴不要不要滴 发表于 2020-2-27 00:46
不声明,fun2(var) 依旧调用的还是baby,这是我不懂的地方麻烦大佬详细说一下

这是局部变量的内部调用,所以还是baby.
你如果直接print(fun2(var)),因为在var 在=前面,所以调用的是全局变量,显示的是Hi, I love you

vallenshao 发表于 2020-2-27 01:37:47

本帖最后由 vallenshao 于 2020-2-27 01:42 编辑

global的意义不是说不能被修改。
在fun1的里面,global var,此时var已经国际化了,但是不代表不能被修改。
下一行,var ='baby',也就是说你把这个全局var赋值成了Baby,此时在函数里面和外面,var就会等于Baby了。

可以这样理解
var = 'Hi'
def fun1():
    global var #此时fun1没有输入任何参数,但是外部var的值已经传入进来了,而且var已经不仅仅属于这个函数,而是属于整个范围。
    var = 'baby' #此时var按照上面这样,已经属于这个范围,而且值是'baby'

为了更好帮助i理解,我给你看一下区别。
def fun2():
    global var
    var = '111'
fun2()
print(var) #此时能打印出var出来,哪怕在函数外面也能打印函数里面,如果不是global var,在函数外面print(var)就会报错。

如果你想打印 Hi I love you,只需要把你代码作如下修改
var = ' Hi '

def fun1():
    global var
    var = ' Baby ' #把这行删掉就可以了,也就是var我不赋值,我把外面的hi直接带进来
    return fun2(var)

def fun2(var):
    var += 'I love you'
    fun3(var)
    return var

def fun3(var):
    var = ' 小甲鱼 '

print(fun1())

帅滴不要不要滴 发表于 2020-2-27 12:23:25

vallenshao 发表于 2020-2-27 01:37
global的意义不是说不能被修改。
在fun1的里面,global var,此时var已经国际化了,但是不代表不能被修改 ...

原代码中将global var 删掉,打印出的结果还是不变的,也就是说即使没有声明global,fun2(var)中调用的还是‘Baby’,我不懂的在这里,已经没有声明global了,为啥fun2(var)中的var还用fun1里面的var=‘Baby’,而不是用最前的全局变量var=‘Hi’    麻烦大佬解答一下{:5_99:}

vallenshao 发表于 2020-2-27 14:18:54

帅滴不要不要滴 发表于 2020-2-27 12:23
原代码中将global var 删掉,打印出的结果还是不变的,也就是说即使没有声明global,fun2(var)中调用的还 ...

以为你fun1中有一个return(var)。
return 在fun1里面,此时return('Baby’)

杨一二四 发表于 2020-3-9 19:33:44

帅滴不要不要滴 发表于 2020-2-27 12:23
原代码中将global var 删掉,打印出的结果还是不变的,也就是说即使没有声明global,fun2(var)中调用的还 ...

因为fun1()里面的 var=‘Baby’,var 是和全局变量var = 'HI',同名的另一个局部变量。小甲鱼在视频里说了的。

luobrn123 发表于 2022-12-30 23:29:48

这个为啥不实行fun3(var)这个 函数啊,不是应该返返回 “小甲鱼”吗
页: [1]
查看完整版本: global var这行删掉会怎么样?