RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

?Python 3.8:海象運(yùn)算符的三種用法

科技綠洲 ? 來(lái)源:Python實(shí)用寶典 ? 作者:Python實(shí)用寶典 ? 2023-10-21 11:07 ? 次閱讀

Python 版本發(fā)展非??欤缃?a href="http://hljzzgx.com/article/zt/" target="_blank">最新的版本已經(jīng)是 Pyhton 3.9,即便如此,有很多人甚至還停留在 3.6 或者 3.7,連 3.8 還沒(méi)用上。

很多 Python 3.8 的特性還沒(méi)來(lái)得及了解,就已經(jīng)成為舊知識(shí)了,比如今天要說(shuō)的海象運(yùn)算符。

海象運(yùn)算符是在 PEP 572 被提出的,直到 3.8 版本合入發(fā)布。

它的英文原名叫 Assignment Expressions,翻譯過(guò)來(lái)也就是 賦值表達(dá)式,不過(guò)現(xiàn)在大家更普遍地稱之為海象運(yùn)算符,就是因?yàn)樗L(zhǎng)得真的太像海象了。

1. 第一個(gè)用法:if/else

可能有朋友是第一次接觸這個(gè)新特性,所以還是簡(jiǎn)單的介紹一下這個(gè)海象運(yùn)算符有什么用?

在 Golang 中的條件語(yǔ)句可以直接在 if 中運(yùn)算變量的獲取后直接對(duì)這個(gè)變量進(jìn)行判斷,可以讓你少寫一行代碼

import "fmt"

func main() {
    if age := 20;age > 18 {
        fmt.Println("已經(jīng)成年了")
    }
}

若在 Python 3.8 之前,Python 必須得這樣子寫

age = 20
if age > 18:
    print("已經(jīng)成年了")

但有了海象運(yùn)算符之后,你可以和 Golang 一樣(如果你沒(méi)學(xué)過(guò) Golang,那這里要注意,Golang 中的 := 叫短變量聲明,意思是聲明并初始化,它和 Python 中的 := 不是一個(gè)概念)

if (age:= 20) > 18:
    print("已經(jīng)成年了")

2. 第二個(gè)用法:while

在不使用 海象運(yùn)算符之前,使用 while 循環(huán)來(lái)讀取文件的時(shí)候,你也許會(huì)這么寫

file = open("demo.txt", "r")
while True:
    line = file.readline()
    if not line:
        break
    print(line.strip())

但有了海象運(yùn)算符之后,你可以這樣

file = open("demo.txt", "r")
while (line := file.readline()):
    print(line.strip())

使用它替換以往的無(wú)限 while 循環(huán)寫法更為驚艷

比如,實(shí)現(xiàn)一個(gè)需要命令行交互輸入密碼并檢驗(yàn)的代碼,你也許會(huì)這樣子寫

while True:
   p = input("Enter the password: ")
   if p == "youpassword":
      break

有了海象運(yùn)算符之后,這樣子寫更為舒服

while (p := input("Enter the password: ")) != "youpassword":
   continue

3. 第三個(gè)用法:推導(dǎo)式

這個(gè)系列的文章,幾乎每篇都能看到推導(dǎo)式的身影,這一篇依舊如此。

在編碼過(guò)程中,我很喜歡使用推導(dǎo)式,在簡(jiǎn)單的應(yīng)用場(chǎng)景下,它簡(jiǎn)潔且不失高效。

如下這段代碼中,我會(huì)使用列表推導(dǎo)式得出所有會(huì)員中過(guò)于肥胖的人的 bmi 指數(shù)

members = [
    {"name": "小五", "age": 23, "height": 1.75, "weight": 72},
    {"name": "小李", "age": 17, "height": 1.72, "weight": 63},
    {"name": "小陳", "age": 20, "height": 1.78, "weight": 82},
]

count = 0

def get_bmi(info):
    global count
    count += 1

    print(f"執(zhí)行了 {count} 次")

    height = info["height"]
    weight = info["weight"]

    return weight / (height**2)

# 查出所有會(huì)員中過(guò)于肥胖的人的 bmi 指數(shù)
fat_bmis = [get_bmi(m) for m in members if get_bmi(m) > 24]

print(fat_bmis)

輸出如下

執(zhí)行了 1 次
執(zhí)行了 2 次
執(zhí)行了 3 次
執(zhí)行了 4[25.88057063502083]

