非常有趣的Python的用法彙總

程式設計師啟航發表於2019-07-15
非常有趣的Python的用法彙總

使用python過程中經常會不經意間遇到非常有趣的用法,於是特意蒐集了一些

有趣的用法

1.for-else用法

迴圈正常結束則執行else語句。一般用於迴圈找符合條件的元素,如果找到則 break 調出迴圈,不會觸發 else ;如果沒有找到(完整執行迴圈)則 print not found

《Effictive Python》一書中對for-else用法提出了質疑,主要觀點是可以通過封裝成函式來取代這一用法,而封裝成函式是更加通用易懂的做法,所以一般不會使用for-else用法。

2.try-else用法

如果沒有觸發異常就執行 else

3.解包用法

類似這樣 a,b,c = ['a', 'b', 'c']

4.單行if-else

a = 1
b = 3 
if a == 1 
else 2
print('it is one' if a == 1 else 'no')

5.迭代器傳入函式中不用加括號

# 一般是這樣
a = (i for i in range(10))
sum(a)
# 我們可以這樣
sum((i for i in range(10)))
# 但我們還可以這樣
sum(i for i in range(10))
# 類似的有
' '.join(str(i) for i in range(10))

7.or的用法

python中 x or y 表示如果x為真就是x的值,否則為y的值

我們會經常看到類似這樣的用法(比如函式的一個 value 引數沒有設定預設值,這樣使用就允許它不賦值)

value = value or {}
# 相當於
value = value if value else {}

8.and的用法

python中 x and y 表示如果x是假,結果就是x的值,否則就是y的值

x and y and z 多個and連線時,如果全是真結果就是最後一個的值;如果中間有假的值,結果就是第一個假的值

舉一個例子

def not_empty(a):
    return a and a.strip()
not_empty(' a ')
# 值為 'a'
not_empty(None)
# 不會報錯(如果 return a.strip() 就會報錯)
# 在處理None的問題上相當於
def not_empty(a):
    if a is None:
        return None
    else:
        return a.strip()

細細品味and和or的差別,他們邏輯類似,但是實現的功能是不可以相互替代的

  • or 是結果如果不滿意有個善後工作
  • and是要做一件事之前先檢驗一下,不能做就不讓它做

9.if value:

# 要用
if value:
# 不要用
if value == True:

這裡總結一下這種情況下什麼時候是 True ,什麼時候是 False

False:   0 0.0 '' [] {} () set() None False

True:

  • ' ' 'anything' [''] [0] (None, )
  • 沒有內容的可迭代物件

另外要注意一點,我們用 if 判斷一個物件是不是 None 的時候,要 if a is None 而不要直接 if a ,因為如果是後者,有非常多不是 None 的情況也會判定為 False ,比如空字串、空列表等,為了精確指定 None 還是要用前者,這也是一種規範。

10.下劃線的特殊使用

python中下劃線是一種特殊的變數和符號,有一些特殊的用途

11.文件字串

python有一種獨一無二的註釋方式,在包、模組、函式、類中第一句,使用 '''doc''' 這樣三引號註釋,就可以在物件中用 __doc__ 的方式提取

比較規範的寫法是這樣的(這裡參考 grequests 模組的寫法)

def myfun(a, b):
    '''add two numbers
    :param a: one number
    :param b: another number
    :returns: a number
    '''
    print(a + b)
print(myfun.__doc__)
# 結果為
add two numbers
    :param a: one number
    :param b: another number
    :returns: a number

其實引數還有其他的寫法,如 numpy 庫的寫法,可以看 這裡

除此之外,函式註釋還有另一種方式,函式名可以直接呼叫某個引數的註釋

有用的函式

1.sum的本質

本質: sum(iterable, start=0) 將可迭代物件使用 + 連線

所以 sum([[1,2],[3,4]], []) 返回結果為 [1, 2, 3, 4]

2.range(start, stop[, step])

可以直接用 for i in range(10, 0, -1) 降序迴圈

3.enumerate迴圈索引

for index, item in enumerate(['a', 'b', 'c']):
    print(index, item)
輸出:
0 a
1 b
2 c

4.管道操作

func1(func2(func3(a)))寫成類似a %>% func3 %>% func2 %>% func1,清晰展示函式執行的順序,增強可讀性

python本身不帶有這樣的用法,只是一些庫提供了這樣的用法,比如pandas和syntax_sugar

其他

另外,就是一些基礎的

  • 列表推導式
  • 裝飾器
  • 生成器
  • map reduce filter
  • 鏈式比較
  • 類的魔術方法

閱讀優秀的程式碼也是提高程式設計水平的好方法

大家在學python的時候肯定會遇到很多難題,以及對於新技術的追求,這裡推薦一下我們的Python學習扣qun:784758214,這裡是python學習者聚集地!!同時,自己是一名高階python開發工程師,從基礎的python指令碼到web開發、爬蟲、django、資料探勘等,零基礎到專案實戰的資料都有整理。送給每一位python的小夥伴!每日分享一些學習的方法。和需要注意的小細節

點選: python技術分享交流


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/69913713/viewspace-2650586/,如需轉載,請註明出處,否則將追究法律責任。

相關文章