lambda表达式 匿名函数

lambda函数是一种快速定义单行最小函数的方法,是从Lisp借鉴而来的,可以用在任何需要函数的地方。

基础

lambda语句中,冒号前是参数,可以有多个,用逗号分割;冒号右边是返回值。 
lambda语句构建的是一个函数对象。

# 两个参数,x和y,返回两个参数的和
>>> f = lambda x, y: x+y
>>> type(f)
<type ‘function‘>
>>> f
<function <lambda> at 0x7f6d023000c8>
>>> f(10, 12)
22
>>> f("hello ", "world")
‘hello world‘

map

map(…) 函数官方文档 
map函数结果生成一个list,参数为函数、一个或多个序列;如果函数的参数只有一个,那么应该有一个序列,有多个参数,那么应该有相应数量的序列。 
简单的说:map(function,sequence) :对sequence中的item依次执行function(item),见执行结果组成一个List返回 
map(function, sequence[, sequence, …]) -> list

Return a list of the results of applying the function to the items of the argument sequence(s).  If more than one sequence is given, the function is called with an argument list consisting of the corresponding item of each sequence, substituting None for missing values when not all sequences have the same length.  If the function is None, return a list of the items of the sequence (or a list of tuples if more than one sequence).
  • 1
  • 2

>>> map(lambda x: x*2, range(1,10))
[2, 4, 6, 8, 10, 12, 14, 16, 18]
>>> map(lambda x, y: x*y, range(1,10), range(2, 11))
[2, 6, 12, 20, 30, 42, 56, 72, 90]
>>> map(lambda x: 1, range(1,10))
[1, 1, 1, 1, 1, 1, 1, 1, 1]

官方文档中最后一句解释,特别重要: map函数的参数中有一个是function(函数),这个函数也可以是None(那句话的意思不是返回值是None)。如果是None的话,map就与zip函数类似了,看下面的例子, 区别已经在zip函数介绍过了。

>>> map(None, range(10), range(1, 11))
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10)]
>>> zip(range(10), range(1, 11))
[(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6), (6, 7), (7, 8), (8, 9), (9, 10)]
>>> zip(range(10))
[(0,), (1,), (2,), (3,), (4,), (5,), (6,), (7,), (8,), (9,)]
>>> map(None, range(10))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

因此,map函数的执行过程,……不好描述啊……

reduce

reduce(function,sequence):对sequence中的item顺序迭代调用function。 
reduce(…) 官方文档 
reduce(function, sequence[, initial]) -> value 
Apply a function of two arguments cumulatively to the items of a sequence, from left to right, so as to reduce the sequence to a single value. For example, reduce(lambda x, y: x+y, [1, 2, 3, 4, 5]) calculates ((((1+2)+3)+4)+5). If initial is present, it is placed before the items of the sequence in the calculation, and serves as a default when the sequence is empty. 
根据文档里面显示的代码:

>>> reduce(lambda x, y: x+y, [1, 2, 3, 4, 5])
15
# 内部执行过程,((((1+2)+3)+4)+5)

# list只有一个元素
>>> reduce(lambda x: x+2, [1])
1

#reduce 如果list的长度大于1,lambda表达式必须有两个参数(大于2个参数是不对的)
>>> reduce(lambda x: x+2, [1, 2, 3, 4, 5])
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: <lambda>() takes exactly 1 argument (2 given)

filter

filter(function,sequence):对sequence中的item依次执行function(item),将执行结果为True的item组成一个List/String/Tuple(取决于sequence的类型)返回。

>>> filter(lambda x:x>10, range(1,20))
[11, 12, 13, 14, 15, 16, 17, 18, 19]

>>> filter(lambda s: s != ‘a‘ , ‘abcdefg‘)
‘bcdefg‘

原文地址:https://www.cnblogs.com/ldq1996/p/8446671.html

时间: 2024-10-05 02:57:00

lambda表达式 匿名函数的相关文章

[二] java8 函数式接口详解 函数接口详解 lambda表达式 匿名函数 方法引用使用含义 函数式接口实例 如何定义函数式接口

