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))
相关推荐
belldeep3 小时前
python:genesis-world, Genesis-Embodied-AI
人工智能·python·ai·genesis
布莱克6053 小时前
C/C++ 中变量的声明与定义:区别、联系与常见误区
c语言·开发语言·c++·声明·定义
LabVIEW开发3 小时前
LabVIEW 局部变量为何引发竞争条件?四种同步机制
开发语言·labview
benchmark_cc3 小时前
A 股、港股、美股如何建立统一的标的主数据格式?
开发语言·python·数据分析·pandas·量化交易·股票数据·quantdash
维克兜率天4 小时前
【维克】趋势型CTA:期货市场的“追涨杀跌“
人工智能·python
Zenova EdgeOS5 小时前
Go 工业边缘错误处理实战:用 errors 构建可追溯错误链
开发语言·数据库·golang
取名真是5 小时前
Python 算法知识点从基础到进阶
开发语言·python·算法
梦想不只是梦与想5 小时前
PyTorch、CPU、GPU、CUDA
人工智能·pytorch·python·深度学习·机器学习·cuda
数字融合5 小时前
透明化视频孪生危化安全管控解决方案
人工智能·python·安全
FRing035 小时前
vue2干货总结3(computed计算属性、watch监听器)
开发语言·前端·vue.js·vue2