Python第四弹:python进阶-匿名函数和内置函数

一、匿名函数

匿名函数: lambda表达式

语法:

lambda 参数1,..参数2 : 返回值

python 复制代码
# 创建一个求和的匿名函数,并且计算 20+15
fn = lambda a, b : a + b
# 输出:35
print(fn(20,15))

二、内置函数

内置函数
abs() dict() help() min() setattr()
all() dir() hex() next() slice()
any() divmod() id() object() sorted()
ascii() enumerate() input() oct() staticmethod()
bin() eval() int() open() str()
bool() exec() isinstance() ord() sum()
bytearray() filter() issubclass() pow() super()
bytes() float() iter() print() tuple()
callable() format() len() property() type()
chr() frozenset() list() range() vars()
classmethod() getattr() locals() repr() zip()
compile() globals() map() reversed() import()
complex() hasattr() max() round() reload()
delattr() hash() memoryview() set()

常见分类

  • 数值计算: abs()round()min()max()sum()

  • 类型转换: int()float()str()list()tuple()

  • 迭代与函数式: code>map()、filter()zip()enumerate()

  • 反射与对象: type()isinstance()getattr()setattr()

  • 输入输出: print()input()open()

2.1 zip

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

列表的第0为放一起,第1位放一起。

python 复制代码
# 2.1 zip把列表元素按照位置合并为不同的元组列表
#    0      1       2
lst1 = ["赵本山", "潘长江", "苏有朋"]
lst2 = [40, 28, 36]
lst3 = ["乡村爱情", "举起手来", "情深深雨蒙蒙"]

lst = []
for i in range(len(lst1)):
    lst.append({lst1[i], lst2[i], lst3[i]})
# 输出:[{40, '乡村爱情', '赵本山'}, {28, '举起手来', '潘长江'}, {'苏有朋', '情深深雨蒙蒙', 36}]
print(lst)

# 采用zip实现此功能
result = zip(lst1, lst2, lst3)
# 输出:<zip object at 0x102dc6bc0>
print(result)
# 打印内容,转化为列表打印
# 输出:[('赵本山', 40, '乡村爱情'), ('潘长江', 28, '举起手来'), ('苏有朋', 36, '情深深雨蒙蒙')]
print(list(result))

2.2 作用域函数

2.2.1 locals函数

locals函数:函数以字典的类型返回当前位置的全局局部变量。

python 复制代码
# 2.作用域函数
# 2.1 locals() 函数会以字典类型返回当前位置的全部局部变量。
# 对于函数, 方法, lambda 函式, 类, 以及实现了 __call__ 方法的类实例, 它都返回 True。
# 输出: 
# {'__name__': '__main__', '__doc__': None, '__package__': None,
#  '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x1008cfb70>,
#  '__spec__': None, '__builtins__': <module 'builtins' (built-in)>,
#  '__file__': '/Users/zhouronghua/WORK/DEV/projects/Python/进阶篇/匿名函数.py',
#  '__cached__': None, 'fn': <function <lambda> at 0x100a36400>,
#  'lst1': ['赵本山', '潘长江', '苏有朋'], 'lst2': [40, 28, 36],
#  'lst3': ['乡村爱情', '举起手来', '情深深雨蒙蒙'],
#  'lst': [{'赵本山', 40, '乡村爱情'}, {'举起手来', 28,, '潘长江'}, {'情深深雨蒙蒙', 36, '苏有朋'}],
#  'i': 2, 'result': <zip object at 0x100a43e00>}
print(locals())

2.2.2 globals函数

globals() 函数会以字典类型返回当前位置的全部全局变量。

python 复制代码
# 2.2 globals() 函数会以字典类型返回当前位置的全部全局变量。
print("打印globals结果")
# 输出:
# {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x104657b70>, '__spec__': None, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/Users/zhouronghua/WORK/DEV/projects/Python/进阶篇/匿名函数.py', '__cached__': None, 'fn': <function <lambda> at 0x104712f00>, 'lst1': ['赵本山', '潘长江', '苏有朋'], 'lst2': [40, 28, 36], 'lst3': ['乡村爱情', '举起手来', '情深深雨蒙蒙'], 'lst': [{40, '赵本山', '乡村爱情'}, {'举起手来', 28, '潘长江'}, {'情深深雨蒙蒙', 36, '苏有朋'}], 'i': 2, 'result': <zip object at 0x10471fe00>}
print(globals())

