python中lambda的用法

一、lambda函数也叫匿名函数,即,函数没有具体的名称。先来看一个最简单例子:

def f(x):

return x**2

print f(4)

Python中使用lambda的话,写成这样

g = lambda x : x**2

print g(4)

二、lambda和普通的函数相比,就是省去了函数名称而已,同时这样的匿名函数,又不能共享在别的地方调用。

其实说的没错,lambda在Python这种动态的语言中确实没有起到什么惊天动地的作用,因为有很多别的方法能够代替lambda。

1. 使用Python写一些执行脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。

2. 对于一些抽象的,不会别的地方再复用的函数,有时候给函数起个名字也是个难题,使用lambda不需要考虑命名的问题。

3. 使用lambda在某些时候让代码更容易理解。

lambda基础

lambda语句中,冒号前是参数,可以有多个,用逗号隔开,冒号右边的返回值。lambda语句构建的其实是一个函数对象,见证一下:

>>> foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
>>> print filter(lambda x: x % 3 == 0, foo)
[18, 9, 24, 12, 27]
>>> print map(lambda x: x * 2 + 10, foo)
[14, 46, 28, 54, 44, 58, 26, 34, 64]
>>> print reduce(lambda x, y: x + y, foo)
139

在对象遍历处理方面,其实Python的for..in..if语法已经很强大,并且在易读上胜过了lambda。

以Mark Lutz著的《Python学习手册》为教程,每天花1个小时左右时间学习,争取两周完成。 --- 写在前面的话

2013-7-22 21:00 学习笔记

1,lambda的一般形式是关键字lambda后面跟一个或多个参数,紧跟一个冒号,以后是一个表达式。lambda是一个表达式而不是一个语句。它能够出现在Python语法不允许def出现的地方。作为表达式,lambda返回一个值(即一个新的函数)。lambda用来编写简单的函数,而def用来处理更强大的任务。

[python] view plain copy

  1. f = lambda x,y,z : x+y+z
  2. print f(1,2,3)
  3. g = lambda x,y=2,z=3 : x+y+z
  4. print g(1,z=4,y=5)

输出结果为:

[python] view plain copy

  1. 6
  2. 10

2,lambda表达式常用来编写跳转表(jump table),就是行为的列表或字典。例如:

[python] view plain copy

  1. L = [(lambda x: x**2),
  2. (lambda x: x**3),
  3. (lambda x: x**4)]
  4. print L[0](2),L[1](2),L[2](2)
  5. D = {‘f1‘:(lambda: 2+3),
  6. ‘f2‘:(lambda: 2*3),
  7. ‘f3‘:(lambda: 2**3)}
  8. print D[‘f1‘](),D[‘f2‘](),D[‘f3‘]()

输出结果为:

[python] view plain copy

  1. 4 8 16
  2. 5 6 8

3,lambda表达式可以嵌套使用,但是从可读性的角度来说,应尽量避免使用嵌套的lambda表达式。

4,map函数可以在序列中映射函数进行操作。例如:

[python] view plain copy

  1. def inc(x):
  2. return x+10
  3. L = [1,2,3,4]
  4. print map(inc,L)
  5. print map((lambda x: x+10),L)

输出结果为:

[python] view plain copy

  1. [11, 12, 13, 14]
  2. [11, 12, 13, 14]

5,列表解析可以实现map函数同样的功能,而且往往比map要快。例如:

[python] view plain copy

  1. print [x**2 for x in range(10)]
  2. print map((lambda x: x**2), range(10))

输出结果为:

