6.29學習日記
函式的基本使用
使用函式:不需要重複程式碼,可以重複呼叫,程式碼清晰好管理
函式後加''''''可以編寫註釋 (注意縮排)
定義函式
def foo(x,y) 引數後可以加型別提示(Type hinting)
'''
註釋
'''
函式體程式碼
return 返回值
定義時傳送的事
只檢測語法不執行程式碼並把程式碼存到記憶體空間中
函式使用(只有函式後面才能加())
foo()
2.定義函式的三種格式
無參函式:不需要外界傳值
有參函式:需要外界傳值
空函式:先佔位使用
3.函式的返回值
三種(沒有return,return一個值,return多個值返回小元組)
無論多少次迴圈,執行到ruturn直接返回
4.呼叫函式的三種格式
語句形式(單純執行一條命令)
foo()
表示式形式(加入運算子就是表示式)
res = foo()
引數形式(是另一個函式的引數)
函式引數
形參和實參
形參:函式定義階段,括號內指定的引數(變數名)
實參:函式呼叫階段,括號內傳入的值(變數值)
二者的關係:在函式呼叫時,會將實參值繫結形參名
函式呼叫完畢後會接觸繫結
1.位置形參
在函式定義階段,按照從左到右的順序依次定義的引數,稱之為位置形參
特點:必須要傳值,多一個少一個都不行
2.位置實參
在函式呼叫階段,按照從左到右的順序依次傳入的值,稱之為位置實參
特點:按照順序依次為形參賦值
3.關鍵字實參
在函式定義階段,按照key=value的格式來傳值,稱之為關鍵字實參
特點:可以打亂順序,但仍能為指定引數賦值
注意:可以混用位置引數和關鍵字實參,但是位置實參必要跟在關鍵字實參前面而且不能為用一個形參賦值
4.預設形參
在函式定義階段,就已經為形參賦值,稱之為預設形參
特點:定義階段就已經有值了,意味著在呼叫階段可以不用為其傳值(傳也可以)
注意:1.可以混用位置形參與關鍵字形參,但是位置形參必須跟在預設形參的前面
2.預設形參的值推薦指向不可變型別
-
預設形參的值只在函式定義階段被賦值一次
5.可變長引數:*與**
在形參中帶*:會將溢位的位置實參值彙總成元組,然後賦值給緊跟其後的形參名
在形參中帶**:會將溢位的位置實參值彙總成字典 ,然後賦值給緊跟其後的形參名
在實參中帶*:打散,會把列表中的值賦值給對應的形參名
在實參中帶**:會把字典中的值賦值給對應的形參名,如果使用的是 *的話會將key值賦值給對應的形參名
def index(a, b, c):
print(a, b, c)
def wrapper(*args,**kwargs): # args=(1,2,3) kwargs={"x":111,"y":222,"z":333}
index(*args,**kwargs) # index(*(1,2,3),**{"x":111,"y":222,"z":333})
# index(1,2,3,x=111,y=222,z=333)
wrapper(1, 2, 3, x=111, y=222, z=333)
##wrapper(1,c=3,b=2)
傳給wrapper的資料一模一樣的傳給index
關鍵字引數
排序:
形參---->有預設值的形參---->帶*號的形參---->命名關鍵字形參---->帶有**的形參
命名關鍵字形參如果有值不賦值也行
內建函式
abs():絕對值
all():所有遍歷出來的結果為真才為真
any():只要遍歷出來的結果一個真就為真
bin():十進位制轉換
oct():八進位制轉換
hex():十六進位制轉換
callable():判斷輸入的值能否被呼叫
dir():列表能使用的方法
divmod(10,3): 10 % 3 取餘存進元組
pow(10,2,3): 10 ** 2 % 3
enumerate():提取出索引(可以單獨解壓)
eval():可以把字串裡的程式碼執行