我不完全理解这个脚本中的any()函数是如何工作的

1 python any python-3.x

我有一个脚本来检查列表中是否有一个或多个相同的项目。这是代码:

items = ["Blue", "Black", "Red"]

def isUnique(item):
    seen = list()
    return not any(i in seen or seen.append(i) for i in item)


print(isUnique(items))
Run Code Online (Sandbox Code Playgroud)

如果给定列表中的所有项目都是唯一的,则打印“True”;如果列表中的一个或多个项目是唯一的,则打印“False”。有人可以any()为我解释一下脚本的部分吗,因为我不完全理解它是如何工作的?

kay*_*ya3 5

append这段代码是一种黑客攻击,因为它使用了带有副作用的生成器表达式,并利用了return 的事实None,而这是假的。

以命令式风格编写的等效代码如下所示:

def isUnique(items):
    seen = list()
    for i in items:
        if i in seen or seen.append(i):
            return False
    return True
Run Code Online (Sandbox Code Playgroud)

那里or仍然有点奇怪 - 它被用于其短路行为,因此append仅当i in seen为 false 时才被调用 - 所以我们可以像这样重写它:

def isUnique(items):
    seen = list()
    for i in items:
        if i in seen:
            return False
        else:
            seen.append(i)
    return True
Run Code Online (Sandbox Code Playgroud)

这是等效的,因为append仅当i in seen为 false 时才调用,并且对appendreturns 的调用None意味着return False在这种情况下该行不应执行。