自定义函数变量的设置(*/**),lambda匿名函数(map/filter/zip/enumerate)

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/dongzixian/article/details/89288115

自定义函数变量的设置

一个星号
*传入元组,且这个变量为可变变量
两个星号
**后的那些参数被当做字典类型传递到函数中
带有双星号的可变参数只能出现在参数列表的最后
注意双星号是字典类型(字典形式要有键值对)

>>>def d(a,b=6,*c,**d):
    print("a=",a,"b=",b,"c=",c,"d=",d)
>>>d(1,2,3,4)
a= 1 b= 2 c= (3, 4) d= {}
>>>def d(a,b=6,*c,**d):
    print("a=",a,"b=",b,"c=",c,"d=",d)
>>>d(a=1,b=2,c=3)
a= 1 b= 2 c= () d= {'c': 3}

不能重复赋值

#对b二次赋值报错
>>>def d(a,b=6,*c,**d):
    print("a=",a,"b=",b,"c=",c,"d=",d)
>>>d(1,2,3,4,b=1)
TypeError: d() got multiple values for argument 'b'

强制命名参数

>>>def aaa(*,a,b,c):
    return a+b+c
>>>aaa(a=1,b=1,c=1)
3

强制命名必须用命名来传递值

>>>def aaa(*,a,b,c):
    return a+b+c
>>>aaa(a=1,1,1)
SyntaxError: positional argument follows keyword argument#报错

lambda匿名函数

函数名 = lambda 参数:表达式

等价于

def 函数名(参数):
函数体
return 返回值
!!! lambda不允许包含复合语句,只可以包含一个表达式

map函数

map(function(函数),iterable,…(一个或多个序列))

>>>def square(x):
    return x**2
>>>map(square,[1,2,3,4,5])
# 生成迭代器
<map at 0x2c5f1526860>

需要转换

>>>def square(x):
    return x**2
>>>list(map(square,[1,2,3,4,5]))
[1, 4, 9, 16, 25]

结合lambda

>>>map(lambda x:x**2,[1,2,3,4,5])
<map at 0x2c5f1526cf8>
>>>list(map(lambda x:x**2,[1,2,3,4,5]))
[1, 4, 9, 16, 25]

filter函数

filter(function(判断函数),iterable(可迭代对象))
留下True,过滤False
判断函数:只能接受一个参数,且返回值是True或False
可迭代对象:直接调filter函数只返回迭代器,需要用list()或其他函数来转换,但在for循环中可以直接使用

zip函数

zip(seq[,seq,…])
可把两个或多个序列中的相应项合并在一起
以元组的格式返回它们
在处理完最短序列中的所有项后停止

>>>a = [1,2,3]
>>>b = [4,5,6]
>>>list(zip(a,b))
#返回元组列表
[(1, 4), (2, 5), (3, 6)]
#返回字典类型
>>>dict(zip([1,2],[3,4]))
{1: 3, 2: 4}
#zip(*...)为还原
>>>a = [1,2,3]
>>>b = [4,5,6]
>>>list(zip(*zip(a,b)))
[(1, 2, 3), (4, 5, 6)]

enumerate函数

用于将一个可遍历的数据编号

>>>s = ['a','b','c','d']
>>>list(enumerate(s))
#默认从0开始
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')]
>>>list(enumerate(s,start = 1))
#可以设定从1或其他数字开始
[(1, 'a'), (2, 'b'), (3, 'c'), (4, 'd')]

猜你喜欢

转载自blog.csdn.net/dongzixian/article/details/89288115