这个问题是专门关于编码约定的。我知道在这种情况下使用 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
带有布尔文字的语句。我会写一个return
使用and
and 的语句or
。
return (not selected.hasPassed()
and (selected.getPrereqs() == 'none'
or all(x.hasPassed()
for x in selected.getPrereqs()))
这与您用英语描述的方式很接近:如果您未通过该课程,并且该课程没有先决条件或您已通过所有先决条件,则可以参加该课程。
正如 John Kugelman 指出的那样,如果getPrereqs
返回一个空列表而不是'none'
,您可以进一步将其减少到
return (not selected.hasPassed()
or all(x.hasPassed()
for x in selected.getPrereqs())
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句