收藏,Python 開發中有哪些高階技巧?

2021-09-03 02:35:09 字數 4462 閱讀 3224

python 開發中有哪些高階技巧?這是知乎上乙個問題,我總結了一些常見的技巧在這裡,可能談不上多高階,但掌握這些至少可以讓你的**看起來 pythonic 一點。如果你還在按照類c語言的那套風格來寫的話,在 code review 恐怕會要被吐槽了。

本文閱讀時間5分鐘,收藏先

列表推導式

>>> chars = [ c for c in 'python' ]

>>> chars

['p', 'y', 't', 'h', 'o', 'n']

字典推導式

>>> dict1 = 

>>> double_dict1 =

>>> double_dict1

集合推導式

>>> set1 = 

>>> double_set =

>>> double_set

合併字典

>>> x = 

>>> y =

>>> z =

>>> z

複製列表

>>> nums = [1,2,3]

>>> nums[::]

[1, 2, 3]

>>> copy_nums = nums[::]

>>> copy_nums

[1, 2, 3]

反轉列表

>>> 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

函式返回多個值(其實是自動packing成元組)然後unpacking賦值給4個變數

>>> def f():

...     return 1, 2, 3, 4

...>>> a, b, c, d = f()

>>> a

1>>> d

4

列表合併成字串

>>> " ".join(["i", "love", "python"])

'i love python'

鏈式比較

>>> if a > 2 and a < 5:

...     pass

...>>> if 2yield from

# 沒有使用 field from

def dup(n):

for i in range(n):

yield i

yield i

# 使用yield from

def dup(n):

for i in range(n):

yield from [i, i]

for i in dup(3):

print(i)

>>>00

1122

in 代替 or

>>> if x == 1 or x == 2 or x == 3:

...     pass

...>>> if x in (1,2,3):

...     pass

字典代替多個if else

def fun(x):

if x == 'a':

return 1

elif x == 'b':

return 2

else:

return none

def fun(x):

return .get(x)

有下標索引的列舉

>>> for i, e in enumerate(["a","b","c"]):

...     print(i, e)

...0 a

1 b2 c

生成器

注意區分列表推導式,生成器效率更高

>>> g = (i**2 for i in range(5))

>>> g

at 0x10881e518>

>>> for i in g:

...     print(i)

...014

916

預設字典 defaultdict

>>> d = dict()

>>> d['nums']

keyerror: 'nums'

>>>

>>> from collections import defaultdict

>>> d = defaultdict(list)

>>> d["nums"]

字串格式化

>>> lang = 'python'

>>> f' is most popular language in the world'

'python is most popular language in the world'

列表中出現次數最多的元素

>>> nums = [1,2,3,3]

>>> max(set(nums), key=nums.count)3或者

from collections import counter

>>> counter(nums).most_common()[0][0]

3

讀寫檔案

>>> with open("test.txt", "w") as f:

...     f.writelines("hello")

判斷物件型別,可指定多個型別

>>> isinstance(a, (int, str))

true

類似的還有字串的 startswith,endswith

true__str____repr__區別

>>> str(datetime.now())

'2018-11-20 00:31:54.839605'

>>> repr(datetime.now())

'datetime.datetime(2018, 11, 20, 0, 32, 0, 579521)'

前者對人友好,可讀性更強,後者對計算機友好,支援 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個高階操作。

小牛學堂業內唯一一家只做大資料培訓的機構

人工智慧,python學科全新授課模式

為滿足不同學習就業方向需求,小牛學堂開設了,人工智慧,python學科全新授課模式:學員經過前期的基礎和高階階段學習後,採取分全棧工程師、網路爬蟲工程師、機器學習工程師以及人工智慧等多個方向分班學習政策,讓學員學的更加專業更加深度。

當然,這並不意味著學員只可選擇乙個方向進行學習,如完結方向課程後,學員不急於就業,可再次進入另外兩個類別下繼續學習。

王者榮耀中有哪些獲勝率高的玩法?

王者榮耀 作為騰訊遊戲手裡的一張 ssr 在幾個月時間裡就把曾經的現象級手遊 陰陽師 輕鬆踢下榜單,成為中國app store榜單裡最火爆的遊戲。現在開啟 王者榮耀 你可能會發現,不僅僅是你的大侄子或者大學同學在玩,隔壁公司的產品經理或者知名投資人也出現在你的遊戲好友名單裡。某一天,一群剛參加完 p...

對於新手來說,Python中有哪些難以理解的概念?

老手都是從新手一路走過來的,很多新手夥伴可能會對一些基礎的概念理解都存在一定的困難,提起python中難以理解的概念,很多夥伴對於python變數賦值的機制有些疑惑,不過對於習慣於求根究底的程式設計師,只有深入理解了某個事物本質,掌握了它的客觀規律,才能得心應手 運用自如,高階更高層次來看待這個事物...

有哪些值得推薦的Python開發工具

python 開發工具 ipython ipython provides a rich architecture for interactive computing with a powerful interactive shell.a kernel for jupyter.support for ...