鱼C论坛

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

[已解决]python 20讲课后作业

[复制链接]
发表于 2018-4-27 17:52:45 | 显示全部楼层 |阅读模式

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

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

x
def funX():
    x = 5  #x赋初值
    def funY():
        nonlocal x  #定义x不是局部变量 x=5
        x += 1   #x=6
        return x  #返回x
    return funY  #返回funY函数

a = funX()   #a定义为funX函数
print(a())   #a()=funX()() =6
print(a())
print(a())
求问后两行该如何理解
最佳答案
2018-4-28 11:27:58
这个问题好 :)


  1. def funX():
  2.     x = 5  #x赋初值
  3.     def funY():
  4.         nonlocal x  #定义x不是局部变量 x=5
  5.         x += 1   #x=6
  6.         return x  #返回x
  7.     return funY  #返回funY函数
复制代码



注意return funY,因为返回的是funY函数的地址,第二次、第三次,均是从第三行代码开始执行的,否则, x会一直为6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-4-27 18:15:06 | 显示全部楼层
hi 思路和第一个print(a())差不错,唯一的区别是,由于x为全局变量,第二个print(a()) 中x初始值为6,第三个print(a()) 中x初始值为7
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-27 18:17:17 | 显示全部楼层
thexiosi 发表于 2018-4-27 18:15
hi 思路和第一个print(a())差不错,唯一的区别是,由于x为全局变量,第二个print(a()) 中x初始值为6,第三 ...

def funX():
    x = 5  #x赋初值
    def funY():
        nonlocal x  #定义x不是局部变量 x=5 是在这里x的初值变为6么?
        x += 1   #x=6
        return x  #返回x
    return funY  #返回funY函数

a = funX()   #a定义为funX函数
print(a())   #a()=funX()() =6
print(a())
print(a())
求问后两行该如何理解
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-27 18:17:58 | 显示全部楼层
funX() 函数返回的是 return funY  没有加() (如:funY()加了返回值) 说明返回的是funY函数的地址。
funX() == funY   a = funX()   也就是 a = funY
a() == funY()
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-27 19:37:08 | 显示全部楼层
ba21 发表于 2018-4-27 18:17
funX() 函数返回的是 return funY  没有加() (如:funY()加了返回值) 说明返回的是funY函数的地址。
fun ...

请问您能解释一下后两行是如何运行的吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-27 19:38:19 | 显示全部楼层
本帖最后由 thexiosi 于 2018-4-27 19:40 编辑
春卷啊 发表于 2018-4-27 18:17
def funX():
    x = 5  #x赋初值
    def funY():


不是这里,这里仅仅是说明 x并非局部变量。全局变量x在第一次print(a())后变为了6,因此第二次print(a()) x的初始值就是6

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-28 11:07:17 | 显示全部楼层
thexiosi 发表于 2018-4-27 19:38
不是这里,这里仅仅是说明 x并非局部变量。全局变量x在第一次print(a())后变为了6,因此第二次print(a( ...

那请问第二次与第三次执行print(a())的时候也都是从程序的第一行执行么?如果是的话那程序的第二行x=5这里怎么运行的呀?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-4-28 11:27:58 | 显示全部楼层    本楼为最佳答案   
这个问题好 :)


  1. def funX():
  2.     x = 5  #x赋初值
  3.     def funY():
  4.         nonlocal x  #定义x不是局部变量 x=5
  5.         x += 1   #x=6
  6.         return x  #返回x
  7.     return funY  #返回funY函数
复制代码



注意return funY,因为返回的是funY函数的地址,第二次、第三次,均是从第三行代码开始执行的,否则, x会一直为6
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-4-28 17:03:00 | 显示全部楼层
thexiosi 发表于 2018-4-28 11:27
这个问题好 :)

懂了,感谢!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-17 13:06

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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