Skip to main content
 首页 » 编程设计

python之如何更改变量在函数中指向的位置

2025年05月04日16telwanggs

我有一个 python 函数,它接受一个对象并修改它或替换它。

def maybe_replace_corgi(corgi): 
  # If corgi is cute enough, modify it to keep it. 
  if corgi.cuteness > threshold: 
    corgi.will_keep = True 
  else: 
    # Corgi not cute enough! Instantiate new corgi. 
    corgi = Corgi(name="Woofus") 

我知道对象是通过引用传递给 python 函数的。但是,如果我想完全替换函数中的对象怎么办?正如我想在 else 语句中做的那样?如何使程序中对 corgi 对象的所有引用都指向这个新的 corgi 对象?

请您参考如下方法:

标准方法是退回新的柯基犬或旧的柯基犬:

def maybe_replace_corgi(corgi): 
    if corgi.cuteness > threshold: 
        corgi.will_keep = True 
        return corgi 
    else: 
        return Corgi(name="Woofus") 
 
my_corgi = Corgi(name="Rudolf") 
my_corgi = maybe_replace_corgi(my_corgi) 

正如其他人所提到的,这样做的缺点是:它不会替换所有引用,它只会替换 my_corgi 的那个引用。但是,替换所有引用是不可能的。


您无需替换对对象的所有引用,只需编辑对象使其看起来像一个新对象。只需替换它所有的属性值。为此,您可以在 Corgi 类中创建一个新方法,它会重置所有属性。

在大多数情况下,您不需要新方法,您已经有了一个:如果您的__init__ 方法没有做任何太花哨的事情(fe.increase Corgi.count 变量或类似的)它可以再次调用以重新初始化所有对象的属性。

def maybe_replace_corgi(corgi): 
    if corgi.cuteness > treshold: 
        corgi.will_keep = true 
    else: 
        corgi.__init__(name="Woofus")