鱼C论坛

 找回密码
 立即注册
查看: 2110|回复: 8

[已解决]python第19讲的问题4, 请大手子详解

[复制链接]
发表于 2017-7-17 10:21:37 | 显示全部楼层 |阅读模式

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

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

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())
复制代码


这段代码没怎么看懂 首先 fun3 因为没有return 也没有print 所以可以 基本上属于可以忽略不计 所以 fun2中对于 fun3的调用也是无用的 所以这段代码可以精简为
  1. var = ' Hi '

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

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


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


1.不知道我这个理解是否正确
2. fun1中 return fun2() 的意思是否是return调用fun2以后的值?
3. 全局变量 var 只在fun1中改变了 所以 在fun2, fun3 的var的值不变 这个理解是否正确?
4. 为啥输出的是Baby I love you 而不是 I love you baby


请大手子详解 暂时有点迷糊 新手勿喷谢谢
最佳答案
2017-7-17 11:37:13
GANSIPYTHON 发表于 2017-7-17 11:03
对于你的第三个问题,我个人认为是因为,var已经在fun1()中被声明为了全局变量, 所以之后的所有函数中都var ...

var = ' Hi '

def fun1():
    global var
    var = ' Baby '
    return fun2(var)

def fun2(var):
    var = var + 'I love you'
    return var

print(fun2(var))  #注意看这个
print(fun1())
print(fun2(var))  #还有这个

>>>Hi I love you
>>>Baby I love you
>>>Baby I love you

其他函数调用的var的值是不是“Baby”取决于fun1有没有调用过,如果没有调用过,那var就没有被重新赋值
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2017-7-17 11:03:03 | 显示全部楼层
对于你的第三个问题,我个人认为是因为,var已经在fun1()中被声明为了全局变量, 所以之后的所有函数中都var="Baby"。 第四个问题,如果是"i love u"+var的话才是 i love u baby吧。 我也是新手,权当交流,不对勿喷。😂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-17 11:29:10 | 显示全部楼层
把这句global var删除结果也是一样的
因为var是一个全局变量,但它是在fun1中才成为全局变量的,在fun2中它不指向任何变量,只有被调用的时候才指向一个变量
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-17 11:31:58 | 显示全部楼层
程序是想让了解其中的逻辑关系。 各var的作用域!
如果要精简,可以精简一个print()行了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-17 11:37:13 | 显示全部楼层    本楼为最佳答案   
GANSIPYTHON 发表于 2017-7-17 11:03
对于你的第三个问题,我个人认为是因为,var已经在fun1()中被声明为了全局变量, 所以之后的所有函数中都var ...

var = ' Hi '

def fun1():
    global var
    var = ' Baby '
    return fun2(var)

def fun2(var):
    var = var + 'I love you'
    return var

print(fun2(var))  #注意看这个
print(fun1())
print(fun2(var))  #还有这个

>>>Hi I love you
>>>Baby I love you
>>>Baby I love you

其他函数调用的var的值是不是“Baby”取决于fun1有没有调用过,如果没有调用过,那var就没有被重新赋值
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

发表于 2017-7-17 11:50:18 | 显示全部楼层
gopythoner 发表于 2017-7-17 11:37
var = ' Hi '

def fun1():

哦哦哦 ,原来是这样。谢谢指点!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-17 11:59:00 | 显示全部楼层
ba21 发表于 2017-7-17 11:31
程序是想让了解其中的逻辑关系。 各var的作用域!
如果要精简,可以精简一个print()行了。

能否大概解释下逻辑关系和var的作用域啊 有点混乱啊 到底是这三个function要以什么样的顺序看呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-7-17 12:20:02 | 显示全部楼层
1.正确
2.是的
3.正确
4.因为fun2中var=var+'I love you',也就是var = 'Baby' + 'I love you'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-7-17 12:46:01 | 显示全部楼层
gopythoner 发表于 2017-7-17 11:37
var = ' Hi '

def fun1():

可以 学到了 谢谢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-28 18:50

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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