目錄作用域
函式名的多種用法
函式的巢狀
命名空間就是變數名與變數值繫結關係的地方。比如對於x=1,1存放於記憶體空間,而x與1的對應關係儲存在命名空間中。
命名空間分為三類:內建命名空間、全域性命名空間、區域性命名空間。
內建命名空間儲存的是python直譯器提前給我們定義好的,像len()、print()、open()等。
存活週期:python直譯器執行則產生,關閉則銷毀。
名字只要不是在函式裡的執行產生的,都會存到全域性命名空間。
name = 'jason' # 變數名name存入全域性命名空間
def index(): # 函式名index存入全域性命名空間
pass
if true:
a = 111 # 變數名a存入全域性命名空間
for i in range(10): # 變數名i存入全域性命名空間
pass
while true:
b = 222 # 變數名b存入全域性命名空間
存活週期:python檔案開始執行時產生,執行完畢時銷毀。
名字只要是在函式裡的執行產生的,都會存到區域性命名空間。
def index():
name = 'jason' # 變數名name存入區域性命名空間
存活週期:函式被呼叫時產生,函式呼叫結束時銷毀。
如果要去找乙個名稱,有這麼多個命名空間,我們該去那個命名空間找呢?
在查詢名稱之前,要先知道直接在哪乙個空間內。知道了自己所在的空間後,先在自己空間內查詢,找不到在向外尋找,所以查詢順序應該是:區域性命名空間 >>> 全域性命名空間 >>> 內建命名空間
# 案例一
len = '我是全域性命名空間中的len'
def index():
len = '我是區域性命名空間中的len'
print(len) # 輸出:我是區域性命名空間中的len
index() # 呼叫函式 函式體就會執行 就會產生區域性命名空間
print(len) # 輸出:我是全域性命名空間中的len
# 案例二
x = 111
def f1():
x = 222
def f2():
x = 333
print(x)
f2()
f1() # 輸出:333
作用域就是命名空間能夠作用的範圍,按照名字作用範圍的不同可以將三個命名空間劃分為兩個區域:
那麼問題來了,我們該如何在區域性內修改全域性的名稱的值呢?
如果全域性命名空間中的名稱是可變型別:
l = [1, 2, 3]
def index():
index()
print(l) # 輸出:[1, 2, 3, 4]
如果全域性命名空間中的名稱是不可變型別:
x = 100
def index():
global x # 使用關鍵字宣告,說明之後的x使用的是全域性的x
x = 200
index()
print(x) # 輸出:200
"""如果想要在區域性命名空間中修改全域性命名空間中的名字 那麼需要使用關鍵字global申明"""
問題又來了,知道了怎麼在區域性命名空間中修改全域性命名空間中的名字,那麼區域性命名空間有多層巢狀該如何修改外層的名字呢?
比如:
def index():
x = 100
def f():
# 如何在f()函式裡修改x的值?
f()print(x)
同樣,這個時候也是需要乙個關鍵字,這個關鍵字就是nonlocal。
def index():
x = 100
def f():
nonlocal x # 使用nonlocal關鍵字,說明之後的x使用的是外層的x
x = 200
f()print(x) # 輸出:200
用法一:函式名當做變數名賦值
def index():
print('來自函式index')
res = index # 讓res也指向index指向的函式體**
res() # 相當於執行了index()
# 輸出:來自函式index
用法二:函式名當函式的實參
def index():
print('來自函式index')
def func(a):
a()
func(index) # 實參index傳給形參a,func函式內部的a()變成了index()
# 輸出:來自函式index
用法三:函式名當做函式的返回值
def func():
return index # 將函式名當做返回值
def index():
print('來自函式index')
res = func() # res接收函式名index
res() # 相當於執行了index()
# 輸出:來自函式index
用法4:函式名作為容器型別的元素
def index():
print('來自函式index')
l1 = [1, 2, 3, index]
l1[-1]() # 相當於執行了index()
# 輸出:來自函式index
函式的巢狀其實就與if、while、for迴圈的巢狀一樣,這裡只做簡單展示。
# 函式巢狀死迴圈
def index():
func()
print('來自index')
def func():
index()
print('來自func')
Python函式高階之函式命名空間
命名空間指的是儲存程式中的變數名和值的地方。命名空間的本質是乙個字典,用來記錄變數名稱和值。字典的key是變數的名稱,字典的value對於的是變數的值。例如 命名空間一共分為三種 區域性命名空間 全域性命名空間 內建命名空間 區域性空間 每個函式都有自己的命名空間,叫做區域性空間,它記錄了函式的變數...
Python之函式(三)函式的注釋與命名空間
函式的注釋 def func user,password 密碼加密 param user 使用者名稱 str param password 密碼 str return 加密的密碼 md5 print user,password 函式注釋 在函式體中 就出現注釋 填寫對應功能即可 print func...
函式與命名空間
格式 返回值 引數 可變引數 內聯函式 函式過載 格式 返回型別 函式名 函式引數型別 函式引數,如果沒有形參可以直接在函式名後面加 或者 void 返回值說明 有返回值函式 無返回值函式 例子 例1 有返回值 double max double a,double b 例2 無返回值 void sh...