天天看點

Python最重要的5大功能,​要是能早點了解就好了!

雲栖号: https://yqh.aliyun.com 第一手的上雲資訊,不同行業精選的上雲企業案例庫,基于衆多成功案例萃取而成的最佳實踐,助力您上雲決策!
Python最重要的5大功能,​要是能早點了解就好了!

Python作為近幾年超級熱門的新興程式設計語言,其語言功能十分強大的特點,大家有目共睹,想必不用贅述。

Python功能衆多,小芯曾用Python的互動式地圖和區塊鍊等功能建立了許許多多的應用程式,令人振奮。

但也正因其功能繁多,初學者一開始是很難掌握所有功能的。

即使你是一名從其他語言(比如C語言或MATLAB語言)轉換過來的程式員,用更加抽象的Python編寫代碼對你來說也絕對是一次不同的體驗。

Python最重要的5大功能,​要是能早點了解就好了!

但功能雖多,總有主次之分。

為了友善大家早點了解Python的一些大功能,小芯特别整理出了其中5大最重要的功能。

1.生成器——記憶體效率

打算計算大量的結果,但同時又想避免同時配置設定所有結果所需記憶體,這時候會使用生成器。換句話說,它們即時生成值,但不會将先前生成的值存儲在記憶體中,是以隻需要将其疊代一次。

生成器常用于讀取大型檔案或使用關鍵字yield生成無窮序列。在大多數資料科學項目中,筆者發現它頗有用處。

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

python-generator hosted with ❤ by GitHub

2.虛拟環境——隔離

若讀完本文,隻能記住其中一條,那應該是虛拟環境的使用。

Python最重要的5大功能,​要是能早點了解就好了!

Python的應用程式經常使用很多不同的軟體包,而這些軟體包由具有複雜依賴關系的開發人員開發。不同的應用程式由一種特定的庫設定開發出來,其結果無法由其他版本的庫複制。沒有一種安裝程式可以滿足所有應用程式的要求。

conda create -n venv pippython=3.7  # select python version
source activate venv
...
source deactivate           

是以,為每個應用程式建立單獨的虛拟環境venv至關重要,可以用 pip或conda完成。

3.清單推導——緊緻碼

很多人認為lambda、map和filter是每個初學者都應該學習的函數。雖然筆者認為這些函數值得關注,但是由于它們缺乏靈活性,大多時候不是特别有用。

Lambda是将一次性使用的函數生成為一行的方法。若函數被多次調用,性能就會降低。另一方面,map将一種函數應用于清單中的所有元素,而filter則會擷取集合中滿足使用者定義條件的元素子集。

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

python-lambda hosted with ❤ by GitHub

清單推導是一種簡潔靈活的方法,可從其他具有靈活表達式和條件的清單中建立新清單。它由一個帶有表達式或函數的方括号構成,隻有當元素滿足特定條件時,才能應用于清單中的每個元素。它也可以通過嵌套來處理嵌套清單,這比用map和filter要靈活得多。

# Syntax of list comprehension
[ expression(x) for x in aList if optional_condition(x)]           
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]
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 hosted with ❤ by GitHub

4.清單操作——循環清單

Python允許在aList[-1]== aList[len(aList)-1]中出現負索引。是以,可以通過調用aList[-2]等其他元素來擷取清單中的倒數第二個元素。

還可以用aList[start:end:step]文法對清單進行切片,該文法包括起始元素,但不包括終止元素。是以,調用aList[2:5]會得到[2, 3, 4]。也可以通過調用aList[::-1]來反轉清單,筆者發現這種技巧非常簡潔。

Python最重要的5大功能,​要是能早點了解就好了!

清單也可以解壓縮為單獨的元素,或者解壓縮為元素和子清單,兩者混在一起,用星号标出。

a, b, c,  d = aList[0:4]
print(f'a  = {a}, b = {b}, c = {c}, d = {d}')
# a = 0,  b = 1, c = 2, d = 3
a, *b,  c, d = aList
print(f'a  = {a}, b = {b}, c = {c}, d = {d}')
# a = 0,  b = [1, 2, 3, 4, 5, 6, 7], c = 8, d = 9           

python-unpacking hosted with ❤ by GitHub

5.壓縮(Zipping)和列舉(enumerate) ——for循環

壓縮 (Zip)函數建立了一種疊代程式,該程式可聚合來自多個清單的元素。它允許在for循環中并行周遊清單并進行并行分類。用星号即可将其解壓縮。

numList  = [0, 1, 2]
engList  = ['zero', 'one', 'two']
espList  = ['cero', 'uno', 'dos']
print(list(zip(numList,  engList, espList)))
# [(0,  'zero', 'cero'), (1, 'one', 'uno'), (2, 'two', 'dos')]
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 hosted with ❤ by GitHub

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

乍一看,列舉(Enumerate) 可能有點吓人,但是後來就會發現,在很多情況下使用列舉都很友善。它是一種經常用于for循環的自動計數器,是以無需在counter = 0 和counter += 1的情況下建立并初始化變量計數器。列舉(enumerate) 和壓縮(zip)是建立for循環時會用到的兩種功能最強大的工具。

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 hosted with ❤ by GitHub

Python最重要的5大功能,​要是能早點了解就好了!

當然,除了這5種功能,Python還有許許多多其他好用的功能,歡迎大家給小芯留言自己最感興趣的功能。根據大家的留言,小芯會在下次Python文章中繼續為大家介紹更多大家感興趣的功能~

原文釋出時間:2020-01-13

本文作者:

本文來自阿裡雲雲栖号合作夥伴“

讀芯術

”,了解相關資訊可以關注“