NOTE:文章中的代碼縮進(jìn)不知道怎么搞,直接粘貼使用會(huì)報(bào)錯(cuò)
Python基礎(chǔ)
- Python是大小寫敏感的
- 縮進(jìn)代表語(yǔ)法內(nèi)容,使用4個(gè)空格的縮進(jìn),所以粘貼代碼時(shí)注意縮進(jìn)是否正確
- #開(kāi)頭的語(yǔ)句是注釋
- 數(shù)據(jù)類型
- 整數(shù)
int
- 浮點(diǎn)數(shù)(小數(shù))
float
- 字符串
str
用單引號(hào)或雙引號(hào)括起來(lái) - 布爾值
bool
只有True
和False
兩個(gè)值,注意大小寫 - 空值
None
- 列表
list
a=[] vs 元組tuple
a=() - 字典
dic
a = {key:value} - set 是一組key的集合,但不儲(chǔ)存value a = set(list)
- 編碼
- 字符串
str
使用Unicode編碼,支持多語(yǔ)言 - str與bytes互相轉(zhuǎn)換時(shí),如無(wú)特殊需求,僅使用UTF-8編碼
- 常用占位符如下
%d 整數(shù) %f 浮點(diǎn)數(shù) %s 字符串 %x 十六進(jìn)制整數(shù)
note: 不確定用什么,%s
永遠(yuǎn)起作用,會(huì)將所有類型轉(zhuǎn)換為字符串
- 條件判斷
if a > 2:
xxxx
elif a > 1:
sssss
else:
dddd
- 循環(huán)
- for循環(huán)
sum = 0
for x in range(101):
sum = sum + x
print(sum)
- while循環(huán)
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
- 定義函數(shù)
def function_name(<canshu>):
pass
return xx <,yy>
note:函數(shù)返回的多值是一個(gè)tuple
定義函數(shù)時(shí),需要確定函數(shù)名和參數(shù)個(gè)數(shù)
如果有必要,可以先對(duì)參數(shù)的數(shù)據(jù)類型做檢查
函數(shù)體內(nèi)部可以用return
隨時(shí)返回函數(shù)結(jié)果
函數(shù)執(zhí)行完畢也沒(méi)有return
語(yǔ)句時(shí),自動(dòng)return None
函數(shù)可以同時(shí)返回多個(gè)值,但其實(shí)就是一個(gè)tuple
- 函數(shù)的參數(shù)
- 位置參數(shù)(最簡(jiǎn)單最基礎(chǔ)的參數(shù))
def test(x):
pass
- 默認(rèn)參數(shù)
def test(x,n=2):
pass
note:默認(rèn)參數(shù)必須指向不可變對(duì)象!
- 可變參數(shù)
*args
(傳入的參數(shù)個(gè)數(shù)是可變的,可以是0個(gè))
可變參數(shù)在函數(shù)調(diào)用是自動(dòng)組裝為一個(gè)tuple
def test(*numbers):
for x in numbers:
pass
note:上述numbers
接收到的是一個(gè)tuple,如果已經(jīng)有了一個(gè)list或者tuple,可以這么做
>>> nums = [1,2,3]
>>> test(*nums)
- 關(guān)鍵字參數(shù)
**kw
(傳入0或多個(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)
note:如果已經(jīng)有一個(gè)dict,可以這么做
>>>extra = {'city': 'Beijing', 'job': 'Engineer'}
>>>person('Jack', 24, **extra)
name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
- 命名關(guān)鍵字參數(shù)
def person(name, age, *, city, job):
print(name, age, city, job)
命名關(guān)鍵字參數(shù)需要一個(gè)特殊分隔符*
,后面的參數(shù)被視為命名關(guān)鍵字參數(shù),如果沒(méi)有*
,Python就無(wú)法判斷是位置參數(shù)還是命名關(guān)鍵字參數(shù)了,但如果有了一個(gè)可變參數(shù),則不需要*
了
def person(name, age, *args, city, job):
print(name, age, args, city, job)
調(diào)用關(guān)鍵字參數(shù)時(shí)必須傳入?yún)?shù)名,否則報(bào)錯(cuò)
關(guān)鍵字參數(shù)可以有默認(rèn)值
def person(name, age, *, city='Beijing', job):
print(name, age, city, job)
- 參數(shù)組合
上述5種參數(shù)可以組合使用,參數(shù)定義順序必須為
必須參數(shù)、默認(rèn)參數(shù)、可變參數(shù)、命名關(guān)鍵字參數(shù)、關(guān)鍵字參數(shù)
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
def f2(a, b, c=0, *, d, **kw):
print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)
- 遞歸函數(shù)
如果一個(gè)函數(shù)在函數(shù)內(nèi)部調(diào)用自己,這個(gè)函數(shù)就是遞歸函數(shù)
- 使用遞歸函數(shù)要注意防止棧(stack)溢出
- 解決棧溢出的方法是通過(guò)尾遞歸優(yōu)化,尾遞歸和循環(huán)的效果是一樣的
BUT,Python標(biāo)準(zhǔn)的解釋器沒(méi)有針對(duì)尾遞歸做優(yōu)化,任何遞歸函數(shù)都存在棧溢出的問(wèn)題