[ python ] 函数的参数

 位置参数

def power(x, n):
    return x ** n

 站在形参的角度:
    x 和 n 都是位置参数
    
站在实参的角度:
    x 和 n 有两种传参的方法
        (1)严格按照顺序进行传参
        (2)按照默认参数的形式进行传参python

>>> power(2, n = 4)
16

或

>>> power(n=4, x=2)
16

 

 默认参数

在平常使用中,咱们发现计算最多的都是 x 的平方,可是咱们每次调用都须要传递两个参数,在这样的状况下,咱们能够将 n 默认设置为 2,这就是默认参数。函数

>>> power(4)
16

或者

>>> power(4, n=2)
16

 而对于 n > 2 的其余状况,就必须明确的传入 n 好比:power(4, n=4)spa

>>> power(4, n=4)
256

 

从上面的例子能够看出,默认参数能够简化函数的调用。设置默认参数时,有几点须要注意:
    (1)必选参数(位置参数)在前,默认参数在后,不然Python的解释器会报错;
    (2)把变化大的参数放前面,变化小的参数放后面。变化小的参数就能够做为默认参数。对象

使用默认参数能够下降调用函数的难度,可是定义默认参数要牢记一点:默认参数必须指向不变对象blog

 

 可变参数

在python函数中,还能够定义可变参数。可变参数就是传入的参数个数是可变的,能够是1个、2个到任意个,还能够是0个。ci

定义可变参数:it

def calc(*args):
    n = 0
    for i in args:
        n += i
    return  n
		

>>> calc(1,2,3,4,5,6)	# 能够传入的参数个数是可变的
21
>>> calc(1,2,3)
6

 

也能够直接传入一个 list 或者 tuple,传入方式以下:class

>>> li = [1,2,3,4]
>>> calc(*li)
10

>>> t1 = (1,2,3,4,5,6)
>>> calc(*t1)
21

 

 关键字参数

可变参数容许传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个 tuple。而关键字参数容许传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个 dict 。语法

>>> def person(name, age, **kwargs):	# 关键参数定义为: **kwargs
...     print('name:', name, 'age:', age, 'other:', kwargs)
...
>>> person('jay', 20, city='taibei', sex='male')	# 关键字参数容许传入0个或任意个含参数名的参数
name: jay age: 20 other: {'sex': 'male', 'city': 'taibei'} 	# 函数调用时自动组装为一个 dict

 

 命名关键字参数

对于关键字参数,函数的调用者能够传入任意不受限制的关键字参数。至于到底传入什么,就须要在函数内部经过kwargs检查,若是要限制关键字参数的名字,就可使用命名关键字参数,例如 person函数只接收 city 和 job 做为关键字参数。定义以下:程序

和关键字参数**kwargs不一样,命名关键字参数须要一个特殊分隔符*,*后面的参数被视为命名关键字参数。

>>> def person(name, age, *, city, job):
...     print(name, age, city, job)
...
>>> person('jay', 20, city='taibei', job='singer')
jay 20 taibei singer

 

 参数的组合

在python中定义函数,能够用位置参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数均可以组合使用。可是请注意,参数定义的顺序必须是: 位置参数、默认参数、可变参数、命名关键字参数、关键字参数

 

好比定义一个函数,包含若干参数:

>>> def f1(a, b, c=3, *args, **kwargs):
...     print('a=', a, 'b=', b, 'c=', c, 'arg=', args, 'kwargs=', kwargs)
...
>>> f1('a', 'b', 'c', 'd', 'e', 'f',  h='H', i='I' ,j='J')
a= a b= b c= c arg= ('d', 'e', 'f') kwargs= {'i': 'I', 'j': 'J', 'h': 'H'}

 

 小结

默认参数必定要用不可变对象,若是是可变对象,程序运行时会有逻辑错误!要注意定义可变参数和关键字参数的语法:    *args是可变参数,args接收的是一个tuple;    **kw是关键字参数,kw接收的是一个dict。    以及调用函数时如何传入可变参数和关键字参数的语法:可变参数既能够直接传入:func(1, 2, 3),又能够先组装list或tuple,再经过*args传入:func(*(1, 2, 3));关键字参数既能够直接传入:func(a=1, b=2),又能够先组装dict,再经过**kw传入:func(**{'a': 1, 'b': 2})。

相关文章
相关标签/搜索