酷学
发表于 2017-5-31 21:27:37
wonderwhy20 发表于 2015-4-13 00:29
为什么要用nonlocal啊
使用闭包后pos_x,pos_y两变量变成局部变量,外部传入的pos_x,pos_y与其指向的域不同,使用nonlocal表示使用外层(非全局)变量
酷学
发表于 2017-5-31 21:32:14
hip49669 发表于 2015-8-16 10:39
因为定义move函数的时候,第一个参数就是一个列表,函数里面用到了direction和direction,见11、12 ...
因为create函数默认了参数,所以这里省略了,也可以写成create(0, 0)(, 10)
酷学
发表于 2017-5-31 21:34:41
John_farmer 发表于 2015-8-28 11:42
第017讲课后作业动动手的最后一题,我写的程序,出现一个错误,求小甲鱼帮忙分析下错误原因
>>> def Decim ...
r = number % 2 这一步的时候,r未进行定义
酷学
发表于 2017-5-31 21:38:53
lzj222312 发表于 2015-10-22 09:03
你再了解下闭包的概念就明白了。。。。我也是刚开始不明白闭包是什么意思。。。后来又翻了一遍概念去看了 ...
闭包的作用:1、装饰器 2、惰性求值,一般在数据库访问时用的比较多 3、函数参数的提前赋值
酷学
发表于 2017-5-31 21:43:34
Trinity_lee 发表于 2016-5-13 21:15
python2.7如何使用nonlocal呀
nonlocal是3.0版本之后新增的,python2.7没有
luyun
发表于 2017-6-8 19:29:51
甲鱼哥{:5_97:}厉害了~看懂了;灰常感谢
2素儿
发表于 2017-6-21 09:36:35
天哪,学到现在就发现自己只是看懂,明白别人在干什么。理想和现实还是有差距。不管怎样也要把python啃下来。我只学一门还不行啊.......
vee
发表于 2017-6-30 10:35:32
想想以后能做个小游戏就好高兴
kikouousya
发表于 2017-7-9 19:03:27
原来如此,不懂。
呜哈哈哈
发表于 2017-7-10 20:33:46
好难啊,对我这种初学者来说
Zhun
发表于 2017-7-14 16:11:05
对照答案学习
gin2010
发表于 2017-7-30 19:06:51
程序倒是看懂了,就是不明白为什么要用闭包的写法,相比用普通函数有什么优势?
2131479626
发表于 2017-8-6 02:42:43
1603527940
发表于 2017-8-7 10:49:39
感觉这个代码可以改进一下
木一
发表于 2017-8-9 10:32:50
懵逼{:10_243:}
拂晓车站
发表于 2017-8-11 10:00:14
慢慢学习吧
学到14课了
银色的色
发表于 2017-8-17 22:26:40
喵喵喵~o( =∩ω∩= )m
lainy
发表于 2017-8-21 16:36:05
恩,闭包果然是个厉害的东西啊,还不是太会用。
生哥
发表于 2017-8-30 16:35:04
假装我看懂了!!!
harve
发表于 2017-9-1 23:25:24
origin=(0,0)
legal_x=[-100,100]#水平范围
legal_y=[-100,100]#垂直范围
def create(pos_x=origin,pos_y=origin):
def moving(direction,step):
nonlocal pos_x,pos_y
new_x=pos_x+direction*step
new_y=pos_y+direction*step
if new_x<legal_x:
pos_x=legal_x-(new_x-legal_x)
elif new_x>legal_x:
pos_x=legal_x-(new_x-legal_x)
else:
pos_x=new_x
if new_y<legal_y:
pos_y=legal_y-(new_y-legal_y)
elif new_y>legal_y:
pos_y=legal_y-(new_y-legal_y)
else:
pos_y=new_y
return(pos_x,pos_y)
return moving
a=create()
print('向上一步,向左三步:',a(,))
小甲鱼的只能走正方形,或者直线,可以稍微将step改为list 可以设置两个方向的步进