鱼C论坛

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

[已解决]python:这个函数运行过程是怎样的?谢谢!

[复制链接]
发表于 2020-3-11 19:18:55 | 显示全部楼层 |阅读模式

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

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

x
本帖最后由 大珠提子 于 2020-3-11 20:06 编辑
  1. var = ' Hi '

  2. def fun1():
  3.     global var
  4.     var = ' Baby '
  5.     return fun2(var)

  6. def fun2(var):
  7.     var += 'I love you'
  8.     fun3(var)
  9.     return var

  10. def fun3(var):
  11.     var = ' 小甲鱼 '

  12. print(fun1())
复制代码

1.global var改全局变量,是同时改了fun2和fun3中的var吗?
2.fun2里面调用了fun3,为啥var的值没有被改为"小甲鱼"?是因为fun1里面把var变成全局变量,所以fun3里面的赋值失去意义了吗?
3.要是前俩我说的不对,求一下这个函数运行过程,这个我答案逆推还是不敢确定。
最佳答案
2020-3-11 19:25:13
1,第一个没有听懂
2,
  1. var = ' Hi '

  2. def fun1():
  3.     global var
  4.     var = ' Baby '
  5.     print(var)
  6.     return fun2(var)


  7. def fun2(var):
  8.     var += 'I love you'
  9.     fun3(var)
  10.     return var

  11. def fun3(var):
  12.     var = ' 小甲鱼 '

  13. print(var)

  14. print(fun1())
复制代码

到头来你可以发现,最后修改并返回的只有局部变量
3,你自己一行一行分析就行
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-3-11 19:25:13 | 显示全部楼层    本楼为最佳答案   
1,第一个没有听懂
2,
  1. var = ' Hi '

  2. def fun1():
  3.     global var
  4.     var = ' Baby '
  5.     print(var)
  6.     return fun2(var)


  7. def fun2(var):
  8.     var += 'I love you'
  9.     fun3(var)
  10.     return var

  11. def fun3(var):
  12.     var = ' 小甲鱼 '

  13. print(var)

  14. print(fun1())
复制代码

到头来你可以发现,最后修改并返回的只有局部变量
3,你自己一行一行分析就行
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-11 21:25:53 | 显示全部楼层
def3没有return值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-11 22:18:10 | 显示全部楼层

加上return var输出结果没有改变
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

谢谢,想了好久没理解为什么print(var)打印出hi,fun1里面不是用global把var转成全局变量了嘛,为啥不是baby
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 08:07:48 From FishC Mobile | 显示全部楼层
大珠提子 发表于 2020-3-11 23:11
谢谢,想了好久没理解为什么print(var)打印出hi,fun1里面不是用global把var转成全局变量了嘛,为啥不是b ...

你打印出的是hi?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

因为你在函数里对var的操作是赋值,这时候Python默认认为这是局部变量
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-12 12:19:07 | 显示全部楼层
所以说是局部变量跟全局变量的问题?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-6-27 16:34

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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