Arcticfoxer 发表于 2020-10-15 17:31:33

19讲问题

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())


19讲这个问题(最后会打印什么?)没懂,以为是会打印小甲鱼。我猜我可能是不知道global var这里global的作用

wp231957 发表于 2020-10-15 17:44:32

10行   13   14行都是没用的代码
用来骗你的

昨日青空77 发表于 2020-10-15 18:07:05

global是用来修改全局变量的值,也就是开头hi已被修改

笨鸟学飞 发表于 2020-10-15 23:25:49

var = ' Hi '          #定义全局变量var

def fun1():
    global var      #定义函数内的var为全局变量
    var = ' Baby '    #此时全局变量的值已修改为' Baby '
    return fun2(var)#把全局变量(值为' Baby ')作为参数传入调用fun2()函数,并将执行结果返回,也就是返回 fun2(' Baby ') 的返回值,此时返回“Baby I love you”


def fun2(var):          #参数' Baby '传入函数内的局部变量var
    var += 'I love you'   #执行后函数2内的局部变量值为“Baby I love you”,全局变量仍然为' Baby '
    fun3(var)          #返回fun3(“Baby I love you”)的执行结果,返回了None
    return var         #此时函数返回“Baby I love you”,也就是fun2(' Baby ')
返回“Baby I love you”

def fun3(var):          #参数“Baby I love you”传入函数内的局部变量var
    var = ' 小甲鱼 '   #执行后函数3内局部变量值为' 小甲鱼 ',全局变量仍然为' Baby '
                  #这个程序没有返回值,也就是返回None,不信可以看后面的运行结果

print(fun1())   #打印fun1()函数的返回值,返回的是“Baby I love you”,全局变量仍然为Baby
查看执行结果并验证分析是否正确:
>>> print(fun3("Baby I love you"))
None
>>> print(fun2("Baby"))
BabyI love you
>>> var
' Baby '

Arcticfoxer 发表于 2020-10-16 18:28:26

笨鸟学飞 发表于 2020-10-15 23:25
var = ' Hi '          #定义全局变量var

def fun1():


太感谢了!菜鸟幸得前辈指点!

笨鸟学飞 发表于 2020-10-16 23:07:20

Arcticfoxer 发表于 2020-10-16 18:28
太感谢了!菜鸟幸得前辈指点!

我也才刚学个把星期,0基础新入门,看代码仔细点分析清楚就行了
碰到这种有迷惑的,你其实把函数内的局部变量var改为x或其他
有定义为全局变量的不改,让自己更好的理解

Arcticfoxer 发表于 2020-10-17 10:15:12

笨鸟学飞 发表于 2020-10-16 23:07
我也才刚学个把星期,0基础新入门,看代码仔细点分析清楚就行了
碰到这种有迷惑的,你其实把函数内的局 ...

这个办法好,同名的局部变量和全局变量确实有迷惑性不太好理解
页: [1]
查看完整版本: 19讲问题