返回的是计算布尔pythonic还是我应该使用传统的if/else?
我想知道以下哪一个示例在Python社区中更受欢迎: 一, 二, 或者别的什么 请告知。在您的示例中:返回的是计算布尔pythonic还是我应该使用传统的if/else?,python,Python,我想知道以下哪一个示例在Python社区中更受欢迎: 一, 二, 或者别的什么 请告知。在您的示例中:str.endswith将tuple作为参数。总的来说,作为设计模式,使用第一个版本(检查推理@Ben的答案)。 即any(主机[0]。bot\u主机中bot\u主机的endswith(bot\u主机)与以下内容相同: 例如: 如果: 返回真值 其他: 返回错误 这通常是毫无意义的必须返回真实或错误的内容,所以只需返回该内容即可 您希望执行此操作的唯一原因是,如果您希望确保只返回True或Fa
str.endswith
将tuple作为参数。总的来说,作为设计模式,使用第一个版本(检查推理@Ben的答案)。
即any(主机[0]。bot\u主机中bot\u主机的endswith(bot\u主机)
与以下内容相同:
例如:
如果:
返回真值
其他:
返回错误
这通常是毫无意义的<代码>必须返回真实或错误的内容,所以只需返回该内容即可
您希望执行此操作的唯一原因是,如果您希望确保只返回True
或False
,因为
可能返回其他对象。例如,它可能返回一个大对象,在检查该对象是否存在后,您不再关心它,因此您不希望返回一个可能阻止其内存被回收的引用。或者您的
可能正在返回一个对象或无
,而无
是错误的,您担心以后的代码将使用不是无测试,并且您希望错误路径不被计为无
即使如此(正如poke在评论中指出的那样),您也可以使用bool()
获得一个基于
的真实性保证为True
或False
的值,因此,使用立即返回True
或False
的if
语句从来没有什么好的理由
在您的情况下,any
始终返回True
或False
。因此,您实际上有一个值是True
或False
,检查它是哪一个,然后返回True
,如果它是True
,返回False
,如果它是False第二个版本完全过时了,这就像将布尔值与真值进行比较,以检查它是否为真。我个人会做的是使用循环,即将迭代部分与在每个元素上执行的部分分开,希望使其更易于阅读。版本1明确(如果最终结果始终是布尔返回值
)-但我认为你的循环变量应该被称为bot\u host
-与你的源代码不同:)就这一点而言,我同意Jon,如果somebooleanstest:return True
再也不是pythonic了;只需返回somebooleanstest
@JonClements,谢谢您的帮助。这实际上是一个打字错误,我很惊讶它能起作用:)@JonClements:x中x的实际效果很好,尽管这绝对是个坏主意。考虑到OPs代码-是的-这是一个很好的方法-不确定它是否回答了问题-但无论如何,也不确定这个问题是否可以回答:)@JonClements-是的,在我看来,整体设计模式已经非常清楚:)如果
不是bool,则返回bool()
。
return any(host[0].endswith(bot_hosts) for bot_hosts in bot_hosts)
if any(host[0].endswith(bot_hosts) for bot_hosts in bot_hosts):
return True
else:
return False
host[0].endswith(bot_hosts) #if bot_hosts is a tuple
#if bot_hosts in not a tuple add tuple(bot_hosts)
In [1]: suffs = ('a','b','d')
In [2]: 'asd'.endswith(suffs)
Out[2]: True
In [3]: 'asap'.endswith(suffs)
Out[3]: False
if <anything>:
return True
else:
return False