鱼C论坛

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

[已解决]函数课后题疑问求助

[复制链接]
发表于 2021-12-30 15:04:04 | 显示全部楼层 |阅读模式

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

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

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.     def fun3(var):
  9.         v = ' 小甲鱼 '
  10.         return v
  11.     fun3(var)
  12.     return var

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


最后打印出来‘Baby I love you’,硬是没能理解,哪位大神指导一下
在定义fun1的时候,global 的作用范围是只在fun1中声明,还是后边的fun2和fun3也同样受影响?
感谢!
最佳答案
2021-12-30 16:41:40

  1. var = ' Hi '
  2. def fun1():
  3.     global var  #定义了全局变量
  4.     var = ' Baby ' #重新赋值var,这时候var就不是'Hi'了
  5.     return fun2(var)    #这里相当于调用函数fun2(var='Baby')

  6. def fun2(var):          #fun2(var='Baby')
  7.     var += 'I love you'    #由于fun2()函数里没有通过全局变量var,所以这里的var是fun2()的局部变量,但‘Baby’是上面传的参数。
  8.                            #这时,fun2()局部变量var=‘Baby I love you’
  9.     def fun3(var):            #fun3(var=‘Baby I love you’,)
  10.         v = ' 小甲鱼 '         #fun3()虽调用了,但是fun3()函数对fun2()的局部变量var没任何操作。
  11.         return v       #返回的也和var没点关系
  12.     fun3(var)      #上面说了
  13.     return var    #所以这里返回的是fun2()的局部变量var

  14. print(fun1())

  15. #如果你在这里打印下var,可以看到var = 'Baby'
  16. print(var)
复制代码


给你提个简单方法,你在关键位置插入个print(var)查看下var在这个变量在函数某个位置时的状态。
如果你用的pycharm你可以用调试看,这就更方便了。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2021-12-30 15:55:47 | 显示全部楼层
fun2 受影响是因为传参  传过去的
fun3 就是搞笑的   可以忽略
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-12-30 16:20:35 | 显示全部楼层
你需要明白的一点。函数接受到什么参数,发回到了什参数。

print(fun1())  运行fun1函数,没有传递参数

fun1()函数,返回了一个fun2(var)函数,也就是返回了,fun2函数返回的结果。
global 的作用范围是只在fun1中声明,可以改变fun1里面的var。但是同时这个改变后的var也会传递到fun2函数里面

fun2函数里面对var进行修改,运行一下fun3函数,最终返回的是var,而不是fun3运行结果。

最终fun2返回的var会被打印出来

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2021-12-30 16:41:40 | 显示全部楼层    本楼为最佳答案   

  1. var = ' Hi '
  2. def fun1():
  3.     global var  #定义了全局变量
  4.     var = ' Baby ' #重新赋值var,这时候var就不是'Hi'了
  5.     return fun2(var)    #这里相当于调用函数fun2(var='Baby')

  6. def fun2(var):          #fun2(var='Baby')
  7.     var += 'I love you'    #由于fun2()函数里没有通过全局变量var,所以这里的var是fun2()的局部变量,但‘Baby’是上面传的参数。
  8.                            #这时,fun2()局部变量var=‘Baby I love you’
  9.     def fun3(var):            #fun3(var=‘Baby I love you’,)
  10.         v = ' 小甲鱼 '         #fun3()虽调用了,但是fun3()函数对fun2()的局部变量var没任何操作。
  11.         return v       #返回的也和var没点关系
  12.     fun3(var)      #上面说了
  13.     return var    #所以这里返回的是fun2()的局部变量var

  14. print(fun1())

  15. #如果你在这里打印下var,可以看到var = 'Baby'
  16. print(var)
复制代码


给你提个简单方法,你在关键位置插入个print(var)查看下var在这个变量在函数某个位置时的状态。
如果你用的pycharm你可以用调试看,这就更方便了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2021-12-31 10:38:51 | 显示全部楼层
  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.     def fun3(var):
  9.         var = ' 小甲鱼 '
  10.         return var
  11.     fun3(var)
  12.     print(var)

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


为什么这个执行后会打印出:
Baby I love you
None

这个None是怎么出来的?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2021-12-31 10:39:56 | 显示全部楼层
非凡 发表于 2021-12-30 16:41
给你提个简单方法,你在关键位置插入个print(var)查看下var在这个变量在函数某个位置时的状态。
如果 ...

  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.     def fun3(var):
  9.         var = ' 小甲鱼 '
  10.         return var
  11.     fun3(var)
  12.     print(var)

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


为什么这个执行后会打印出:
Baby I love you
None

这个None是怎么出来的?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2022-1-2 16:46:56 | 显示全部楼层
迪哥,是你吗? 发表于 2021-12-31 10:39
为什么这个执行后会打印出:
Baby I love you
None
  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.     def fun3(var):
  9.         var = ' 小甲鱼 '
  10.         return var
  11.     fun3(var)
  12.     print(var)

  13. print(fun1())        #None是你这一行代码带出来的,因为你fun1()函数return fun2(),而fun2()没有return任何东西,所以fun190最后返回的是个空值
复制代码


你可以在后面试下a = fun1(var),然后在print(a)

或者你在你代码第13行下面插一
  1. return 1#注意缩进
复制代码
,然后再执行a = fun1(var),看下a 的值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2022-1-4 10:23:56 | 显示全部楼层
明白了,谢谢!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-30 20:38

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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