在下面的第二种情况下,Python试图寻找一个局部变量.当它没有找到一个时,为什么它不能像在第一种情况下那样在外部范围内看?
这在本地范围内查找x,然后在外部范围内查找:
def f1():
x = 5
def f2():
print x
Run Code Online (Sandbox Code Playgroud)
这给出了local variable 'x' referenced before assignment错误:
def f1():
x = 5
def f2():
x+=1
Run Code Online (Sandbox Code Playgroud)
我不允许修改函数f2()的签名,所以我不能传递和返回x的值.但是,我确实需要一种方法来修改x.有没有办法明确告诉Python在外部范围内查找变量名称(类似于global关键字)?
Python版本:2.7
闭包是一种非常有用的语言功能.他们让我们做一些聪明的事情,否则会占用大量代码,并且经常使我们能够编写更优雅,更清晰的代码.在Python 2.x中,闭包变量名不能反弹; 也就是说,在另一个词法范围内定义的函数不能some_var = 'changed!'对其局部范围之外的变量执行某些操作.有人可以解释为什么会这样吗?在某些情况下,我想创建一个在外部作用域中重新绑定变量的闭包,但这是不可能的.我意识到在几乎所有情况下(如果不是全部的话),这种行为可以通过类来实现,但它通常不是那么干净或优雅.为什么我不能用闭包来做?
以下是重新绑定闭包的示例:
def counter():
count = 0
def c():
count += 1
return count
return c
Run Code Online (Sandbox Code Playgroud)
这是您调用它时的当前行为:
>>> c()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in c
UnboundLocalError: local variable 'count' referenced before assignment
Run Code Online (Sandbox Code Playgroud)
我想要它做的是:
>>> c()
1
>>> c()
2
>>> c()
3
Run Code Online (Sandbox Code Playgroud) 我正在阅读计算机程序的结构和解释 - 在计算机科学领域很有名.
受到函数式编程的鼓励,我尝试用Python而不是Scheme编写代码,因为我发现它更容易使用.但接下来的问题是:我需要多次使用Lambda函数,但我无法弄清楚如何使用lambda复杂的操作来编写一个未命名的函数.
在这里,我想编写一个lambda函数,其中一个字符串变量exp作为唯一的参数并执行exec(exp).但我得到一个错误:
>>> t = lambda exp : exec(exp)
File "<stdin>", line 1
t = lambda exp : exec(exp)
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
怎么会发生?如何应对呢?
我阅读了我的Python指南,并在没有找到我想要的答案的情况下搜索了Google.这是否意味着lambdapython 中的函数只是设计为语法糖?