我想知道以下哪些示例在Python社区中更受欢迎:
1
return any(host[0].endswith(bot_hosts) for bot_hosts in bot_hosts)
2
if any(host[0].endswith(bot_hosts) for bot_hosts in bot_hosts):
return True
else:
return False
或者别的什么?
请告知。
答案 0 :(得分:4)
在您的示例中:str.endswith
将元组作为参数。总的来说,作为设计模式使用第一个版本(检查推理@Ben的答案)。
那是any(host[0].endswith(bot_host) for bot_host in bot_hosts)
与:
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
答案 1 :(得分:4)
if <anything>:
return True
else:
return False
通常极其毫无意义。 <{1}}无论如何都必须返回一些真实或虚假的东西,所以只需返回它。
您希望这样做的唯一原因是,如果您想确保仅返回<anything>
或True
,那么您的False
可能会返回其他对象。例如,它可能会返回一个大对象,在检查它是否存在之后您不再关心它,因此您不希望返回对它的引用,这可能会阻止其内存被回收。或者您的<anything>
可能会返回一个对象或<anything>
,而None
是假的,您担心以后的代码会使用None
测试,而您希望错误路径不计算为is not None
。
即便如此(正如poke在评论中指出的那样),您可以使用None
根据{的真实性获得保证为bool(<anything>)
或True
的值{1}},因此永远不会有充分的理由使用False
语句立即返回<anything>
或if
。
在您的情况下,True
始终会返回False
或any
。因此,您确实拥有True
或False
的值,检查它是哪一个,然后返回True
,如果它是False
并返回True
如果是True
。
答案 2 :(得分:1)
第二个版本已完全取消,就像将布尔值与True进行比较以检查它是否为真。我个人会做的是使用循环,即将迭代部分与在每个元素上执行的部分分开,以期使其更容易阅读。