缘由
做的实验需要复写sklearn的CountVectorizer中的analyzer,于是去查看官方文档,在示例中发现:
>>> import re
>>> def to_british(tokens):
... for t in tokens:
... t = re.sub(r"(...)our$", r"\1or", t)
... t = re.sub(r"([bt])re$", r"\1er", t)
... t = re.sub(r"([iy])s(e$|ing|ation)", r"\1z\2", t)
... t = re.sub(r"ogue$", "og", t)
... yield t
...
>>> class CustomVectorizer(CountVectorizer):
... def build_tokenizer(self):
... tokenize = super(CustomVectorizer, self).build_tokenizer()
... return lambda doc: list(to_british(tokenize(doc)))
...
>>> print(CustomVectorizer().build_analyzer()(u"color colour"))
[...'color', ...'color']
通过代码中的输入输出样例大概可以明白lambda在此处实现的功能,但是本着求真的心态决定还是具体查一下lambda在python中的使用。
用处
lambda可以认为是匿名函数的定义,但为了代码更好的可读性一般不随意使用,主要用于减少单行函数的定义。非单行函数都不推荐使用lambda进行声明。
示例
g = lambda x:x+1
# 等价于
g(x)=x+1
值得注意的是,for…in…结构体能够解决的事情一般不使用lambda来解决,这样有时候会导致代码可读性下降。