不太熟悉Python的匿名函数用法,这里做一个小节;

解包/打包:

以前没见过这种用法,主要是用于可变参数列表的情况下使用;

例如教程中给出的函数:

def f(*args): print(args)

这种形式在其他语言中并没有见过;

打包的含义:将一系列参数合并为一个序列,可以为字典;

解包的含义:将一个序列或者字典,拆分为单个的元素;

所以两者各自逆操作;

打包多为python中任意数量参数的使用之中,其中也涉及到*args和**kargs的具体用法;

对于python中,args代表arguments,代表位置参数,kwargs为keyword arguments,代表关键参数;

其实说白了就是前者接受一个变长序列,在函数实际实参接受的时候,会将多个可变参数打包为序列,而kwargs则接受等号表达式定义的字典元素,打包成字典;

例如:

python apk 解包 python打包解包_lambda

其中2,3,4作为args接受为列表,kwargs则接受k1=5,k2=6来作为字典元素,最后结果为:


python apk 解包 python打包解包_python apk 解包_02

这一过程中其实包含了打包的概念,即2,3,4打包为序列[2,3,4],而剩余的打包为一个dict;

对应也有解包操作,在实际函数调用或者其他的一些代码段中,可以在传递变量之前进行解包;

*,** 分别为序列和字典进行解包,例如:


python apk 解包 python打包解包_列表_03

python apk 解包 python打包解包_机器学习_04

可以看到,在调用非可变参数函数的时候,直接进行解包,算是一种比较独特的用法;

但是要注意两点:

1.打包和解包不能脱离函数存在,也就是说,只能在函数传参的时候使用;

2.只有函数定义的时候在形参列表时,才被算作打包,内部还是认为是解包;

打包/解包参考

Python中的*args和**kwargs

Map()函数:

map之前以为是类似C++中的容器,结果是一个函数;

旨在为某一个序列中的每一个元素做函数调用,并且返回调用后的列表; map(function, iterable, ...)

上述为具体形式; 对iterable指向的序列调用function,这里的function可以为匿名函数,也可以为实名函数;

Filter()函数:

功能和名字类似,对一哥序列中的元素进行过滤:

python apk 解包 python打包解包_python apk 解包_05

其中通过function的布尔值对iterable指向的序列进行过滤;

python apk 解包 python打包解包_python apk 解包_06

例如,结合lambda函数的用法;

labmda函数:

lambda的具体形式如下所示:


python apk 解包 python打包解包_lambda_07

定义形式十分简单,前为参数列表,expersion为计算表达式,并且会默认返回该结果值;

骚操作和CPP类似,但是少了很多类型捕捉的问题,所以相对来说还是比较简单的;

值得注意的例子:


python apk 解包 python打包解包_lambda_08

包含了通过匿名函数赋值调用,以及默认参数列表;

具体讲解博客

所以lambda可以和map函数结合起来,直接传入function,为其中的每个iteration元素进行计算;


python apk 解包 python打包解包_机器学习_09