python 参数传递

本文介绍了Python中的参数传递机制,强调了在传可变对象时可能出现的问题。Python采用共享传参,形参是实参的引用副本。对于可选参数,默认值在函数定义时计算并成为函数对象的属性,可能导致多个实例共享同一可变对象。建议对可变对象传递副本,设置可选参数默认值为None并在函数内部处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

参数传递

在python赋值、浅拷贝、深拷贝这篇文章中,我们知道了python中变量就是对象的引用(别名)。那么当函数进行传参操作时,函数内的形参与实参是什么关系?

python采用的参数传递方式是共享传参,参数的各个形式参数获得的是实参中各个引用的副本,也就说形参是实参的别名,参数传递传的还是引用。

这种传引用的方式在传不可变对象时没啥问题,但如果传递的是可变对象,就有可能改变实参的值(和可变对象的赋值操作类似)。

看例子:

def f(a, b):
    a += b
    return a

x, y = 1, 2
print(f(x, y), x, y)

c, d = [1, 2], [3, 4]
print(f(c, d), c, d)

e, g = (1, 2), (3, 4)
print(f(e, g), e, g)

运行结果:
3 1 2
[1, 2, 3, 4] [1, 2, 3, 4] [3, 4]
(1, 2, 3, 4) (1, 2) (3, 4)

运行程序后,传递的参数为int和tuple时,形参改变,实参没有改变,但传递的参数是list时,改变形参的值,实参的值也发生了变化。

可选参数默认值

python函数传参时还允许我们设置函数的可选参数,并为其设置默认值,形如def f(a, b=0),调用函数f时,如果传递两个参数,那么a和b就是对应的传递过来的值,如果只有一个参数,那么就将其赋给a,b的值就是默认的0。一般我们将可选参数的默认值设置为Noneÿ

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值