相关疑难解决方法(0)

为什么嵌套函数可以从外部函数访问变量,但不允许修改它们

在下面的第二种情况下,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 scope

69
推荐指数
2
解决办法
3万
查看次数

与语言X闭包相比,Python中的闭包有哪些限制?

X是任何支持某种闭包风格的编程语言(C#,Javascript,Lisp,Perl,Ruby,Scheme等).

Python中的Closures中提到了一些限制(与Ruby的闭包相比),但文章很旧,现代Python中不再存在许多限制.

查看具体限制的代码示例会很棒.

相关问题:

python closures

47
推荐指数
4
解决办法
7942
查看次数

读/写Python闭包

闭包是一种非常有用的语言功能.他们让我们做一些聪明的事情,否则会占用大量代码,并且经常使我们能够编写更优雅,更清晰的代码.在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 closures language-design readonly

34
推荐指数
6
解决办法
4173
查看次数

我可以在多行的python中编写lambda函数,并调用其他函数吗?

我正在阅读计算机程序的结构和解释 - 在计算机科学领域很有名.

受到函数式编程的鼓励,我尝试用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 中的函数只是设计为语法糖?

python

0
推荐指数
1
解决办法
1097
查看次数

标签 统计

python ×4

closures ×2

language-design ×1

readonly ×1

scope ×1