参数列表,传参需要按照位置来对应,一个是按照名称来对应(对关键字传参,谁等于谁来传实参)
缺省值用起来还不方便,就给你用可变参数(可变位置参数,可变关键字参数)这时候就看你用什么方式传参了,可变又允许你不传,可变关键字参数一定是在形参列表的最后,中间可以放可变位置参数,但可变位置参数后面也可以放keyword-only(只能接收关键字传参),普通参数又有带缺省值和不带缺省值的,不带缺省值的只能往后放,往前放就语法错误
顺序
普通参数-》普通参数带缺省值-》可变位置参数-》keyword-only-》可变关键字参数
可变位置参数收集后是形成元组
可变关键字参数收集是形成字典,普通字典,因为是普通字典所以可以修改
这种写法,xy叫keyword-only
keyword-only在标准库经常看到,只能接收keyword传参的参数,必须通过关键字传参,而且只能通过关键字传参
x是keyword-only必须要通过keywords方式传进去
下面的传参是错误的,y根本没有定义
有缺省值就可以
上面定义成功,下面不行
x,y只能通过keyword-only
有缺省值就都可以
*一个星号后面理解为是keyword-ony , kwargs 是可变关键字参数(必须放到最后一个) ,x 是无法理解的
直接报语法错误,x的值都被前面拿走了
keyword-only另一种形式,后面的参数,xy都是keyword-only参数这两种是一个意思,所谓keywordonly就是能通过keyword传实参的,只能通过这种方式,没有缺省值的时候是必须传,不传就异常
y没给
1给y
位置参数不能跟着关键字参数
y给多值
x=5是普通的位置参数,只不过带了缺省值
可以这么写
x没给就用缺省值
python形参定义,和传参方式放在一起稍稍有点乱
这些都是形式参数
这是标识符,就需要满足对于标识符的要求(不能以数字,下划线开头)python中只有字面常量,定义不出常量
args 可变位置参数后面都是keyword-only参数直到 * kwargs
前面这些是顺序的,要求在定义形参的时候,如果要带缺省值,就往后放,可变参数可以有0个多个所以不需要缺省值
形参定义顺序,这一块叫参数列表但不是list
必须要给xyz,n必须关键词传参
现在就可以阅读标准库,形参讲完了,就可以阅读里面大量的函数了
缺省值太多了用 kwargs,用 args可能不知道谁和谁的值*
cmdb给host了,不是原来的意思了,就是按照位置对应了
传那么多参数根本不知道是干嘛,不用kwargs就不知道别人传什么参数是干嘛的
参数解构
要把两个参数填上去才行
这个相当于有一个列表,把这个列表解开了,解开以后两个元素两项分别对应4,5,xy上去
解元组和set都可以解开,但是字典比较特殊
告诉你参数结构不是在这里使用的
参数解构,是做函数参数才能使用的语法,下面跟函数参数一点关系也没有
参数解构只能用在参数部分中用
必须在一个可迭代对象,而不是int
要两个你给3个
少一个也不行
有可变位置参数可以
其实跟for循环是一样的,默认写key
想要拿到300,一个星号和两个是不一样的
找不到期望 的keyword参数
可以理解为字典是个二维结构,解开第一层拿到key,第二层相当于拿到value
用两个星号解开字典复杂结构,解开是这个
上面定义是x y ,你定义ab是传不进去的
ab没人要
这样就行
可以理解字典是二维结构,一个星号只能 解开key,第二层解开才等价于关键字传参
参数结构只能用在函数传参中,其他地方不能用
少了不行,多了就需要可变参数
解开是a=5,b=6,不满足xy,要看清标识符对应
要没有缺省值,参数就一定要对应,参数多了必须有可变参数
可变位置参数是元组,可变关键字参数收集以后是字典
定义部分,可变位置参数(元组)
0+range10出问题
拿到range(10)解开,相当于本来可迭代的对象,立即拿出来,解构
都要写星号,不写不行
上来编写函数就是def,至少接受两个参数
觉得print不好用,可以用return
add(整体函数没有返回值,等于none)传参返回是none,