基于条件的Python点语法函数

0le*_*leg 4 python

在python中是否可以根据条件调用dot-syntax-function.转向的简单示例:

if condition:
  foo().bar().baz()
  lots_of_code()
else:
  foo().baz()
  lots_of_code()

def lots_of_code():
  # lots of code
Run Code Online (Sandbox Code Playgroud)

成:

foo().(if condition: bar()).baz()
# lots of code only once
Run Code Online (Sandbox Code Playgroud)

vau*_*tah 5

不,这是不可能的.

属性引用的语法是

attributeref ::=  primary "." identifier
Run Code Online (Sandbox Code Playgroud)

引用文档,

属性引用是主要的,后跟句点和名称

name必须是常规Python标识符,标识符不能包含特殊字符(.

但是,您可以使用简单的条件表达式来选择主要:

(foo().bar() if condition else foo()).baz()
Run Code Online (Sandbox Code Playgroud)

它相当于

if condition:
    primary = foo().bar()
else:
    primary = foo()

primary.baz()
Run Code Online (Sandbox Code Playgroud)

请注意,在这种情况下,我们必须使用括号,因为属性引用的优先级高于条件表达式.