为什么打印Baby I love you而不是打印小甲鱼
4. 目测以下程序会打印什么内容?【第十九讲课后作业】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())
会打印:Baby I love you fun3 里的 var 是个局部变量,且没有返回它
不会影响 fun2 里的 var 的值 写了注释,你看一下。这是变量作用域的问题。局部变量和全局变量其实是不同的变量,你可以用print(id(var))看一下就知道了,可以分别在三个函数和主程序中输出var的id就可以看出来了。
var = ' Hi ' #全局变量var,称之为var0,变量var0=' Hi '
def fun1():
global var #全局变量var0,变量var0=' Hi '
var = ' Baby ' #全局变量var0,变量var0=' Baby '
return fun2(var) #全局变量var0,实参var0=' Baby '。得到的返回值在第11行
def fun2(var): #局部变量var,称之为var1,变量var1=' Baby '
var += 'I love you' #局部变量var1=' Baby I love you'
fun3(var) #局部变量var1,实参var1=' Baby I love you'。fun3()不影响var1的值
return var #将var1作为返回值,var1=' Baby I love you'。fun2()的返回值不影响var0的值
def fun3(var): #局部变量var,称之为var2,变量var2=' Baby I love you'
var = ' 小甲鱼 ' #局部变量var2=' 小甲鱼 '
print(fun1()) #该语句打印的是fun1()的返回值,即第6行的return内容,也即第11行的返回值' Baby I love you'
print(var) #全局变量var0=' Baby ' 因为你第二个函数属于调用,所以不能使用global 1、fun1声明了全局,所以fun1里的var值覆盖了全局变量,var变成了Baby,此时return的值为fun2的值。
2、fun2调用的var为Baby,下面连接了个字符串,变成了Baby,I Love You,返回。
3、局部变量不影响全局变量,所以fun3的局部调用不影响全局,不用考虑fun3的调用了。 sunrise085 发表于 2021-7-3 09:45
写了注释,你看一下。这是变量作用域的问题。局部变量和全局变量其实是不同的变量,你可以用print(id(var)) ...
我觉得吧,调用函数就相当于新开一个函数,所有的定义都是初始化的,返回函数的话是可以把之前的函数做的改变一起拿到下个函数的,不知道这样理解行不行 fun3 里的 var 是个局部变量,且没有返回它
不会影响 fun2 里的 var 的值
页:
[1]