内置函数汇总及匿名函数

内置函数汇总及匿名函数

匿名函数及其应用

匿名函数指没有函数名的函数,无法通过名字找到它的代码,他可以代替如下的结构:

def func(a, b):
    return a+b

# 只传参和只返回,所有的表达式在return后写完的结构

匿名函数关键字lambda

lambda 形参:返回值  # lambda语法
代替上述代码写为:
lambda a, b: a+b

匿名函数的应用场景很小,因为代码不能被函数名找到,所以即用即丢。

它常常搭配一些需要传入函数实参的内置函数使用。

内置函数汇总

map max\min reduce
zip filter sorted
abs all\any divmod
bin\oct\hex hash bytes
callable pow eval\exec
isinstance enumerate pow
dir chr\ord round

重要内置函数

map() —— 映射

map(函数, 可遍历对象) 指将遍历的元素挨个取出来做函数的形参,得到的返回值放到map工厂里,map工厂转换为列表的结果就是每个被函数处理好的元素组成的列表

l1 = [1, 2, 3, 4, 5]
'''如果用有名函数
def func(a):
    return a + 1
res = map(func,  l1)
'''
res = map(lambda x:x+1, l1)  # 而匿名函数这种简单又临时的函数很适合用在这里
print(list(res))  # [2, 3, 4, 5, 6]
"""
元素1经过匿名函数变成2,
元素2经过匿名函数返回3
以此类推
最终res会接收一个迭代器,可以被for循环,所以可以被list()转换为列表
"""

max()/min() —— 最大最小值

# 简单的比较
l1 = [11, 22, 33, 44]
res = max(l1)  # 44

# 依据映射关系比较
d1 = {
    'leethon': 100,
    'jason': 8888,
    'lalisa': 99999999,
    'alex': 1000
}
# def func(a):  # 传键
#     return d1.get(a)  # 返回字典的值
# res = max(d1, key=func)  # key后面跟函数
res = max(d1, key=lambda k: d1.get(k))  # 根据键的值来比较
print(res)  # lalisa  # 但是返回的是键

max根据映射关系比较的逻辑是:

根据遍历元素映射后的值作依据比较,得到的结果是映射前原本的元素。

reduce()

# reduce  传多个值,返回一个值
from functools import reduce  # 已经不是内置方法了,需要导入模块
l1 = [1, 2, 3, 4, 5]
res = reduce(lambda a, b: a + b, l1)  # 计算 ((((1+2)+3)+4)+5)
print(res)

zip —— 拉链

缝合多个列表的数据,将对应位置的元素组成一个小元组放到列表中。

l1 = [1, 2, 3, 4, 5]
l2 = ['a', 'b', 'c', 'd']
l3 = [11, 22, 33, 44, 55, 66]
res = zip(l1, l2, l3)
print(res)  # <zip object at 0x00000222BA9E7280>  迭代器对象
print(list(res))  # [(1, 'a', 11), (2, 'b', 22), (3, 'c', 33), (4, 'd', 44)]
# 每个对应位置的值被组合为元组,对应不上就不组合。

filter —— 过滤

根据判断依据,过滤掉迭代对象中的一些值。

结构:filter(函数, 迭代器对象)
如:
l1 = [11, 22, 33, 44, 55, 66, 77, 88]
res = filter(lambda x: x > 40, l1)
print(list(res))  # [44, 55, 66, 77, 88]
# 只拿>40的值

sorted —— 排序

默认升序,给列表排序

l1 = [13, 12, 533, 64, 766, 322, 131, 22]
res = sorted(l1)
print(res)  # [12, 13, 22, 64, 131, 322, 533, 766]

这个功能和列表内置方法的l.sorted实际一样。

常见内置函数

abs —— 绝对值

abs(-1) # 1
# |-1|
abs(10) # 10

all —— 全与

all内传入迭代值,判断所有值对应都是True,则返回True

all([1, 2, 3, 4])  # True
all([0, 1, 2, 3, 4])  # False
类似于:
0 and 1 and 2 and 3 and 4
# 节省代码好能手

any —— 全或

any([0, 1, 2, 3, 4])  # True
类似于:
0 or 1 or 2 or 3 or 4

bytes —— 转换为bytes类型数据

s1 = '最近缺觉'
print(bytes(s1, encoding='utf8'))
print(s1.encode('utf8'))

callable —— 可执行判断

函数是可执行的,一般的数据是不可执行的

name = 'leethon'
callable(name) # False
def  index():
    pass
callable(index)  # True
# 无论是函数还是变量,都是名字形式的,就可以用此函数来判断。

chr\ord —— ASCII码值的数字字母对应转换

65-90 是A-Z,97-122 是a-z。

print(chr(90))  #  z
print(ord('Z'))  # 122

dir —— 查看对象内置方法

dir()内传入的所有名字可以看做对象,这些对象有一些能够通过点.的方式调用的内置方法,可以使用dir来查看。

name = 'leethon'
print(dir(name))
# 在输出的列表中,有很多我们之前学过的内置方法

divmod —— 整除和取余

divmod(100, 3)  # (33, 1)
# 应用实例
已知:数据量要分页,数据量为99,分页要求一页显示10条数据
总数据     每页展示的数据     总页码
100         10              10
99          10              10
101         10              11
page_num, more = divmod(99, 10)
if more:  # 如果余数不为0,需要多一页数据来显示数据
    page_num += 1

enumerate —— 枚举

通过遍历迭代器对象,得到一个序号与值的二元组迭代器。

list(enumerate([1, 2, 3, 4, 5]))  # [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5)]

# start参数,改变序号的开头
# 例子:ASCII表大写字母打印
l1 = [chr(i) for i in range(65, 91)]
print(list(enumerate(l1, start=65)))
[(65, 'A'), (66, 'B'), (67, 'C'), ……, (90, 'Z')]

hash —— 哈希加密

print(hash('leethon'))  # 3260713259912227457
print(hash('123'))  # -6488149301417385444

将内容加密,在你的机器上按hash同样加密得到的是同一段密文。

isinstance —— 判断数据类型

isinstance(111, int)  # True
isinstance([111,] , int)  # False

eval/exec() —— 执行字符串映射的python代码

eval('python代码字符版') 
exec('代码字符版',{},变量)
# 执行结果,执行代码,产生属性放到字典里,存到变量中。
# 这个变量存的就是这个代码的名称空间(字典类型)

pow —— 幂指数

print(pow(3, 2))  # 9
print(pow(3, 3))  # 27
print(pow(3, 4))  # 81
等同于 3**2\3**3\3**4

round —— 四舍五入取整

print(round(98.3))  # 98
print(round(98.51))  # 99

sum —— 求和

print(sum([11, 22, 33, 44, 55, 66]))  # 231
posted @ 2022-10-14 16:59  leethon  阅读(47)  评论(0编辑  收藏  举报