条件函数定义最佳实践

时间:2019-01-16 17:26:15

标签: python

我和我的同事一直在谈论他在请求请求中编写的一些代码。它涉及在条件语句的每个分支内定义一个函数。

原版的:
if is_something:     # constant, but unknown until runtime
    def do_thing():
        return 'x'
else:
    def do_thing():
        return 'y'

while True:
    # other code here
    foo = do_thing()

我的第一个想法是将条件转换为函数定义并像这样使用它,但这确实意味着对每个循环都不必要地评估了条件。 我的第二个想法是定义两个不同的函数(具有不同的名称),然后在有条件的情况下将正确的函数分配给变量,该变量随后在循环中调用。

选项2:
def thing_x():
    return 'x'

def thing_y():
    return 'y'

if is_something:     # constant, but unknown until runtime
    thing_func = thing_x
else:
    thing_func = thing_y

while True:
    # other code here
    foo = thing_func()

我更喜欢这个版本,但是我不能清楚地说出为什么我更喜欢这个版本。

是不是有任何实际的原因,还是只是“选择一个”情况?

3 个答案:

答案 0 :(得分:0)

我会选择选项2。在if语句中定义函数是组织代码的一种糟糕方法。如果将所有功能组合在一起,将更易于阅读和维护。假装您已经离开公司,并且其他人正在尝试更新您的代码。您希望它具有尽可能高的可读性。

我知道这只是您的示例片段,但我也想指出,具有“ while True”条件也是一个坏主意,因为它可能会造成无限循环。

答案 1 :(得分:0)

选项2更合理。我们定义函数,以便我们可以调用它们并在需要时使用它们,而不必一次又一次地重写代码。我不明白为什么您需要在条件内编写函数。假设do_thing()是相同的函数: 原始代码可以写为:

def do_thing():
    return 'x'
if is_something:
     do_thing()
else:
    do_thing()
while True:
    # other code here
    foo = do_thing()

答案 2 :(得分:0)

看来您可以执行以下操作,然后如果is_something切换,代码甚至可以工作:

def do_thing(is_something):
    if is_something:
        # Some code
    else:
        # Other code

while True:
    do_thing(is_something)