1.函式的動態傳參
順序:位置引數=>*arge(接收內容)=>預設引數值(返回的是一個元組)
def chi(*food): print(food) chi("包子","蓋澆飯","大盤雞","麻辣香鍋") #結果 ('包子 ', '蓋澆飯', '大盤雞', '麻辣香鍋')
def chi(name,*food): print(name+"要吃",food) chi("麻花藤","包子","蓋澆飯","大盤雞","麻辣香鍋") #位置引數和動態引數的使用
def chi(name,*food,didian="北京"): print(name+"要吃",food,didian) chi("麻花藤","包子","蓋澆飯","大盤雞","麻辣香鍋") #位置引數,動態引數和預設引數的聯合使用
2.關鍵字的動態傳參
位置引數, *args, 預設值引數, **kwargs (返回的是一個字典)
def chi (**food): print(food) chi(早餐="大麻花",午餐="西紅柿雞蛋麵",晚上="牛肉罩餅")
無敵傳參
def chi (*food ,**food2): print(food) print(food2) chi("大白梨","菠蘿啤",早餐="小米粥"
函式的主註釋
def func(a, b): """ :param a:第一個資料 :param b:第二個資料 :return:返回兩個資料的和 """ return a+b print(func.__doc__)#
2.形參的位置*,**: 聚合
實參的位置*,**: 打散
# 形參: 聚合 def func(*food): # 聚合, 位置引數 print(food) lst = ["雞蛋","煎餅果子","豬蹄","滋滋冒油"] # # 實參: 打散 func(*lst) # 打散. 把list, tuple, set, str 進行迭代打散
聚合成關鍵字引數 # def func(**kwargs): # print(kwargs) # # dic = {"name":'alex', 'age':'18'} # func(**dic) # 打散成關鍵字引數
3.名稱空間
載入順序:
1. 內建名稱空間
2. 全域性名稱空間
3. 區域性名稱空間(函式被執行的時候)
取值順序:
1. 區域性名稱空間
2. 全域性名稱空間
3. 內建名稱空間
def outer(): # print("哈哈") # def inner_1(): # print("呵呵") # def inner_1_1(): # print("嘻嘻") # inner_1_1() # print("吼吼") # def inner_2(): # print("嘿嘿") # inner_2() # inner_1() # outer() 輸出結果: 哈哈 嘿嘿 呵呵 嘻嘻 吼吼
作用域
print(globals()) # 可以檢視全域性作用域中的內容
print(locals()) # 檢視當前作用域中的內容
全域性作用域: 包含內建名稱空間和全域性名稱空間. 在整個檔案的任何位置都可以使用(遵循
從上到下逐行執行).
區域性作⽤用域: 在函式內部可以使用.
作用域名稱空間:
1. 全域性作用域: 全域性名稱空間 + 內建名稱空間
2. 區域性作用域: 區域性名稱空間
我們可以通過
globals()函式來檢視全域性用域中的內容,
locals()來檢視區域性作用域中的變數和函式資訊
4.函式巢狀
函式是可以互相巢狀的
5. global和nonlocal關鍵
global: 在區域性訪問全域性中的內容
nonlocal: 在區域性尋找外層函式中離他最近的那個變數
函式名的應用:(第一類物件) 函式名的命名規範和變數是一樣的 函式名其實就是變數名 可以作為列表中的元素進行儲存 def func1(): pass def func2(): pass list = [func1,func2] for el in list: el() 可以作為引數傳遞給函式 def func(): pass def proxy(fn): fn() proxy(func) 可以作為函式的返回值 def func(): def inner(): pass return inner) func()() 2,閉包 在內層函式中訪問外層函式的區域性變數 好處: 1,保護你的變數不受外界影響 2,可以讓變數常駐記憶體 寫法: def outer(): a = 10 def inner(): print(a) return inner