大珠提子 发表于 2020-3-11 19:18:55

python:这个函数运行过程是怎样的?谢谢!

本帖最后由 大珠提子 于 2020-3-11 20:06 编辑

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())
1.global var改全局变量,是同时改了fun2和fun3中的var吗?
2.fun2里面调用了fun3,为啥var的值没有被改为"小甲鱼"?是因为fun1里面把var变成全局变量,所以fun3里面的赋值失去意义了吗?
3.要是前俩我说的不对,求一下这个函数运行过程,这个我答案逆推还是不敢确定。

qiuyouzhi 发表于 2020-3-11 19:25:13

1,第一个没有听懂
2,var = ' Hi '

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


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

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

print(var)

print(fun1())
到头来你可以发现,最后修改并返回的只有局部变量
3,你自己一行一行分析就行

whiteness 发表于 2020-3-11 21:25:53

def3没有return值

大珠提子 发表于 2020-3-11 22:18:10

whiteness 发表于 2020-3-11 21:25
def3没有return值

加上return var输出结果没有改变

大珠提子 发表于 2020-3-11 23:11:34

qiuyouzhi 发表于 2020-3-11 19:25
1,第一个没有听懂
2,
到头来你可以发现,最后修改并返回的只有局部变量


谢谢,想了好久没理解为什么print(var)打印出hi,fun1里面不是用global把var转成全局变量了嘛,为啥不是baby{:5_96:}

whiteness 发表于 2020-3-12 08:07:48

大珠提子 发表于 2020-3-11 23:11
谢谢,想了好久没理解为什么print(var)打印出hi,fun1里面不是用global把var转成全局变量了嘛,为啥不是b ...

你打印出的是hi?

qiuyouzhi 发表于 2020-3-12 08:11:13

大珠提子 发表于 2020-3-11 23:11
谢谢,想了好久没理解为什么print(var)打印出hi,fun1里面不是用global把var转成全局变量了嘛,为啥不是b ...

因为你在函数里对var的操作是赋值,这时候Python默认认为这是局部变量

DavidCT 发表于 2020-3-12 12:19:07

所以说是局部变量跟全局变量的问题?
页: [1]
查看完整版本: python:这个函数运行过程是怎样的?谢谢!