按引用调用函数参数

时间:2012-02-25 15:39:36

标签: python

给定一个功能:

def A(a, b, c):
    a *= 2
    b *= 4
    c *= 8
    return a+b+c

如何将'c'var设置为引用调用,所以如果我调用d = A(a,b,c),c将指向同一个int对象,并从函数内更新?

4 个答案:

答案 0 :(得分:2)

你做不到。 Python无法做到这一点。

可以做的是传递一个已定义__imul__()且嵌入int的包装器,而增强的赋值将导致嵌入属性发生变异。< / p>

答案 1 :(得分:2)

你正陷入阴暗的境地:你所说的是在函数中声明global(或nonlocal)个变量,这些变量根本就没有完成。函数意味着做一件事,并且在没有影响其状态或输出的其他值或函数的同意的情况下执行它们。

很难提出一个有效的例子:你是否可以留下变量的副本供以后参考?您可以展开此代码以传回tuple,并在需要时引用tuple的成员或总和:

>>> def A(a, b, c):
        return (a*2, b*4, c*8)

>>> d = A(2, 4, 8)
>>> sum(d)
84
>>> d[-1] #or whatever index you'd need...this may serve best as a constant
64

答案 2 :(得分:2)

如果c是列表,则可以执行此操作:

c = [2]
def A(a, b, c):
    a *= 2
    b *= 4
    c[0] *= 8
    return a+b+c[0]
print c  # gives [16]

答案 3 :(得分:1)

Python中的所有调用都是“引用”。整数在Python中是不可变的。你无法改变它们。

class C:
   def __init__(self, c):
       self.c = c
   def __call__(self, a, b):
       a *= 2
       b *= 4
       self.c *= 8
       return a + b + self.c

Example

A = C(1)
print A(1, 1), A.c
print A(1, 1), A.c

输出

14 8
70 64