Python 中的條件賦值運算子
-
在 Ruby 中
||=
運算子的含義 -
在 Python 中使用
try...except
語句實現 Ruby 的||=
條件賦值運算子 -
在 Python 中使用
local
和global
變數實現 Ruby 的||=
條件賦值運算子
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
在這裡,如果定義了變數 x
,try
塊將順利執行,沒有 NameError
異常。因此,不執行賦值操作。如果 x
未定義,try
塊將生成 NameError
,然後執行 except
塊,並將變數 x
分配給 10
。
在 Python 中使用 local
和 global
變數實現 Ruby 的 ||=
條件賦值運算子
區域性變數的範圍被限制在特定的程式碼範圍內,而全域性變數的範圍被定義在整個程式碼空間中。
特定範圍內的所有區域性變數都可用作該特定範圍內 locals
字典的鍵。所有全域性變數都儲存為 globals
字典的鍵。我們可以在需要時使用 locals
和 globals
字典訪問這些變數。
我們可以檢查一個變數是否存在於任何字典中,並且只有當它不存在時才設定它的值,以在 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
。