通过引用传递布尔参数

Pass boolean argument by reference

在 C++ 中,您始终可以将某些内容作为引用传递,调用者只需检查引用的变量即可知道调用方发生的任何事情。

想象一下这个场景:

def x():
   a = f()
   print(a)

def f():
   return "hello"

我想要的是添加一个布尔标志,returns 从 f 到 x。有几种方法可以做到这一点:

  1. 使 f return 成为元组 (str,bool)
  2. 将对布尔变量的引用传递给 f

选项 1 目前不可能,因为 f() 有很多调用者,我无法更改它们以接受元组作为 return 值,因此它必须保持原样。

选项 2 不可能,因为布尔参数是不可变的(正如我最近了解到的)。

只有f可以计算布尔值,x需要知道。

有什么好的方法可以实现吗?在一般的 Python 编码中寻找一些不错的做法。

最接近将 pointer/reference 传递给 f 的选项是将它传递给一个可变对象,例如列表:

def f(ok=None):
    if isinstance(ok, list):
        ok.append(True)
    return "hello"

def x():
    ok = []
    a = f(ok)
    print(a, ok.pop())

但 IMO 更好的解决方案是 return 一个元组,并将该行为重构为一个新函数,这样您就可以共享代码而不会干扰现有的 API:

def f_with_flag():
    return "hello", True

def f():
    return f_with_flag()[0]

def x():
    a, ok = f_with_flag()
    print(a, ok)