常用内置函数
为了编程的高效和代码的简洁,我们常常会使用一些内置函数。这些函数可以帮助我们减少繁琐的自定义函数、循环、判断等硬编码操作,让代码看起来更简洁舒适,运行效率更高,有牛批克拉斯的感觉。
太过基础的python语法不再赘述,直接操练起来。
在学习内置函数之前,先来看一个表达式—— lambda。实际上就是定义一个匿名函数
- 首先定义一个常规的函数
# 实现一个简单的线性方程
def linear_equation(x,y,k,b):
return k*x+y+b
result = linear_equation(1,3,1,4)
print(result) # 8
- 接下来用表达式lambda实现上面的函数
# 通过表达式lambda实现以上函数
linear_equation = lambda x,y,k=1,b=4:k*x+y+b
print(linear_equation) # <function <lambda> at 0x000001F98E39CE50> 看到了吧,结果是一个函数
print(linear_equation()) # 8 既然是函数,就要有调用函数的样子,想要的结果就出现了。
# 稍微加点料
linear_equation = lambda x,y,k=1,b=4:0 if k==0 else k*x+y+b
print(linear_equation(1,3,0)) # 0
print(linear_equation(1,3,2)) # 9
再啰嗦一点,lambda表达式冒号前的x,y,k,b就是函数的形参,形参可以有默认值,冒号后的是一个函数体(表达式),函数体太复杂就不适用了。
一、函数 map()
作用:根据提供的函数对指定序列做映射。语法:map(function, iterable, …)
可以看到map函数的第一个参数是函数,之后的参数是可迭代的对象。既然第一个参数是函数,那刚才的lambda正好返回一个函数,逼格再次提升。
# 结合lambda实现map,还是用上面的线性方程作为表达式
result = map(lambda x,y,k=1,b=4:k*x+y+b,[1],[3],[2],[4]) # 注意,我改了斜率
print(result) # <map object at 0x00000292D5C57F70> 结果是个对象
print(list(result)) # [9]
需要注意的是,这个函数返回一个迭代器,什么时机使用list()很关键
result = map(lambda x,y,k=1,b=4:k*x+y+b,[1],[3],[2],[4])
for i in list(result):
print(i,end=' ') # 9
print(list(result)) # [] 这里返回就是空列表,不是我忘写了
# 对比一下
result = list(map(lambda x,y,k=1,b=4:k*x+y+b,[1],[3],[2],[4]))
for i in result:
print(i,end=' ') # 9
print(result) # [9]
二、函数 reduce()
作用:对序列中的元素,按照表达式操作。语法:reduce(function, iterable[, initializer])
第一个参数是一个函数(函数只能有两个参数),第二个参数是一个序列(可迭代的对象)。
from functools import reduce # python3将这个函数放到了functiontools里边了
# 实现一个单行矩阵元素求和
result = reduce(lambda x,y:x+y,[2,3,4])
print(result) # 9 ---> 2+3+4
# 实现一个单行矩阵元素求幂
result = reduce(lambda x,y:x**y,[2,0,4])
print(result) # 1 ---> 2^1^4
三、函数 filter()
作用:过滤序列中不符合条件的元素。语法:filter(function, iterable)
第一个参数是函数(用于制定过滤规则),第二个参数是一个序列(可迭代的对象)。
result = filter(lambda x:200%x==0 if x>0 else 0,[1,2,3,50,0,3,6])
print(result) # <filter object at 0x0000020C54EE7FA0>
print(list(result)) # [1, 2, 50]
四、函数 sorted()
作用:对任何可迭代的对象进行排序。语法:sorted(iterable, key=None, reverse=False)
通过以下栗子来看每个参数的作用:
# 先看第一个必传参数
result = sorted([2,3,1,5,7,5,85,23,6])
print(result) # [1, 2, 3, 5, 5, 6, 7, 23, 85] 默认升序排列
# 加个reverse参数
result = sorted([2,3,1,5,7,5,85,23,6],reverse=True)
print(result) # [85, 23, 7, 6, 5, 5, 3, 2, 1] 降序排列
# key这个参数是一个匿名函数,在对元素排序前进行处理。如:将字符串转成整数后排序
data = ['6','8','4','9','2','3']
result = sorted(data,key=lambda x:[int(i) for i in x])
print(result) # ['2', '3', '4', '6', '8', '9'] 注意这里返回的是原列表排序后的元素,不要理解为转成整数后的排序列表
记录点滴
1、函数 cmp(x,y),用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。