海象賦值表達(dá)式減少重復(fù)變量-創(chuàng)新互聯(lián)

海象賦值表達(dá)式減少重復(fù)變量 1.概述

在寫代碼過程中,定義局部變量操作頻率非常高。如果在一個函數(shù)中定義了太多的變量會讓程序不易維護(hù)且閱讀起來困難。
當(dāng)我們在函數(shù)里面要定義變量時,而且這個變量要在函數(shù)里重復(fù)使用那么可以考慮使用海象賦值表達(dá)式減少創(chuàng)建變量。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了靜樂免費建站歡迎大家使用!2.海象表達(dá)式介紹

賦值表達(dá)式是python3.8新引入的語法,他會用到海象操作符。這種寫法可以解決某些代碼重復(fù)的問題。a=b是一條普通的賦值語句,讀作a equals b;而a:=b則是賦值表達(dá)式,讀作a walrus b。這個符號為什么叫walrus?因為把:=順時針旋轉(zhuǎn)90度后,冒號就像是海象的一雙眼睛,等號就是他的一對獠牙。

這種表達(dá)式很有用,可以在普通的賦值語句無法應(yīng)用的場合實現(xiàn)賦值,例如用在if語句里面。賦值表達(dá)式的值,就是賦給海象操作符左側(cè)那個標(biāo)識符的值。

2.1.海象表達(dá)式應(yīng)用場景

當(dāng)我們需要定義一個局部變量時候,這個變量會被重復(fù)使用,這樣的場景可以考慮使用海象賦值表達(dá)式能夠讓代碼更緊湊,易讀宜維護(hù)。

1.用一個例子引出海象賦值表達(dá)式

我們先來看一個簡單的制作果汁的例子,當(dāng)顧客購買檸檬汁之前,先判斷有沒有足夠的檸檬可以榨汁。

# 水果的數(shù)量放在字典中
fresh_fruit = {'apple': 10,
    'banana': 8,
    'lemon': 5,
}

# 制作檸檬汁
def make_lemonade(count):
    print(f'Making {count} lemons into lemonade')

# 商店庫存不足
def out_of_stock():
    print('Out of stock!')

# 獲取檸檬的數(shù)量
count = fresh_fruit.get('lemon', 0)
# 如果檸檬不為0則制作檸檬汁
if count:
    make_lemonade(count)
else:
    out_of_stock()

這段代碼看上去非常的簡單,但它不是好的代碼,結(jié)構(gòu)松散,因為count變量雖然定義在了if語句機(jī)構(gòu)上面,但是只有if語句才會用到它,else塊更本不需要使用這個變量。所以這種寫法會讓人誤以為count是個很重要的變量,if和else都要用到它,然而實際上并非如此。

我們的python開發(fā)過程中經(jīng)常需要先獲取某個值,然后對她做判斷,在執(zhí)行具體的邏輯。對于這種用法,我們需要先定義一個變量接收這個值,然后再操作這個變量,這樣的代碼總會創(chuàng)造出一些多余的變量。python引入賦值表達(dá)式就是為了解決這樣的問題。

2.海象賦值表達(dá)式優(yōu)化代碼結(jié)構(gòu)

優(yōu)化后的代碼雖然只省略了一行代碼,但讀起來結(jié)構(gòu)卻清晰很多,這種寫法明確體現(xiàn)出count變量只與if語句有關(guān)。
這個賦值表達(dá)式先把:=右邊的賦值給左邊的count變量,然后對自身求值。由于該語句緊跟著if語句,因此會判斷它的值決定是否進(jìn)入if語句體。這種操作就是海象賦值表達(dá)式要表達(dá)的意思。

# 使用海象賦值表達(dá)式省去了定義count賦值語句。
if count := fresh_fruit.get('lemon', 0):
	# 在if語句中可以使用海象表達(dá)式創(chuàng)建的變量
    make_lemonade(count)
else:
    out_of_stock()
3.海象賦值表達(dá)式增加運算規(guī)則

上面的檸檬只需要一個就可以制作檸檬汁,如果客人點了蘋果汁,需要由4個蘋果才能制作。下面在程序中新增制作蘋果汁邏輯。

if (count := fresh_fruit.get('apple', 0)) >= 4:
    make_cider(count)
else:
    out_of_stock()

這次需要注意賦值表達(dá)式放在了一對括號里面,為什么那?因為我們要在if語句里面把這個表達(dá)式的結(jié)果和4做比較。剛才檸檬汁的例子沒有加括號,因為那時僅憑賦值表達(dá)式的值就能決定if/else的走向。

4.嵌套if/else語句中使用海象操作符優(yōu)化代碼結(jié)構(gòu)

