自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

這5個(gè)Python特性,后悔沒(méi)早知道

新聞 前端
作為近 10 年才崛起的編程語(yǔ)言,Python 已被證明是一種非常強(qiáng)大的語(yǔ)言。從交互式映射到區(qū)塊鏈,我用 Python 構(gòu)建過(guò)很多應(yīng)用程序。

 [[312368]]

作為近 10 年才崛起的編程語(yǔ)言,Python 已被證明是一種非常強(qiáng)大的語(yǔ)言。從交互式映射到區(qū)塊鏈,我用 Python 構(gòu)建過(guò)很多應(yīng)用程序。

對(duì)初學(xué)者而言,Python 中有很多特性很難一開(kāi)始就掌握。

即使你是從其他語(yǔ)言轉(zhuǎn)換過(guò)來(lái)的程序員,用 Python 進(jìn)行更高級(jí)別的抽象編碼絕對(duì)是另一種體驗(yàn)。有些 Python 特性,我希望自己能早點(diǎn)知道。

本文將介紹其 5 個(gè)最重要的特性。

1. 列表推導(dǎo)式:代碼更緊湊

很多人認(rèn)為,lambda、map和filter是初學(xué)者應(yīng)該最先掌握的 Python“技巧”。雖然我也認(rèn)為應(yīng)關(guān)注這些功能,但由于它們?nèi)狈`活性。

實(shí)際上,它們?cè)诖蠖鄶?shù)情況下并不是非常有用!

Lambda是一種在1行中編寫(xiě)一個(gè)一次性使用的函數(shù)的方法。一旦函數(shù)被多次調(diào)用,性能將受到影響。

另一方面,map 可以將一個(gè)函數(shù)應(yīng)用于列表中的所有元素,而 filter 能獲取集合中滿足用戶自定義條件的元素子集。

 

 

 

  1. add_func = lambda z: z ** 2is_odd = lambda z: z%2 == 1multiply = lambda x,y: x*y 
  2. aList = list(range(10))print(aList)# [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] 

列表推導(dǎo)式是一個(gè)簡(jiǎn)潔而靈活的方法,它使用靈活的表達(dá)式和條件通過(guò)其他列表來(lái)創(chuàng)建新列表。

它用方括號(hào)來(lái)構(gòu)造,帶有一個(gè)表達(dá)式或函數(shù),只有當(dāng)列表中的元素滿足某個(gè)條件時(shí),該表達(dá)式或函數(shù)才作用于列表中的每個(gè)元素。

并且,它還能用嵌套來(lái)處理嵌套列表,并且這會(huì)比使用map和filter更靈活。

  1. # Syntax of list comprehension[ expression(x) for x in aList if optional_condition(x) ] 
  2.  
  3. print(list(map(add_func, aList)))print([x ** 2 for x in aList])# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]# [0, 1, 4, 9, 16, 25, 36, 49, 64, 81] 
  4.  
  5. print(list(filter(is_odd, aList)))print([x for x in aList if x%2 == 1])# [1, 3, 5, 7, 9]# [1, 3, 5, 7, 9] 

下載地址:python-list-comprehension.py

https://gist.github.com/edenau/148a56e624297addcbceb1805c2d4554#file-python-list-comprehension-py

2. 列表操作:實(shí)現(xiàn)列表的雙向操作

Python允許使用反向索引,其中aList[-1] == aList[len(aList)-1] 。所以,我們可以通過(guò)調(diào)用aList[-2] 來(lái)獲取列表的倒數(shù)第二個(gè)元素。

我們還能使用 aList[start:end:step] 語(yǔ)法來(lái)對(duì)列表進(jìn)行切片,其中起始元素包含在內(nèi),終止元素不包含在內(nèi)(即 [start,end) 步長(zhǎng)為 step 的前閉后開(kāi)區(qū)間)。

因此,調(diào)用 aList[2:5] 會(huì)得到 [2, 3, 4]。我們也能通過(guò)調(diào)用 aList[::-1] 來(lái)反轉(zhuǎn)列表,這種技術(shù)非常優(yōu)雅。

此外,也可以將列表拆分成單獨(dú)的元素,或者使用星號(hào)將列表拆分成單個(gè)元素和子列表的混合形式。

  1. a, b, c, d = aList[0:4]print(f'a = {a}, b = , c = {c}, d = k6zqhab033oa')# a = 0, b = 1, c = 2, d = 3 
  2. a, *b, c, d = aListprint(f'a = {a}, b = , c = {c}, d = k6zqhab033oa')# a = 0, b = [1, 2, 3, 4, 5, 6, 7], c = 8, d = 9 
  3. 下載地址:python-unpacking.py 

https://gist.github.com/edenau/da1e354a509d4129db47545f44a5028d#file-python-unpacking-py

3. 壓縮和枚舉:for 循環(huán)更方便

Zip 函數(shù)會(huì)創(chuàng)建一個(gè) 迭代器,且該迭代器可以對(duì)來(lái)自多個(gè)列表的元素進(jìn)行聚合。用它可以在 for 循環(huán)中對(duì)列表進(jìn)行并行遍歷和排序。

用星號(hào)對(duì)其進(jìn)行解壓。

  1. numList = [012]engList = ['zero''one''two']espList = ['cero''uno''dos']print(list(zip(numList, engList, espList)))# [(0, 'zero', 'cero'), (1, 'one', 'uno'), (2, 'two', 'dos')] 
  2.  
  3. for num, eng, esp in zip(numList, engList, espList): print(f'{num} is {eng} in English and {esp} in Spanish.')# 0 is zero in English and cero in Spanish.# 1 is one in English and uno in Spanish.# 2 is two in English and dos in Spanish. 

下載地址:python-zip-1.py

https://gist.github.com/edenau/f159058e3d1763ea2ec8cd792e4a8280#file-python-zip-1-py

  1. Eng = list(zip(engList, espList, numList))Eng.sort() # sort by engLista, b, c = zip(*Eng) 
  2.  
  3. print(a)print(b)print(c)# ('one', 'two', 'zero')# ('uno', 'dos', 'cero')# (1, 2, 0) 

下載地址:python-zip-2.py

https://gist.github.com/edenau/4a2b984cf78daae9fc8ba57a3b0a843b#file-python-zip-2-py

開(kāi)始時(shí), Enumerate 看起來(lái)有點(diǎn)嚇人,但在很多情況下使用它確實(shí)能方便很多。

它是一個(gè)自動(dòng)計(jì)數(shù)器,通常會(huì)在 for 循環(huán)中使用它,這樣就不需要再用 counter = 0 和  counter += 1 來(lái)創(chuàng)建和初始化計(jì)數(shù)器了。枚舉和壓縮是兩個(gè)構(gòu)造 for 循環(huán)的最強(qiáng)工具。

  1. upperCase = ['A''B''C''D''E''F']lowerCase = ['a''b''c''d''e''f']for i, (upper, lower) in enumerate(zip(upperCase, lowerCase), 1): print(f'{i}: {upper} and {lower}.')# 1: A and a.# 2: B and b.# 3: C and c.# 4: D and d.# 5: E and e.# 6: F and f. 

下載地址:python-enumerate.py

https://gist.github.com/edenau/34fabb07f38dde6b186724f85bd1e7b8#file-python-enumerate-py

4. 生成器:內(nèi)存更高效

當(dāng)我們想要對(duì)一個(gè)大的結(jié)果集進(jìn)行計(jì)算,但又不想為所有結(jié)果數(shù)據(jù)同時(shí)分配內(nèi)存時(shí),我們就可以使用生成器(Generator)了。

換句話說(shuō),它會(huì)動(dòng)態(tài)地生成值,并且不會(huì)將先前的值存儲(chǔ)在內(nèi)存中,因此我們只能對(duì)它們進(jìn)行一次迭代操作。

當(dāng)讀取大文件或使用關(guān)鍵字 yield 生成無(wú)窮數(shù)列時(shí),通常會(huì)用它。我發(fā)現(xiàn)在我的大多數(shù)數(shù)據(jù)科學(xué)項(xiàng)目中,它都能發(fā)揮很大作用。

  1. def gen(n): # an infinite sequence generator that generates integers >= n while True: yield n n += 1 G = gen(3) # starts at 3print(next(G)) # 3print(next(G)) # 4print(next(G)) # 5print(next(G)) # 6 

下載地址:python-generator.py

https://gist.github.com/edenau/d23b71ff473720ae19fd4514f2232bdb#file-python-generator-py

5. 虛擬環(huán)境:實(shí)現(xiàn)隔離

如果在本文介紹的 5 個(gè)特性中只選一個(gè),那么就是 虛擬環(huán)境 的使用。

Python 應(yīng)用程序通常會(huì)用各種不同的包,這些包可能是由具有復(fù)雜依賴(lài)關(guān)系的不同開(kāi)發(fā)人員開(kāi)發(fā)的。每個(gè)應(yīng)用程序都會(huì)用特定的庫(kù)設(shè)置,使用其他庫(kù)的版本無(wú)法實(shí)現(xiàn)對(duì)某個(gè)應(yīng)用程序安裝包的復(fù)制。

所以,不存在滿足所有應(yīng)用要求的單個(gè)安裝包。

  1. conda create -n venv pip python=3.7 # select python versionsource activate venv...source deactivate 

為每個(gè)應(yīng)用程序創(chuàng)建獨(dú)立的、自洽的虛擬環(huán)境 venv 非常重要,這可以通過(guò)使用 pip 或 conda來(lái)實(shí)現(xiàn)。

 

 

責(zé)任編輯:張燕妮 來(lái)源: 架構(gòu)頭條
相關(guān)推薦

2019-12-29 23:40:38

Python編程語(yǔ)言代碼

2020-04-27 09:21:25

Android谷歌功能

2024-05-15 07:11:23

2016-01-15 09:46:16

開(kāi)源DJMixxx 2.0

2020-07-16 08:46:50

Python 開(kāi)發(fā)編程語(yǔ)言

2015-06-04 17:35:45

融合媒體云華為

2025-01-26 09:28:09

2020-12-09 09:02:12

CSS 偽元素代碼

2015-08-07 12:33:12

Java新特性編程

2015-08-28 10:31:20

Windows 10預(yù)覽版更新

2015-08-10 09:53:10

Windows 10隱私

2015-11-09 12:54:55

Build 10586手機(jī)版Windows 10

2024-01-05 17:16:03

2017-09-29 10:33:53

互聯(lián)網(wǎng)

2018-06-19 11:00:27

服務(wù)器性能數(shù)據(jù)

2015-03-23 10:20:04

程序員精英程序員程序員忠告

2018-03-22 19:03:34

2013-02-26 09:42:14

奧斯卡小金人微軟

2016-02-19 11:51:47

Windows 10RedStoneBuild 14267
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)