Python学习笔记(十一)函数参数
调用函数时可使用的正式参数类型:
1、普通参数(严格按照顺序,将实际参数赋值给形式参数)
2、默认参数(必须放置在参数列表的最后)
3、制定参数(将实际参数赋值给指定的形式参数)
4、动态参数:*(一个*表示在传递参数时,传递的所有参数都会被当作一个元素存放进元组中)
(传递的参数前面带一个*时,表示将该参数拆分开,将其拆分的字符分别作为一个元素存放进元组中)
1 >>> def f1(*args):
2 ... print(args)
3 ...
4 >>> lis = ['l1', 's2', 1]
5
6 >>> f1(lis,'ww')
7 (['l1', 's2', 1], 'ww')
8
9 >>> f1(*lis,'ww')
10 ('l1', 's2', 1, 'ww')
5、动态参数**(传递参数时,必须以指定参数的形式传递,参数会被解释称键值对保存在字典中)
(传递参数前面带**时,表示将该参数(必须要是字典)按原键值对保存进字典)
1 >>> def f2(**args):
2 ... print(args)
3 ...
4 >>> f2(d1='lz')
5 {'d1': 'lz'}
6 >>> dic = {'x1':11, 'x2':'zwa', 'x3':'op'}
7 >>> f2(**dic)
8 {'x3': 'op', 'x1': 11, 'x2': 'zwa'}
6、万能参数(一个*一定要放在前面)
1 >>> lis = [1,2,3,4]
2 >>> dic = {'a1':11, 'a2':22, 'a3':33}
3 >>> f3(lis,dic)
4 ([1, 2, 3, 4], {'a2': 22, 'a1': 11, 'a3': 33}) {}
5 >>> f3(*lis,dic)
6 (1, 2, 3, 4, {'a2': 22, 'a1': 11, 'a3': 33}) {}
7 >>> f3(*lis,**dic)
8 (1, 2, 3, 4) {'a2': 22, 'a1': 11, 'a3': 33}
9 >>> f3(lis,d1=11,d2=33)
10 ([1, 2, 3, 4],) {'d1': 11, 'd2': 33}
11 >>> f3(*lis,d1=11,d2=33)
12 (1, 2, 3, 4) {'d1': 11, 'd2': 33}
必备参数须以正确的顺序传入函数。调用时的数量必须和声明时的一样。
调用函数,你必须传入一个参数,不然会出现语法错误:
1 >>> def u1(str):
2 ... print(str)
3 ... return
4 ...
5 >>> u1()
6 Traceback (most recent call last):
7 File "<stdin>", line 1, in <module>
8 TypeError: u1() missing 1 required positional argument: 'str'
9 >>> u1('good')
10 good
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。
使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
以下实例在函数调用时使用参数名:
1 >>> def p1(str):
2 ... print(str)
3 ... return
4 ...
5 >>> p1(str='ok')
6 ok
1 >>> def p2(name,age):
2 ... print(name)
3 ... print(age)
4 ... return
5 ...
6 >>> p2(age=21,name='eric')
7 eric
8 21
调用函数时,缺省参数的值如果没有传入,则被认为是默认值。下例会打印默认的age,如果age没有被传入:
1 >>> def p3(name,age=27):
2 ... print(name)
3 ... print(age)
4 ... return
5 ...
6 >>> p3(age=21,name='lz')
7 lz
8 21
9 >>> p3(name='lzj')
10 lzj
11 27
o(=•ェ•=)m纸上得来终觉浅,绝知此事要躬行o(=•ェ•=)m