lambda
定义
一个匿名函数,见下面
格式以及使用方法:
lambda x(传入的参数):要执行的语句(这条语句执行完之后,就会返回一个值,也就是函数的返回值)
例:
lambda x:x+2
上面那条语句就相当于定义了一个函数,但是怎么用这个函数呢?
可以写f=lambda x:x+2
f(3)
到最后会输出9
其中 x就相当于传入的参数,x+2也就是我们要执行的语句
实际上就相当于
def f(x):
return x+2
高级用法(和for与map连用):
与for连用:
以下是几种错误的例子:
①f=lambda x:x*i for i in range(4)
②f=lambda x:’’.append(i) for i in x.split(’ ‘)
③f=’’.join([lambda x:i for i in x.split(’ ‘)])
④f=lambda x:’’.append(i) for i in range(4)
这是令我误入歧途,但实际上正确的一个例子
f = [lambda x:x*i for i in range(4)]
对错误例子的分析
①f=lambda x:xi for i in range(4)
一定要注意!!!! m for m in xxxxx是python中for的高级用法,
他 只能,也必须返回一个列表!!!!!!!而且每一个m不能来进行其他“不能返回一个元素(装到列表里)”的操作
也就是说,他不能这样写(假设现在有a_dict={1:5,0:7}):
[a_dict[m]=1 for m in range(2)] (这样写会报 invalid syntax错)
但是可以[a_dict[m] for m in range(2)]这样写
这是因为 a_dict[m]=1,这么写没有返回值,但是如果写a_dict[m],那么对于每一个m,a_dict[m]都会返回一个值,比如m=1,那a_dict[m]=5,这个是可以装到列表里的
现在回来看一下f=lambda x:xi for i in range(4) ,其实xi for i in range(4)这么写是没有错的,错误的是 for的高级用法返回的是一个列表,必须用一个[]给他套起来
也就是必须写成 f=lambda x:[xi for i in range(4)]
②和③
其实都犯了一个错误 就是[]没套上,或者套错了地方
②和④ 当时我是咋想的呢,我估计以为 ‘’ 这个能使一个全局的东西了吧(说不清楚)
③呢是因为 []套错地方了
也就是f=’’.join([lambda x:i for i in x.split(’ ‘)])
应该把那个[放到右边去 也就是
f=’’.join(lambda x:[i for i in x.split(’ ‘)]),这样就对了,
因为!!!是lambda x:的里面才是返回值,而不是lambda x:i for i in x.split(’ ')是个返回值
正确例子:
a=prefix_title.applymap(lambda x:’’.join([str(word_id_dict[y])+’ ’ for y in x.split(’ ')]))
我想让句子中的单词都映射成对应的编号
比如 我 是 你 爸爸
可以编码成 0 2 1 3
我的思路是将矩阵中每一个位置的元素(也就是每一个句子)取出来
然后 按空格分成一个数组,对数组中每一个元素进行遍历,映射为一个个数字
然后把这些数字直接拼成一个字符串(用join函数就行)