鱼C论坛

 找回密码
 立即注册
查看: 3164|回复: 8

[已解决]global var这行删掉会怎么样?

[复制链接]
发表于 2020-2-26 23:43:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 帅滴不要不要滴 于 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’?

大佬帮忙看看
最佳答案
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())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-2-27 00:21:41 | 显示全部楼层
如果不声明global var, 运行完后,var=‘Hi’, 在fun1()声明后var="Baby"
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-2-27 00:46:24 | 显示全部楼层
ouyunfu 发表于 2020-2-27 00:21
如果不声明global var, 运行完后,var=‘Hi’, 在fun1()声明后var="Baby"

不声明,fun2(var) 依旧调用的还是baby,这是我不懂的地方麻烦大佬详细说一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

这是局部变量的内部调用,所以还是baby.
你如果直接print(fun2(var)),因为在var 在=前面,所以调用的是全局变量,显示的是Hi, I love you
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 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())
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 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’    麻烦大佬解答一下
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

以为你fun1中有一个return(var)。
return 在fun1里面,此时return('Baby’)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

因为fun1()里面的 var=‘Baby’,var 是和全局变量var = 'HI',同名的另一个局部变量。小甲鱼在视频里说了的。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-12-30 23:29:48 | 显示全部楼层
这个为啥不实行fun3(var)这个 函数啊,不是应该返返回 “小甲鱼”吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-9-25 03:21

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表