可以看到,會(huì)員數(shù)只有 3 個(gè),但是 get_bmi 函數(shù)卻執(zhí)行了 4 次,原因是在判斷時(shí)執(zhí)行了 3 次,而在構(gòu)造新的列表時(shí)又重復(fù)執(zhí)行了一遍。

如果所有會(huì)員都是過(guò)于肥胖的,那最終將執(zhí)行 6 次,這種在大量的數(shù)據(jù)下是比較浪費(fèi)性能的,因此對(duì)于這種結(jié)構(gòu),我通常會(huì)使用傳統(tǒng)的for 循環(huán) + if 判斷。

fat_bmis = []

# 查出所有會(huì)員中過(guò)于肥胖的人的 bmi 指數(shù)
for m in members:
    bmi = get_bmi(m)
    if bmi > 24:
        fat_bmis.append(bmi)

在有了海象運(yùn)算符之后,你就可以不用在這種場(chǎng)景下做出妥協(xié)。

# 查出所有會(huì)員中過(guò)于肥胖的人的 bmi 指數(shù)
fat_bmis = [bmi for m in members if (bmi := get_bmi(m)) > 24]

最終從輸出結(jié)果可以看出,只執(zhí)行了 3 次

執(zhí)行了 1 次
執(zhí)行了 2 次
執(zhí)行了 3[25.88057063502083]

這里僅介紹了列表推導(dǎo)式,但在字典推導(dǎo)式和集合推導(dǎo)式中同樣適用。不再演示。

