Python-必选参数、默认参数、可变参数、关键字参数、命名关键字参数

本文详细介绍了Python函数参数的五种类型:必选参数、默认参数、可变参数、关键字参数和命名关键字参数。重点讲解了默认参数的陷阱以及如何避免,可变参数的使用方式,关键字参数如何自动组装为dict,以及命名关键字参数对参数名称的限制。最后提到了如何组合使用这些参数。
摘要由CSDN通过智能技术生成

1.函数参数定义的顺序:必选参数(位置参数)、默认参数、可变参数、关键字参数、命名关键字参数

2.默认参数

(1)即,传的参数里面有默认值,可以通过传参替换;
(2)当有多个默认参数时,调用的时候,既可以按顺序提供,比如函数原定义enroll(name,sex,age=18,city="Beijing"),调用时可以enroll('Bob', 'M', 7),意思是,除了name,sex这两个参数外,最后1个参数应用在参数age上,city参数由于没有提供,仍然使用默认值;也可以不按顺序提供部分默认参数,但需要把参数名写上。如调用enroll('Adam', 'M', city='Tianjin'),意思是,city参数用传进去的值,其他默认参数继续使用默认值;

(3)但是会出现一个坑,如下:

def f(L=[]):
    L.append("aaa")
    return L


#正常调用,正常
print(f([1, 2, 3]))  # [1, 2, 3, 'aaa']

#开始使用默认参数,首次正常
print(f())  # ['aaa']

#再次调用,使用默认参数,就存在问题了
print(f())  # ['aaa', 'aaa']
print(f())  # ['aaa', 'aaa', 'aaa']

#原因解释如下:
#Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。

print(f([4, 5]))  # [4, 5, 'aaa']

上述现象可以如下更改:

def f(L=None):
    if L is None:
        L = []
    L.append("aaa")
    return L


print(f([1, 2, 3]))  # [1, 2, 3, 'aaa']
print(f())  # ['aaa']
print(f())  # ['aaa']
print(f())  # ['aaa']
print(f([4, 5]))  # [4, 5, 'aaa']

因此,定义默认参数必须指向不变对象

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值