函数式接口详细定义 package java.lang; import java.lang.annotation.*; /** * An informative annotation type used to indicate that an interface * type declaration is intended to be a <i>functional interface</i> as * defined by the Java Language Specificat

lambda表达式匿名函数

匿名函数是一个“内联”语句或表达式,可在需要委托类型的任何地方使用.可以使用匿名函数来初始化命名委托,或传递命名委托(而不是命名委托类型)作为方法参数. C# 中委托的发展 在 C# 1.0 中,您通过使用在代码中其他位置定义的方法显式初始化委托来创建委托的实例.  C# 2.0 引入了匿名方法的概念,作为一种编写可在委托调用中执行的未命名内联语句块的方式.  C# 3.0 引入了 Lambda 表达式,这种表达式与匿名方法的概念类似,但更具表现力并且更简练.  这两个功能统称为“匿名函数”. 

【C++】C++中的lambda表达式和函数对象

目录结构: contents structure [-] lambda表达式 lambda c++14新特性 lambda捕捉表达式 泛型lambda表达式 函数对象 函数适配器 绑定器(binder) std::mem_fn()适配器 lambda表达式是C++11中引入的一项新技术,利用lambda表达式可以编写内嵌的匿名函数,用以替换独立函数或者函数对象,并且使代码更可读.但是从本质上来讲,lambda表达式只是一种语法糖,因为所有其能完成的工作都可以用其它稍微复杂的代码来实现.但是它简便

十二、C# 委托与Lambda表达式(匿名方法的另一种写法)

委托与Lambda表达式 1.委托概述 2.匿名方法 3.语句Lambda 4.表达式Lambda 5.表达式树 一.委托概述 相当于C++当中的方法指针,在C#中使用delegate 委托来提供相同的功能, 它将方法作为对象封装起来,允许在"运行时"间接地绑定一个方法调用. 声明的委托相当于一种自定义的数据类型. 1.背景 冒泡排序 1 static class SimpleSort1 2 { 3 public static void BubbleSort(int[] items)

[python] use Lambda Expressions to define a function/ 使用Lambda表达式定义函数

https://docs.python.org/zh-cn/3/tutorial/controlflow.html 4.7.5. Lambda 表达式¶ 可以用 lambda 关键字来创建一个小的匿名函数.这个函数返回两个参数的和: lambda a, b: a+b .Lambda函数可以在需要函数对象的任何地方使用.它们在语法上限于单个表达式.从语义上来说,它们只是正常函数定义的语法糖.与嵌套函数定义一样,lambda函数可以引用包含范围的变量: >>> >>> de

Scheme中lambda表达式与函数指针小例

SICP/Chapter2/Exercise-2.4 Lambda表达式语法 (lambda kw-formals body) 题目描述 用过程性表示方式重写序对的cons.car.cdr Scheme代码 (define (cons-24 x y) (lambda (m) (m x y))) (define (car-24 z) (z (lambda (p q) p))) 这段代码只有4行,但是逻辑关系并不好理解. 原因在于函数式语言的自顶向下实现方式不符合一般的逻辑习惯. lambda以类似

【Python笔记】Python的几个高级语法概念浅析:lambda表达式 &amp;&amp; 闭包 &amp;&amp; 装饰器

本文主要记录自己对几个高级语法概念的理解:匿名函数.lambda表达式.闭包.装饰器. 这几个概念并非Python特有,但本文只限于用Python做说明. 1. 匿名函数 匿名函数(anonymous function)是指未与任何标识符绑定的函数,多用在functional programming languages领域,典型应用场合: 1) 作为参数传给高阶函数(higher-order function ),如python中的built-in函数filter/map/reduce都是典型的

java/c++中有关lambda表达式的书写及stream流的操作的基本总节

package com.acm; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; import java.util.Comparator; import java.util.HashMap; import java.util.List; import java.util.Map; import java.util.Map.Entry; import java.util.Prior

12_Python的(匿名函数)Lambda表达式_Python编程之路

Python作为一门高级语言,与很多编程语言一样都具有匿名函数这一特征 匿名函数,也就Lambda表达式,通俗来讲就是不用命名的方法,直接定义,直接用即可 创建匿名函数需要用到Lambda关键字,下面我们通过一个简单的匿名函数的创建熟悉匿名函数 lambda a,b : a + b 这个表达式返回的值是a加上b的值,他需要传入两个参数,也就是a,b,同时还需要一个表达式,这样才能构成一个完整的匿名函数 通过代码完善这一部分的理解 In [1]: func = lambda a,b : a+b I