2.3 sorted函数

sorted() 函数对所有可迭代的对象进行排序操作。

2.3.1 sorted函数排序

sorted函数的语法:

python 复制代码
def sorted(
    iterable: Iterable[SupportsRichComparisonT], /, *, key: None = None, reverse: bool = False
) -> list[SupportsRichComparisonT]

参数说明:

  • iterable -- 可迭代对象。
  • cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
  • key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
  • reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
python 复制代码
# sorted() 函数对所有可迭代的对象进行排序操作(升序)。
lst = [200,18,38,94,48]
# 调用sorted排序
print(f"排序前列表:{lst}")
lst2 = sorted(lst)
# 输出:排序后列表: [18, 38, 48, 94, 200]
print(f"排序后列表: {lst2}")
# 如果需要进行降序排列
# 排序后是否进行翻转
lst2 = sorted(lst, reverse=True)
# 输出:降序排序后列表: [200, 94, 48, 38, 18]
print(f"降序排序后列表: {lst2}")

2.3.2 sort 与 sorted 区别:

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

list 的 sort 方法返回的是对已经存在的列表进行操作,无返回值,而内建函数 sorted 方法返回的是一个新的 list,而不是在原来的基础上进行的操作。

2.4 filter函数

filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象,如果要转换为列表,可以使用 list() 来转换。

该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回 True 或 False,最后将返回 True 的元素放到新列表中。

python 复制代码
# filter() 函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器对象
# 过滤以张姓的人名
lst = ["张翠山", "赵敏", "张三丰", "杨逍"]
ret  = filter(lambda s:s.startswith("张") , lst)
# 输出:<filter object at 0x101238a60>
print(ret)
# 以列表方式打印
# 输出:['张翠山', '张三丰']
print(list(ret))
# 输出非张姓的人名呢?
ret  = filter(lambda s:not s.startswith("张") , lst)
# 输出:['赵敏', '杨逍']
print(list(ret))

2.5 map函数

map() 函数会根据提供的函数对指定序列做映射。

第一个参数 function 以参数序列中的每一个元素调用 function 函数,返回包含每次 function 函数返回值的新列表。

语法

以下是 map() 方法的语法:

python 复制代码
map(function, iterable, ...)

参数

  • function -- 函数
  • iterable -- 一个或多个序列
python 复制代码
# 对列表中的数值元素计算平方根
lst = [4,25,16, 5, 36]
ret = map(lambda x: x**0.5, lst)
# 输出:<map object at 0x1044b7980>
print(ret)
# 输出:[2.0, 5.0, 4.0, 2.23606797749979, 6.0]
print(list(ret))
相关推荐
金銀銅鐵9 小时前
[Python] 基于欧几里得算法,实现分数约分计算器
python·数学
Lyn_Li11 小时前
Kaggle Top 5 | 198只股票、200条数据的金融预测——BattleFin高分方案从零复现
python·kaggle·比赛复盘·金融预测
小九九的爸爸16 小时前
前端想要入门Agent开发,要具备哪些Python基础?
python·agent·ai编程
阿耶同学17 小时前
手把手教你用 LangGraph 搭建三层嵌套 Agent 架构
python·程序员
花酒锄作田1 天前
Pydantic校验配置文件
python
hboot1 天前
AI工程师第四课 - 深度学习入门
pytorch·python·神经网络
ZhengEnCi2 天前
P2M-Matplotlib折线图完全指南-从数据可视化到趋势分析的Python绘图利器
python·matlab·数据可视化
ZhengEnCi2 天前
P2L-Matplotlib饼图完全指南-从数据可视化到图表定制的Python绘图利器
python·matlab
曲幽2 天前
你的REST接口还在“过度投喂”数据吗?——FastAPI + GraphQL实战避坑指南
python·fastapi·web·graphql·route·cors·rest·strawberry
用户8358086187912 天前
基于 Self-RAG 与列表级重排序的进阶 RAG 系统设计与实现
python