当前位置: 首页 > news >正文

快速学习Python基础知识详细图文教程9--函数进阶

来源引用网络知识与某站曹老师视频相互结合学习记录,仅供参考!

Python 基础知识

函数进阶

函数的多返回值

在复杂业务情况下,函数是可以有多个返回值的,类型也不限制;

语法是 return 返回值 1,返回值 2,...返回值 n

return [表达式]语句用于退出函数,选择性地向调用方返回一个表达式;不带参数值的 return 语句返回 None;

def apple(): return 1, 'python', True

调用函数返回类型是元组 tuple 类型,元组类型数据再进行取值时通过遍历即可;

# 定义一个多返回值的函数 def apple(): return 1, 'python', True # 返回元组类型 result = apple() print(f'result={result},type={type(result)}') 运行输出结果: result=(1, 'python', True),type=<class 'tuple'>

调用函数返回时通过多个变量进行接收;

# 定义一个多返回值的函数 def apple(): return 1, 'python', True # 返回元组类型 result = apple() print(f'result={result},type={type(result)}') # 通过多个变量接收 a, b, c = apple() print(f'a={a}, b={b}, c={c}') 运行输出结果: result=(1, 'python', True),type=<class 'tuple'> a=1, b=python, c=True

函数的不定长参数

在之前学习 Python 基础知识 3--函数时有介绍过位置参数,关键字参数,默认值参数;所以现在开始学习一个不定长参数,它主要是用于不确定调用的时候会传递多少个参数的测试场景(可能需要一个函数能处理比当初声明时更多的参数,这种参数叫做不定长参数,声明时不会命名);不定长参数的类型分为位置传递和关键字传递两种。

不定长参数(位置传递)

加了星号*(一个 * 星号)的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数;

如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量;

一般通过元组 tuple 类型的 *args 来实现;

def apple(*args): print(args, type(args)) apple(1, '2', "3") apple(True, 1, '456', 3.1415926) # 可不传任何参数,返回一个空的元组 apple() 运行输出结果: (1, '2', '3') <class 'tuple'> (True, 1, '456', 3.1415926) <class 'tuple'> () <class 'tuple'>
不定长参数(关键字传递)

加了两个星号**的参数会以字典的形式导入,可以通过字典 dict 类型**kwargs 来实现;

def apple(**kwargs): print(kwargs, type(kwargs)) apple(name="张三", age=11) apple() 运行输出结果: {'name': '张三', 'age': 11} <class 'dict'> {} <class 'dict'>

使用函数变量

Python 语言中的函数也是一种值;所有函数都是 function 对象,这意味着可以把函数本身赋值给变量;

# 定义计算两个参数相加的函数 def add(x, y): return x + y # 将add自定义函数赋值给my_add,则my_add可以被当做是“add”使用 my_add = add # 调用my_add函数 print(my_add(2, 3)) print(add(1, 1)) 运行输出结果: 5 2

使用函数作为函数形参

有些时候可能需要定义一个函数,该函数的大部分计算逻辑都能确定,但某些处理逻辑暂时无法确定,这意味着某些程序代码需要动态改变时,如果希望调用函数时能动态传入这些代码,那么就需要在函数中定义函数形参,这样即可在调用该函数时传入不同的函数作为参数,从而动态改变这段代码。

1、def func(): --自定义一个函数;

2、def func(x, y): --比如说有两个参数,分别是 x 和 y;

3、def func(x, y, fn): --但是此时具体还不知道 x 和 y 是怎么处理?可以是做加法处理,也可以是做减法处理,只有在调用时才能够确定,这时的话只要直接传入一个函数参数 fn(自定义) 就行了;把函数传进去操作即可;

4、return fn() --然后 return,fn()做为函数;

5、return fn(x, y) -- fn 就是一个函数,然后操作,返回结果;

6、再自定义两个,一个定义加法、一个定义减法;

7、执行调用(在调用时才确认需要调用哪个方法);

# 自定义函数 def func(x, y, fn): return fn(x, y) # 定义加法 def add(x, y): return x + y # 定义减法 def sub(x, y): return x - y # 调用加法 print(func(2, 1, add)) # 调用加法 print(func(2, 1, sub)) 运行输出结果: 3 1

使用函数作为返回值

在 Python 语言中还支持使用函数作为其他函数的返回值(一般用的不多,学习了解);

1、def func(bol): --自定义一个函数,返回类型是布尔类型;

2、根据实际业务选择(传来参数或者里面做一大堆业务逻辑),例如做一个判断;

3、根据 bol 类型返回一个方法;如果 bol 类型是 True 就返回 add 方法,若是 False 就返回减法;(这里举例是一个简单逻辑,可根据实际选择,在一大堆业务逻辑操作中根据不同的情况返回多种方法)

# 自定义函数 def func(bol): if bol: return add else: return sub def add(x, y): return x + y def sub(x, y): return x - y b1 = func(True) print(b1, b1(1, 2)) b2 = func(False) print(b2, b2(1, 2)) 运行输出结果: <function add at 0x0000023C5B589080> 3 <function sub at 0x0000023C5B505A80> -1

lambda 匿名函数

上面所介绍的函数定义都是有函数名的,现在开始学习的 lambda 函数是没有名称的,也就是匿名函数。

在只需要一次性使用的函数的时候,就可以用 lambda 匿名函数,简单方便快捷;

lambda 匿名函数语法:lambda 传入参数:函数体

注意:函数体只能写一行,不支持多行;

# 自定义函数 def func(x, y, fn): return fn(x, y) # 使用lambda匿名函数 print(func(2, 1, lambda x, y: x + y)) 运行输出结果: 3

