为什么这个 Python 函数不通过引用传递?

Why is this Python function not passed by reference?

提问人:Tjeerd Bakker 提问时间:12/24/2020 更新时间:12/24/2020 访问量:47

问:

def funcA():
    print("No")

def funcB():
    print("Yes")

class A:
    def __init__(self, func):
        self.func = func
    
    def getB(self):
        b = B(self.func)
        return b

    def setfunc(self, func):
        self.func = func


class B:
    def __init__(self, func):
        self.func = func
    
    def execfunc(self):
        self.func()


a = A(funcA)
b = a.getB()
a.setfunc(funcB)
b.execfunc()
  1. 我创建 A 并将 A.func 设置为 funcA(打印“否”)
  2. 我创建 B 并设置 B.func = A.func = funcA(打印“否”)
  3. 我将 A.func 更改为 funcB(打印“是”)
  4. 我执行 B.func 并执行 funcA(打印“否”)

如果在步骤 2 中通过引用传递函数,而在步骤 3 中更改了函数目标,为什么 B.func 没有更改为新目标?

Python 函数 逐个引用

评论

0赞 Wombatz 12/24/2020
Python 不使用“通过引用传递”。
0赞 Tjeerd Bakker 12/24/2020
@Wombatz Python 可以,请参阅 tutorialspoint.com/...
0赞 furas 12/24/2020
也许它甚至可以发挥作用,但分配不必做同样的事情 - 最后你有一些不同的东西,而不是你期望的。pass by reference=
0赞 Davis Herring 12/24/2020
Python 是按值传递的,但每个变量(实际上是每个表达式)的值都是一个引用。这种看似迂腐的区分是开悟的关键。
0赞 chepner 12/24/2020
nedbatchelder.com/text/names.html

答: 暂无答案