python函数的参数

Python的函数定义中除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数

1、必选参数:须以正确的顺序传入函数。调用时的数量必须和声明时的一样。调用函数是必须传入一个参数,否则会报错

def printme(str):#str就是一个比传参数
    print(str)
printme('6666666')
#printme()  #若不传参数,将会报错printme() missing 1 required positional argument: 'str'

2、默认参数:调用函数时,默认参数的值如果没有传入,则被认为是默认值

def printinfo(name,age=18):
    print('%s是%s岁'%(name,age))
printinfo(name='abc')#age不传的时候,就使用默认值,传了使用新传的值

3、关键字参数:关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。函数printinfo除了必选参数nameage外,还接受关键字参数kw。在调用该函数时,可以只传入必选参数

def printinfo(name,age=18,**kw):#kw就是关键字函数,两个**
    print('%s是%s岁,其他信息%s'%(name,age,kw))
printinfo(age=25,name='猴子',city='beijin')
#输出:猴子是25岁,其他信息{'city': 'beijin'}

4、可变参数:需要一个函数能处理比当初声明时更多的参数。这些参数叫做可变参数。可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个

def calc(*numbers): #numbers就是一个可变参数,一个*
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
print(calc(2,3,4))

定义可变参数和定义list或tuple参数相比,仅仅在参数前面加了一个*号。在函数内部,参数numbers接收到的是一个tuple,因此,函数代码完全不变。但是,调用该函数时,可以传入任意个参数,包括0个参数。如果已经有一个list或者tuple,要调用一个可变参数怎么办?可以这样做:

def calc(*numbers):
    sum = 0
    for n in numbers:
        sum = sum + n * n
    return sum
list1 =[2,4,6,8]
print(calc(list1[0],list1[1],list1[2],list1[3])) #当然,这样看起来很复杂,可以试试下面这种
print(calc(*list1))#和上面一样,只是简便写法

5、参数组合

在Python中定义函数,可以用必选参数、默认参数、可变参数和关键字参数,这4种参数都可以一起使用,或者只用其中某些,但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数和关键字参数。在函数调用的时候,Python解释器自动按照参数位置和参数名把对应的参数传进去。

def func(a,b,c=0,*args,**kwargs):#依次为必传参数,默认值参数,可变参数,关键字参数
    print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kwargs)

func(1,2,3)
func(1,2,3,'a','b')
func(1,2,3,'a','b',x=99)

输出为:

a = 1 b = 2 c = 3 args = () kw = {}
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
#有意思的用法
args = (1, 2, 3, 4)
kw = {'x': 99}
func(*args, **kw)#可变参数传一个元组,不可变参数仍为字典
#输出跟上面最后一个一样

 

posted @ 2018-12-03 15:45  blueteer  阅读(407)  评论(0编辑  收藏  举报