函数2

1、函数传入list或者tuple,可以一次传入多个元素,由于list和tuple的组成元素可以不同,比如整数和字符串混合组成list或者tuple,因此可以达到输入可变参数的目的

def test2(numbers):
print('本次一共传入了%d个元素'%len(numbers))
j=0
for i in numbers:
j+=1
print('第%d个元素是%s!'%(j,i))

2、另一种可变参数的实现方式,函数可以支持形参个数可变,支持0个参数

def test(*numbers):
print('本次一共传入了%d个参数'%len(numbers))
j=0
for i in numbers:
j+=1
print('第%d个参数是%s!'%(j,i))

如例子中所示在形参numbers前加*,调用时使用test(1,2,3,4)传入4个参数,可以在test中使用这4个参数

3、如果调用时使用list或者tuple,而函数定义时使用的是可变参数,那么在调用时在list前加*就可以实现将list或者tuple中的每个元素变成可变参数传入。

例如test(*[1,2,3,4])

 4、学习了上面的可变参数输入,有个疑问,如果参数中有必输参数,又该怎么输入呢?因为不可能在可变参数前再加两个参数,这样调用会出错,这时我们引入了关键字参数概念

函数可以有必输参数,还可以有关键字参数。

def person(name,age,**keyword):
print('name:',name,'age:',age,'other:',keyword)
person('Michell',30,city='beijing')

输出为:name: Michell age: 30 other: {'city': 'beijing'}

注意此时的第三个输入项为key=value模式,输入后变量变为了dict,keyword实际就是一个dict

同之前的可变参数调用类似,我们也可以先初始化一个dict,然后用dict转换成关键字参数传进去

extra={'city':'Suzhou','job':'engineer'}
person('kimi','28',**extra)

这样就把extra的每一个元素当做关键字参数传入了,输出为:

name: kimi age: 28 other: {'city': 'Suzhou', 'job': 'engineer'}

这样使用关键字参数输入有个问题,就是输入参数不受控制,调用方可以随意输入任意的dict,如果要控制输入的关键字参数,那么需要使用命名关键字参数,只接受定义的关键字参数,在命名关键字参数的形参前添加*参数。

例如:

def person(name,age, *,city,job):
print(name,age,city,job)

调用时必须按如下格式调用,前面两个是位置参数,后面两个是命名关键字参数,调用时不能输入city,job以外的关键字参数,如果定义时没有设置默认值,那么调用时也不能不写该命名关键字参数。

person('Jack',24,city='Beijing',job='Engineer')

这可以理解为并非可变参数,而是必须输入的,只不过前面的是位置参数,后面的是命名关键字参数。

如果定义时命名关键字参数设置了默认值, 那么调用时可以不用输入该命名关键字参数

def person(name,age, *,city='Beijing',job):
print(name,age,city,job)

调用时可以使用

person('Jack',24,job='Engineer'),不需要输入city,而默认值为'Beijing'

4、参数组合

学习了上述纷繁复杂的参数类型,在定义函数时该如何组合这些类型不同的参数呢,就需要按照一定的参数定义顺序:必选参数、默认参数(如果默认参数后跟必选参数会出错,因为无法知道调用时使用的值该赋值给必选参数还是赋值给默认参数) 、可变参数(可变参数也一定要在关键字参数之前)、命名关键字参数、关键字参数

例如:

def f1(a,b,c=0,*args,city,job,**kw):
print('a=',a,'b=',b,'c=',c,'args=',args,'city=',city,'job=',job,'kw=',kw)

调用使用:

f1(1,2,3,4,5,6,7,city='beijing',job='BOE',other='here')

输出:

a= 1 b= 2 c= 3 args= (4, 5, 6, 7) city= beijing job= BOE kw= {'other': 'here'}

还可以通过tuple和list调用函数

args=(1,2,3,4)
kw={'city':'Bejing','job':'Eng','other':None}
f1(*args,**kw)

 输出为:

a= 1 b= 2 c= 3 args= (4,) city= Bejing job= Eng kw= {'other': None}

 

posted on 2017-05-07 15:53  vonkimi  阅读(99)  评论(0编辑  收藏  举报

导航