python 中的参数传递

python 中的参数传递

关于python中的参数传递,感觉很模糊,就自己做了实验试一试。

数字

num = 1
def test1(num):
    num += 10
test1(num)
print(num)

结果是

1

说明传入数字的时候并没有改变原来的,是作为值传递的.

如果这时候想要改变的话,可以将num返回。

字符串

s = "zw"
def test2(s):
    s += "k"
test2(s)
print(s)

这时候的结果是

zw

同样的如果想要返回改变后的,可以返回值

列表

lst = [2,3]
def test3(lst):
    lst.append(4)

test3(lst)
print(lst)

结果为

[2,3,4]

所以可以发现对于列表的话是引用,所以再用列表作为参数的时候要小心了,为了防止原列表被修改,可以传递一个复制的

比如

lst = [2,3]
lst2 = lst
lst3 = []
lst3[:] = lst
def test3(lst,lst2,lst3):
    lst.append(4)
    lst2.append(4)
    lst3.append(4)

test3(lst, lst2, lst3)
print(lst,lst2,lst3)


输出的结果为

[2, 3, 4, 4] [2, 3, 4, 4] [2, 3, 4]

还有下面的这样

lst = [2,3]
#lst2 = lst
lst3 = []
lst3[:] = lst
def test3(lst3):
    #lst.append(4)
    #lst2.append(4)
    lst3.append(4)

test3(lst3)
print(lst,lst3)

然后结果是下面的

[2, 3] [2, 3, 4]

并且copy和 deepcopy也都是可以实现这个功能的,

import copy
lst4 = copy.deepcopy(lst)
test3(lst4)
print(lst, lst4)

lst5 = copy.deepcopy(lst)
test3(lst5)
print(lst, lst5)

结果如下

[2, 3] [2, 3, 4]
[2, 3] [2, 3, 4]
[2, 3] [2, 3, 4]

字典

dic = {"a":1}
def test4(dic):
    dic["a"] = 2
    dic["b"] = 3

test4(dic)
print(dic)

结果如下

{'a': 2, 'b': 3}

会发现字典也是用的引用,所以在传字典的时候也要小心。 解决办法也可以用copy或者deepcopy

numpy

import numpy as np
ar1 = np.array([3,4])
def test5(ar1):
    ar1[0] = 10
    ar1[1] = 13

test5(ar1)
print(ar1)
~                    

结果如下

[10 13]

所以numpy也是可变的,因此以后在用numpy传值的时候一定要注意这个问题,

如果想解决的话,可以用np.copy,或者copy.copy都是可以的。

```

总结

所以在python中传递 列表, 字典, numpy 的时候要注意了,这时候会改变值,而在传入数字和字符串的时候不必担心会改变值.

打赏,谢谢~~

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码打赏,多谢支持~

打开微信扫一扫,即可进行扫码打赏哦