采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
origin=0 def go(step): nonlocal origin new_pos=origin+step origin=new_pos return origin print(go(2)) print(go(3)) print(go(6))
为什么我将global origin换成nonlocal origin就不行了呢,nonlocal origin不也是声明origin不是局部变量吗
python3.0 的 nonlocal 只是让用户对外部作用域的变量重新进行赋值,但是不能对全局作用域的变量进行赋值。
你的Origin是定义在模块外部的,是全局作用域内的变量。本身就是global属性,你不能再对其进行nonlocal绑定。而函数内定义的变量才是局部变量,然后函数内再定义函数时引用外部函数内的变量,这种叫做闭包。但是如果你在最里面的函数内的赋值语句左边使用外部函数内的变量。那么python会认为你是在重新声明一个局部变量。而python里面是没有变量提升的(在JS里面是有的),于是你在定义之前使用这个变量就会报语法错误。于是python3就推出了nonlocal关键字。
非常感谢!
具体报什么错误?
File "c7.py", line 5 nonlocal origin ^ SyntaxError: no binding for nonlocal 'origin' found
登录后可查看更多问答,登录/注册
语法精讲/配套练习+思考题/原生爬虫实战
5.5k 7
2.5k 3
2.1k 4
4.1k 22
2.3k 19