函數(shù):
調(diào)用函數(shù):(內(nèi)置函數(shù)置谦、自定義函數(shù))
類型轉換int放坏、str函數(shù)的調(diào)用
簡單的例子:int('123')
定義函數(shù):
python中定義函數(shù)使用 def 語句咙咽,依次是函數(shù)名、括號淤年、括號中的參數(shù)钧敞,還有冒號,然后互亮,在縮進塊中編寫函數(shù)體犁享,函數(shù)的返回值用return語句返回。
簡答的額例子:
空函數(shù):
如果想定義一個什么事也不做的空函數(shù)豹休,可以用pass語句:
def nop():
? ? pass
參數(shù)檢查:
通過傳入?yún)?shù)炊昆,函數(shù)異常報錯,會拋出TypeError類型報錯:
返回多個值:
return x,y
小結:
定義函數(shù)時威根,需要確定函數(shù)名和參數(shù)個數(shù)凤巨;
如果有必要,可以先對參數(shù)的數(shù)據(jù)類型做檢查洛搀;
函數(shù)體內(nèi)部可以用return隨時返回函數(shù)結果敢茁;
函數(shù)執(zhí)行完畢也沒有return語句時,自動return None留美。
函數(shù)可以同時返回多個值彰檬,但其實就是一個tuple
函數(shù)的參數(shù):
普通的參數(shù)定義:
def code(x,y):
注意傳入的額參數(shù),必須按照對應的位置來傳遞參數(shù)谎砾。
默認參數(shù):
def code(x,y=3):
y有默認的值是3 逢倍,所以在傳遞參數(shù)的時候只需要傳遞一個參數(shù)就可以
可變參數(shù):
但是調(diào)用的時候,需要先組裝出一個list或tuple:
定義可變參數(shù)和定義一個list或tuple參數(shù)相比景图,僅僅在參數(shù)前面加了一個*號较雕。在函數(shù)內(nèi)部,參數(shù)numbers接收到的是一個tuple挚币,因此亮蒋,函數(shù)代碼完全不變。但是妆毕,調(diào)用該函數(shù)時慎玖,可以傳入任意個參數(shù),包括0個參數(shù):
def code(*age):
參數(shù)可以通過傳入的不同的值來改變
關鍵參數(shù):
**kw是關鍵字參數(shù)笛粘,kw接收的是一個dict凄吏。
def code(age,**number):
傳參數(shù):
參數(shù)組合:
在Python中定義函數(shù)远舅,可以用必選參數(shù)、默認參數(shù)痕钢、可變參數(shù)、關鍵字參數(shù)和命名關鍵字參數(shù)序六,這5種參數(shù)都可以組合使用任连。但是請注意,參數(shù)定義的順序必須是:必選參數(shù)例诀、默認參數(shù)随抠、可變參數(shù)、命名關鍵字參數(shù)和關鍵字參數(shù)繁涂。
小結
Python的函數(shù)具有非常靈活的參數(shù)形態(tài)拱她,既可以實現(xiàn)簡單的調(diào)用,又可以傳入非常復雜的參數(shù)扔罪。
默認參數(shù)一定要用不可變對象秉沼,如果是可變對象,程序運行時會有邏輯錯誤矿酵!
要注意定義可變參數(shù)和關鍵字參數(shù)的語法:
*args是可變參數(shù)唬复,args接收的是一個tuple;
**kw是關鍵字參數(shù)全肮,kw接收的是一個dict敞咧。
以及調(diào)用函數(shù)時如何傳入可變參數(shù)和關鍵字參數(shù)的語法:
可變參數(shù)既可以直接傳入:func(1, 2, 3),又可以先組裝list或tuple辜腺,再通過*args傳入:func(*(1, 2, 3))休建;
關鍵字參數(shù)既可以直接傳入:func(a=1, b=2),又可以先組裝dict评疗,再通過**kw傳入:func(**{'a': 1, 'b': 2})测砂。
使用*args和**kw是Python的習慣寫法,當然也可以用其他參數(shù)名壤巷,但最好使用習慣用法邑彪。
命名的關鍵字參數(shù)是為了限制調(diào)用者可以傳入的參數(shù)名,同時可以提供默認值胧华。
定義命名的關鍵字參數(shù)在沒有可變參數(shù)的情況下不要忘了寫分隔符*寄症,否則定義的將是位置參數(shù)。
高級特性:
切片:取一個list或tuple的部分元素是非常常見的操作
去出來前面兩個:
[L[0],L[1]]
也可以世界染囟:
L[0:2]
注意這個區(qū)別一下有巧,這個取值是,取前N個元素悲没,也就是索引為0-N的元素篮迎,但是不包括N的值,
還有第一個如果是第一,可以省略甜橱。倒數(shù)第一個索引是 -1
L[:2]
迭代:
通過for循環(huán)來遍歷這個list或tuple逊笆,這種遍歷我們稱為迭代(Iteration)。
在Python中岂傲,迭代是通過for ... in來完成难裆。
列表生成式:
列表生成式即List Comprehensions,是Python內(nèi)置的非常簡單卻強大的可以用來創(chuàng)建list的生成式镊掖。
1乃戈、list(range(1, 11))
2、[x for x in range(1,11)]
3亩进、l2 = []
for t in range(1,10):
l2.append(t)
生成器:
要創(chuàng)建一個generator症虑,有很多種方法。第一種方法很簡單归薛,只要把一個列表生成式的[]改成()谍憔,就創(chuàng)建了一個generators
如果要一個一個打印出來,可以通過next()函數(shù)獲得generator的下一個返回值
可以通過迭代的方打印generator
但是用for循環(huán)調(diào)用generator時苟翻,發(fā)現(xiàn)拿不到generator的return語句的返回值韵卤。如果想要拿到返回值,必須捕獲StopIteration錯誤崇猫,返回值包含在StopIteration的value中:
小結:
generator是非常強大的工具沈条,在Python中,可以簡單地把列表生成式改成generator诅炉,也可以通過函數(shù)實現(xiàn)復雜邏輯的generator蜡歹。
要理解generator的工作原理,它是在for循環(huán)的過程中不斷計算出下一個元素涕烧,并在適當?shù)臈l件結束for循環(huán)月而。對于函數(shù)改成的generator來說,遇到return語句或者執(zhí)行到函數(shù)體最后一行語句议纯,就是結束generator的指令父款,for循環(huán)隨之結束。
請注意區(qū)分普通函數(shù)和generator函數(shù)瞻凤,普通函數(shù)調(diào)用直接返回結果
迭代器:
直接作用于for循環(huán)的數(shù)據(jù)類型有以下幾種:
一類是集合數(shù)據(jù)類型憨攒,如list、tuple阀参、dict肝集、set、str等蛛壳;
一類是generator杏瞻,包括生成器和帶yield的generator function所刀。
這些可以直接作用于for循環(huán)的對象統(tǒng)稱為可迭代對象:Iterable。
可以使用isinstance()判斷一個對象是否是Iterable對象
返回值 True或者False
小結:
凡是可作用于for循環(huán)的對象都是Iterable類型捞挥;
凡是可作用于next()函數(shù)的對象都是Iterator類型浮创,它們表示一個惰性計算的序列;
集合數(shù)據(jù)類型如list砌函、dict蒸矛、str等是Iterable但不是Iterator,不過可以通過iter()函數(shù)獲得一個Iterator對象胸嘴。
參考文獻:https://www.liaoxuefeng.com/wiki/1016959663602400/1017104324028448