Python 函数进阶

news/2025/3/25 12:47:07/文章来源:https://www.cnblogs.com/kyle-7Qc/p/18788094

Python 函数进阶

1. 匿名函数 lambda

  • 匿名函数是指没有名字的函数,这种函数只能使用一次,一般是在函数的函数体只有一句代码且只有一个返回值时,可以使用匿名函数来简化。

1.1 语法结构

result = lambda 参数列表: 表达式

1.2 示例

def calc(a, b):return a + bprint(calc(10, 20))  # 输出 30print('--' * 20)s = lambda a, b: a + b  # s 表示一个匿名函数
print(type(s))  # <class 'function'>
print(s(2, 3))  # 输出 5print('--' * 20)# 列表中使用匿名函数
lst = [10, 20, 30, 40]
for i in range(len(lst)):result = lambda x: x[i]  # 根据索引取值,x 为列表,result 的类型是函数print(result(lst))  # lst 是实际参数print('--' * 20)# 排序使用匿名函数
student_score = [{'name': 'a', 'score': 99},{'name': 'b', 'score': 68},{'name': 'c', 'score': 89},{'name': 'd', 'score': 79}
]# 字典类型,对列表进行排序,排序的规则是根据字典中的成绩
student_score.sort(key=lambda x: x.get('score'), reverse=True)  # 成绩的降序
print(student_score)  # [{'name': 'a', 'score': 99}, {'name': 'c', 'score': 89}, {'name': 'd', 'score': 79}, {'name': 'b', 'score': 68}]

1.3 注意事项

  • 匿名函数通常用于简化代码,尤其是当函数体只有一句代码时。

  • 匿名函数可以作为参数传递给其他函数,例如在 sort()filter() 中使用。

2. 递归函数

  • 在一个函数的函数体内调用该函数本身,该函数就是递归函数。

  • 一个完整的递归操作由两部分组成, 一部分是递归调用,一部分是递归终止条件,一般可使用 if-else 结构来判断递归的调用和递归的终止。

2.1 阶乘示例

def fac(n):  # n 的阶乘 N! = N * (N-1)! ... 1! = 1if n == 1:return 1else:return n * fac(n - 1)  # 自己调用自己print(fac(5))  # 输出 120

2.2 斐波那契数列

从第三项开始,每项都等于前两项之和。公式为:f(n) = f(n-1) + f(n-2)

def fac1(n):if n == 1 or n == 2:return 1else:return fac1(n - 1) + fac1(n - 2)for i in range(1, 10):print(fac1(i), end=' ')  # 输出 1 1 2 3 5 8 13 21 34

2.3 注意事项

  • 递归函数必须有递归终止条件,否则会导致无限递归,最终引发栈溢出错误。

  • 递归函数的调用深度有限制,Python 默认的最大递归深度为 1000。如果需要更大的递归深度,可以使用 sys.setrecursionlimit() 设置。

3. 常用内置函数

3.1 数据类型转换函数

函数名称 描述说明
bool(obj) 获取指定对象 obj 的布尔值。
str(obj) 将指定对象 obj 转换为字符串类型。
int(x) x 转换为整数类型。
float(x) x 转换为浮点数类型。
list(sequence) 将序列(如元组、字符串等)转换为列表类型。
tuple(sequence) 将序列(如列表、字符串等)转换为元组类型。
set(sequence) 将序列(如列表、元组等)转换为集合类型。

3.2 示例代码

# bool() 示例
print("非空字符串的布尔值", bool('hello'))  # True
print("空字符串的布尔值", bool(''))         # False
print("空列表的布尔值", bool([]))           # False
print("空元组的布尔值", bool(()))           # False
print("空字典的布尔值", bool({}))           # False# str() 示例
print(str(123))       # "123"
print(str([1, 2, 3])) # "[1, 2, 3]"# int() 示例
print(int("123"))     # 123
print(int(3.14))      # 3
# print(int("3.14")) # ValueError: invalid literal for int() with base 10: '3.14'
# print(int("abc"))  # ValueError: invalid literal for int() with base 10: 'abc'# float() 示例
print(float("3.14"))  # 3.14
print(float(123))     # 123.0
# print(float("abc")) # ValueError: could not convert string to float: 'abc'# list() 示例
print(list("hello"))  # ['h', 'e', 'l', 'l', 'o']
print(list((1, 2, 3))) # [1, 2, 3]# tuple() 示例
print(tuple("hello")) # ('h', 'e', 'l', 'l', 'o')
print(tuple([1, 2, 3])) # (1, 2, 3)# set() 示例
print(set("hello"))   # {'h', 'e', 'l', 'o'}
print(set([1, 2, 3, 2])) # {1, 2, 3}

3.3 常用的数学函数

