我正在用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在y = mx + b中的x,需要转换回它的变量目标,都在函数内部。
这里的问题是我不知道如何定位原始变量。
所以,如果它是功能(a =猫,b =狗,c =小鼠)
a = c / 2 - b * 2
当cat变量时,如何设置cat = a?
我不能只说cat = a因为输入可能是 功能(a = bird,b = flys,c = cats)
答案 0 :(得分: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)
答案 1 :(得分:0)
如果arg1=var1
无效,那是因为:
Python按值传递对象的引用(如Java),和 Python中的所有东西都是一个对象。这听起来很简单,但随后你 会注意到某些数据类型似乎表现出传值 特征,而其他似乎像传递参考... 这是什么交易?
理解可变和不可变对象很重要。一些 对象,如字符串,元组和数字,是不可变的。涂改 它们在函数/方法内部将创建一个新实例和 函数/方法之外的原始实例不会更改。其他 对象,如列表和词典是可变的,这意味着你可以 就地更改对象。因此,改变一个内部的对象 function / method也会改变外面的原始对象。
为什么不返回arg1
并将val1
设置为它?
答案 2 :(得分:0)
Python没有关于引用的特定语法(至少我不知道)。如果您希望将参数作为参考传递给函数,则它必须是可变的(例如,list,dictionary)。
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
)