返回的是计算布尔pythonic还是我应该使用传统的if/else?

返回的是计算布尔pythonic还是我应该使用传统的if/else?,python,Python,我想知道以下哪一个示例在Python社区中更受欢迎: 一, 二, 或者别的什么 请告知。在您的示例中:str.endswith将tuple作为参数。总的来说,作为设计模式,使用第一个版本(检查推理@Ben的答案)。 即any(主机[0]。bot\u主机中bot\u主机的endswith(bot\u主机)与以下内容相同: 例如: 如果: 返回真值 其他: 返回错误 这通常是毫无意义的必须返回真实或错误的内容,所以只需返回该内容即可 您希望执行此操作的唯一原因是,如果您希望确保只返回True或Fa

我想知道以下哪一个示例在Python社区中更受欢迎:

一,

二,

或者别的什么

请告知。

在您的示例中:
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