非常有趣的Python的用法彙總

2021-09-25 06:26:59 字數 3352 閱讀 4811

使用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的差別,他們邏輯類似,但是實現的功能是不可以相互替代的

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

4.管道操作

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

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

另外,就是一些基礎的

map reduce filter
閱讀優秀的**也是提高程式設計水平的好方法

非常有趣的Python的用法彙總!

python資源共享群 484031800 使用python過程中經常會不經意間遇到非常有趣的用法,於是特意蒐集了一些 有趣的用法 1.for else用法 迴圈正常結束則執行else語句。一般用於迴圈找符合條件的元素,如果找到則 break 調出迴圈,不會觸發 else 如果沒有找到 完整執行迴圈...

非常有趣的遞迴問題(最近面試問到的)

古典問題 第三個月起每個月都生一對兔子,小兔子長到第三個月後每個月又生一對兔子,假如兔子都不死,問每個月的兔子總數為多少?意味著生長期為2 這裡我採用兩種結題思路第一種不考慮遞迴,採用字面解釋進行基於類物件的做法 class rabbit public void setname string nam...

Python 之非常有用的random 模組

import random print random.random 0 1之間的隨機小數print random.uniform 1,9 1 9之間的隨機小數print random.randint 1,9 1 9之間的隨機整數 包含1,9 print random.choice 1,2,3,4,5...