【Python使用】嘿马python基础入门全体系教程第10篇:高阶函数,1. 匿名函数,1.3.3 lambda的参数形式【附代码文档】

55 阅读1分钟

🏆🏆🏆教程全知识点简介:1.Python函数高级特性包括匿名函数(lambda语法格式、与普通函数区别、应用场景、参数形式)。2. 文件操作涵盖文件打开关闭、文件读写(write写数据、readlines读数据)。3. 面向对象编程包括类和对象(类定义、对象创建、类对象关系)、类构成、self关键字、对象属性操作、构造方法__init__、字符串方法__str__、多继承、子类重写、多态概念及应用、类属性和实例属性、静态方法和类方法。4. 异常处理涵盖异常传递(try嵌套、函数嵌套调用)、自定义异常抛出。5. 模块系统包括Python模块概念、import导入机制、学生管理系统应用。6. 计算机基础涉及计算机组成、硬件系统、程序处理机制、编程语言概念、Python介绍、解释器作用。7. Python语法基础包括注释分类、输出(格式化输出、转义字符、结束符)、输入语法、数据类型转换、运算符(算数运算符)。8. 控制流程涵盖判断语句(if语句、if-else、if-elif-else、三目运算、if嵌套)、循环语句(while循环、for循环、break和continue)。9. 数据容器包括字符串操作(rfind、partition、splitlines、isalpha、isdigit)、列表(列表格式、相关操作、循环遍历、嵌套)、元组、字典(键值访问)、公共方法、容器类型转换、推导式(列表推导式、多for循环)。10. 函数进阶涵盖函数返回值、函数文档说明、函数嵌套调用、变量作用域(局部变量、全局变量、global关键字)、拆包和变量交换、引用概念、可变不可变类型、函数使用注意事项


📚📚👉👉👉本站这篇博客:   juejin.cn/post/751012…    中查看

📚📚👉👉👉本站这篇博客:   juejin.cn/post/751012…    中查看

✨ 本教程项目亮点

🧠 知识体系完整:覆盖从基础原理、核心方法到高阶应用的全流程内容
💻 全技术链覆盖:完整前后端技术栈,涵盖开发必备技能
🚀 从零到实战:适合 0 基础入门到提升,循序渐进掌握核心能力
📚 丰富文档与代码示例:涵盖多种场景,可运行、可复用
🛠 工作与学习双参考:不仅适合系统化学习,更可作为日常开发中的查阅手册
🧩 模块化知识结构:按知识点分章节,便于快速定位和复习
📈 长期可用的技术积累:不止一次学习,而是能伴随工作与项目长期参考


🎯🎯🎯全教程总章节


🚀🚀🚀本篇主要内容

1. 匿名函数

大家来思考一个问题:

def my_add(a, b):
    return a + b

my_add()

my_add 函数需要2行定义, 能不能简化一下定义方式, 一行搞定! 当然可以, 可以把这种函数写成一个 匿名函数.

  • 匿名函数的概念

  • 匿名函数语法格式

  • 匿名函数和普通函数的区别

  • 匿名函数的使用场景

1.1 语法格式

定义的函数没有名字,这样的函数叫做匿名函数.

先看下匿名函数的语法结构:

lambda [形参1], [形参2], ... : [单行表达式] 或 [函数调用]

使用匿名函数, 上面的函数 就可以定义为单行的函数.

  
  
# 不带参数
  
  
my_fun = lambda : 10 + 20
  
  
# 带参数
  
  
my_add = lambda a, b: a + b
my_add()

注意:

  • lambda表达式的参数可有可无,函数的参数在lambda表达式中完全适用。

  • lambda表达式能接收任何数量的参数但只能返回一个表达式的值。

1.2 和普通函数的区别

email-validator 文档

def my_function(start, end):

    my_sum = 0

    while start <= end:
        my_sum += start
        start += 1

    return my_sum
  1. 匿名函数中不能使用 while 循环、for 循环, 只能编写单行的表达式,或函数调用, 普通函数都可以.

  2. 匿名函数中返回结果不需要使用 return, 表达式的运行结果就是返回结果, 普通函数返回结果必须 return.

  3. 匿名函数中也可以不返回结果. 例如: lambda : print('hello world')

