在python中,乙個函式就是乙個作用域
name = 'xiaoyafei'
def change_name():
name = '肖亞飛'
print('在change_name裡的name:',name)
change_name() # 呼叫函式
print("在外面的name:",name)
執行結果如下:
在change_name裡的name: 肖亞飛
在外面的name: xiaoyafei
我們再試一下在巢狀函式中是如何的尋找的?
age = 15
def func():
print('第一層age:',age) # 第一層age: 15
def func2():
age = 73
print("func2中的age:",age) # func2中的age: 73
def func3():
age = 84
print("func3中的age:",age) # func3中的age: 84
func3() # 呼叫func3函式
func2() # 呼叫func2函式
func()
在以上巢狀函式中,就能夠很好的說明乙個函式就是乙個作用域,那麼我們現在稍微改一下**看看情況?
age = 15
def func():
print('第一層age:',age) # 第一層age: 15
def func2():
print("func2中的age:",age) # func2中的age: 15 # 看到沒有,如果當前作用域裡沒有age變數,那麼它就會往上找
def func3():
age = 84
print("func3中的age:",age) # func3中的age: 84
func3() # 呼叫func3函式
func2() # 呼叫func2函式
func()
那麼,這時候有人就說了,屁話一大堆講的原來是區域性變數和全域性變數,那麼我想問:在上面這個巢狀函式中,func2中並沒有age變數,那麼它是如何找到全域性變數age程式設計客棧 = 15的?
此時我們就需要來看一下作用域的查詢順序了:
變數作用域legb
咳咳,還是先了解下什麼是命名空間把?
命名空間,又名 name space ,顧名思義就是存放名字的地方,存什麼名字呢?舉例說明,x = 1 ,1存放在記憶體當中,那麼變數名x存放在**呢? 命名空間就是存放名字x與1繫結關係的地方
>>> x = 1
>>> id(1)
1576430608
命名空間分為以下3種:
程式設計客棧
不同變數的作用域不同就是有這個變數所在的命名空間決定的.
作用域即範圍
讓我們來舉例看一下
level = 'l0'
n = 22
def func():
level = 'l1'
n = 33
print(locals()) # 在之前說過在python中,乙個函式就是乙個作用域,這就很完美的體現了
def outer():
n = 44
level = 'l2'
print(locals(),n) # 44
def inner():
level = 'l3'
print(locals(),n) # 44
inner()
outer()
func()
以 l --> e --> g -->b 的規則查詢,即:在區域性找不到,便會去局程式設計客棧部外的區域性找(例如閉包),再找不到就會去全域性找,再者去內建函式中找。
總結本文標題: python中的函式作用域
本文位址: /jiaoben/python/227288.html
python中函式作用域
在python中,乙個函式就是乙個作用域 name xiaoming defchange name name sthu print 在change name裡的name name change name 呼叫函式 print 在外面的name name 執行結果如下 在change name裡的na...
python中函式作用域 python中函式作用域
1 作用域 如果乙個變數在def內賦值,他被定位在這個函式內 如果乙個變數在乙個巢狀的def中賦值,對於巢狀的函式來說,它非本地的 如果在def之外賦值,他就是整個檔案 2 在互動式模式下,其實是在乙個名為 main 的模板內。3 乙個函式的內部的任何型別的賦值都會把乙個名稱劃定為本地的。這包括 語...
Python 函式作用域
python中變數作用域分4種情況 x max 1,6 max為系統變數,它的作用域為python的所有模組 y 1 y為全域性變數,它的作用域為當前模組 defouter i 3 i的作用域為當前函式,包括巢狀函式 definner count 2 count為區域性變數,作用域只在當前函式有效函...