[python] view plain copy

  1. [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
  2. [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]

6,列表解析比map更强大。例如:

[python] view plain copy

  1. print [x+y for x in range(5) if x%2 == 0 for y in range(10) if y%2 ==1]

输出结果为:

[python] view plain copy

  1. [1, 3, 5, 7, 9, 3, 5, 7, 9, 11, 5, 7, 9, 11, 13]

7,生成器函数就像一般的函数,但它们被用作实现迭代协议,因此生成器函数只能在迭代语境中出现。例如:

[python] view plain copy

  1. def gensquares(N):
  2. for i in range(N):
  3. yield i**2
  4. for i in gensquares(5):
  5. print i,

输出结果为:

[python] view plain copy

  1. 0 1 4 9 16

8,所有的迭代内容(包括for循环、map调用、列表解析等等)将会自动调用iter函数,来看看是不是支持了迭代协议。

9,生成器表达式就像列表解析一样,但它们是扩在圆括号()中而不是方括号[]中。例如:

[python] view plain copy

  1. for num in (x**2 for x in range(5)):
  2. print num,

输出结果为:

[python] view plain copy

  1. 0 1 4 9 16

10,列表解析比for循环具有更好的性能。尽管如此,在编写Python代码时,性能不应该是最优先考虑的。

11,没有return语句时,函数将返回None对象。

12,函数设计的概念:

  • 耦合性:只有在真正必要的情况下才使用全局变量
  • 耦合性:不要改变可变类型的参数,除非调用者希望这样做
  • 耦合性:避免直接改变另一个文件模块中的变量
  • 聚合性:每一个函数都应有一个单一的、统一的目标

13,最后给个默认参数和可变参数的例子:

[python] view plain copy

  1. def saver(x=[]):
  2. x.append(1)
  3. print x
  4. saver([2])
  5. saver()
  6. saver()
  7. saver()

输出结果为:

[python] view plain copy

    1. [2, 1]
    2. [1]
    3. [1, 1]
    4. [1, 1, 1]

原文地址:https://www.cnblogs.com/yanzi-meng/p/8337279.html

时间: 2024-10-11 17:01:43

python中lambda的用法的相关文章

python中lambda的另类使用

Lambda挺强大,有兴趣的人看下关于lambda的理论,就清楚邱奇编码的实现了. 网上的都只是讲的千篇一律的匿名函数的简单用法,很没趣. 那些建议取消python中lambda的同志,知道lambda可以这么用么. 带if/else: ( lambda x, y: x if x < y else y )( 1, 2 ) 科里化: ( lambda x: ( lambda y: ( lambda z: x + y + z )( 1 ) )( 2 ) )( 3 ) 递归: func = lambd

细说Python的lambda函数用法,建议收藏

细说Python的lambda函数用法,建议收藏 在Python中有两种函数,一种是def定义的函数,另一种是lambda函数,也就是大家常说的匿名函数.今天我就和大家聊聊lambda函数,在Python编程中,大家习惯将其称为表达式. 1.为什么要用lambda函数? 先举一个例子:将一个列表里的每个元素都平方. 先用def来定义函数,代码如下 def sq(x): return x*x map(sq,[y for y in range(10)]) 再用lambda函数来编写代码 map(la

python中enumerate()的用法

先出一个题目:1.有一 list= [1, 2, 3, 4, 5, 6]  请打印输出:0, 1 1, 2 2, 3 3, 4 4, 5 5, 6 打印输出, 2.将 list 倒序成 [6, 5, 4, 3, 2, 1] 3.将a 中的偶数挑出 *2 ,结果为 [4, 8, 12] 这个例子用到了python中enumerate的用法.顺便说一下enumerate在for循环中得到计数的用法,enumerate参数为可遍历的变量,如 字符串,列表等: 返回值为enumerate类. 示例代码如

Python中range的用法

Python中range的用法 函数原型:range(start, end, scan): 参数含义:start:计数从start开始.默认是从0开始.例如range(5)等价于range(0, 5); end:技术到end结束,但不包括end.例如:range(0, 5) 是[0, 1, 2, 3, 4]没有5 scan:每次跳跃的间距,默认为1.例如:range(0, 5) 等价于 range(0, 5, 1)

python中lambda

lambda_expr ::= "lambda" [parameter_list]: expression python中lambda可以理解为一个匿名函数,它的要求是函数的运算部分只能是一个表达式,参数部分可以有多个参数

python中MySQLdb模块用法实例

篇文章主要介绍了python中MySQLdb模块用法,以实例形式详细讲述了MySQLdb模块针对MySQL数据库的各种常见操作方法,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了python中MySQLdb模块用法.分享给大家供大家参考.具体用法分析如下: MySQLdb其实有点像php或asp中连接数据库的一个模式了,只是MySQLdb是针对mysql连接了接口,我们可以在python中连接MySQLdb来实现数据的各种操作. python连接mysql的方案有oursql.PyMyS

Python中assert的用法

Python中assert的用法 Python中assert用来判断语句的真假,如果为假的话将触发AssertionError错误 如: >>> a = 23 >>> a 23 >>> assert a == 23 >>> a -=1 >>> a 22 >>> assert a == 23 Traceback (most recent call last):   File "",

python 中 print 函数用法总结

Python 思想: “一切都是对象!” 在 Python 3 中接触的第一个很大的差异就是缩进是作为语法的一部分,这和C++等其他语言确实很不一样,所以要小心 ,其中python3和python2中print的用法有很多不同,python3中需要使用括号 缩进要使用4个空格(这不是必须的,但你最好这么做),缩进表示一个代码块的开始,非缩进表示一个代码的结束.没有明确的大括号.中括号.或者关键字.这意味着空白很重要,而且必须要是一致的.第一个没有缩进的行标记了代码块,意思是指函数,if 语句.

Python中self的用法详解,或者总是提示:TypeError: add() missing 1 required positional argument: &#39;self&#39;的问题解决

https://blog.csdn.net/songlh1234/article/details/83587086 下面总结一下self的用法详解,大家可以访问,可以针对平时踩过的坑更深入的了解下. https://blog.csdn.net/CLHugh/article/details/75000104, Python中self的用法详解,或者总是提示:TypeError: add() missing 1 required positional argument: 'self'的问题解决 原文