给出以下代码:
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
在外部作用域中,但不在全局作用域中.是否可以b
从B()
函数内修改变量?当然我可以从这里读取它print()
,但是如何修改呢?
在下面的第二种情况下,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
我想弄清楚这个:
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)
谢谢!
我有这样的代码(简化):
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)
我怎样才能解决这个问题?我认为嵌套的范围可以让我这样做.我试过'全球',但它仍然无效.
我的代码如下:
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数组)而且我放弃了调试,因为它太繁琐了.为什么"完成"在功能中没有被改变?
我想在嵌套函数中定义变量,以便在嵌套函数中进行更改,例如
def nesting():
count = 0
def nested():
count += 1
for i in range(10):
nested()
print count
Run Code Online (Sandbox Code Playgroud)
当调用嵌套函数时,我希望它打印10,但它会引发UnboundLocalError.全球关键词可以解决这个问题.但由于变量计数仅用于嵌套函数的范围,我希望不要将其声明为全局变量.这样做的好方法是什么?
尝试了解如何从嵌套函数中为变量赋值。但它不起作用。是因为当我使用 时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)