python函数变量如何更改值?

时间:2019-10-11 10:36:36

标签: python

在以下功能中:

def f(value,values):
    value = 4
    values[0] = 100
t = 1
v = [1,2,3]
f(t,v)
print(t,v[0])

Output: 1, 100

t的值未更改,但v [0]的值已更改。有人可以解释发生了什么吗?

2 个答案:

答案 0 :(得分:0)

在python中,赋值意味着将名称绑定到对象。所以

t = 1
v = [1,2,3]

表示将t绑定到对象整数1,将v绑定到对象列表[1,2,3]。 在函数f(value, values)中,将新名称value绑定到相同的整数1,并将新名称values绑定到相同的列表[1,2,3]。现在我们知道了:

         --------                 -----------
t     -> | obj1 |       v      -> |  obj2   |
value -> |   1  |       values -> | [1,2,3] |
         --------                 -----------

然后声明

    value = 4
    values[0] = 100

表示将名称值重新绑定到对象整数4(因为整数是不可变类型,因此对象本身无法更改),并且对象[1,2,3]的第一个元素更改为{ {1}}(列表是可变类型)。

100

因此 -------- ------------- t -> | obj1 | v -> | obj2 | | 1 | values -> | [100,2,3] | -------- ------------- -------- value ->| obj3 | | 4 | -------- t仍绑定到原始对象,但是对象列表v更改为[1,2,3]

答案 1 :(得分:0)

def f(value,values):
    value = 4
    values[0] = 100
t = 1
v = [1,2,3]
f(t,v)
print(t,v[0])

让我们开始遍历代码,您正在定义函数f:

def f(value,values):
    value = 4
    values[0] = 100

此函数带有2个参数valuevalues,现在可以移至函数后的代码

t = 1         # here you are declaring a variable name 't' and have value 1 
v = [1,2,3]   # here we have 'v' having value [1,2,3] which is a list
f(t,v)        # here you are calling the function 'f' which is declare above

好吧,现在我们的主要工作开始于当您调用函数'f'f(t,v)时,当两个参数到达函数t=1时,两个参数分别具有值v=[1,2,3]f(value,values)我们有value = 1values = [1,2,3]

在那之后,我们在函数中加入了value=4,就像之前我们有value = 1一样,我们的代码将如下所示:

value=4  #  previously we have value = 1 so now our code update the value to 4, t does not updated here. 

在此之后,我们有了values[0]=100,因此我们得到的值为[1,2,3],这就像:

values[0]=100 # => [1,2,3][0] = 100 so the array [1,2,3] have 1 on index 0 it will replace 1 in array and now our array becomes [100,2,3]

当我们进行print(t,v[0])时,我们有t=1v[0]=100,因为我们没有更新函数内部的t值,而仅将array [1,2,3]的值更新为[100,2,3]