函式 / 名稱空間 / 閉包
阿新 • • 發佈:2018-12-29
三元運算子
def my_max(a,b): return a if a>b else b #當a>b成立返回a,否則返回b
引數:
實參 : 1.位置引數 2. 關鍵字引數 3. 混合引數
形參 : 1.位置引數 2. 預設值引數
動態傳參:
1. 動態接收位置引數
def func(a, b, *arg): #動態接受引數是:動態引數必須在位置引數之後 pass
2.接收預設值引數
def fruit(a, b, c='apple', *food):pass
三種引數順序 : 位置引數, 動態引數*, 預設值引數
3.動態接受關鍵詞引數
def func(**kwargs): pass func(a=1, b=2, c=3) func(a=1, b=2)
最終順序(*): 位置引數 > *args > 預設值引數 > **kwargs
名稱空間(儲存變數)
分類
1.全域性名稱空間 → 直接在py檔案中,函式外宣告的變數都屬於全域性名稱空間
2.區域性名稱空間 → 在函式中宣告的變數會放在區域性名稱空間
3.內建名稱空間 → 存放python直譯器為我們提供的名字,list,tuple,str,int這些都是內建名稱空間
取值順序:
1.區域性名稱空間
2.全域性名稱空間
3.內建名稱空間
作用域(作用範圍)
分類
1.全域性作用域 : 全域性名稱空間 + 內建名稱空間
2.區域性作用域 : 區域性名稱空間
globals() # 列印全域性作用域中的內容
locals() #列印區域性作用域中的內容
global 和 nonlocal
global表示不再使用區域性作用域的內容,而改用全域性作用域中的變數
a = 100 def func(): global a #可以修改全域性變數a,僅限當前函式使用 a = 28 print(a) func() print(a) # ===>>28 28
nonlocal表示在區域性作用域中,呼叫父級名稱空間的變數
函式名的運用
1.函式名的記憶體地址 print(func) ==> <function func at 0x1101e4ea0>
2.函式名可以賦值給其他變數
3.函式名可以當做容器類的元素
4.函式名可以當做函式的引數
5.函式名可以作為函式的返回值
閉包 內層函式,對外層函式(非全域性)的變數的引用
def outer(): name = "Amy" # 內部函式 def inner(): print(name) return inner #外部函呼叫內部函式 fn = outer() # 訪問外部函式, 獲取到內部函式的函式地址 fn()
閉包好處: 在外界可以訪問內部函式; 內部函式訪問了外層函式的變數.這個變數將會常駐記憶體,供後面的程式使用
from urllib.request import urlopen def web_content(): content = urlopen('https://tieba.baidu.com/').read().decode("utf-8") def get_content(): return content #儲存content的內容,方便後續使用 return get_content fn = web_content() content = fn() print(content)