是的,如果你與外結合「內部」表達你的代碼將作爲一個班輪:
parent = (' ' if comment['parent'] == cid-1 else commit['parent']) if 'parent' in commit else '<no parent>'
的外表達的if
先求;看到上面的「美」的編譯的字節代碼:
>>> import dis
>>> def foo():
... parent = (' ' if comment['parent'] == cid-1 else commit['parent']) if 'parent' in commit else '<no parent>'
...
>>> dis.dis(foo)
2 0 LOAD_CONST 1 ('parent')
3 LOAD_GLOBAL 0 (commit)
6 COMPARE_OP 6 (in)
9 POP_JUMP_IF_FALSE 48
12 LOAD_GLOBAL 1 (comment)
15 LOAD_CONST 1 ('parent')
18 BINARY_SUBSCR
19 LOAD_GLOBAL 2 (cid)
22 LOAD_CONST 2 (1)
25 BINARY_SUBTRACT
26 COMPARE_OP 2 (==)
29 POP_JUMP_IF_FALSE 38
32 LOAD_CONST 3 (' ')
35 JUMP_ABSOLUTE 51
>> 38 LOAD_GLOBAL 0 (commit)
41 LOAD_CONST 1 ('parent')
44 BINARY_SUBSCR
45 JUMP_FORWARD 3 (to 51)
>> 48 LOAD_CONST 4 ('<no parent>')
>> 51 STORE_FAST 0 (parent)
54 LOAD_CONST 0 (None)
57 RETURN_VALUE
所以,如果'parent'
是不commit
發現,它會跳轉到指令48和負載'<no parent>'
和commit['parent']
不看的。
不知道該行的可讀性如何,我發現你的顯式版本更容易理解。
+1。謝謝。是的,它不乾淨,但我只是想知道。一個簡單的if-else可以,更難以理解* Summa summarum:*在'()'中包裝單個if-else對。 – Flavius