【Python】if 后怎么就可以跟對象?變量交換寫法是語法糖嗎?


1、萬物皆可布爾

一般語言中的 if 語句語法是這樣的:

if (條件表達式)
{
    執行語句
}

而在 Python 中,if 后面不僅可以是條件表達式,還可以是任意對象。例如:

my_list = [123]
if my_list:
    print(my_list)

在 Python 中,False、None、數值 0、空序列、空映射都被視為 [假],其他各種值被視為 [真]。

那么,這是如何實現的呢?背后的原理是什么呢?

為了判定一個對象 x 為 [真] 還是 [假],Python 會調用 bool(x) 函數。該函數背后調用的是魔法方法 __bool__,如果不存在 __bool__ 方法,bool(x) 會嘗試調用 __len__ 方法。若返回 0,則 bool(x)​ 返回 False,否則返回 True

而默認情況下,我們自定義的類的實例總被認為是 [真]。

寫個例子驗證一下。

class MyClass:
    def __bool__(self):
        return False


my_class = MyClass()

if my_class:
    print('真')
else:
    print('假')

輸出:


就是說:當對象用於任何需要表示為布爾值的時候,Python 會調用 bool(x) 方法,而我們可以通過重寫 __bool__ 方法或 __len__ 方法改變默認的判斷。

2、變量是如何交換的

Python 中交換兩個變量非常簡單:

b, a = a, b

為什么可以這樣寫,是語法糖嗎?誠然不是,這是元組拆包
不明白?寫成這樣是不是就明白了:

b, a = (a, b)

Python 解析器會自動將 a, b 視作元組,所以上面兩個寫法是等價的。不信?看下面的例子:

a = 1
b = 2
c = a, b
print(c)
print(type(c))

輸出:

(12)
<class 'tuple'>

所以 b, a = a, b 這種寫法利用的是元組拆包。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM