看datetime()函数的原型:
其中前三个参数year, month, day是位置参数,所以呢传参时可以写参数名,也可以不写参数名.
以上这些传参方式均合法.
形参设置可以为数字字符串变量、元组和字典等任意类型数据,元组形参是在变量名前加*,字典形参是在变量名前加**
例如:fun(var),fun(*tuple),fun(*list),fun(**dict)
实参接受也可以是任意类型数据,当接收数据为元组列表或者字典时,同样是在数据变量前加*和**
例如:fun(x),fun(*seq),fun(*list),fun(**stu_info)
可以使用元组形参和字典形参接收冗余或意外数据
例如:fun(var,*t_args,**dic_args)
但传参时,数字和字符串形参必须传值,元组和字典形参可不传,原因为元组和字典数据可以是空元组或空字典,此特性正好适应处理冗余数据
形参参数名若和生产数据中字典键名相同加大大提高编程效率和生产效率
例如:有字典dic={'name':'csdn','age':10,'top':1} ,有函数fun(name='name',age=0,top=0),则函数可以方便的获取字典数据fun(**dic)
上一期我们学习参数传递怎么传递,也了解了参数的几种类型.
首先,我们再来回顾一下,形参和实参:
形参是在定义函数时定义的,放在函数名后面的圆括号里,可为空
实参是调用函数时为形参传入具体的参数值
简单最后提醒一下大家,谁调用函数,谁就负责传入参数.
好呐,本期我们来详细学习函数几种参数类型,大纲如下:
python函数的参数名是无意义的,Python允许在调用函数时通过通过名字来传入参数值.
位置参数:按照形参位置传入的参数
调用函数时,实参默认按位置顺序传递的.同时实参个数也要和形参匹配
举一个小栗子
如果实参的个数与形参不匹配时,调用函数运行就会报错
Python中,形参与调用函数紧密联系在一起的.
关键字参数:调用函数时,使形参名称来传递参数,形式为"形参名=实参"
关键字参数,又叫命名参数,传递时无需考虑参数位置和顺序
默认参数:定义函数时,我们可以为形参提前设置具体的值.
在定义函数时,默认参数要放到位置等其他参数后面
在调用函数时,默认参数是可选的.如果传入新值,则会覆盖默认值
注意,默认值不能位于位置参数前面,否则程序会报错误
不定长参数又名可变参数.
不定长参数指的是可变数量的参数,分两种情况:
如果不定长参数后面,可以新增参数吗?
我们通过例子来看,会发生什么?
运行上面的程序,Python解释器会报错
为了解决这一报错,python引入了 强制命名参数
规定,调用不定参数后面有跟位置参数的函数时,传入给位置参数时,必须要强制命名参进行传参.
逆向参数收集针对的对象传入函数的实参
调用函数时,如果实参是元组,列表或者字典,通过在实参前面加入星号,可以自动把元素进行隔开,然后再转入给函数进行处理
本期,我们详细学习了参数几种类型,为后面我们学习函数,打好基础.
实践是检验真理的过程,大家多动手练习练习,会有不一样的奇妙旅程~
好呐,好了,全部的本期内容,欢迎大佬们评论区指正~
** 在python里面表示幂运算
传递实参和定义形参(所谓实参就是调用函数时传入的参数,形参则是定义函数是定义的参数)的时候,你还可以使用两个特殊的语法:++*++ ** .
调用函数时使用* **
定义函数参数时使用* **
def test(*args):
def test(**kwargs):
普通的参数定义和传递方式和 * 们都可以和平共处,不过显然 * 必须放在所有位置参数的最后,而 ** 则必须放在所有关键字参数的最后,否则就要产生歧义了
Python中函数参数的传递是通过"赋值"来传递的.但这条规则只回答了函数参数传递的"战略问题",并没有回答"战术问题",也就说没有回答怎么赋值的问题.函数参数的使用可以分为两个方面,一是函数参数如何定义,二是函数在调用时的参数如何解析的.而后者又是由前者决定的.函数参数的定义有四种形式:
① def addOn(**arg):
上面说了四种函数形式定义的方式以及他们的调用方式,是分开说的,其实这四种方式可以组合在一起形成复杂多样的形参定义形式.在定义或调用这种函数时,要遵循以下规则:
① arg=value必须在arg后
在函数调用过程中,形参赋值的过程是这样的:
首先按顺序把"arg"这种形式的实参给对应的形参
第二,把"arg=value"这种形式的实参赋值给形式
第三,把多出来的"arg"这种形式的实参组成一个tuple给带一个星号的形参
第四,把多出来的"key=value"这种形式的实参转为一个dictionary给带两个星号的形参.
例子:
就这么一个简单函数,来看看下面对这个函数调用会产生什么结果:
test(x=1,y=1) === 1 1 () {}
test(x=1,y=1,a=1) === 1 1 () {'a':1}
test(x=1,y=1,a=1,b=1) === 1 1 () {'a':1,'b':1}
test(1,y=1) === 1 1 () {}