其他,把 sub 函数变量传参改成 lambda 匿名函数传参;

# 自定义函数 def func(x, y, fn): return fn(x, y) # 使用lambda匿名函数 print(func(2, 1, lambda x, y: x - y)) 运行输出结果: 1

Python lambda(匿名函数)

Python 使用lambda来创建匿名函数,lambda 函数是一种小型、匿名的、内联函数,它可以具有任意数量的参数,但只能有一个表达式;匿名函数不需要使用def关键字定义完整函数,lambda 函数通常用于编写简单的、单行的函数,通常在需要函数作为参数传递的情况下使用;例如在 map()、filter()、reduce() 等函数中。

lambda 函数特点:
  • lambda 函数是匿名的,它们没有函数名称,只能通过赋值给变量或作为参数传递给其他函数来使用。
  • lambda 函数通常只包含一行代码,这使得它们适用于编写简单的函数。
lambda arguments: expression # lambda是 Python 的关键字,用于定义 lambda 函数。 # arguments 是参数列表,可以包含零个或多个参数,但必须在冒号(:)前指定。 # expression 是一个表达式,用于计算并返回函数的结果。
没有参数的 lambda 函数
# 没有参数的 lambda 函数 myla = lambda: "Hello, World!!" # 打印输出 print(myla()) 运行输出结果: Hello, World!!

使用 lambda 创建匿名函数;

# 设置一个函数参数 a,函数计算参数 a 加 50,并返回结果: myla = lambda a : a + 50 # a=5 print(myla(5)) 运行输出结果: 55
设置多个参数的 lambda 函数
# 设置函数参数 a和b 相乘,并返回结果: myla = lambda a, b : a * b # a=10,b=20 print(myla(10, 20)) 运行输出结果: 200

lambda 函数也可以设置多个参数,参数使用逗号,隔开;

# 设置函数参数 a、b 和 c 相加,并返回结果: myla = lambda a, b, c : a + b + c # a=1,b=2,c=3 print(myla(1, 2, 3)) 运行输出结果: 6

lambda 函数通常与内置函数如 map()、filter() 和 reduce() 一起使用,以便在集合上执行操作。

numbers = [1, 2, 3, 4, 5] squared = list(map(lambda x: x**2, numbers)) print(squared) 运行输出结果: [1, 4, 9, 16, 25]

使用 lambda 函数与 filter() 一起,筛选偶数;

numbers = [1, 2, 3, 4, 5, 6, 7, 8] even_numbers = list(filter(lambda x: x % 2 == 0, numbers)) print(even_numbers) 运行输出结果: [2, 4, 6, 8]

使用 reduce() 和 lambda 表达式演示如何计算一个序列的累积乘积;

# 导包 from functools import reduce numbers = [1, 2, 3, 4, 5] # 使用 reduce() 和 lambda 函数计算乘积 product = reduce(lambda x, y: x * y, numbers) print(product) 运行输出结果: 120

reduce() 函数通过遍历 numbers 列表,并使用 lambda 函数将累积的结果不断更新,最终得到了1 * 2 * 3 * 4 * 5 = 120的结果。

未完待续......

http://www.jsqmd.com/news/1208890/

相关文章:

  • 吃透MySQL核心原理:日志、事务、MVCC、锁机制深度详解
  • Universally Slimmable Networks and Improved Training Techniques 解读
  • 别再靠小单打磨品质!这是技术创业者最致命的误区
  • RPA的边界在哪?AI Agent如何突破这些边界:企业级智能自动化的全链路演进解析
  • 小自考推荐—中南财经政法大学会计专业 - 武汉中职最新信息发布
  • 05-08-YooAsset源码-Unity缓存系统与内存管理
  • GPT-5.6三档模型全线发布,Codex并入ChatGPT迈入Agent时代
  • 01 什么是量化金融?
  • 2026年7月最新北海防水补漏权威指南:卫生间/屋面/外墙/地下室正规施工+透明报价+避坑全攻略 - 吉林同城获客
  • FlashAttention技术解析:提升大模型训练效率的关键优化
  • 苹果M7 Ultra芯片:1.5TB统一内存如何重塑本地AI与高性能计算
  • UVa 684 Integral Determinant
  • 鸿蒙三方库 | harmony-utils之NetworkUtil默认网络与绑定网络详解
  • Linux包管理工具YUM核心机制与实战配置
  • 运放电路设计中电阻选型的核心要点与实战技巧
  • 2026年7月最新合肥积家官方售后服务热线与网点地址查询 - 积家官方售后服务中心
  • 如何用psd2fgui一键将PSD设计稿转换为FairyGUI资源包:游戏UI开发效率提升300%
  • 【iOS】离屏渲染
  • 企业自动化选型:RPA、Workflow、Agent到底有什么区别?——深度拆解企业级AI Agent与传统自动化的技术范式演进
  • 论文里的气象数据从哪来?揭秘高水平研究背后的“数据基础设施”
  • VMware安装操作系统KylinOS V10
  • 有质量的海报灯箱广告牌怎么选?实体店老板最关心的20个采购问题全解答 - 品牌报告
  • SAM 2模型解析:医疗影像分割实战与优化
  • 望友DFX软件赋能优特科技:破解人才断层与流程割裂,实现PCBA设计零缺陷
  • CH32X035芯片U盘固件更新方案与实现
  • Claude Code安装配置与核心功能实战指南:内置浏览器与智能代码补全
  • Kimi K2.6:用自然语言调度React+Three.js+Shader工程链路
  • AI智能体开发:Harness与Loop工程的核心差异与实践
  • 第二阶段:SPI 控制器注册
  • 微信里哪个小程序能免费去水印:实测几款工具的真实体验 - 科技热点发布