我不知道为什么当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()
Run Code Online (Sandbox Code Playgroud)
我尝试在 内部设置a为global a或使用修饰符,但它似乎不起作用。有没有办法让它识别并正常运行?nonlocaldefa
MSH*_*MSH 30
Python 变量是基于范围的。这意味着无法访问函数内部声明的值。但您可以访问在函数外部声明的变量。
这会失败:
def func():
a = 1
func()
print(a)
Run Code Online (Sandbox Code Playgroud)
这将打印1:
def func():
print(a)
a = 1
func()
Run Code Online (Sandbox Code Playgroud)
请注意您可以访问它。如果你想更新它,你就会失败。
这也会失败:
def func():
a = a + 1
print(a)
a = 1
func()
Run Code Online (Sandbox Code Playgroud)
a您需要告诉解释器在全局范围内查找变量。
def func():
global a
a = a + 1
print(a)
a = 1
func()
Run Code Online (Sandbox Code Playgroud)
警告:使用变量不是一个好的做法global。因此最好确保该函数正在获取值。
def func(a):
a = a + 1
print(a)
a = 1
func(a)
Run Code Online (Sandbox Code Playgroud)
小智 5
要访问函数内的全局变量,必须使用 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()
Run Code Online (Sandbox Code Playgroud)
小智 3
您需要将 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()
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
231130 次 |
| 最近记录: |