函数名称 描述说明
abs(x) 获取 x 的绝对值。
divmod(x, y) 获取 xy 的商和余数,返回一个元组 (商, 余数)
max(sequence) 获取序列 sequence 的最大值。
min(sequence) 获取序列 sequence 的最小值。
sum(iter) 对可迭代对象 iter 进行求和运算。
pow(x, y) 获取 xy 次幂。
round(x, d) x 进行四舍五入,保留 d 位小数。

3.4 示例代码

# abs() 示例
print(abs(-10))   # 输出 10
print(abs(10))    # 输出 10# divmod() 示例
print(divmod(10, 3))  # 输出 (3, 1),表示商为3,余数为1# max() 示例
print(max([1, 2, 3, 4]))  # 输出 4
print(max("hello"))       # 输出 'o'# min() 示例
print(min([1, 2, 3, 4]))  # 输出 1
print(min("hello"))       # 输出 'e'# sum() 示例
print(sum([1, 2, 3, 4]))  # 输出 10
print(sum((1, 2, 3, 4)))  # 输出 10# pow() 示例
print(pow(2, 3))  # 输出 8,即 2 的 3 次幂# round() 示例
print(round(3.14159))     # 3
print(round(3.14159, 2))  # 3.14  # 保留两位小数
print(round(31.4159, -1)) # 30.0  # 整数31,-1位,对个位数进行四舍五入
print(round(314.159, -2)) # 300.0 # 整数314,-2位,对十位数进行四舍五入

3.5 常用的迭代器操作函数

函数名称 描述说明
sorted(iter) 对可迭代对象 iter 进行排序,返回一个新的列表。
reversed(sequence) 反转序列 sequence,生成一个新的迭代器对象。
zip(iter1, iter2) iter1iter2 打包成元组,返回一个可迭代的 zip 对象。
enumerate(iter) 根据可迭代对象 iter 创建一个 enumerate 对象,返回带索引的迭代器。
all(iter) 判断可迭代对象 iter 中所有元素的布尔值是否都为 True
any(iter) 判断可迭代对象 iter 中是否至少有一个元素的布尔值为 True
next(iter) 获取迭代器 iter 的下一个元素。
filter(function, iter) 通过指定条件 function 过滤序列 iter,返回一个迭代器对象。
map(function, iter) 通过函数 function 对可迭代对象 iter 的每个元素进行操作,返回一个迭代器对象。

3.6 示例代码

# sorted() 示例
print(sorted([3, 1, 4, 1, 5, 9]))  # 输出 [1, 1, 3, 4, 5, 9]
print(sorted([3, 1, 4, 1, 5, 9], reverse=True))  # 输出 [9, 5, 4, 3, 1, 1]# reversed() 示例
print(list(reversed([1, 2, 3, 4])))  # 输出 [4, 3, 2, 1]# zip() 示例
print(list(zip([1, 2, 3], ['a', 'b', 'c'])))  # 输出 [(1, 'a'), (2, 'b'), (3, 'c')]# enumerate() 示例
print(list(enumerate(['a', 'b', 'c'])))  # 输出 [(0, 'a'), (1, 'b'), (2, 'c')]# all() 示例
print(all([True, True, True]))  # 输出 True
print(all([True, False, True]))  # 输出 False# any() 示例
print(any([False, False, False]))  # 输出 False
print(any([False, True, False]))  # 输出 True# next() 示例
it = iter([1, 2, 3])
print(next(it))  # 输出 1
print(next(it))  # 输出 2
print(next(it))  # 输出 3# filter() 示例
def is_even(x):return x % 2 == 0  # 判断,可能是 True,False
print(list(filter(is_even, [1, 2, 3, 4, 5])))  # 输出 [2, 4]# map() 示例
def square(x):return x * x
print(list(map(square, [1, 2, 3, 4])))  # 输出 [1, 4, 9, 16]

3.7 其他常用函数

函数名称 描述说明
format(value, format_spec) valueformat_spec 指定的格式进行显示。
len(s) 获取 s 的长度或 s 中元素的个数。
id(obj) 获取对象 obj 的内存地址。
type(x) 获取 x 的数据类型。
eval(s) 执行字符串 s 所表示的 Python 代码,并返回结果。

3.8 示例代码

# format() 示例
print(format(123.456, ".2f"))  # 输出 123.46,保留两位小数
print(format(123456, ",d"))    # 输出 123,456,数字用逗号分隔
print(format(0.1234, ".2%"))   # 输出:12.34%# len() 示例
print(len("hello"))           # 输出 5,字符串的长度
print(len([1, 2, 3, 4]))      # 输出 4,列表的长度# id() 示例
a = 10
print(id(a))                  # 输出 a 的内存地址# type() 示例
print(type(10))               # 输出 <class 'int'>
print(type("hello"))          # 输出 <class 'str'>
print(type([1, 2, 3]))        # 输出 <class 'list'># eval() 示例
print(eval("10 + 20"))        # 输出 30,执行字符串中的表达式
x = 5
print(eval("x * 2"))          # 输出 10,执行字符串中的表达式

