鱼C论坛

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

[已解决]多次函数嵌套的代码的读取

[复制链接]
发表于 2020-2-22 19:57:41 | 显示全部楼层 |阅读模式

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

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

x
  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.fun1中的global var是什么意思
2.fun2中的var +是什么意思,不是只有在计算中才会出现这种形式吗
3.我不知道为什么这串代码运行的结果是‘Baby i love you’
请大神们帮我解释一下我的疑问
最佳答案
2020-2-22 20:00:52
1. global var 是声明在之后的代码中可以修改或定义全局变量 var

2. 对字符串使用 + 是对两个字符串进行拼接。例如:

  1. >>> print('Fish' + 'C')
  2. FishC
复制代码


3. 一开始的 var = 'Hi' 被 fun1 中的 global 更改了。之后将 var 传进 fun2 。在 fun2 中对 var 进行了拼接字符串 'I love you' 的操作,然后将 var 传进 fun3 。但由于 fun3 中并没有用 global 声明要修改全局变量,所以定义的 var 是局部变量,不影响 fun2 中的 var ,最后返回 var 。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-2-22 19:59:27 | 显示全部楼层
  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.     print(var)
  10.     fun3(var)
  11.     return var

  12. def fun3(var):
  13.     var = ' 小甲鱼 '
  14.     print(var)

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

试试这段代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 20:00:17 | 显示全部楼层
1,将var改成全局变量
2,应是var +=,是字符串拼接
3,看楼上
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 20:00:37 | 显示全部楼层
不要把所有的var都理解成一个东东
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 20:00:52 | 显示全部楼层    本楼为最佳答案   
1. global var 是声明在之后的代码中可以修改或定义全局变量 var

2. 对字符串使用 + 是对两个字符串进行拼接。例如:

  1. >>> print('Fish' + 'C')
  2. FishC
复制代码


3. 一开始的 var = 'Hi' 被 fun1 中的 global 更改了。之后将 var 传进 fun2 。在 fun2 中对 var 进行了拼接字符串 'I love you' 的操作,然后将 var 传进 fun3 。但由于 fun3 中并没有用 global 声明要修改全局变量,所以定义的 var 是局部变量,不影响 fun2 中的 var ,最后返回 var 。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 20:04:49 | 显示全部楼层
但要是想要输出'小甲鱼',可以加两
  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.     print(var)
  10.     fun3(var)
  11.     return fun3(var)

  12. def fun3(var):
  13.     var = ' 小甲鱼 '
  14.     return var

  15. print(fun1())
复制代码
行代码:
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-22 20:25:08 | 显示全部楼层
zltzlt 发表于 2020-2-22 20:00
1. global var 是声明在之后的代码中可以修改或定义全局变量 var

2. 对字符串使用 + 是对两个字符串进行 ...

我还是有点不明白您的意思,您的解释中有这样几句话,“将var传进fun2”“将var传进fun3”,也就是您的解释中代码是从上往下执行的;但是我觉得在读代码时,应该是从下往上读的,也就是,当我看到print(fun1)时,我会先去看fun1是如何定义的,然后看到了fun1的返回值是fun2,然后我会去看fun2是如何定义的,我认为是fun2的值传到了fun1里,而不是fun1的值传到了fun2里,您看是您解释的时候的不严谨还是我的理解出错了啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-22 20:27:32 | 显示全部楼层
巨兔12138 发表于 2020-2-22 20:25
我还是有点不明白您的意思,您的解释中有这样几句话,“将var传进fun2”“将var传进fun3”,也就是您的解 ...

的确是从上到下执行,一开始先定义 fun1 ~ fun3,之后如果出现 fun1()、fun2()、fun3() 时则调用相应的函数,而且传进括号中的参数。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-3-2 09:58

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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