再问全局变量和局部变量
1.var = ' Hi '2.
3.def fun1():
4. global var
5. var = ' Baby '
6. return fun2(var)
7.
8.def fun2(var):
9. var += 'I love you'
10. fun3(var)
11. return var
12.
13.def fun3(var):
14. var = ' 小甲鱼 '
15.
16.print(fun1())
为什么运行后返回的结果是Baby I love you? 在这段代码中,var是一个全局变量,在fun1()函数中,使用global关键字声明了var是全局变量,而不是局部变量。在fun1()函数中,var被赋值为'Baby',然后传递给了fun2()函数。在fun2()函数中,var被修改为' Baby I love you',然后传递给了fun3()函数。在fun3()函数中,var被重新赋值为'小甲鱼',但这并不会影响fun2()函数中的var的值。最后,fun2()函数返回' Baby I love you',并被fun1()函数返回并打印出来。
因此,运行后返回的结果是'Baby I love you'。 当`fun1()`被调用时,它定义了一个全局变量`var`并将其初始化为字符串" Hi "。在第5行,它更新了全局变量`var`的值为" Baby "。
接下来,`fun1()`返回调用另一个函数`fun2(var)`的结果。在`fun2(var)`中,在第9行代码中,使用 `+=` 操作符连接字符串 “I love you” 来更新传递给 `fun2()` 的参数 `var` 的值,即使这个值是从调用函数 `fun1()` 中传递的,因此字符串变量 var 的值现在为 " Baby I love you"。
然后,`fun2()`调用 `fun3(var)`,但是在 `fun3`中,对 `var` 进行赋值 "小甲鱼" 并没有影响到 `var` 的值,它只是将 `var` 绑定到一个新对象上,因此不会改变 `var` 的值。 最后,在main函数中,打印由 `fun1()` 返回的 `fun2(var)` 的结果, `fun2(var)` 的值为 "Baby I love you" ,因此这就是将会被打印到控制台上的值。
有用请设置最佳答案 本帖最后由 lzb1001 于 2023-5-10 23:08 编辑
isdkz 发表于 2023-5-10 20:57
在这段代码中,var是一个全局变量,在fun1()函数中,使用global关键字声明了var是全局变量,而不是局部变量 ...
大神请帮忙看看每行代码后的#:一是看看a - i的顺序和注释对不对?二是有3处???的地方不明
1.var = ' Hi ' # a定义var全局变量
2.
3.def fun1():
4. global var # c使用global关键字声明var是全局变量
5. var = ' Baby ' # d将var重新赋值为'Baby'
6. return fun2(var) # e将新的var的值传入fun2()函数并返回
7.
8.def fun2(var):
9. var += 'I love you' # f将var的值修改为' Baby I love you'
10. fun3(var) # g将新的var的值传入fun3()函数
return var # i返回……???所以实际print(fun1())也就是返回并打印这里的var的值???
11.
12.def fun3(var):
var = ' 小甲鱼 ' # h将var重新赋值为'小甲鱼'
13.
14.
15.print(fun1()) # b将fun1()函数的值返回并打印出来(实际打印的是fun2()函数中return var???)
16.
17. 本帖最后由 isdkz 于 2023-5-10 23:15 编辑
lzb1001 发表于 2023-5-10 23:02
大神请帮忙看看每行代码后的#:一是看看a - i的顺序和注释对不对?二是有3处???的地方不明
1.var ...
你的注释大部分都是正确的,但我有几个小修正和补充:
1.var = ' Hi ' # a定义var全局变量
2.
3.def fun1():
4.global var # c使用global关键字声明var是全局变量
5.var = ' Baby ' # d将全局变量var重新赋值为'Baby'
6.return fun2(var) # e将新的全局变量var的值传入fun2()函数并返回其结果
7.
8.def fun2(var):
9.var += 'I love you' # f将局部变量var的值修改为' Baby I love you'
10.fun3(var) # g将新的局部变量var的值传入fun3()函数
11.return var # i返回局部变量var,即fun2函数的结果,这将作为fun1函数的结果返回,并最终被打印出来
12.
13.def fun3(var):
14.var = ' 小甲鱼 ' # h将局部变量var重新赋值为'小甲鱼',但这并不会影响fun2或fun1中的var
15.
16.print(fun1()) # b调用fun1()函数,并打印其返回值
在这段代码中,需要注意的是var在不同的函数中可以有不同的值和作用域。在fun1中,var是全局变量,而在fun2和fun3中,var是局部变量。因此,尽管在fun3中var被赋值为'小甲鱼',但这并不会影响fun2和fun1中的var。 本帖最后由 lzb1001 于 2023-5-11 00:08 编辑
isdkz 发表于 2023-5-10 23:13
你的注释大部分都是正确的,但我有几个小修正和补充:
1.var = ' Hi ' # a定义var全局变量
感谢大神,
在你的基础上进一步完善,每一行解释得清清楚楚,配置字母,代码运行的先后顺序就很清晰明了了
1.var = ' Hi ' # a定义全局变量var并赋值为' Hi '
2.
3.def fun1(): # 定义fun1()函数
4. global var # c使用global关键字声明var是全局变量
5. var = ' Baby ' # d将全局变量var重新赋值为' Baby ',注意:Baby前后各有一个空格!
6. return fun2(var) # e将新的全局变量var的值' Baby '传入fun2()函数并返回其结果
7.
8.def fun2(var): # 定义fun2()函数
9. var += 'I love you' # f将局部变量var的值修改为' Baby ' + 'I love you'即' Baby I love you',注意:Baby前有一个空格!
10. fun3(var) # g将新的局部变量var的值' Baby I love you'传入fun3()函数
return var # i返回fun2()函数中局部变量var的值即fun2()函数的结果,这将作为fun1()函数的结果返回,并最终被打印出来
11.
12.def fun3(var): # 定义fun3()函数
var = ' 小甲鱼 ' # h将局部变量var重新赋值为'小甲鱼',但这并不会影响fun2()函数中的局部变量var的值(仍然是' Baby I love you')或fun1()函数中的全局变量var的值(仍然是' Baby ')
13.
14.
15.print(fun1()) # b调用fun1()函数,并打印其返回值
16.
17.
lzb1001 发表于 2023-5-10 23:44
感谢大神,
每一行解释得清清楚楚,配置字母,代码运行的先后顺序就很清晰明了了
不客气,来个最佳支持一下呗{:5_109:} 谢谢,学到了学到了,感激我的好兄弟
页:
[1]