鱼C论坛

 找回密码
 立即注册
查看: 2063|回复: 6

《零基础入门学习Python》第20讲课后作业的问题

[复制链接]
发表于 2017-9-24 15:14:14 | 显示全部楼层 |阅读模式

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

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

x
正在入门学习Python,可以的话,麻烦各位大佬详细解释一下:
1、def funOut():
    def funIn():
        print('宾果!你成功访问到我啦!')
    return funIn()

和def funOut():
    def funIn():
        print('宾果!你成功访问到我啦!')
    return funIn
这个return 后面加不加()是有什么区别呐?意思上有什么不同?

2、def funX():
    x = 5
    def funY():
        nonlocal x
        x += 1
        return x
    return funY

a = funX()
print(a())
print(a())
print(a())

为啥后面三个print打印出来的结果不一样的呢?


谢谢谢谢大家啦!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-9-24 15:17:43 | 显示全部楼层
你就简单理解为
() 返回的是值
没有()返回的是函数的地址。

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

使用道具 举报

发表于 2017-10-10 18:22:24 | 显示全部楼层
  1. def funX():
  2.     x = 5
  3.     def funY():
  4.         nonlocal x
  5.         x += 1
  6.         return x
  7.     return funY
  8. #a = funX()
  9. #print(a())
  10. #print(a())
  11. #print(a())
  12. print (funX()())
  13. print (funX())
  14. print (funX())
复制代码

你看看这段代码,加和不加运行的区别。一个是调用方法,一个是地址。
如果你不加括号,实际上就是在调用地址,直接调用外部函数,会直接返回给你地址。
第二题的话:
里面有个nonlocal 就相当于全局变量
一开始 a = funX()
就已经调用了一次函数,每一次打印,
你就是在内部函数中修改全局变量x
所以每一次都增加。你把nonlocal去掉就都一样了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-30 01:23:04 | 显示全部楼层
Wangshimin 发表于 2017-10-10 18:22
你看看这段代码,加和不加运行的区别。一个是调用方法,一个是地址。
如果你不加括号,实际上就是在调用 ...

感觉你对第二题的理解不对。。。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-30 01:46:50 From FishC Mobile | 显示全部楼层
a=fun()
a()就相当于funY()
访问fun x()的内置函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-30 07:26:55 | 显示全部楼层
1不加括号是函数地址,加了括号是函数运行结果
2三次不一样是因为
a=funX()那funX返回的就是funY,中间运行了x=5
每次运行funY()就运行x+=1,而没有x=5让x重置的部分
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-11-30 07:49:11 | 显示全部楼层

  1. #coding=gbk
  2. def outer(x):
  3.     def inner(y):
  4.         nonlocal x
  5.         x+=y
  6.         return x
  7.     return inner

  8. a = outer(10)
  9. print(outer(10)(1))                #执行完释放掉
  10. print(outer(10)(3))                #执行完释放掉
  11. print(a (1))                         #执行完被变量a绑定,未释放掉。
  12. print(a (3))                         #执行完被变量a绑定,未释放掉。
  13. print(a (3))                         #执行完被变量a绑定,未释放掉。
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-4-18 15:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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