Python 海象運算子 的三種用法

2021-10-01 04:14:26 字數 2737 閱讀 2469

隨著python 3.8的發布,賦值表示式運算子(也稱為海象運算子)也發布了。

運算子使值的賦值可以傳遞到表示式中。 這通常會使語句數減少乙個。 例如:

my_list =[1

,2,3

]count =

len(my_list)

if count >3:

print

(f"error, is too many items"

)# 當轉換為海象運算子時...

if(count :

=len

(my_list)

)>3:

print

(f"error, is too many items"

)

如果您快速瀏覽了一下,就會理解對這個新操作的擔憂。 似乎將兩個簡單的語句混為一談,以使收益最小。

假設對於為什麼引入此運算子有合理答案?那麼讓人很自然的想到,它在現實世界中如何有用?

我發現了我將要繼續採用海象運算子的三個方面,且每個方面除了能省一行**之外都還能帶來其他好處。

雖然迴圈似乎是最常見的使用海象運算子的情況。 在此處使用海象運算子的好處是可以在while語句中合併表示式和修飾符。 我已經寫過無數次無限迴圈了,因為我總是忘記在迴圈末尾寫修改語句。

line = f.readline(

)while line:

print

(line)

line = f.readline(

)# 轉換為海象運算子時

while line :

= f.readline():

print

(line)

不過要注意, 使用海象運算子更適合用於傳統的do/while 迴圈,因為賦值在迴圈表示式之前。 請參見下面的差異:

n =

0while n <3:

print

(n)# 0,1,2

n +=

1# 當轉換為海象運算子時

w =0

while

(w :

= w +1)

<3:

print

(w)# 1,2

根據我有限的經驗,我發現它在替換無限while迴圈中最有用:

while

true

: p =

input

("enter the password: "

)if p ==

"the password"

:break

# 當轉換為海象運算子時

while

(p :

=input

("enter the password: "))

!="the password"

:continue

能夠將while迴圈轉換為乙個語句實在太棒啦。

我發現海象運算子對優化某些列表理解語句很有幫助。 有兩個標準1)需要過濾資料,2)儲存taxing function的結果。讓我們看一下傳統的列表理解語句:

scores =[22

,54,75

,89]valid_scores =

[ longfunction(n)

for n in scores

if longfunction(n)

]

注意條件語句longfunction(n)了嗎? 注意longfunction()被呼叫了兩次嗎? 這是海象運算子的候選。

scores =[22

,54,75

,89]valid_scores =

[ result for n in scores

result :

= longfunction(n)

]

在優化了的**中,longfunction()僅被呼叫一次,隱含的降低了呼叫次數。

接下來是我認為海象運算子的最有用的實現。 我經常使用稱為iformbuilder的移動資料收集軟體。 具體來說,請求記錄(資料行)後,查詢返回資料時,需要對其進行處理。 這是我每天編寫的**塊:

# 尋找失敗的檢查

# if there are failed inspections, assign to technicianrecords = api.readfailedrecords()

iflen

(records)

>0:

for record in records:

api.assigntotechnician(record)

if records :

= api.readfailedrecords():

for record in records:

api.assigntotechnician(record)

就可讀性而言,此重構的破壞性最小,實際上,我發現在這種情況下,海象運算子更易於閱讀。 與前兩個示例形成鮮明對比的是,前兩個示例對可讀性的影響較小,有利於省心和提高效能。

海象運算子很新穎並且有爭議,但是只有時間會見證它逐漸被大家接收。 你是否已開始在**中使用它了呢?

Python 海象運算子

海象運算子,可在表示式內部為變數賦值。python3.8 版本新增運算子。在這個示例中,賦值表示式可以避免呼叫 len 兩次,從而提高了執行速度 if n len a 10 print f list is too long elements,expected 10 假如在沒有海象運算子的時候,我們會...

Python開發技巧之海象運算子的三種運用方式

目錄 python 版本發展非常快,如今最新的版本已經是 pyhton 3.9,即便如此,有很多人甚至還停留在 3.6 或者 3.7,連 3.8 還沒用上。很多 python 3.8 的特性還沒來得及了解,就已經成為舊知識了,比如今天要說的海象運算子。海象運算子是在 pep 572 被提出的,直到 ...

python運算子的三種用法

python 版本發展非常快,如今最新的版本已經是 python 3.9,即便如此,有很多人甚至還停留在 3.6 或者 3.7,連 3.8 還沒用上。很多 python 3.8 的特性還沒來得及了解,就已經成為舊知識了,比如今天要說的海象運算子。海象運算子是在 pep 572 被提出的,直到 3.8...