1.位置参数
位置参数就是普通的参数定义
def power(x):
print(x**2)
2.默认参数
当调用函数时没有给参数值,那么会给使用定义的默认值。下面定义的函数可以定义参数值也可以不定义,不定义时x默认为9
def power(x = 3):
print(x**2)
默认参数注意事项,当默认参数使用的是可变的类型参数时,会产生不同的结果。当函数定义默认的参数是一个空列表时,第一次调用函数时,变量L设为['end'],当第二次调用时,会以['end']为默认参数,因为L指向的列表对象地址没有改变,所有L的值为['end','end']。
In [1]: def power(L = []):
...: L.append('end')
...: return L
...:
In [2]:
In [2]: print(power())
['end']
In [3]: print(power())
['end', 'end']
In [4]: print(power())
['end', 'end', 'end']
3.可变参数
当参数的个数不确定时,可以使用可变参数,只需要在变量前加,当想把一个列表或元祖的值传入时,只需要在列表或元祖前加即可。
def sum(*num):
temp = 0
for i in num:
temp += i
return temp
print(sum(1, 2, 4, 60))
L = [1, 3, 5, 6]
print(sum(*L))
4.关键字参数
可以将多个参数封装成dict,下面的函数除了name和age需要定义外,还可以传入多个kv键值对,会被封装成dict。当有一个dict对象时,只需在对象名前加就可以传入参数。
def person(name, age, **kw):
print("name =", name, "age = ", age, "kw = ", kw)
person('fgnb', 33, fg = 'nb')
extra = {'1':'1', '2':"2", '3':"3"}
person('fgsb', '33', **extra)
5.命名关键字参数
主要用于限制关键字参数的参数名,比如希望输入名为a和b的关键字。只需在中间加上一个号,或者参数中间有可变参数
def person(name, age, * , a, b):
print(name, age, a, b)
def person(name, age, *args, city, job): #参数传递时需要2个位置参数,city和job的关键字参数和任意个参数变量
print(name, age, args, city, job)
person('fg', 32, a = 'a', b = 'b')
6.参数的顺序
位置参数、默认参数、可变参数、命名关键字参数和关键字参数。
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)
>>> f1(1, 2)
a = 1 b = 2 c = 0 args = () kw = {}
>>> f1(1, 2, c=3)
a = 1 b = 2 c = 3 args = () kw = {}
>>> f1(1, 2, 3, 'a', 'b')
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {}
>>> f1(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}
>>> f2(1, 2, d=99, ext=None)
a = 1 b = 2 c = 0 d = 99 kw = {'ext': None}
# 可以通过List或者tuple传递参数
>>> args = (1, 2, 3, 4)
>>> kw = {'d': 99, 'x': '#'}
>>> f1(*args, **kw)
a = 1 b = 2 c = 3 args = (4,) kw = {'d': 99, 'x': '#'}
>>> args = (1, 2, 3)
>>> kw = {'d': 88, 'x': '#'}
>>> f2(*args, **kw)
a = 1 b = 2 c = 3 d = 88 kw = {'x': '#'}
来源:https://blog.51cto.com/14157177/2431223