Python自定义函数的参数

python函数的参数根据类型特点分成四个:必选参数、默认参数、可变参数、关键字参数


定义 示例代码 结果
必选参数
普通参数,必传
def power(x):
s = 1
while x > 1:
x -= 1
s *= x    
return s
print(power(5))
24
默认参数

给参数一个默认值,可以不传

默认参数必须指向不变对象!!!

def power(x, n=2):
s = 1
while n > 0:
n -= 1
s *= x    
return s
print(power(5))
print(power(5, 3))

25

125

可变参数

参数个数不确定

可以传入0个或任意个参数

这些可变参数在函数调用时自动组装为一个元祖

def call(*number):
sum = 0
for x in number:
sum += x
return sum


l = [1, 2, 3]
t = 4, 5, 6
print(call(*l))
print(call(*t))

6

15

关键字参数

可以传入0个或任意个含参数名的参数

这些关键字参数在函数内部自动组装为一个dict

def enroll(**other):
if 'city' in other:
other['city'] = 'hangzhou' 
print('%r' % other)

extra = {'city':'beijing', 'job':'teacher'}
enroll(**extra)
print(extra)
{'city': 'hangzhou', 'job': 'teacher'}
{'city': 'beijing', 'job': 'teacher'}

当函数中这些参数共存时,是有顺序的:必选参数、默认参数、可变参数、关键字参数

def f1(a, b, c=0, *args, **kv):

    print('a = %r, b = %r, c = %r, args = %r, kv = %r' % (a, b, c, args, kv))

args = (3, 5, 8)
kv = {"meat":"fish", "fruit":"apple", "vegetable":"potato"}
f1(1, "bool", 2, *args, **kv)

>>>>>>>

a = 1, b = 'bool', c = 2, args = (3, 5, 8), kv = {'vegetable': 'potato', 'fruit': 'apple', 'meat': 'fish'}


此时默认参数是必须传的,否则会把可变参数传进默认参数里:

f1(1, "bool", *args, **kv)

>>>>>>>

a = 1, b = 'bool', c = 3, args = (5, 8), kv = {'vegetable': 'potato', 'fruit': 'apple', 'meat': 'fish'}



你可能感兴趣的:(python)