python lambda

匿名函数和lambda:

lambda [args1,[args2]] : expression

python 使用lambda来创建匿名函数,匿名函数不需要以标准的方式进行创建,但是作为函数,它们也能有参数,一个完整的lambad语句代表了一个表达式,这个表达式的定义体和声明体必须在同一行。

1. 参数是可选的

lambda : True

在上面的例子中,没有使用参数创建了一个函数对象,但是在程序中没有在任何地方保存它也没有调用它,这个函数对象的引用计数在函数创建的时候被设置为True,但是因为没有引用被保存下来计数很快就会到0,然后被垃圾回收机制回收。针对于这种情况lambda最好使用在不需要多次调用的函数定义上

true = lambda: True

true()   # 会输出True

2. 使用参数构建lambda

def add(x, y): return x + y
lambda x,y: x+y

上面定义的两个函数计算效果是等价的。

3. 函数式编程的几个常用函数filter map reduce

1. filter(func, seq) 调用一个布尔函数,func用来迭代遍历每个seq中的元素,返回一个使func返回值为true的元素的序列

1 data = [1, 2, 3, 4, 5, 6, 7, 8]
2
3 def testFilter():
4     result = filter(lambda x:x%2, data)
5     for eachitem in result:
6         print(eachitem)
7
8 if __name__ == "__main__":
9     testFilter()

上面的例子查找返回集合中奇数的列表,

针对与filter函数的效果其实有一种更好的方式,列表表达式

1 data = [1, 2, 3, 4, 5, 6, 7, 8]
2
3 def testFilter():
4     print([item for item in data if item % 2])

2. map内建函数和filter相似,都是通过函数来处理序列,但是不像filter,map将函数调用映射到序列的每个元素上,并返回一个函数所有返回值的列表。

 1 data = [1, 2, 3, 4, 5, 6, 7, 8]
 2
 3 def testmap():
 4     result = map(lambda x: x**2, data)
 5     for item in result:
 6         print(item)
 7
 8 def testmap2():
 9     result = map(lambda x,y:x+y,data[:3],data[4:])
10     for item in result:
11         print(item)
12
13 if __name__ == "__main__":
14     testmap()
15     testmap2()

上面的代码要注意一点:如果map函数中传入的func有一个参数,那么在map传入的一个序列,如果map函数中传入的func有多个参数,那么传入的序列个数为相应的个数,并且在同时将每一个序列中相应的位置的元素一同传入到func中。将所有的返回值组成列表。

3. reduce 使用一个二元函数(接收两个值作为输入,一个输出),一个序列和一个可选的初始化器。

函数通过取出序列的头俩个值传入func中计算,将计算结果返回,和序列的下一个元素一起作为参数传递到func中,直到遍历所有的元素之后返回一个单一的值。

  reduce(func,(1,2,3)) == func(func(1,2),3)

1 from functools import reduce
2 data = [1, 2, 3, 4, 5, 6, 7, 8]
3
4 def testreduce():
5     result = reduce(lambda x,y: x + y, data)
6     print(result)
7
8 if __name__ == "__main__":
9     testreduce()

注意在python3之后reduce不再是内建函数而是改在functools中了。

时间: 2024-10-23 00:52:39

python lambda的相关文章

python lambda简单介绍

python lambda 在python中,如果想要创建函数需要使用关键字def,而如果想要创建匿名函数,就需要使用lambda. lambda创建的函数和def创建的函数有什么区别? def创建的函数是有名称的,而lambda没有 lambda会创建一个函数的对象,但是却不会把对象给一个标识符,而def 会把函数对象赋值给一个变量 def 是一条语句,而lambda它只是一个表达式 y = lambda x:print(x)y(10) # 10 例如上面,通过lambda创建了一个表达式,x

Python -- lambda, map, filter

lambda f = lambda x : x * 2 f(5) map list(map(lambda x:x[0].upper()+x[1:].lower(), ['sQd', 'ZORO'])) #传入列表,首字母变大写,其余变小写 filter list(filter(lambda n: n%2 == 1, [1,2,3,4,5])) #保留奇数,舍弃偶数 list(filter(lambda s: s and s.strip(), ['S', '', None, 'b'])) #删除一

python——lambda,filter,map,reduce

lambda函数 使用方法:lambda [arg1[,arg2,arg3,...,argn]] : expression 如: add = lambda(x,y:x+y) add(1,2) 结果为1+2=3 filter函数 filter(bool_func,seq) 此函数的功能相当于过滤器,通过返回值为bool的函数bool_func来迭代遍历seq中的每个元素: 结果返回一个seq中使bool_func返回值为true的元素的序列. filter(lambda x : x%2 == 0,

Python lambda和Python def

1.Python lambda和Python def区别分析 Python支持一种有趣的语法,它允许你快速定义单行的最小函数.这些叫做lambda的函数,是从Lisp借用来的,可以用在任何需要函数的地方. lambda的语法时常会使人感到困惑,lambda是什么,为什么要使用lambda,是不是必须使用lambda? ? 1 2 3 4 5 6 7 8 9 10 >>> def f(x): ...   return x+2 ... >>> f(1) 3 >>

python -> lambda与def的区别

lambda可以定义一个匿名函数,而def定义的函数必须有一个名字.这应该是lambda与def两者最大的区别. 与Javascript不同的是,python中匿名函数与非匿名函数需要使用不同的语法来定义.这是因为: lambda是一个expression,不是一个statement. lambda is an expression, not a statement. 因此lambda表达式可以出现在def无法出现的地方.比如list comprehension. lambda表达式可以匿名也可

Python lambda和reduce函数

看到一篇博文写lambda和reduce函数,笔者小痒了一下,用Python实现一下: #! /usr/bin/env python # -*-coding:utf-8-*- import time import math def test_reduce(): start_time = time.clock() print reduce[A1] (lambdax,y:x*y[A2] ,range(1,long(input('plz input a num(>0):')+1))[A3] ) pri

Python Lambda函数的几种使用方法

在进行编程时,一般我们会给一个函数或者变量起一个名字,该名称是用于引用或寻址函数变量.但是有一个低调的函数,你不需要赋予它名字,因此该函数也叫匿名函数.该函数就是Python中的Lambda函数,下面就来为大家解析lambda函数的基本使用方法. 为什么要使用Python Lambda函数? 匿名函数可以在程序中任何需要的地方使用,但是这个函数只能使用一次,即一次性的.因此Python Lambda函数也称为丢弃函数,它可以与其他预定义函数(如filter(),map()等)一起使用.相对于我们

python lambda表达式简单用法【转】

python lambda表达式简单用法 1.lambda是什么? 看个例子: g = lambda x:x+1 看一下执行的结果: g(1) >>>2 g(2) >>>3 当然,你也可以这样使用: lambda x:x+1(1) >>>2 可以这样认为,lambda作为一个表达式,定义了一个匿名函数,上例的代码x为入口参数,x+1为函数体,用函数来表示为: 1 def g(x):2 return x+1 非常容易理解,在这里lambda简化了函数定义

Python | Lambda 函数

Python Lambda 概念 Lambda函数是一个小型匿名函数. Lambda函数可以接受任意多个参数,但只能有一个表达式. 示例 待补充 参考 https://www.w3schools.com/python/python_lambda.asp 原文地址:https://www.cnblogs.com/casperwin/p/12495851.html