0

我正在用 Python 编写一个函数。

所以假设我在这个函数中有 3 个参数:

Function (arg1, arg2, arg3)
  arg1 = arg2 * arg3

当函数被调用时,它是这样的:

function(arg1=var1, arg2=var2, arg3=var3)

现在的问题是,这些变量 ( var1, var2, var3) 在调用此函数的情况下会有所不同。所以它们可能是var4, var5, var6, 等等。

鉴于这些变量各不相同,使该函数更改可变参数的语法是什么?

IE。arg1 = arg2 * arg3变化arg1。因为arg1 = var1.

我需要以某种方式arg1作为一个实际的代理来代替,var1这样不仅会arg1改变,而且var1也会改变。

这显然不能简单地使用arg1=var1

我认为这也可以通过其他功能命令或结构来完成。我真的不关心我,我只需要将更改输出到不同的参数中。

编辑 此函数专门设计用于获取一个调用的参数,不一定知道它是什么,然后在函数内部,该参数被转换为公式变量,例如 x in y = mx + b,需要转换回来进入其变量目标,全部在函数内部。

这里的问题是我不知道如何定位原始变量。

所以如果它是函数(a=cats, b=dogs, c=mice)

a = c/2 - b*2

当 cat 是变量时,如何设置 cat=a ?

我不能只说 cat=a 因为输入可能是函数(a=bird, b=flys, c=cats)

4

3 回答 3

0
def f(x, y):
    return x*y

a, b = 1, 2

c = f(a, b)

与其让您的函数尝试直接更改其参数,不如返回该函数产生的任何结果。事实证明,这是一种更简洁、更有用的代码结构方式。例如,你可以做

print f(1, f(2, 3))

而不必创建临时变量:

f(a, 2, 3)
f(b, 1, a)
print b

而不是做

f(arg1=var1, arg2=var2, arg3=var3)
f(arg1=var4, arg2=var5, arg3=var6)

请执行下列操作:

var1 = f(var2, var3)
var4 = f(var5, var6)
于 2013-09-12T00:22:33.767 回答
0

如果它不可行arg1=var1,那是因为:

Python 按值传递对对象的引用(如 Java),Python 中的一切都是对象。这听起来很简单,但随后您会注意到某些数据类型似乎表现出按值传递的特征,而另一些数据类型似乎表现得像按引用传递......这是怎么回事?

了解可变和不可变对象很重要。一些对象,如字符串、元组和数字,是不可变的。在函数/方法内部更改它们将创建一个新实例,而函数/方法外部的原始实例不会更改。其他对象,如列表和字典是可变的,这意味着您可以就地更改对象。因此,更改函数/方法内部的对象也会更改外部的原始对象。

为什么不直接返回arg1并设置val1它呢?

于 2013-09-12T00:24:36.033 回答
0

Python 没有关于引用的特定语法(至少我不知道)。如果您希望将参数作为对函数的引用传递,它必须是可变的(例如列表、字典)。

def foobar(a, b):
    a[0] = 42   # This will modify the list
    b[0] = '-'  # This will modify the value of b passed to the function

foobar(
    [4,8,15,16,23,42],  # This argument is passed by reference, mutable
    'asdf'              # This one is passed by value, immutable
)
于 2013-09-12T00:28:04.433 回答