海象運(yùn)算符,是一個(gè)新奇的特性,有不少人覺(jué)得這樣這種特性會(huì)破壞代碼的可讀性。確實(shí)在一個(gè)新鮮事物剛出來(lái)時(shí)是會(huì)這樣,但我相信經(jīng)過(guò)時(shí)間的沉淀后,越來(lái)越多的人使用它并享受它帶來(lái)的便利時(shí),這種爭(zhēng)議也會(huì)慢慢消失在歷史的長(zhǎng)河中。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 文件
    +關(guān)注

    關(guān)注

    1

    文章

    565

    瀏覽量

    24727
  • python
    +關(guān)注

    關(guān)注

    56

    文章

    4792

    瀏覽量

    84627
  • 運(yùn)算符
    +關(guān)注

    關(guān)注

    0

    文章

    172

    瀏覽量

    11079
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    C語(yǔ)言中位運(yùn)算符的高級(jí)用法(1)

    在上一篇文章中,我們介紹了&運(yùn)算符的基礎(chǔ)用法,本篇文章,我們將介紹& 運(yùn)算符的一些高級(jí)用法。
    發(fā)表于 08-22 10:44 ?322次閱讀
    C語(yǔ)言中位<b class='flag-5'>運(yùn)算符</b>的高級(jí)<b class='flag-5'>用法</b>(1)

    C語(yǔ)言中位運(yùn)算符的高級(jí)用法(2)

    在上一篇文章中,我們介紹了&運(yùn)算符的高級(jí)用法,本篇文章,我們將介紹| 運(yùn)算符的一些高級(jí)用法。
    發(fā)表于 08-22 10:45 ?325次閱讀
    C語(yǔ)言中位<b class='flag-5'>運(yùn)算符</b>的高級(jí)<b class='flag-5'>用法</b>(2)

    C語(yǔ)言中位運(yùn)算符的高級(jí)用法(3)

    在上一篇文章中,我們介紹了|運(yùn)算符的高級(jí)用法,本篇文章,我們將介紹^ 運(yùn)算符的一些高級(jí)用法
    發(fā)表于 08-22 10:47 ?254次閱讀
    C語(yǔ)言中位<b class='flag-5'>運(yùn)算符</b>的高級(jí)<b class='flag-5'>用法</b>(3)

    C語(yǔ)言中位運(yùn)算符的高級(jí)用法(4)

    在上一篇文章中,我們介紹了^運(yùn)算符的高級(jí)用法,本篇文章,我們將介紹~ 運(yùn)算符的一些高級(jí)用法
    發(fā)表于 08-22 10:48 ?223次閱讀
    C語(yǔ)言中位<b class='flag-5'>運(yùn)算符</b>的高級(jí)<b class='flag-5'>用法</b>(4)

    C語(yǔ)言中位運(yùn)算符的高級(jí)用法(5)

    在上一篇文章中,我們介紹了~運(yùn)算符的高級(jí)用法,本篇文章,我們將介紹
    發(fā)表于 08-22 10:49 ?338次閱讀
    C語(yǔ)言中位<b class='flag-5'>運(yùn)算符</b>的高級(jí)<b class='flag-5'>用法</b>(5)

    2.7 python運(yùn)算符

    2.7 python運(yùn)算符0. 什么是運(yùn)算符?本章節(jié)主要說(shuō)明Python運(yùn)算符。舉個(gè)簡(jiǎn)單的例子 4 +5 = 9 。 例子中,4和5被稱為
    發(fā)表于 02-21 16:43

    移位運(yùn)算符的應(yīng)用實(shí)例講解

    移位運(yùn)算符在程序設(shè)計(jì)中,是位操作運(yùn)算符的一。移位運(yùn)算符可以在二進(jìn)制的基礎(chǔ)上對(duì)數(shù)字進(jìn)行平移。按照平移的方向和填充數(shù)字的規(guī)則分為三種:(帶符號(hào)
    的頭像 發(fā)表于 11-19 07:04 ?3508次閱讀
    移位<b class='flag-5'>運(yùn)算符</b>的應(yīng)用實(shí)例講解

    干貨:大實(shí)例講解三種C++運(yùn)算符重載

    本章節(jié)主要講解是運(yùn)算符重載。運(yùn)算符重載是賦予運(yùn)算符能操作自定義類型的功能。C++運(yùn)算符重載主要分為以下類:
    的頭像 發(fā)表于 09-30 16:59 ?3440次閱讀
    干貨:<b class='flag-5'>三</b>大實(shí)例講解<b class='flag-5'>三種</b>C++<b class='flag-5'>運(yùn)算符</b>重載

    python運(yùn)算符是什么

    python運(yùn)算符 0. 什么是運(yùn)算符? 本章節(jié)主要說(shuō)明Python運(yùn)算符。舉個(gè)簡(jiǎn)單的例子 4 +5 = 9 。 例子中,4和5被稱為操作
    的頭像 發(fā)表于 02-21 16:44 ?2377次閱讀

    條件(元)運(yùn)算符

    RTL建模中廣泛使用的運(yùn)算符是條件運(yùn)算符,也稱為運(yùn)算符,該運(yùn)算符用于在兩個(gè)表達(dá)式之間進(jìn)行選擇——表5-2列出了用于表示條件
    的頭像 發(fā)表于 02-09 15:42 ?1357次閱讀
    條件(<b class='flag-5'>三</b>元)<b class='flag-5'>運(yùn)算符</b>

    c語(yǔ)言運(yùn)算符及例題

    C語(yǔ)言中邏輯運(yùn)算符包含邏輯與&&、邏輯或||、邏輯非!三種。其中邏輯與&&是雙目運(yùn)算符,即需要運(yùn)算符兩邊都要有表達(dá)式,且兩邊表達(dá)式都為真,此表達(dá)式才為真;邏輯||也是雙目
    發(fā)表于 02-16 16:14 ?0次下載

    Python運(yùn)算符介紹

    : print(“a《30”) if 4 《= a 《= 30: print(“1《=a《=10”) if 4 《= a a 《= 30”) 3. 位運(yùn)算符 按位運(yùn)算符是把數(shù)字看作二進(jìn)制來(lái)進(jìn)行計(jì)算的。Python中的按位
    的頭像 發(fā)表于 03-08 17:22 ?1111次閱讀

    python運(yùn)算符優(yōu)先級(jí)順序口訣

    Python是一非常流行的編程語(yǔ)言,具有廣泛的應(yīng)用領(lǐng)域。在Python中,運(yùn)算符是進(jìn)行各種數(shù)學(xué)和邏輯運(yùn)算的關(guān)鍵部分。了解
    的頭像 發(fā)表于 11-22 14:34 ?2532次閱讀

    python運(yùn)算符的優(yōu)先級(jí)大小

    Python運(yùn)算符的優(yōu)先級(jí)決定了表達(dá)式中各個(gè)運(yùn)算符的計(jì)算順序。了解運(yùn)算符的優(yōu)先級(jí)對(duì)于正確理解和編寫復(fù)雜的表達(dá)式非常重要。本文將詳細(xì)介紹Python
    的頭像 發(fā)表于 11-29 16:21 ?3386次閱讀

    邏輯異或運(yùn)算符Python中的用法

    Python編程語(yǔ)言中,邏輯異或運(yùn)算符并不直接作為一個(gè)內(nèi)置的操作存在,因?yàn)?b class='flag-5'>Python更側(cè)重于高級(jí)編程和可讀性,并沒(méi)有直接提供異或運(yùn)算符
    的頭像 發(fā)表于 11-19 09:46 ?165次閱讀
    RM新时代网站-首页