Python中,函數的作用域鏈是一個包含多個作用域的列表,用于解析變量名的查找。函數定義時,會創建一個新的作用域。當在函數內部查找一個變量時,Python會首先在當前作用域查找該變量,如果找不到,則繼續沿著作用域鏈向上查找,直到全局作用域或內置作用域。如果在全局作用域和內置作用域中都找不到該變量,則拋出NameError
異常。
作用域鏈的創建過程如下:
NameError
異常。下面是一個簡單的示例,演示了作用域鏈的工作原理:
global_var = "I am a global variable"
def outer_function():
outer_var = "I am an outer variable"
def inner_function():
inner_var = "I am an inner variable"
print(global_var) # 輸出 "I am a global variable"
print(outer_var) # 輸出 "I am an outer variable"
print(inner_var) # 輸出 "I am an inner variable"
inner_function()
print(outer_var) # 輸出 "I am an outer variable"
print(global_var) # 輸出 "I am a global variable"
outer_function()
print(global_var) # 輸出 "I am a global variable"
在這個示例中,inner_function
可以訪問其自身的作用域、outer_function
的作用域和全局作用域中的變量。當我們調用outer_function
時,它會創建一個新的作用域鏈,并將inner_function
的作用域添加到鏈的末尾。然后,inner_function
在其自身的作用域中查找變量,如果找不到,則繼續沿著作用域鏈向上查找,直到全局作用域。