Python 開發(fā)中有哪些高級技巧瞄摊?這是知乎上一個問題,我總結(jié)了一些常見的技巧在這里苦掘,可能談不上多高級换帜,但掌握這些至少可以讓你的代碼看起來 Pythonic 一點。如果你還在按照類C語言的那套風(fēng)格來寫的話鹤啡,在 code review 恐怕會要被吐槽了惯驼。
本文閱讀時間5分鐘,收藏先
列表推導(dǎo)式
>>> chars = [ cforcin'python']
>>> chars
['p','y','t','h','o', 'n']
字典推導(dǎo)式
>>> dict1 = {'a':1,'b':2,'c':3,'d':4,'e':5}
>>> double_dict1 = {k:v*2for(k,v)indict1.items()}
>>> double_dict1
{'a':2,'b':4,'c':6,'d':8,'e':10}
集合推導(dǎo)式
>>> set1 = {1,2,3,4}
>>> double_set = {i*2foriinset1}
>>> double_set
{8,2,4,6}
合并字典
>>> x = {'a':1,'b':2}
>>> y = {'c':3,'d':4}
>>> z = {**x, **y}
>>> z
{'a':1,'b':2,'c':3,'d':4}
復(fù)制列表
>>> nums = [1,2,3]
>>> nums[::]
[1,2,3]
>>> copy_nums = nums[::]
>>> copy_nums
[1,2,3]
反轉(zhuǎn)列表
>>> reverse_nums = nums[::-1]
>>> reverse_nums
[3,2,1]
?PACKING / UNPACKING
變量交換
>>> a,b =1,2
>>> a ,b = b,a
>>> a
2
>>> b
1
高級拆包
>>> a, *b =1,2,3
>>> a
1
>>> b
[2,3]
或者
>>> a, *b, c =1,2,3,4,5
>>> a
1
>>> b
[2,3,4]
>>> c
5
函數(shù)返回多個值(其實是自動packing成元組)然后unpacking賦值給4個變量
>>>deff():
...return1,2,3,4
...
>>> a, b, c, d = f()
>>> a
1
>>> d
4
列表合并成字符串
>>>" ".join(["I","Love","Python"])
'I Love Python'
鏈?zhǔn)奖容^
>>>ifa >2anda <5:
...pass
...
>>>if2
...pass
yield from
# 沒有使用 field from
defdup(n):
? ?foriinrange(n):
? ? ? ?yieldi
? ? ? ?yieldi
# 使用yield from
defdup(n):
? ?foriinrange(n):
? ?yieldfrom[i, i]
foriindup(3):
print(i)
>>>
0
0
1
1
2
2
in 代替 or
>>>ifx ==1orx ==2orx ==3:
...pass
...
>>>ifxin(1,2,3):
...pass
字典代替多個if else
deffun(x):
? ?ifx =='a':
? ? ? ?return1
? ?elifx =='b':
? ? ? ?return2
? ?else:
? ? ? ?returnNone
deffun(x):
? ?return{"a":1,"b":2}.get(x)
有下標(biāo)索引的枚舉
>>>fori, einenumerate(["a","b","c"]):
... ?? ?print(i, e)
...
0a
1b
2c
生成器
注意區(qū)分列表推導(dǎo)式递瑰,生成器效率更高
>>> g = (i**2foriinrange(5))
>>> g
at0x10881e518>
>>>foriing:
... ?? ?print(i)
...
0
1
4
9
16
默認(rèn)字典 defaultdict
>>> d = dict()
>>> d['nums']
KeyError:'nums'
>>>
>>>fromcollectionsimportdefaultdict
>>> d = defaultdict(list)
>>> d["nums"]
[]
字符串格式化
>>> lang ='python'
>>> f'{lang} is most popular language in the world'
'python is most popular language in the world'
列表中出現(xiàn)次數(shù)最多的元素
>>> nums = [1,2,3,3]
>>> max(set(nums), key=nums.count)
3
或者
from collections import Counter
>>> Counter(nums).most_common()[0][0]
3
讀寫文件
>>>withopen("test.txt","w")asf:
... ?? ?f.writelines("hello")
判斷對象類型祟牲,可指定多個類型
>>> isinstance(a, (int, str))
True
類似的還有字符串的 startswith,endswith
>>>"http://foofish.net".startswith(('http','https'))
True
>>>"https://foofish.net".startswith(('http','https'))
True
__str__ 與 __repr__ 區(qū)別
>>> str(datetime.now())
'2018-11-20 00:31:54.839605'
>>> repr(datetime.now())
'datetime.datetime(2018, 11, 20, 0, 32, 0, 579521)'
前者對人友好泣矛,可讀性更強(qiáng)疲眷,后者對計算機(jī)友好,支持 obj == eval(repr(obj))
使用裝飾器
def makebold(f):
return lambda: "" + f() + ""
def makeitalic(f):
return lambda: "" + f() + ""
@makebold
@makeitalic
def say():
return "Hello"
>>> say()
Hello
不使用裝飾器您朽,可讀性非常差
def say():
return "Hello"
>>> makebold(makeitalic(say))()
Hello
...此處省略100個高級操作。
小牛學(xué)堂業(yè)內(nèi)唯一一家只做大數(shù)據(jù)培訓(xùn)的機(jī)構(gòu)
人工智能,Python學(xué)科全新授課模式
為滿足不同學(xué)習(xí)就業(yè)方向需求哗总,小牛學(xué)堂開設(shè)了几颜,人工智能,Python學(xué)科全新授課模式:學(xué)員經(jīng)過前期的基礎(chǔ)和高級階段學(xué)習(xí)后讯屈,采取分全棧工程師蛋哭、網(wǎng)絡(luò)爬蟲工程師、機(jī)器學(xué)習(xí)工程師以及人工智能等多個方向分班學(xué)習(xí)政策涮母,讓學(xué)員學(xué)的更加專業(yè)更加深度谆趾。
當(dāng)然,這并不意味著學(xué)員只可選擇一個方向進(jìn)行學(xué)習(xí)叛本,如完結(jié)方向課程后沪蓬,學(xué)員不急于就業(yè),可再次進(jìn)入另外兩個類別下繼續(xù)學(xué)習(xí)来候。
Tips:預(yù)約小牛學(xué)堂熱門課程30天免費試學(xué)跷叉,報名地址:https://jinshuju.net/f/xWkAC8
想了解更多前沿技術(shù),想獲取最新免費編程資源視頻源碼筆記营搅,小伙伴請往下看云挟!
qun號是:八六四,六三四转质,八四五园欣。qun內(nèi)有很多開發(fā)工具,很多干貨和技術(shù)資料分享休蟹!
如果您覺得此篇文章對您有幫助沸枯,歡迎關(guān)注微信公眾號:大禹編程,您的支持是對我最大的鼓勵鸡挠!共同學(xué)習(xí)辉饱,共同進(jìn)步