如果条件谬误会使代码无法访问,我是否应该使代码成为条件

Should I make code conditional if fallacy of condition would make code unreachable

假设我有以下代码:

def isIn(a:str, b:list[str]) -> str:
   yup = False
   for i in b:
      if i == a:
         return 'is'
         yup = True
   if not yup:
      return 'is not'

现在,如果到达第 7 行,yup 必须为 false。根据官方 Python 风格(也许是 PEP 8?),我是否仍应使第 8 行成为条件语句,还是应该将其放在 for 语句之后?

这确实与 PEP8 关系不大,只是与编程逻辑有关。

在您的代码中,由于您在将 yup 设置为 True 之前 return 一个值,因此 yup 在整个函数中将始终为 False .因此,检查它是否为 False 是多余的。事实上,这完全一样:

def is_in(a: str, b: list[str]) -> str:
    for i in b:
        if i == a:
            return 'is'
    return 'is not'

PEP8 问题的原因是您使用了不同的缩进深度,请不要这样做。此外,在类型提示之前的函数参数之后的冒号之后需要空格。命名函数和变量时,您应该远离大写字母 - isIn 可以,但 is_in 更 Pythonic.

请注意,您的函数目前仅限制 Python 已有的运算符(因为如果类型不匹配,您的类型提示将引起警告):

# this is how you'd use your function:
if is_in('word', ['a', 'word', 'or', 'four']) == 'is':
    print('it is')

# but you could just:
if 'word' in ['a', 'word', 'or', 'four']:
    print('it is')

您甚至不需要 yup。您要么从循环内部 return,要么循环完成并且您 return 'is not'.

def isIn(a:str, b:list[str]) -> str:
   for i in b:
      if i == a:
         return 'is'
   return 'is not'

但是您所做的只是重新实现 in 运算符:

def isIn(a: str, b: list[str]) -> str:
    return 'is' if a in b else 'is not'