我和我的同事一直在谈论他在请求请求中编写的一些代码。它涉及在条件语句的每个分支内定义一个函数。
原版的: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()
我更喜欢这个版本,但是我不能清楚地说出为什么我更喜欢这个版本。
是不是有任何实际的原因,还是只是“选择一个”情况?
答案 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)