我不知道为什么当a
位于def test()
时,它找不到并给出错误
UnboundLocalError:无法访问没有关联值的局部变量'a'
import keyboard
import time
a = 0
def test():
a+= 1
print("The number is now ", a)
time.sleep(1)
while keyboard.is_pressed('i') == False:
test()
我尝试将a
设置为global a
或在def
内使用nonlocal
修饰符,但它似乎不起作用。是否有一种方法可以让它识别a
并正常运行?
Python变量是基于作用域的。这意味着不能访问在函数中声明的值。但是你可以访问在函数外部声明的变量。
这将失败:
def func():
a = 1
func()
print(a)
这将打印1
:
def func():
print(a)
a = 1
func()
注意你可以访问它。如果你想更新它,你会失败的。
这个也会失败:
def func():
a = a + 1
print(a)
a = 1
func()
你不需要告诉解释器在全局作用域中找到变量a
。
def func():
global a
a = a + 1
print(a)
a = 1
func()
警告:使用global
变量不是一个好的做法。因此,最好确保函数正在获取值。
def func(a):
a = a + 1
print(a)
a = 1
func(a)
要访问函数中的全局变量,必须使用global指定它。否则,函数内的变量是一个局部变量,仅在该函数内具有实用性。这就是为什么你会得到错误:&;UnboundLocalError:在赋值之前引用的局部变量'a' &;在函数内部,你还没有定义变量'a',无论是局部的还是全局的。
import keyboard
import time
a = 0
def test():
global a
a+= 1
print("The number is now ", a)
time.sleep(1)
while keyboard.is_pressed('i') == False:
test()
功能测试需要通过a。Python认为函数中的a
是一个局部变量。
import keyboard
import time
a = 0
def test(a=a):
a+= 1
print("The number is now ", a)
time.sleep(1)
while keyboard.is_pressed('i') == False:
test()