不定长参数
在Python语言中,函数可以定义不定长参数,也叫可变参数。假设:给定一组数字a,b,c……,请计算a+b+c+ ……。要定义出这个函数,必须确定输入的参数。我们可以把a,b,c……作为一个list或tuple传进来。
示例:
def calc(numbers):
sum = 0
for n in numbers:
sum = sum + n
return sum
print(calc([1, 2, 3])) # 结果是6
print(calc([1, 2, 3,4])) # 结果是10
示例中:调用的时候,需要先组装出一个list或tuple;在Python语言中,可以在函数参数前面添加“*”号把该参数定义为不定长参数;可以看出,不定长参数的使用使得calc()函数定义和调用都变得简洁。
示例:
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n
return sum
print(calc(1, 2, 3, 4))
print(calc())
num = [1, 2, 3]
print(calc(*num))
输出结果:
10
0
6
关键字参数
知识要点:
1.关键字实参是传递参数时使用“名称–值”对的方式,在实参中将名称和值关联起来。
2.关键字实参让开发者无需考虑函数调用中的实参顺序,清楚地指出了函数调用中各个值的用途。
3.关键字参数有扩展函数的功能。
命名关键字参数
当我们需要限制关键字参数的名字,可以用命名关键字参数。和关键字参数**kw不同,如果没有可变参数,命名关键字参数就必须加一个“”号作为特殊分隔符。如果缺少“”,Python语言解释器将无法识别位置参数和命名关键字参数。
示例:若只接收age和city作为关键字参数,可以使用一下的方式。
def enroll(name, gender, *, age, city):
print(name, gender, age, city)
enroll('Jack', 'M', age='18', city='Beijing')
输出结果:
Jack M 18 Beijing
def enroll(name, gender, *grade, age, city):
print(name, gender, age, city)
enroll('Jack', 'M', '18', 'Beijing')
报错结果:
Traceback (most recent call last):
File "D:/python_spider/python_demo/demo_2.py", line 119, in <module>
enroll('Jack', 'M', '18', 'Beijing')
TypeError: enroll() missing 2 required keyword-only arguments: 'age' and 'city'
def enroll(name, gender, *, age='18', city):
print(name, gender, age, city)
enroll('Jack', 'M', city='Beijing') # 结果是:Jack M 18 Beijing
注意事项:
1.*表示不定长参数。
2.**表示不定长的关键字参数。
参数组合
在Python语言中定义函数,开发者可以组合使用这些参数(必选参数、默认参数、可变参数、关键字参数和命名关键字参数)。注意参数定义是有顺序的。定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
示例:定义一个函数,包含上述若干种参数。
def func(a, b, c=0, *args, **kw):
print('a=', a, 'b=', b, 'c=', c, 'args=', args, 'kw=', kw)
print(func(1, 2))
# 输出结果:a= 1 b= 2 c= 0 args= () kw= {}
print(func(1, 2, c=3))
# 输出结果:a= 1 b= 2 c= 3 args= () kw= {}
print(func(1, 2, 3, 'a', 'b'))
# 输出结果:a= 1 b= 2 c= 3 args= ('a', 'b') kw= {}
print(func(1, 2, 3, 'a', 'b', x=4))
# 输出结果:a= 1 b= 2 c= 3 args= ('a', 'b') kw= {'x': 4}
args = (1, 2, 3, 4)
kw = {'x': 5}
print(func(*args, **kw))
# 输出结果:a= 1 b= 2 c= 3 args= (4,) kw= {'x': 5}