函数2——参数

1.位置参数:从左至右进行匹配

2.关键字参数:通过参数名进行匹配

3.默认参数:为没有传入值的参数定义参数值

4.可变参数(动态传参):收集任意多基于位置或关键字的参数

参数出现顺序

​ 在函数中,参数出现顺序为:位置参数、关键字参数、默认参数(函数定义时)、任意长度的位置参数、任意长度的关键字参数

位置参数和关键字参数
def f(id,name,age):
	print(id,name,age)
f(1901001,'Able',21)
# 1901001 Able 21
f(id =1901001,'Able',21)
#报错
f(1901001,'Able',age =21)
# 1901001 Able 21
#  位置参数 > 关键字参数
关键字参数和默认参数
def f(name,age,gender = 'man'):
	print(name,age,gender)
f('Able',21)
# Able 21 man
def f(name,gender = 'man',age)
	print(name,age,gender)
#导致默认参数无法使用,还会增加关键字参数的使用

#  位置参数 >关键字参数 > 默认参数

重要警告: 默认值只会创建一次。这条规则在默认值为可变对象(列表、字典以及大多数类实例)时很重要

def func(a,L = []):
    L.append(a)
    print(a,L)
func(1)  			#第一使用默认参数
func(2,L = [2])
func(3)             #第二次使用默认参数
#结果:
1 [1]
2 [2, 2]
3 [1, 3]     
任意参数

1.任意数量的位置参数

def func(*arges):
    print(arges)
func(1,2,3)
#结果
(1, 2, 3)

#Python将所有位置相关的参数收集到一个新的元组中,并将这个元组赋值给变量arges。

#在函数定义时,如果将位置参数放在*arges后面,在函数调用时,都会当作是*arges的形参,从而引发错误。

2.任意数量的关键字参数

def func(**kwarges):
	print(kwarges)
func(a = 1,b = 2)
#结果
{'a': 1, 'b': 2}

# **它只对关键字参数有效,将这些关键字参数传递给一个新的字典

#在函数定义时,如果将关键字参数或默认参数放在**kwarges后面,在函数调用时,都会当作是**kwarges的形参,从而引发错误。
参数解包

​ 在函数调用时,同样能够使用*和**语法

def func(a,b,c):
	print(a,b,c)
L = [7,8,9]
func(*L)   
#  7 8 9

#在函数调用时,*会对参数集合进行解包。

def func(a,b,c):
    print(a,b,c)
D = {'a':1,'b':2,'c':3}
#  1 2 3

#在函数调用时,**会以key:value对的形式解包一个字典,使其成为独立的关键字参数。

​ 查找一个序列中与其它n(n>1)个序列中的相同元素(每个序列中都至少有一个)

def union(*arges):
	res = []
	for i in arges[0]:
		for other in arges[1:]:
			if i not in other:
				break  
		else:
			res.append(i)
	return res		

keyword - only参数

def kwo(a,*b,c):
	print(a,b,c)
#c必须按关键字传递

函数作为参数

例如内置函数map(function,iterable)

posted @ 2019-09-07 11:47  Sroxi  阅读(138)  评论(0编辑  收藏  举报