Python 中 UnboundLocalError: Local variable referenced before assignment 错误
Python“UnboundLocalError: Local variable referenced before assignment”发生在我们在函数中引用局部变量之前为其赋值时。 要解决错误,需要在函数定义中将变量标记为全局变量,例如 global my_var
。
下面是产生上述错误的示例代码
name = 'Alice'
def example():
# ⛔️ UnboundLocalError: local variable 'name' referenced before assignment
print(name)
name = 'Bob'
example()
我们给函数中的 name 变量赋值。
这使得名称变量成为函数的局部变量,并且局部名称变量隐藏了全局范围内的名称变量。
要解决该错误,需要在函数定义中将变量标记为全局变量。
name = 'Alice'
def example():
# 👇️ mark global
global name
print(name)
name = 'Bob'
example() # 👉️ 'Alice'
example() # 👉️ 'Bob'
如果变量在函数体中被赋值,则它是局部变量,除非明确声明为全局变量。
请注意
,我们可以从函数内部引用全局名称变量,但如果我们在函数主体中为变量赋值,则局部变量会覆盖全局变量。
name = 'Alice'
def example():
# ✅ this is ok
print(name)
example() # 👉️ 'Alice'
如果我们有一个嵌套函数并试图从外部函数为局部变量赋值,请使用 nonlocal
关键字。
def outer():
# 👇️ initialize message variable
message = ''
def inner():
# 👇️ Mark message as nonlocal
nonlocal message
message = 'hello world'
print(message)
inner()
print(message) # 👉️ "hello world"
outer()
nonlocal
关键字允许我们使用封闭函数的局部变量。
请注意
,我们必须在外部函数中初始化消息变量,但我们能够在内部函数中更改它的值。
如果我们不使用 nonlocal
语句,对 print()
函数的调用将返回一个空字符串。
def outer():
# 👇️ initialize message variable
message = ''
def inner():
# 👇️ declares message in inner's scope
message = 'hello world'
print(message)
inner()
print(message) # 👉️ ""
outer()
使用 global
关键字的替代解决方案是从函数返回一个值并使用该值重新分配全局变量。
name = 'Alice'
def example():
print(name) # 👉️ 'Alice'
new_name = 'Bob'
return new_name
result = example()
print(result) # 👉️ 'Bob'
name = result
print(name) # 👉️ 'Bob'
我们简单地返回我们最终用来分配给 name
全局变量的值。
我们还应该考虑将全局变量作为参数传递给函数。
name = 'Alice'
def example(first):
full_name = first + ' Smith'
return full_name
result = example(name)
print(result) # 👉️ 'Alice Smith'
我们将名称全局变量作为参数传递给函数。
当我们为一个作用域中的变量赋值时,该变量成为该作用域的局部变量,并隐藏外部作用域中具有相同名称的变量。
如果我们为函数中的变量赋值,除非明确声明为全局变量,否则该变量将被假定为局部变量。
总结
Python“UnboundLocalError: Local variable referenced before assignment”发生在我们在函数中引用局部变量之前为其赋值时。 要解决错误,需要在函数定义中将变量标记为全局变量,例如 global my_var
。
相关文章
Python pandas.pivot_table() 函数
发布时间:2024/04/24 浏览次数:82 分类:Python
-
Python Pandas pivot_table()函数通过对数据进行汇总,避免了数据的重复。
在 Python 中将 Pandas 系列的日期时间转换为字符串
发布时间:2024/04/24 浏览次数:894 分类:Python
-
了解如何在 Python 中将 Pandas 系列日期时间转换为字符串
在 Python Pandas 中使用 str.split 将字符串拆分为两个列表列
发布时间:2024/04/24 浏览次数:1124 分类:Python
-
本教程介绍如何使用 pandas str.split() 函数将字符串拆分为两个列表列。
在 Pandas 中将 Timedelta 转换为 Int
发布时间:2024/04/23 浏览次数:231 分类:Python
-
可以使用 Pandas 中的 dt 属性将 timedelta 转换为整数。
Python 中的 Pandas 插入方法
发布时间:2024/04/23 浏览次数:112 分类:Python
-
本教程介绍了如何在 Pandas DataFrame 中使用 insert 方法在 DataFrame 中插入一列。
使用 Python 将 Pandas DataFrame 保存为 HTML
发布时间:2024/04/21 浏览次数:106 分类:Python
-
本教程演示如何将 Pandas DataFrame 转换为 Python 中的 HTML 表格。
如何将 Python 字典转换为 Pandas DataFrame
发布时间:2024/04/20 浏览次数:73 分类:Python
-
本教程演示如何将 python 字典转换为 Pandas DataFrame,例如使用 Pandas DataFrame 构造函数或 from_dict 方法。
如何在 Pandas 中将 DataFrame 列转换为日期时间
发布时间:2024/04/20 浏览次数:101 分类:Python
-
本文介绍如何将 Pandas DataFrame 列转换为 Python 日期时间。