基于条件的Python点语法函数

时间:2015-11-11 12:03:15

标签: 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

成:

foo().(if condition: bar()).baz()
# lots of code only once

2 个答案:

答案 0 :(得分:5)

不,这是不可能的。

属性引用的语法是

attributeref ::=  primary "." identifier

引用documentation

  

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

名称必须为a regular Python identifier,且标识符不能包含(等特殊字符。

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

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

它相当于

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

primary.baz()

请注意,在这种情况下,我们必须使用括号,因为属性引用具有higher precedence而不是条件表达式。

答案 1 :(得分:1)

由于在任何一种情况下都会调用foo(),因此请无条件地执行此操作。将该对象保存到f,目的是调用f.baz()。不过,在此之前,请检查您的情况,看看f是否真的应该是foo().bar()的结果。

f = foo()
if condition:
    f = f.bar()
f.baz()