流沙团
python的函数参数
2022-1-19 流沙团

一、概述


1、前文已经提过位置参数、默认参数,这两种是最常用的参数。


2、动态参数即不限定参数个数,以一种动态的方式接受传参的个数。


3、python的动态参数有两种,分别是 ‘ args ’ 和 ‘ **kwargs ’ 。他们区别在于是一个星号还是两个星号,而不是 args 和kwargs ,实际上定义成 ‘ cat ’ 和 ‘ dog’ 也是可以的,只是按照约定俗称的写法,通常写成 ‘ *args ’ 和 ‘ kwargs ’。


4、注意:动态参数必须放在所有位置参数和默认参数后面!


二、一个星号


1、一个星号的动态参数表示接收任意个参数,调用时会将实际参数打包成一个元组传入。如果参数是个列表,则会将整个列表当成一个参数传入。



如图所示,动态参数传入的4,5,6会被打包成一个元组传入到函数内部。


2、如果当传入的动态参数是一个列表,则会将整个列表当成一个参数传入。



如图,传入的[4,5,6]被当成元组的中的一个元素传入了。如果想把列表也当成当个元素逐个传入呢?可以使用*传参!如下图所示。



在传参是添加一个*,就可将列表中的元素逐个传入。实际上所有序列类型的元素都可以是用这种方式传递,比如字符串、元组、字典等。


3、一个星号的特殊情况!


当一个星号的动态参数位于n个默认参数后面时,python会自动将一个星号的动态参数的前n个赋值为默认参数。


如图所示,默认将动态参数的4,5赋值给了c、d,这是python内部的传参规则。


三、两个星号


1、两个星号的动态参数,会将传入的参数打包成字典传给函数。



2、而如果当传入的动态参数是一个字典时,程序会报错。为了解决这个问题,可以使用两个*将字典值逐个传入。



3、两个星号的动态参数必须置于一个星号动态参数的后面!


四、万能参数 & 关键字参数


1、一个星号的动态参数 + 两个星号的动态参数 = 万能参数!


2、万能参数可能不受参数的个数限制,在灵活的同时也带了一些麻烦。


例如,我们在招聘的时候要求必须传入‘age’这个参数,就可以使用关键字参数进行限定。关键字参数使用 进行区别,即 号后面的内容都是关键字参数。



注意 :关键参数在调用时必须船用参数名称。


3、对于动态参数里面的关键参数,不需要加 * ,直接在动态参数后面限定即可。



注意:关键参数必须要传,但是可以穿空缺值。下面这种方式可以。



但下面这种方式就会报错。


发表评论:
昵称

邮件地址 (选填)

个人主页 (选填)

内容