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))
相关推荐
装不满的克莱因瓶1 小时前
链式法则如何传递参数误差 —— 深入理解神经网络中的梯度传播
人工智能·python·深度学习·神经网络·数学·机器学习·ai
Anastasiozzzz1 小时前
从有限状态机到智能体图:传统 FSM 与 Agent Graph的演进
java·人工智能·python·ai
fqbqrr7 小时前
2606C++,C++构的多态
开发语言·c++
biter down7 小时前
从 0 到 1 搭建 Python 接口自动化测试框架(博客系统实战)
开发语言·python
肖永威9 小时前
Python多业务并行计算框架插件化演进:从硬编码到动态注册
python·插件化·并行计算·动态注册
yz_aiks9 小时前
Linux Jar包配置Systemd自启动实战:从排查到配置全流程
linux·python·jar·自启动·systemd
threelab9 小时前
Three.js 物理模拟着色器 | 三维可视化 / AI 提示词
开发语言·前端·javascript·人工智能·3d·着色器
武器大师729 小时前
lv_binding_js 代码解读
开发语言·javascript·ecmascript
不知名的老吴9 小时前
线程的生命周期之线程“插队“
java·开发语言·python