zoukankan      html  css  js  c++  java
  • python 匿名函数

    匿名函数

      匿名:隐藏名字,既没有名称
      匿名函数:没有名字的函数
      函数没有名字该如何定义?函数没有名字如何调用?
        lambda 表达式
      Python 中,使用 lambda 表达式构建匿名函数。

    lambda x : x ** 2    # 定义
    print((lambda x : x ** 2)(4))    # 调用,输出

      使用 lambda 关键字定义匿名函数,格式为:

    lambda [参数列表] : 表达式

      参数列表不需要小括号,无参就不写参数;
      冒号用来分割参数列表和表达式部分;
      不需要使用 return。表达式的值,就是匿名函数的返回值。表达式中不能出现等号;
      lambda 表达式(匿名函数)只能写在一行上,也称为单行函数。

    匿名函数往往用在为高阶函数传参时,使用 lambda 表达式, 往往能简化代码。

    # 返回常量的函数
    print((lambda : 0)())
        
    # 加法匿名函数,带缺省值
    print((lambda x, y=3: x + y)(5))
    print((lambda x, y=3: x + y)(5, y=10))
    
    # keyword-only 参数
    print((lambda x, *, y=3: x + y)(5))
    print((lambda x, *, y=3: x + y)(5, y=10))
    
    # 可变参数
    print((lambda *args: args)(*range(10)))  # 10
    print((lambda *args: [args])(*range(10)))  # 1
    print((lambda *args: [*args])(*range(10)))  # 10
    print((lambda *args: {x for x in args})(*range(10)))
    print((lambda *args: {x % 2 for x in args})(*range(10)))  # 去重
    print((lambda *args: (x for x in args))(*range(10)))  # 生成器表达式
    for i in (lambda *args: (x for x in args))(*range(10)):
        print(i)
    
    [x for x in (lambda *args: map(lambda x: x + 1, args))(*range(5))]  # 高阶函数
    [x for x in (lambda *args: map(lambda x: (x + 1, args), args))(*range(5))]
    # 例:简单排序
    l1 = [1, 2, '1', 'a']  # sorted 函数
    
    
    # 使用函数
    def fn(x):
        if isinstance(x, str):
            return ord(x)
        return x
    
    
    print(sorted(l1, key=fn))
    
    # 使用 lambda
    print(sorted(l1, key=lambda x: ord(x) if isinstance(x, str) else x))




  • 相关阅读:
    测开之路九十九:js函数、事件、window窗体对象
    测开之路九十八:js变量和语句
    测开之路九十七:js的引用方式
    学生管理之登录实现
    学生管理之表单设计
    二、Django用户认证之cookie和session
    一、Django前后端交互之Ajax和跨域问题
    中间介
    Java SE之反射技术[Class](三)
    Java SE之反射技术[Field](二)
  • 原文地址:https://www.cnblogs.com/zyybky/p/12760053.html
Copyright © 2011-2022 走看看