具有两个可能值的IF块的Pythonic处理

4
如果我有一个函数或方法,接受一个参数,该参数只能是两个值之一,那么更符合Python风格的做法是明确列出两种情况还是在else语句中抽象一种情况?例如:
选项1:
def main(group_name):
    if group_name == 'request':
        do_something()
    else:
        do_something_else()

或者选项2:
def main(group_name):
    if group_name == 'request':
        do_something()
    elif group_name == 'response':
        do_something_else()
    else:
        raise Exception

根据输入,这两个选项呈现非常不同的行为。只有第二个选项会处理“group_name如果之前没有受到限制,则只能是两个值中的一个”。 - sco1
如果值没有实际意义,且只有两个选项,请使用布尔值而不是字符串。 - Priyank Mehta
3个回答

7

清晰易懂胜过晦涩难懂。https://www.python.org/dev/peps/pep-0020/

更重要的是,在许多情况下,第二个选项可能更安全。如果只有两个值X和Y是可能的,那么当不是X时,你不应该信任它是Y,并假设用else语句。


2
我建议选择“选项2”,因为保留尽可能多的“端点/条件”始终是一个好习惯。对于给定的问题,始终将函数建模为在现在我们看不到任何问题/可能删除一个条件时仍能正常工作,但这可能不是其他人在生产中理解的最佳方式。在真实的企业世界中,我们需要放置许多许多“条件”和“异常”,尽管需要更简单的使用和消除任何代码错误,并且大大依赖可重用的函数以更快地完成工作。

1

PEP 20认为明确比含蓄更好。

例如:

def myfunct(param):
    possible_values = [x,y]

    if param not in possible_values:
         raise ValueError

    elif param == x:
         do something

    elif param == y:
         do something else

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接