Python
It's personal python note
引言
有兩種方式構(gòu)建軟件設(shè)計(jì):
一種是把軟件做的很簡單以至于明顯找不到缺陷耳胎;
另一種是把它做得很復(fù)雜以至于找不到明顯的缺陷.
--by C.A.R Hoare
標(biāo)識(shí)符
- 第一個(gè)字符必須是字母或下劃線
- 大小寫敏感
list []
- python內(nèi)置的一種數(shù)據(jù)類型
- 有序
- append()追加耍休、insert()插入吱窝、pop()剃尾或刪除
- list里數(shù)據(jù)類型可不同
- list還可以嵌套使用
tuple ()
- 與list類似,但一旦被初始化則不可以改變
- 在定義中若只有一個(gè)元素時(shí)蹋岩,需在后面追加逗號(hào)。tuple(1,)
控制語句
- if 判斷
- for...in 循環(huán)
- while 循環(huán)
dict {}
- 字典,相當(dāng)于map
- dict的key必須是不可變對(duì)象
set ([])
- 一組key的集合漏隐,但不存儲(chǔ)value,key不重復(fù)
函數(shù) def
- 函數(shù)的返回值用return語句返回
- 空函數(shù)
如果想定義一個(gè)什么事也不做的空函數(shù)奴迅,可以用pass語句. - 參數(shù)檢查
數(shù)據(jù)類型檢查可以用內(nèi)置函數(shù)isinstance()實(shí)現(xiàn)
def my_abs(x):
if not isinstance(x, (int, float)):
raise TypeError('bad operand type')
if x >= 0:
return x
else:
return -x
- 返回多值
Python的函數(shù)返回多值其實(shí)就是返回一個(gè)tuple青责,但寫起來更方便。 - 默認(rèn)參數(shù)
def power(x, n=2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s
注意必選參數(shù)在前取具,默認(rèn)參數(shù)在后
默認(rèn)參數(shù)必須指向不變對(duì)象
- 可變參數(shù)
在Python函數(shù)中脖隶,還可以定義可變參數(shù)。顧名思義暇检,可變參數(shù)就是傳入的參數(shù)個(gè)數(shù)是可變的产阱,可以是1個(gè)、2個(gè)到任意個(gè)块仆,還可以是0個(gè)构蹬。
例:給定一組數(shù)字a,b悔据,c……庄敛,請(qǐng)計(jì)算a2 + b2 + c2 + ……
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
>>> calc(1, 2, 3)
14
>>> calc()
0
>>> nums = [1, 2, 3]
>>> calc(*nums)
14
- 關(guān)鍵字參數(shù)
關(guān)鍵字參數(shù)允許你傳入0個(gè)或任意個(gè)含參數(shù)名的參數(shù),這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動(dòng)組裝為一個(gè)dict科汗。
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
>>> person('Michael', 30)
name: Michael age: 30 other: {}
>>> person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
>>> person('Adam', 45, gender='M', job='Engineer')
name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
>>> extra = {'city': 'Beijing', 'job': 'Engineer'}
>>> person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
關(guān)鍵字作用是擴(kuò)展函數(shù)藻烤。
- 命名關(guān)鍵字檢查
def person(name, age, **kw):
if 'city' in kw:
# 有city參數(shù)
pass
if 'job' in kw:
# 有job參數(shù)
pass
print('name:', name, 'age:', age, 'other:', kw)
如果要限制關(guān)鍵字參數(shù)的名字,就可以用命名關(guān)鍵字參數(shù)头滔,例如隐绵,只接收city和job作為關(guān)鍵字參數(shù)。這種方式定義的函數(shù)如下:
def person(name, age, *, city, job):
print(name, age, city, job)
- 參數(shù)組合
在Python中定義函數(shù)拙毫,可以用必選參數(shù)依许、默認(rèn)參數(shù)、可變參數(shù)缀蹄、關(guān)鍵字參數(shù)和命名關(guān)鍵字參數(shù)峭跳,這5種參數(shù)都可以組合使用膘婶,除了可變參數(shù)無法和命名關(guān)鍵字參數(shù)混合。但是請(qǐng)注意蛀醉,參數(shù)定義的順序必須是:必選參數(shù)悬襟、默認(rèn)參數(shù)、可變參數(shù)/命名關(guān)鍵字參數(shù)和關(guān)鍵字參數(shù)拯刁。
遞歸函數(shù)
def fact(n):
if n==1:
return 1
return n * fact(n - 1)
- 使用遞歸函數(shù)需要注意防止棧溢出脊岳。
- 解決遞歸調(diào)用棧溢出的方法是通過尾遞歸優(yōu)化。尾遞歸是指垛玻,在函數(shù)返回的時(shí)候割捅,調(diào)用自身本身,并且帚桩,return語句不能包含表達(dá)式亿驾。這樣,編譯器或者解釋器就可以把尾遞歸做優(yōu)化账嚎,使遞歸本身無論調(diào)用多少次莫瞬,都只占用一個(gè)棧幀,不會(huì)出現(xiàn)棧溢出的情況郭蕉。
def fact(n):
return fact_iter(n, 1)
def fact_iter(num, product):
if num == 1:
return product
return fact_iter(num - 1, num * product)
高級(jí)特性
- 切片
取一個(gè)list或者tuple或者字符串的部分元素的操作疼邀。
>>> L[0:3]
>>> (0, 1, 2, 3, 4, 5)[:3]
>>> 'ABCDEFG'[:3]
- 迭代
- 列表生成式
列表生成式即List Comprehensions,是Python內(nèi)置的非常簡單卻強(qiáng)大的可以用來創(chuàng)建list的生成式召锈。 - 生成器 generator
- 迭代器