我正在用Python编写一个函数。
因此,假设我在此函数中有 3 个参数:
Function (arg1, arg2, arg3)
arg1 = arg2 * arg3
调用函数时,它是这样的:
function(arg1=var1, arg2=var2, arg3=var3)
现在的问题是,这些变量(var1
、var2
、var3
)在调用这个函数的情况下会有所不同。所以它们可以是var4
、var5
、var6
等。
鉴于这些变量各不相同,使此函数更改变化参数的语法是什么?
即。 arg1 = arg2 * arg3
更改arg1
。因为arg1 = var1
.
我需要的是以某种方式让arg1
作为var1
的实际代理,以便不仅arg1
改变,而且var1
也改变。
这显然是无法简单地使用arg1=var1
我认为这也可以通过其他函数命令或结构来完成。如何与我无关,我只需要将更改输出为不同的参数。
编辑 这个函数专门设计用于接受一个调用的参数,不一定知道它是什么,然后在函数内部,该参数被转换为公式变量,例如 y = mx + b 中的 x,需要转换回其变量目标,所有这些都在函数内部。
这里的问题是我不知道如何定位原始变量。
所以如果它是函数(a=猫,b=狗,c=小鼠)
a = c/2 - b*2
当猫是可变的时,我该如何设置 cat=a?
我不能只说cat=a,因为也许输入是函数(A=鸟,B=苍蝇,C=猫)
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)
如果它不能用arg1=var1
,那是因为这个:
Python 按值(如 Java)将引用传递给对象,并且 Python 中的所有内容都是一个对象。这听起来很简单,但随后你 会注意到某些数据类型似乎表现出按值传递 特征,而其他人似乎就像通过引用...... 怎么回事?
了解可变和不可变对象非常重要。一些 对象(如字符串、元组和数字)是不可变的。改变 它们在函数/方法中将创建一个新实例,并且 函数/方法之外的原始实例不会更改。其他 对象(如列表和字典)是可变的,这意味着您可以 就地更改对象。因此,更改 函数/方法也会改变外面的原始对象。
为什么不直接返回arg1
并设置val1
呢?
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
)