Skip to main content
 首页 » 编程设计

用于更改对象的 Python 过程

2025年05月04日15虾米哥

举个例子

def inc(a): 
    a += 1 

如果我想要一个增量函数而不是写 var += 1 (不是唯一的情况,只是作为例子)我应该怎么做? 我知道我可以 return a + 1 但我想要 void 函数。 python有什么方法吗?

请您参考如下方法:

Python 数据模型并不像其他语言那样真正具有变量。它具有可以绑定(bind)到名称的对象。因此,Python“变量”不像许多其他语言那样是一个内存位置,它只是对象上的一个标签。一个对象可能有多个名称,也可能没有。参见 Facts and myths about Python names and values由 SO 资深人士 Ned Batchelder 提供有关此主题的更多信息。

Python 整数是不可变对象(immutable对象),因此您实际上不能递增它们。当然,您可以创建一个新的整数对象,其值比当前名为 a 的对象大 1,并将名称 a 绑定(bind)到该新对象。

所以您要执行的操作并不是 Python 中的自然操作。但是,您可以靠近。正如其他人所提到的,您可以通过将 a 放入可变容器对象中来实现。例如,

def inc(lst): 
    lst[0] += 1 
 
a = 7 
b = [a] 
inc(b) 
print b, a 

输出

[8] 7 

一种更令人满意的方法是通过 global() 字典引用名称:

def inc(k): 
    globals()[k] += 1  
 
a = 7 
inc('a') 
print a 

输出

8 

但是,通常不赞成通过 globals() 修改内容,而且如果您想修改一个函数的局部名称,它也没用。


另一种选择是定义自定义类:

class MutInt(object): 
    def __init__(self, v): 
        self.v = v 
 
    def __str__(self): 
        return str(self.v) 
 
    def inc(self): 
        self.v += 1 
 
a = MutInt(7) 
print a 
a.inc() 
print a 

输出

7 
8 

但这仍然很丑陋(恕我直言),您必须在其中定义 int 的所有方法才能使该类有用。