更改 Python 中布尔函数的值

Changing the value of a Boolean Function in Python

我想将布尔函数的默认值设置为 False,并希望仅针对代码之间输入的某些值将其更改为 True。有办法吗?

我正在尝试编写一个简单的 DFS 搜索代码。 我使用的代码是这样的:

def visited(v):
    return False
def explore(v):
    visited(v) = True
    for (v,w) in E:
        if not visited(w):
            explore(w)

不,您不能从函数外部设置函数的 return 值。相反,在调用函数中使用变量。

比如这里,你想记住你访问了哪些节点。 set 有助于记住一组对象。

def explore(v):
    visited.add(v)
    for (v,w) in E:
        if w not in visited:
            explore(w)

关于此的几点注意事项:

如果你调用它两次,一切都将被视为已经访问过,因为状态是在全局中跟踪的。这类似于您已经拥有的,但可能是也可能不是您想要的。如果要能够迭代两次,需要把这个作为参数传下去,最好加上第二个启动递归的函数:

def explore(v):
    return explore_down(v, set())

def explore_down(v, visited):
    visited.add(v)
    for (v,w) in E:
        if w not in visited:
            explore(w)

此外,根据 vw 的类型,您可能会收到错误消息,指出它们是 not hashable, for which see this question.

函数可能是这里的错误工具。相反,尝试一组:

def explore(v, visited=set()):
    visited.add(v)
    for (v,w) in E:
        if w not in visited:
            explore(w)

我在 Python 中使用 a sometimes unintuitive behavior of default arguments 作为此示例代码,因为它很方便,但您也可以使用不同的方式来维护共享集,例如初始化一个空白集,然后调用递归辅助函数。 (这样你就可以通过每次重置设置来探索多次。)

假设您有一个 myfunc 函数返回一个布尔值,您想要修改行为:

_myfunc = myfunc

def myfunc(*args):
    if some_condition:
        _myfunc(*args)
    else:
        return False

这样,您只会在希望的情况下触发实际功能。

此解决方案会覆盖原来的名称,但您没有义务这样做。