1.關(guān)鍵字參數(shù)
①可變參數(shù)允許你傳入0個或任意個參數(shù),這些可變參數(shù)在函數(shù)調(diào)用時自動組裝成一個tuple;而關(guān)鍵字參數(shù)允許你傳入0個或任意個含參數(shù)名的參數(shù),這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動組裝成一個dict。

2.命名關(guān)鍵字參數(shù)
①有什么用?
- 限制關(guān)鍵字參數(shù)的名字。

- 注:調(diào)用時缺少參數(shù)名
city和job,Python解釋器把這4個參數(shù)均視為位置參數(shù),但person()函數(shù)僅能接收2個位置參數(shù)。


②命名關(guān)鍵字參數(shù)可以有缺省值(默認(rèn)值),從而簡化調(diào)用:

③如果函數(shù)定義中已經(jīng)有了一個可變參數(shù),后面跟著的命名關(guān)鍵字參數(shù)就不需要一個特殊分隔符*(asterisk)

3.參數(shù)組合
①有哪幾種參數(shù)?
- 必選參數(shù)、默認(rèn)參數(shù)、可變參數(shù)、關(guān)鍵字參數(shù)和命名關(guān)鍵字參數(shù)
②參數(shù)定義的順序?
- 必選參數(shù)、默認(rèn)參數(shù)、可變參數(shù)、命名關(guān)鍵字參數(shù)和關(guān)鍵字參數(shù)。

③神奇的tuple和dict

4.小結(jié)
①默認(rèn)參數(shù)一定要用不可變對象!
②注意可變參數(shù)和關(guān)鍵字參數(shù)的語句:
*args是可變參數(shù),args接收的是一個tuple;
**kw是關(guān)鍵字canshu,kw接收的是一個dict。
③調(diào)用函數(shù)時,如何傳入可變參數(shù)和關(guān)鍵字參數(shù)的語法?
可變參數(shù)既可以直接傳入:
func(1,2,3),又可以先組裝list或tuple,再通過*args傳入:func(*(1,2,3))關(guān)鍵字參數(shù)既可以直接傳入:
func(a=1,b=2),又可以先組裝dict,再通過**kw傳入:func(**{'a':1,'b':2})
5.遞歸函數(shù)
①是什么?
- 一個函數(shù)在內(nèi)部調(diào)用自身。
②如何解決棧溢出?
- 尾遞歸優(yōu)化。
③什么是尾遞歸優(yōu)化?

6.Hanoi

7.切片
① 存在的原因?
- 因為我們經(jīng)常需要獲取一個
list或tuple的部分元素。
②[] 和 for ... in + range 和 slice

③支持倒數(shù)切片

④slice各種操作

⑤tuple也是一種list,唯一區(qū)別是tuple不可變。因此tuple也可以進(jìn)行切片操作,操作的結(jié)果仍是tuple。

⑥字符串也可以看成是一種list,每個元素就是一個字符。因此,字符串也可以使用切片操作,操作結(jié)果仍是字符串。

8.迭代
①是什么?
- 當(dāng)使用
for循環(huán)來遍歷整個list或tuple或str時,這種遍歷我們叫做迭代。

②只要是可迭代對象,無論有無下標(biāo),都可以迭代,比如dict、set。

- 注意喔,這里還體現(xiàn)了代碼塊的執(zhí)行順序,hanoi

- 兩種獲得
dict中value的方式

③如果我要同時迭代key和value怎么辦?

- 注意
print()中的,逗號,就相當(dāng)于一個空格
④由于字符串也是可迭代對象,因此,也可作用域for循環(huán)

⑤如何判斷一個對象是可迭代對象?
- 通過
collections模塊的Iterable類型判斷:

⑥Python內(nèi)置的enumerate()函數(shù)可以把一個list變成索引-元素對。

9.列表生成式(list comprehensions):
①是什么?
-
Python內(nèi)置的創(chuàng)建list的生成式。
②如果你要生成一個list:[1,2,3,4,5]

③如何生成[1,4,9,16,25]?

④簡潔的方法:

⑤還可以對輸出的數(shù)據(jù)進(jìn)行篩選,比如獲取偶數(shù)

- 注意:奇數(shù)的平方還是奇數(shù)
⑥還是使用兩層循環(huán),生成全排列

⑦for循環(huán)可以同時使用兩個甚至更多變量。

⑧使用列表生成式簡化

⑨把一個list中所有字符變成大/小寫

⑩如果一個list中既有字符串,也包含整數(shù),如何將其中的字符串全部轉(zhuǎn)換成小寫格式。
- 解法1:

- 解法2:

10.生成器(Generator)
①存在的原因?
- 假如我們需要一個包含100萬個元素的列表,這會占據(jù)很大的內(nèi)存空間,如果我們僅僅需要訪問前面的幾個元素,那么后面絕大多數(shù)元素占用的空間都白白浪費了。
②如何創(chuàng)建一個生成器?

- 創(chuàng)建
l和g的區(qū)別僅在于最外層的[]和()。l是一個list,而g是一個generator
③如何打印generator中的數(shù)據(jù)。

④如果沒有更多的元素時,拋出StopIteration的錯誤。

⑤注意generator也是可迭代對象喔:

⑥既然是可迭代對象,也就可以用for循環(huán)

11.fib

①用for循環(huán)遍歷generator函數(shù)存在一個問題:
- 獲取不到
return語句的返回值。

12.生成器之楊輝三角形 range(len(L)) + 列表生成式 的強大力量
