更改 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)
此外,根据 v
和 w
的类型,您可能会收到错误消息,指出它们是 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
这样,您只会在希望的情况下触发实际功能。
此解决方案会覆盖原来的名称,但您没有义务这样做。
我想将布尔函数的默认值设置为 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)
此外,根据 v
和 w
的类型,您可能会收到错误消息,指出它们是 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
这样,您只会在希望的情况下触发实际功能。
此解决方案会覆盖原来的名称,但您没有义务这样做。