python之匿名函数

有没有想过定义一个很短的回调函数,但又不想用 def 的形式去写一个那么长的函数,那么有没有快捷方式呢?

答案是有的。

python 使用 lambda 来创建匿名函数,也就是不再使用 def 语句这样标准的形式定义一个函数。

匿名函数主要有以下特点:

  • lambda 只是一个表达式,函数体比 def 简单很多。
  • lambda 的主体是一个表达式,而不是一个代码块。仅仅能在 lambda 表达式中封装有限的逻辑进去。
  • lambda 函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。

基本语法

lambda [arg1 [,arg2,.....argn]]:expression

示例:

# -*- coding: UTF-8 -*-

sum = lambda num1 , num2 : num1 + num2;

print( sum( 1 , 2 ) )

输出的结果:

3

注意:尽管 lambda 表达式允许你定义简单函数,但是它的使用是有限制的。 你只能指定单个表达式,它的值就是最后的返回值。也就是说不能包含其他的语言特性了, 包括多个语句、条件表达式、迭代以及异常处理等等。

匿名函数中,有一个特别需要注意的问题,比如,把上面的例子改一下:

# -*- coding: UTF-8 -*-

num2 = 100
sum1 = lambda num1 : num1 + num2 ;

num2 = 10000
sum2 = lambda num1 : num1 + num2 ;

print( sum1( 1 ) )
print( sum2( 1 ) )

你会认为输出什么呢?第一个输出是 101,第二个是 10001,结果不是的,输出的结果是这样:

10001
10001

这主要在于 lambda 表达式中的 num2 是一个自由变量,在运行时绑定值,而不是定义时就绑定,这跟函数的默认值参数定义是不同的。所以建议还是遇到这种情况还是使用第一种解法。

相关推荐

  1. python匿名函数

    2024-04-02 13:06:01       34 阅读
  2. Python——lambda匿名函数

    2024-04-02 13:06:01       59 阅读
  3. python匿名函数

    2024-04-02 13:06:01       30 阅读
  4. Python基础】Lambda匿名函数

    2024-04-02 13:06:01       34 阅读
  5. python的lambda匿名函数

    2024-04-02 13:06:01       27 阅读
  6. C++lambda【匿名函数

    2024-04-02 13:06:01       31 阅读
  7. Python:匿名函数lambda用法

    2024-04-02 13:06:01       33 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-02 13:06:01       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-02 13:06:01       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-02 13:06:01       82 阅读
  4. Python语言-面向对象

    2024-04-02 13:06:01       91 阅读

热门阅读

  1. 钉钉“牵手”微信,互联网“拆墙”大步迈进

    2024-04-02 13:06:01       34 阅读
  2. 技术与安全的交织

    2024-04-02 13:06:01       31 阅读
  3. mysql定时任务

    2024-04-02 13:06:01       36 阅读
  4. 递归解决图的深度遍历

    2024-04-02 13:06:01       37 阅读
  5. UDP端口连不上的情况

    2024-04-02 13:06:01       35 阅读
  6. Mybatis——SqlSession的工作流程

    2024-04-02 13:06:01       33 阅读
  7. 数据类型与变量

    2024-04-02 13:06:01       37 阅读
  8. php获取拼多多详情api接口、商品主图

    2024-04-02 13:06:01       32 阅读