函数之参数详解
2020-09-25 Reads 4
位置入参
函数调用时,实参默认按位置顺序传递,需要个数和形参匹配。按位置传递的参数,称为:“位置参数”。
形参: 就是方法中声明的参数
实参: 调用方法时传入的参数
`# 方法定义
def str_form1(name,age):
return "我是{},我今年{}岁了".format(name,age)
方法调用
str_form1("小明",18) # 参数必须和定义的时候位置和个数保持一致
错误示范
str_form1("小明")
str_form1("小明",18,8)`
默认参数
方法中 声明了默认参数,调用方法时 不传参就是用默认参数
`def str_form2(name='小红',age=18): # 给age设置默认值18
return "我是{},我今年{}岁了".format(name,age)
str_form2(name="小明") # 未传递小明的年龄,则使用方法定义时给定的默认值`
如果位置参数和关键字参数同时存在,位置参数在前,关键字参数在后:
`def str_form3(name,age=18): # 必须位置参数在前,关键字参数在后
return "我是{},我今年{}岁了".format(name,age)
str_form3("小明",age=18) # 必须位置参数在前,关键字参数在后`
关键字入参
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值
`def str_form4(name,age):
return "我是{},我今年{}岁了".format(name,age)
str_form4(age=18,name="小明") # 传递参数时,使用关键字来指定参数`
</pre>
不定长参数 (可变参数,魔法参数)
不定长参数 分两种情况:
- *param(一个星号),将多个参数收集到一个“元组”对象中。
- **param(两个星号),将多个参数收集到一个“字典”对象中。
注意: 方法声明不定长参数时,最好param在倒数第一位,param在第二位,如果没有param,那param最好在倒数第一位
例子:
`def foo(name,*args, **kwargs):
print('name =',name)
print('args = ', args)
print('kwargs = ', kwargs)
print('---------------------------------------')
if name == 'main':
foo('ming',1, 2, 3, 4)
foo('ming',a=1, b=2, c=3)
foo(1, 2, 3, 4, a=1, b=2, c=3)
foo('a', 1, None, a=1, b='2', c=3)`
运行结果:
name = ming
args = (1, 2, 3, 4)
kwargs = {}
---------------------------------------
name = ming
args = ()
kwargs = {'a': 1, 'b': 2, 'c': 3}
---------------------------------------
name = 1
args = (2, 3, 4)
kwargs = {'a': 1, 'b': 2, 'c': 3}
---------------------------------------
name = a
args = (1, None)
kwargs = {'a': 1, 'b': '2', 'c': 3}
---------------------------------------
强制位置参数 和 强制关键字参数
Python3.8 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。
/ :/ 左边的参数必须位置入参
- : * 右边的参数必须关键字入参
def f(a, b, /, c, d, *, e, f):
print(a, b, c, d, e, f)
正确的例子
f(10, 20, 30, d=40, e=50, f=60)
错误的例子
f(10, b=20, c=30, d=40, e=50, f=60) # b 不能使用关键字参数的形式
f(10, 20, 30, 40, 50, f=60) # e 必须使用关键字参数的形式`
网友评论