总结

  • 匿名函数

    • 使用 lambda 定义匿名函数。
    • 匿名函数通常用于简化代码,尤其是当函数体只有一句代码时。
  • 递归函数

    • 在函数内部调用自身。
    • 必须有递归终止条件,否则会导致无限递归。
  • 常用内置函数

    • 数据类型转换函数:bool()str()int()float()list()tuple()set()
    • 数学函数:abs()divmod()max()min()sum()pow()round()
    • 迭代器操作函数:sorted()reversed()zip()enumerate()all()any()next()filter()map()
    • 其他函数:format()len()id()type()eval()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/904287.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Nature Communications | 单细胞表观图谱破解颅神经发育疾病非编码变异之谜

摘要总结 这篇文章是2024年9月发表在《Nature Communications》杂志上的一篇研究,标题为“A cell type-aware framework for nominating non-coding variants in Mendelian regulatory disorders”。这篇文章通过整合小鼠胚胎颅运动神经元的单细胞染色质可及性、组蛋白修饰和基…

IOC容器启动及Bean生成流程

目录 一、容器启动IOC启动流程重点二、扫描并注册BeanDefination加载并过滤资源注册BeanDefination三、BeanFactory后置处理 四、注册Bean后置处理器 五、遍历BeanDefination,实例化单例BeanpreInstantiateSingletonsdoGetBean(我们只关注单例)createBean实例化前执行doCrea…

关于QQ提示非官方正版应用

笔者是magisk+lsp+zygisk+shamiko环境,依然是被制裁了,momo检测只有Bootloader未锁定。 也没想在手机上登录QQ(已经摆烂,反正现在工作了,基本都用微信了),只是想在手机打两把王者,登录王者时选择用ipad扫码登录(只是授权登录) 这时候提示我 sign of app is error(100…

苍穹外卖-day04

day-04 25-3-20 新增套餐 需求分析&设计业务规则套餐名称唯一 套餐必须属于某个分类 套餐必须包含菜品 名称、分类、价格、图片为必填项 添加菜品窗口需要根据分类类型来展示菜品 新增的套餐默认为停售状态接口设计(共涉及到4个接口):根据类型查询分类(已完成) 根据分…

提示词工程师自白:我如何用一个技巧解放自己的生产力

“在AI时代的交响乐中,提示词工程师是默默无闻却至关重要的指挥家,用精心编织的语言指引大模型这个智能巨兽创造出人类思维的奇迹。” AI粉嫩特攻队,2025年3月22日。 自从新的生产范式诞生以来,我的工作中多了一项新身份——提示工程师。 在不同的大语言模型之间穿梭,寻求…

20244123 实验一《Python程序设计》实验报告

20244123 2024-2025-2 《Python程序设计》实验x报告 课程:《Python程序设计》 班级: 2441 姓名: 邓淑怀 学号:20244123 实验教师:王志强 实验日期:2025年3月20日 必修/选修: 公选课 1.实验内容 (1)熟悉Python开发环境; (2)练习Python运行、调试技能; (3)编写程序…

https://liweinlp.com/13092 总结

https://liweinlp.com/13092一段话总结 大型语言模型(LLMs)的“黑箱”特性(因复杂参数和层级结构导致决策过程难以追踪)引发信任、伦理和监管挑战。“Logits Lens”技术通过解码模型中间层的隐藏状态,将其转化为词元(token)的概率分布,直观展示模型在不同层级对下一个词…

RabbitMQ的用户详解以及maven导入

一.RabbitMQ的角色分类 1:none:不能访问management plugin2:management:查看自己相关节点信息列出自己可以通过AMQP登入的虚拟机 查看自己的虚拟机节点 virtual hosts的queues,exchanges和bindings信息 查看和关闭自己的channels和connections 查看有关自己的虚拟机节点vir…

第四周第三章3.1—3.5

3.1 initial_weight = 50 print("年份\t地球体重(kg)\t月球体重(kg)") for year in range(1, 11): earth_weight = initial_weight + (year - 1) * 0.5 moon_weight = earth_weight * 0.165 print(f"{year}\t\t{earth_weight:.2f}\t\t{moon_weight:.2f}")3…

PolarCTF网络安全2025春季个人挑战赛 WRITE UP

1-1 可老师签到 本题思路如下: 提示“发送的内容为双写字符串拼接”公众号发送flagflag即可1-2 find 本题思路如下: 把表格文件当压缩包解压,找到flag.xlsx\xl\worksheets\sheet1.xml 发现里面存了数据,于是考虑把数据格子上色以得到flag 先将xml文件处理以获得纯数据代码:…

Go红队开发—CLI框架(一)

CLI命令行工具编写基础学习(一)。CLI开发框架 命令行工具开发,主要是介绍开发用到的包,集成了一个框架,只要学会了基本每个人都能开发安全工具了。 该文章先学flags包,是比较经典的一个包,相比后面要学习的集成框架这个比较自由比较细化点,自定义可能高一些,后续会学到一…