當(dāng)判斷的條件多了之后,那么最常見的寫法就是使用if/else嵌套語句實現(xiàn)復(fù)雜的功能。但是隨著嵌套的層級變多后,定義的變量語句也會變多,代碼結(jié)構(gòu)會比較混亂。因此我們可以使用海象賦值表達(dá)式來優(yōu)化。

假如現(xiàn)在我們做一個自動制作果汁流程,首先判斷香蕉汁是否能做,如果不能就做蘋果汁,還不行就做檸檬汁。先來看下常規(guī)的if/else寫法

# 獲取香蕉數(shù)量,如果大于2則制作香蕉汁
count = fresh_fruit.get('banana', 0)
if count >= 2:
    pieces = slice_bananas(count)
    to_enjoy = make_smoothies(pieces)
else:
	# 不滿足香蕉汁就只做蘋果汁
    count = fresh_fruit.get('apple', 0)
    if count >= 4:
        to_enjoy = make_cider(count)
    # 如果上面的都不滿足就制作檸檬汁
    else:
        count = fresh_fruit.get('lemon', 0)
        if count:
            to_enjoy = make_lemonade(count)
        else:
            to_enjoy = 'Nothing'

下面使用海象操作符優(yōu)化上面的代碼

if (count := fresh_fruit.get('banana', 0)) >= 2:
    pieces = slice_bananas(count)
    to_enjoy = make_smoothies(pieces)
elif (count := fresh_fruit.get('apple', 0)) >= 4:
    to_enjoy = make_cider(count)
elif count := fresh_fruit.get('lemon', 0):
    to_enjoy = make_lemonade(count)
else:
    to_enjoy = 'Nothing'

優(yōu)化后的代碼比原來的少了5行,但是看起來結(jié)構(gòu)卻清晰的多,因為嵌套深度與縮進(jìn)層次數(shù)都變少了。
只要碰到剛才難看的結(jié)構(gòu),就可以考慮使用海象操作符優(yōu)化。

5.while循環(huán)中使用海象操作符

假如現(xiàn)在將所有的水果做成果汁放到瓶子里面,那么遍歷查看所有的水果并將他們?nèi)恐谱鞒晒?/p>

下面的是常規(guī)的寫法,這種寫法必須把fresh_fruit = pick_fruit()語句寫兩次,第一次是在while循環(huán)之前,因為我們要給fresh_fruit設(shè)定初始值,第二次是在while循環(huán)體的末尾,因為我們得把下一輪需要處理的水果列表填充到fresh_fruit里面

FRUIT_TO_PICK = [
    {'apple': 1, 'banana': 3},
    {'lemon': 2, 'lime': 5},
    {'orange': 3, 'melon': 2},
]

# 選擇水果
def pick_fruit():
    if FRUIT_TO_PICK:
        return FRUIT_TO_PICK.pop(0)
    else:
        return []

# 制作果汁
def make_juice(fruit, count):
    return [(fruit, count)]

bottles = []
# 運行while前,調(diào)用pick_fruit()函數(shù)獲取水果
fresh_fruit = pick_fruit()
# 遍歷水果對象,水果名稱:數(shù)量
while fresh_fruit:
    for fruit, count in fresh_fruit.items():
        batch = make_juice(fruit, count)
        bottles.extend(batch)
    # 運行while過程中,再次調(diào)用pick_fruit()函數(shù)獲取水果
    fresh_fruit = pick_fruit()

print(f'制作好的果汁:{bottles}')

使用海象操作符可以優(yōu)化后的代碼,while每次循環(huán)前都會獲取新的水果,如果有水果則開始循環(huán),沒有則停止循環(huán),實現(xiàn)了do-while循環(huán)模式。

FRUIT_TO_PICK = [
    {'apple': 1, 'banana': 3},
    {'lemon': 2, 'lime': 5},
    {'orange': 3, 'melon': 2},
]

bottles = []
while fresh_fruit := pick_fruit():
    for fruit, count in fresh_fruit.items():
        batch = make_juice(fruit, count)
        bottles.extend(batch)

print(bottles)

你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機(jī)房具備T級流量清洗系統(tǒng)配攻擊溯源,準(zhǔn)確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧

網(wǎng)站標(biāo)題:海象賦值表達(dá)式減少重復(fù)變量-創(chuàng)新互聯(lián)
文章起源:http://bm7419.com/article32/dioipc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供網(wǎng)站內(nèi)鏈、Google、網(wǎng)站建設(shè)虛擬主機(jī)、網(wǎng)站排名、移動網(wǎng)站建設(shè)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)