参数的传递、类型

1.参数的传递_不可变对象含可变子对象

传递不可变对象时,不可变对象里面包含的子对象是可变的。则方法内修改了这个可变对象,源对象也发生了变化。

a = (10, 20, [5, 6])
print("a:", id(a)) #输出:a: 1910938649528


def tast01(m):
    print("m:", id(m)) #输出:m: 1910938649528
    m[2][0] = 888
    print(m) #输出:(10, 20, [888, 6])
    print("m:", id(m))  #输出:m: 1910938649528

tast01(a)
print(a) #输出:(10, 20, [888, 6])

2.参数的类型

(1)位置参数_默认值参数_命名参数

函数调用时,实参默认按位置顺序传递,需要个数和形式匹配。
按位置传递的参数,称为:“位置参数”。

# 测试位置参数
def tast01(a, b, c, d):
    print("{0}-{1}-{2}-{3}".format(a, b, c, d))

# 默认值参数,必须位于普通位置参数后面
def tast02(a, b, c=10, d=20):
    print("{0}-{1}-{2}-{3}".format(a, b, c, d))


tast01(10, 20, 30, 40)  #输出:10-20-30-40
# tast01(10,20) 参数个数不匹配,报错

# 命名参数,通过形参名称来匹配
tast01(d=20, b=40, c=30, a=60)     #输出:60-40-30-20

tast02(2, 3) #输出:2-3-10-20
tast02(2, 3, 4)  #输出:2-3-4-20
(2)可变参数

1.*param(一个星号),将多个参数收集到一个“元组”对象中。
2.**param(两个星号),将多个参数收集到一个“字典”对象中。
强制命名参数
在带星号的“可变参数”后面增加新的参数,必须是“强制命名参数”。

# 可变参数
def f1(a, b, *c):
    print(a, b, c) 

def f2(a, b, **c):
    print(a, b, c)

def f3(a, b, *c, **d):
    print(a, b, c, d)

# 强制命名参数
def f4(*a, b, c):
    print(a, b, c)

f1(8, 9, 19, 20) #输出:8 9 (19, 20)
f2(8, 9, name="ZJ", age=24) #输出: 8 9 {'name': 'ZJ', 'age': 24}
f3(8, 9, 20, 30, name="ZJ", age=24) #输出:8 9 (20, 30) {'name': 'ZJ', 'age': 24}
# f4(2,3,4) 报错:由于a是可变参数,将2,3,4全部收集,造成b和c没有赋值。
f4(2, b=3, c=4) #输出:(2,) 3 4
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值