Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 条件函数定义最佳实践_Python - Fatal编程技术网

Python 条件函数定义最佳实践

Python 条件函数定义最佳实践,python,Python,我的同事和我一直在谈论他在pull请求中编写的一些代码。它涉及在条件语句的每个分支中定义一个函数 原件: 我的第一个想法是将条件转换为函数定义,并像那样使用它,但这确实意味着对每个循环都不必要地计算条件。 我的第二个想法是定义两个不同的函数(使用不同的名称),然后在一个条件中将正确的函数分配给一个变量,然后在循环中调用该变量 备选案文2: 我更喜欢这个版本,但我无法解释为什么我更喜欢这个版本 有没有任何实际的原因来解释这两者,或者这只是一种“选择一个”的情况?我会选择选项2。在if语句中定义函数

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

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

备选案文2: 我更喜欢这个版本,但我无法解释为什么我更喜欢这个版本


有没有任何实际的原因来解释这两者,或者这只是一种“选择一个”的情况?

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


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

选项2更合理。我们定义函数,以便在必要时调用它们并使用,而无需反复重写代码。我不明白为什么你需要在一个条件下写一个函数。假设do_thing()是同一个函数: 原始代码可以写成:

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

您似乎可以执行以下操作,如果
是某个东西,那么代码甚至可以工作:

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

while True:
    do_thing(is_something)

每次调用时都必须测试
是否是某个东西。它可能是一个临时变量,也可能是需要分配函数的函数的局部变量。这是一个选项,但它确实意味着在每个循环中都会计算该条件。我们的特殊情况是静态的,但只有在运行时才知道。如果保证它是静态的,那么我可以理解为什么您不想在函数@mistersheep中测试它。这只是一种风格选择,它们都做相同的事情。选项2的可读性似乎更高,因为函数是在条件之外定义的。我认为您可能缺少
do_thing()
函数定义返回不同的内容。是的,您是对的。如果它们返回不同的内容,则可以在函数本身中处理“x”,以根据输入参数返回。或者,如果需要两个函数,那么选项2就足够了。所以更多的是代码可读性方面。可以
虽然True
部分的意思是“一个大循环”,但实际上它是一个大列表上的循环。
def do_thing():
    return 'x'
if is_something:
     do_thing()
else:
    do_thing()
while True:
    # other code here
    foo = do_thing()
def do_thing(is_something):
    if is_something:
        # Some code
    else:
        # Other code

while True:
    do_thing(is_something)