位置参数 (Required arguments)
python的函数中,可以不设定参数,从而无参数直接调用函数。如果传入参数,常用的参数就是位置参数。比如:
def get_name(data):
return data["name"]
位置参数经常用,也很简单,不多说。
默认参数 (Default arguments)
默认参数也很简单,就是多了个=号,设定一个默认值,如果需要更改,可以直接传入新的值。比如:
def get_age(data, is_man = True):
if is_man:
return data['age']
else:
print("She is women, not a man")
可变参数 (Variable-length arguments)
- 传入的参数个数不定,可以是0个,也可以是多个。
- 只要在参数名称前边,加一个 * 星符号即可,星符号只是表明这个参数是可变参数,函数中调用时,无需加星号
- 以下例子,运用for循环调用了每一个可变参数
def calc(*numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum
>>> calc(1,2,3)
14
关键字参数(Keyword arguments)
- 就是传入键值对参数
- 表示方法:**kw,参数名称前边加两个星
- 关键字参数传入具体值时,就是传入等号的键值对即可(如city=‘Shanghai’, gender=‘Male’)
- 以下例子,使用for循环,调用了每一个关键字参数
def person(name, age, **kw):
if 'city' in kw:
# 有city参数
pass
if 'job' in kw:
# 有job参数
pass
for k, v in kw.items():
print(k, v)
print('name:', name, 'age:', age, 'other:', kw)
>>> person('Jason', 24, city=‘Shanghai’, gender='Male')
city Shanghai
gender Male
name: Jason age: 24 other: {'city': 'Shanghai', 'gender': 'Male'}
扩展
命名关键字参数
- 限制关键字参数传入的名称,比如固定为(city,gender)
- 这时不是用**kw了,而是用 (*, city, gender),一个星,逗号后边跟上固定的关键字参数名称。
- 调用方法和关键字参数一样,但不能传入其他的键值对参数。
- 这个很鸡肋,感觉不需要,直接用位置参数就好了。
def man(name, age, *, city, gender):
print('name:', name, 'age:', age, 'other:', city, gender)
>>> man('Jason', 24, city='Shanghai', gender='Male')
name: Jason age: 24 other: Shanghai Male
参数组合
- 各种类型参数可以组合定义
- 各种类型参数定义有顺序要求
- 顺序必须是:必选参数、默认参数、可变参数、命名关键字参数、关键字参数
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)
def f2(a, b, c=0, *, d, **kw):
print('a =', a, 'b =', b, 'c =', c, 'd =', d, 'kw =', kw)