1.3 应用场景

1.3.1 定义简单的单行函数
def my_function(a, b):
    return a + b

使用 lambda 定义格式如下:

my_function = lambda a, b: a + b

PyQt5 文档

1.3.2 作为函数的参数进行传递(重点、难点, 扩展点)
1.3.2.1 为什么函数要作为另外函数的参数?
def my_function1():

    a = 100
    b = 200
    result = a + b
    print('result:', result)


def my_function2():

    a = 100
    b = 200
    result = a - b
    print('result:', result)


def my_function3():

    a = 100
    b = 200
    result = a * b
    print('result:', result)

上面函数定义的缺点是:

  1. 函数名要定义多个, 使用起来不方便. 需要记忆, 那个函数完成什么事情.
  2. 上面函数只定义了三种计算方式: a + b、a -b、a * b, 如果用户希望 a 和 b 进行除法运算, 那么显然还需要再写函数.

解决目标: 1、提高函数的通用性 2、减少代码量

可以通过传递给 my_function 一个函数来完成.

def my_function(func):

    a = 100
    b = 200
    # 把 cucalate_rule 当做函数来调用
    result = func(a, b)
    print('result:', result)


def caculate_rule(a, b):
    return a / b


my_function(caculate_rule)

1.3.2.2. 匿名函数做为函数参数

def my_function(func):

    a = 100
    b = 200
    # 把 cucalate_rule 当做函数来调用
    result = func(a, b)
    print('result:', result)


def caculate_rule1(a, b):
    return a / b

def caculate_rule2(a, b):
    return a // b

def caculate_rule3(a, b):
    return a % b

my_function(caculate_rule1)
my_function(caculate_rule2)
my_function(caculate_rule3)

为了调用 my_function 函数要写很多规则, 整个文件中可能就有很多定义的函数代码, 问题是:

  1. 这些函数只会用一次
  2. 这些函数也比较简单

就没有必要 py 文件中出现这么多无用的代码. 如何改进:

def my_function(func):

    a = 100
    b = 200
    # 把 cucalate_rule 当做函数来调用
    result = func(a, b)
    print('result:', result)


my_function(lambda a, b: a / b)
my_function(lambda a, b: a // b)
my_function(lambda a, b: a % b)

Python 开发者指南

1.3.2.3. 总结

  1. 函数可以做为参数传递给另外一个函数, 可以使得函数的实现更加通用.

  2. 匿名函数也可以作为参数传递给另外一个函数, 对于只需要用到一次函数, 可以通过匿名函数减少代码量.

1.3.3 lambda的参数形式

1.3.3.1.无参数

fn1 = lambda: 100
print(fn1())

1.3.3.2.一个参数

fn1 = lambda a: a
print(fn1('hello world'))

httpx 文档

1.3.3.3.默认参数

openpyxl 文档

fn1 = lambda a, b, c=100: a + b + c
print(fn1(10, 20))

1.3.3.4.可变参数:*args

fn1 = lambda *args: args
print(fn1(10, 20, 30))

注意:这里的可变参数传入到lambda之后,返回值为元组。

1.3.3.5.可变参数:**kwargs

fn1 = lambda **kwargs: kwargs
print(fn1(name='python', age=20))

1.3.4. lambda的应用

1.3.4.1. 带判断的lambda

fn1 = lambda a, b: a if a > b else b
print(fn1(1000, 500))

1.3.4.2. 列表数据按字典key的值排序

students = [
    {'name': 'TOM', 'age': 20},
    {'name': 'ROSE', 'age': 19},
    {'name': 'Jack', 'age': 22}
]

  
  
# 按name值升序排列
  
  
students.sort(key=lambda x: x['name'])
print(students)

  
  
# 按name值降序排列
  
  
students.sort(key=lambda x: x['name'], reverse=True)
print(students)

  
  
# 按age值升序排列
  
  
stud