标签: python-nonlocal

Python非本地语句

Python nonlocal语句做了什么(在Python 3.0及更高版本中)?

官方Python网站上没有文档,help("nonlocal")也没有用.

python closures global python-nonlocal

293
推荐指数
6
解决办法
10万
查看次数

Python 2.x中的非本地关键字

我正在尝试在Python 2.6中实现一个闭包,我需要访问一个非局部变量,但似乎这个关键字在python 2.x中不可用.如何在这些版本的python中访问闭包中的非局部变量?

python closures python-2.x python-nonlocal

112
推荐指数
6
解决办法
4万
查看次数

非局部变量和全局变量有什么区别?

我正在学习编程语言的概念。

我在 python 语法中发现了术语“nonlocal”。

python中的nonlocal是什么意思?

python variables programming-languages global-variables python-nonlocal

21
推荐指数
4
解决办法
2万
查看次数

Python中非本地语句的语法错误

我想测试在这个问题的答案中使用的非本地语句的示例:

def outer():
   x = 1
   def inner():
       nonlocal x
       x = 2
       print("inner:", x)
   inner()
   print("outer:", x)
Run Code Online (Sandbox Code Playgroud)

但是当我尝试加载此代码时,我总是会收到语法错误:

Traceback (most recent call last):


File "<stdin>", line 1, in <module>
  File "t.py", line 4
    nonlocal x
             ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

有没有人知道我在这里做错了什么(我得到的每个例子的语法错误,包含nonlocal).

python syntax-error python-nonlocal

12
推荐指数
1
解决办法
8844
查看次数

类定义中的Python非局部语句

我正在尝试对Python 3源代码中的范围进行一些分析,而我仍然坚持非局部语句语句在类定义中的工作方式.

据我了解,类定义在新的命名空间(称为dict)中执行其主体,并将类名绑定到类型(name,bases,dict)的结果.非局部x应该起作用,只要它引用一个绑定在非局部范围内某处的变量.

从这里我希望编译和运行以下代码:

class A:
    v = 1
    class B:
        nonlocal v
        v = 2
Run Code Online (Sandbox Code Playgroud)

但这失败了

SyntaxError: no binding for nonlocal 'v' found
Run Code Online (Sandbox Code Playgroud)

而以下代码运行完美

def A():
    v = 1
    class B:
        nonlocal v
        v = 2
Run Code Online (Sandbox Code Playgroud)

任何人都可以解释函数定义的闭包和类定义之间的区别吗?

python class python-3.x python-nonlocal

10
推荐指数
2
解决办法
3687
查看次数

Python,如何更改父作用域中变量的值?

例如:assginment语句将声明一个新的局部变量.

foo = 'global'
def func1():
    foo = 'func1'
    def func2():
        foo = 'local variable in func2'
Run Code Online (Sandbox Code Playgroud)

使用全局声明将在全局使用foo:

def func2():
    global foo
    foo = 'global changed in func2'  #changed the foo value in global scope
Run Code Online (Sandbox Code Playgroud)

如何在func1范围中更改变量foo?
谢谢你的帮助.

编辑:

谢谢Brandon Craig Rhodes,我终于理解了你的意思.

如果嵌套的范围超过3个,我可以将变量存储在列表中.

foo = ['global', 'function1', 'function2']
def func1():
    foo[1] = 'func1'
    def func2():
        foo[2] = 'func2'
        foo[1] = 'func1 modified in func2'
Run Code Online (Sandbox Code Playgroud)

我实际上只使用了一个全局变量.


所以,如果有两个嵌套函数,我们可以使用

nonlocal foo 
Run Code Online (Sandbox Code Playgroud)

global foo 
Run Code Online (Sandbox Code Playgroud)

如果嵌套了三个以上的函数,
并且每个函数在其他函数范围内使用变量,
为什么不声明全局列表变量?
谢谢你的帮助!!!

python scope global python-nonlocal

8
推荐指数
2
解决办法
3748
查看次数

Ruby相当于python nonlocal

我试图在Ruby中编写一个闭包.这是用Python编写的代码:

def counter():
    x = 0
    def increment(y):
        nonlocal x
        x += y
        print(x)
    return increment
Run Code Online (Sandbox Code Playgroud)

在Ruby中是否存在"非本地"等价物,因此我可以从内部增量访问变量x并对其进行更改?

ruby python closures python-nonlocal

7
推荐指数
1
解决办法
543
查看次数

外部函数中的嵌套函数更改变量不起作用

def some_func(a): 
    def access_a():
        print(a)
    access_a()
Run Code Online (Sandbox Code Playgroud)

输出 的值a。但是,如果我想像这样更改a嵌套函数:

def some_func(a): 
    def change_a():
        a += 1
        print(a)
    change_a()
Run Code Online (Sandbox Code Playgroud)

它引发UnboundLocalError异常。

我知道a是一个非局部变量,但为什么我可以在不声明的情况下访问它nonlocal a

python nested python-3.x python-nonlocal

5
推荐指数
1
解决办法
2791
查看次数

如何访问闭包内的外部函数变量(python 2.6)?

来自维基百科

我需要以与使用python 3.x中的'nonlocal'关键字类似的方式访问外部函数变量.有没有办法在python 2.6中做到这一点?(不一定使用nonlocal关键字)

python django python-2.6 python-3.x python-nonlocal

4
推荐指数
1
解决办法
371
查看次数

nonlocals()在哪里?

如何获取当前范围的非局部变量?功能vars,locals并且globals存在,但是有一个功能来获得nonlocals

调用时为什么不列出nonlocals vars

更新

我的问题是,有没有办法来枚举当前范围内都有效的变量,既不varsglobals包括非本地人AFAICT.

我经常使用vars如下代码:

'{meh[0]}/{meh[3]} {a}{b}{c}'.format(**vars())
Run Code Online (Sandbox Code Playgroud)

如果这些变量中的任何变量都在包含函数的范围内,则会失败.

python variables scope python-3.x python-nonlocal

4
推荐指数
1
解决办法
465
查看次数