Python 中的條件賦值運算子

Bhuwan Bhatt 2023年1月30日
  1. 在 Ruby 中||= 運算子的含義
  2. 在 Python 中使用 try...except 語句實現 Ruby 的 ||= 條件賦值運算子
  3. 在 Python 中使用 localglobal 變數實現 Ruby 的 ||= 條件賦值運算子
Python 中的條件賦值運算子

Python 中沒有任何與 Ruby 的 ||= 操作符完全相同的內容。但是,我們可以使用 try...except 方法以及區域性和全域性變數的概念來模擬 Python 中 Ruby 的條件賦值運算子 ||=

在 Ruby 中||= 運算子的含義

x ||= y

該運算子的基本含義是,如果變數 x 未定義或為 falsy 值,則將變數 y 的值分配給變數 x,否則不執行任何賦值操作。

但是這個運算子比其他更簡單的條件運算子(如 +=-=)複雜和混亂得多,因為每當遇到任何未定義的變數時,控制檯都會丟擲 NameError

a+=b 計算結果為 a=a+b

a||=b 看起來像 a=a||b,但實際上表現為 a||a=b

在 Python 中使用 try...except 語句實現 Ruby 的 ||= 條件賦值運算子

我們使用 try...except 來捕捉和處理錯誤。每當 try except 塊執行時,首先會執行 try 塊內的程式碼。如果 try 塊中的程式碼塊成功執行,則忽略 except 塊;否則,將執行 except 塊程式碼,並處理錯誤。Ruby 的 ||= 運算子可以在 Python 的 try-catch 方法中大致翻譯為:

try:
    x
except NameError:
    x = 10

在這裡,如果定義了變數 xtry 塊將順利執行,沒有 NameError 異常。因此,不執行賦值操作。如果 x 未定義,try 塊將生成 NameError,然後執行 except 塊,並將變數 x 分配給 10

在 Python 中使用 localglobal 變數實現 Ruby 的 ||= 條件賦值運算子

區域性變數的範圍被限制在特定的程式碼範圍內,而全域性變數的範圍被定義在整個程式碼空間中。

特定範圍內的所有區域性變數都可用作該特定範圍內 locals 字典的鍵。所有全域性變數都儲存為 globals 字典的鍵。我們可以在需要時使用 localsglobals 字典訪問這些變數。

我們可以檢查一個變數是否存在於任何字典中,並且只有當它不存在時才設定它的值,以在 Python 中轉換 Ruby 的 ||= 條件賦值運算子。

if x in locals().keys():
    locals().get(x)
elif x in globals().keys():
    globals().get(x)
else:
    x = 10

這裡,如果變數 x 存在於全域性或區域性範圍內,我們不執行任何賦值操作;否則,我們將 x 的值分配給 10。它類似於 Ruby 中的 x||=10

相關文章 - Python Operator