我想知道以下哪个示例在 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
或者也许是别的什么?
请指教。
我想知道以下哪个示例在 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
或者也许是别的什么?
请指教。
在您的示例中: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
if <anything>:
return True
else:
return False
通常是非常没有意义的。<anything>
无论如何都必须返回真实或虚假的东西,所以只需返回它。
你想要这样做的唯一原因是你想确保你只返回True
or False
,因为你<anything>
可能会返回一些其他对象。例如,它可能会返回一个大对象,在检查它是否存在之后您不再关心它,因此您宁愿不返回对它的引用,这可能会阻止其内存被回收。或者,您<anything>
可能正在返回一个对象 or None
,虽然None
是错误的,但您担心以后的代码将使用is not None
测试,并且您希望不将错误路径计为None
.
即便如此(正如 poke 在评论中指出的那样),您可以使用bool(<anything>)
来获取一个保证为True
或False
基于真实性的值<anything>
,因此没有充分的理由使用立即返回or的if
语句。True
False
在您的情况下,any
始终返回True
or False
。所以你实际上有一个值是True
or False
,检查它是哪一个,然后True
如果是则返回,如果是则True
返回。False
False
第二个版本完全出局,这就像将布尔值与 True 进行比较以检查它是否为真。我个人会做的是改用循环,即将迭代部分与在每个元素上执行的部分分开,以期使其更易于阅读。