python - 与 return 语句一起使用 'elif' 或连续的 'if' 语句更好吗?

这个问题专门针对编码约定。我知道在这种情况下使用 if 或 elif 会产生相同的结果。只是想知道构造此函数的“正确”方法是什么:

连续如果:

def can_take(self, selectedCourse):
    if selectedCourse.hasPassed():
        return False
    if selectedCourse.getPrereqs() != 'none':
        for prereq in selectedCourse.getPrereqs():
            if not self.courses[prereq].hasPassed():
                return False

    return True

使用 elif:

def can_take(self, selectedCourse):
    if selectedCourse.hasPassed():
        return False
    elif selectedCourse.getPrereqs() != 'none':
        for prereq in selectedCourse.getPrereqs():
            if not self.courses[prereq].hasPassed():
                return False

    return True

最佳答案

如果必须在两者之间做出选择,我可能会使用两个 if 语句,但这只是个人喜好问题。

如果我有第三个​​选择,我将不会有任何 return 语句和 bool 文字。我会编写一个使用 andorreturn 语句。

return (not selected.hasPassed()
        and (selected.getPrereqs() == 'none'
             or all(x.hasPassed() 
                    for x in selected.getPrereqs()))

这与您用英语描述的方式很接近:如果您没有通过它,则可以参加该类(class),并且如果该类(class)没有先决条件或如果您已通过所有先决条件。

正如 John Kugelman 指出的那样,如果 getPrereqs 返回一个空列表而不是 'none',您可以进一步将其缩减为

return (not selected.hasPassed()
        or all(x.hasPassed() 
               for x in selected.getPrereqs())

关于python - 与 return 语句一起使用 'elif' 或连续的 'if' 语句更好吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69326777/

相关文章:

objective-c - Rust Cocoa - 如何迭代 NSArray

c - 尝试将二维字符串数组传递给函数并打印它

c# - 通过列表循环 foreach,为不同的值执行代码

php - 路径在本地主机上有效,但在服务器上无效

javascript - Cypress 最佳实践 - 存储和比较两个值

arrays - Ruby - 根据可能性从数组中选择一个元素

c# - 在 C# 中,如何使用 `TryAsync` 的实例?

node.js - 类型错误 : Cannot read property 'passport' o

loops - 如何在 Kotlin 循环内更改 for 循环的计数器变量值?

c - 打印 int_fast_32_t 等数据类型的可移植和正确方法是什么