Syntax 嵌套if-else作为一行程序
如何编写以下嵌套的if-elseSyntax 嵌套if-else作为一行程序,syntax,python-3.x,Syntax,Python 3.x,如何编写以下嵌套的if-else if 'parent' in commit: if commit['parent'] == cid-1: parent = ' ' else: parent = commit['parent'] else: parent = '<no parent>' 如果提交中为“父级”:
if 'parent' in commit:
if commit['parent'] == cid-1:
parent = ' '
else:
parent = commit['parent']
else:
parent = '<no parent>'
如果提交中为“父级”:
如果提交['parent']==cid-1:
父项=“”
其他:
parent=commit['parent']
其他:
父项=“”
作为一个班轮?外部if-else可以写成
parent = commit['parent'] if 'parent' in commit else '<no parent>'
parent=commit['parent']如果commit else'中的'parent'为'
请描述如何对复杂表达式进行语法书写,一般来说,而不仅仅是在这种情况下。但是,请将此示例用作展示。是,如果将“内部”表达式与外部表达式结合,代码将作为一个行处理:
parent = (' ' if comment['parent'] == cid-1 else commit['parent']) if 'parent' in commit else '<no parent>'
因此,如果在commit
中找不到'parent'
,它将跳转到指令48并加载'
,而根本不查看commit['parent']
我不确定这行文字的可读性如何,我发现您的显式版本更容易理解。+1。谢谢是的,不干净,但我只是想知道。一个简单的if-else可以,more看起来很难理解summasummarum:将单个if-else对包装在
()
中。
>>> 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