鱼C论坛

 找回密码
 立即注册
查看: 1991|回复: 7

[已解决]再问全局变量和局部变量

[复制链接]
发表于 2023-5-10 20:56:39 | 显示全部楼层 |阅读模式

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

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

x
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?
最佳答案
2023-5-10 23:13:38
本帖最后由 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。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2023-5-10 20:57:02 | 显示全部楼层
在这段代码中,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'。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-10 21:11:09 | 显示全部楼层
当`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" ,因此这就是将会被打印到控制台上的值。
有用请设置最佳答案
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-10 23:02:55 | 显示全部楼层
本帖最后由 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.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-10 23:13:38 | 显示全部楼层    本楼为最佳答案   
本帖最后由 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。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2023-5-10 23:44:59 | 显示全部楼层
本帖最后由 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.
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-10 23:46:17 | 显示全部楼层
lzb1001 发表于 2023-5-10 23:44
感谢大神,

每一行解释得清清楚楚,配置字母,代码运行的先后顺序就很清晰明了了

不客气,来个最佳支持一下呗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-5-11 08:57:32 | 显示全部楼层
谢谢,学到了学到了,感激我的好兄弟
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-23 07:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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