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))
相关推荐
不正经学生2 分钟前
C语言预处理详解:编译器真正动手之前的那些事
c语言·开发语言·算法·面试·bug
门思科技11 分钟前
LoRaWAN 设备类别:Class A、B、C 对比与选型指南
c语言·开发语言·php
恋恋西风3 小时前
C++ 理解 std::thread 在单核和多核上的行为差异
开发语言·c++
Brilliantwxx3 小时前
【Linux】 进程(9)程序与进程地址空间(基础+进阶+面试题)
linux·运维·服务器·开发语言·c++
BizzZ_4 小时前
C++(22)——类型转换和IO流
开发语言·c++
小范同学_4 小时前
JDK1.7 与 JDK1.8 HashMap 底层原理对比 + 数组并发扩容死循环详解
java·开发语言
geovindu4 小时前
CSharp: 万年历
开发语言·后端·c#·.net
傲笑风4 小时前
【openvino】tinybert基于openvino服务化部署(四)
人工智能·python·自然语言处理·nlp·bert·openvino
我找到地球的支点啦5 小时前
Matlab系列(009) 一CRC循环冗余校验详解
开发语言·数据结构·算法·matlab·信息与通信
维基框架5 小时前
WIKI 知识库 v1.1.1 正式发布
人工智能·python