举个例子
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 的所有方法才能使该类有用。
