如果条件谬误会使代码无法访问,我是否应该使代码成为条件
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'
假设我有以下代码:
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'