是否可以在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
答案 0 :(得分:5)
不,这是不可能的。
属性引用的语法是
attributeref ::= primary "." identifier
属性引用是主,后跟句点和名称
名称必须为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()