相关疑难解决方法(0)

是否可以在python中修改外部但不是全局范围的变量?

给出以下代码:

def A() :
    b = 1

    def B() :
        # I can access 'b' from here.
        print( b )
        # But can i modify 'b' here? 'global' and assignment will not work.

    B()
A()
Run Code Online (Sandbox Code Playgroud)

对于B()函数变量中的代码,b在外部作用域中,但不在全局作用域中.是否可以bB()函数内修改变量?当然我可以从这里读取它print(),但是如何修改呢?

python python-2.7

95
推荐指数
3
解决办法
5万
查看次数

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

在下面的第二种情况下,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万
查看次数

Python范围

我想弄清楚这个:

c = 1
def f(n):
    print c + n 
def g(n):
    c = c + n

f(1) # => 2
g(1) # => UnboundLocalError: local variable 'c' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

谢谢!

python scope

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

具有嵌套函数作用域的UnboundLocalError

我有这样的代码(简化):

def outer():
    ctr = 0

    def inner():
        ctr += 1

    inner()
Run Code Online (Sandbox Code Playgroud)

但是ctr会导致错误:

Traceback (most recent call last):
  File "foo.py", line 9, in <module>
    outer()
  File "foo.py", line 7, in outer
    inner()
  File "foo.py", line 5, in inner
    ctr += 1
UnboundLocalError: local variable 'ctr' referenced before assignment
Run Code Online (Sandbox Code Playgroud)

我怎样才能解决这个问题?我认为嵌套的范围可以让我这样做.我试过'全球',但它仍然无效.

python function

34
推荐指数
3
解决办法
6811
查看次数

功能不改变全局变量

我的代码如下:

done = False

def function():
    for loop:
        code
        if not comply:
            done = True  #let's say that the code enters this if-statement

while done == False:
    function()
Run Code Online (Sandbox Code Playgroud)

出于某种原因,当我的代码进入if语句时,它在使用function()完​​成后不会退出while循环.

但是,如果我这样编码:

done = False

while done == False:
    for loop:
    code
    if not comply:
        done = True  #let's say that the code enters this if-statement
Run Code Online (Sandbox Code Playgroud)

...它退出while循环.这里发生了什么?

我确保我的代码输入if语句.我还没有运行调试器因为我的代码有很多循环(非常大的2D数组)而且我放弃了调试,因为它太繁琐了.为什么"完成"在功能中没有被改变?

python global-variables

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

如何在嵌套函数中更改嵌套函数的变量

我想在嵌套函数中定义变量,以便在嵌套函数中进行更改,例如

def nesting():
    count = 0
    def nested():
        count += 1

    for i in range(10):
        nested()
    print count
Run Code Online (Sandbox Code Playgroud)

当调用嵌套函数时,我希望它打印10,但它会引发UnboundLocalError.全球关键词可以解决这个问题.但由于变量计数仅用于嵌套函数的范围,我希望不要将其声明为全局变量.这样做的好方法是什么?

python global-variables nested-function

16
推荐指数
2
解决办法
3578
查看次数

如何从嵌套函数中为变量赋值

尝试了解如何从嵌套函数中为变量赋值。但它不起作用。是因为当我使用 时a = b,它认为 a 是嵌套函数的局部变量吗?那么如何为 func 中的 a 变量赋值呢?

def func():
    a = 0
    def nested(b):
        global a
        a = b
    nested(3)
    return a
print(func())
Run Code Online (Sandbox Code Playgroud)

python python-3.x

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