說,當更簡明的語法變量賦值,我有以下Python代碼的Python:訪問NoneType對象
if obj is None:
identifier = None
else:
identifier = obj.id
其中obj
是一個Python對象的類定義中不包括
我勉強記得有一個更簡潔的語法(如單行代碼?),可以實現相同。如果我不是在做夢,有人可以請告知這個簡單的語法可能是什麼?謝謝。
說,當更簡明的語法變量賦值,我有以下Python代碼的Python:訪問NoneType對象
if obj is None:
identifier = None
else:
identifier = obj.id
其中obj
是一個Python對象的類定義中不包括
我勉強記得有一個更簡潔的語法(如單行代碼?),可以實現相同。如果我不是在做夢,有人可以請告知這個簡單的語法可能是什麼?謝謝。
identifier = getattr(obj, "id", None)
請注意,當'obj'上不存在這樣的屬性時,這將使用'None',而不僅僅是當'obj是None'時。 – delnan
@delnan - 謝謝,您的評論讓我意識到我實際上誤讀了這個問題。 Tom Zych的回答對於OP的要求是正確的。 –
@ F.J - 這仍然是一個很好的技術提示。謝謝。 – tamakisquare
如果使用沒有條件表達式的老Python版本,你可以藉助布爾表達式的計算語義:布爾表達式的值是在表達這個詞的這就決定了價值的最終價值。這聽起來很抽象,但在你的情況,你可以說:
((obj is None and [None]) or [obj.id])[0]
如果obj
是None
你有
((True and [None]) or [obj.id])[0]
這是
([None] or [obj.id])[0]
由於[None]
表示True
值,可以使用任何表達式編輯or
而不更改的值0表達式的結果是[None][0]
這是None
如果obj
不是None
你有
((False and [None]) or [obj.id])[0]
這是
(False or [obj.id])[0]
= ([obj.id])[0]
= obj.id
這是怎麼了模擬三元運算符又名「條件,如果表達「如果以前。
的一般模式是a if b else c
相同
(b and [a] or [c])[0]
沒有運氣搜索或教程? –
一般的問題很好,但我不確定我會如何尋找這個,是嗎? –
@ S.Lott - 我試圖尋找答案,但沒有運氣。這就是爲什麼我發佈這個問題。 – tamakisquare