python之路(4)高阶函数和python内置函数

 前言

   函数式编程不用变量保存状态,不改变变量

   内置函数


 高阶函数

  •  把函数当作参数传给另一个对象
  •  返回值中包含函数

 使用的场景演示:

num_test = [1,2,10,5,8,7]

 客户说 :对上述列表中的每个值都进行平方操作

  我说:这个简单。

 方案一:

ret=[]
for i in num_test:
    ret.append(i**2)
    
print(ret)

  客户说 :我这几万个列表,都给我来一次上面的操作

  我说:.......这个没问题

    多个列表,为了避免写重复代码,应该封装在一个函数里,因此

 方案二:

def num_t(array):
    ret=[]
    for i in num_test:
        ret.append(i**2)
    return ret

   客户说:又来几万个列表,给我每个值都给我自增1

      我想 :......mmp,这货没完了,要是以后又这么不靠谱,又来啥需求的,得有个最终方案了

    单独写功能函数,在将功能封装到函数里

 方案三:

def reduce_one(x):
    return x-1

def mult_two(x):
    return x**2

def num_t(func,array):
    ret=[]
    for i in num_test:
        res = func(i)#调用传入的方法
        ret.append(res)
    return ret

print(reduce_one,num_test)

     客户 :给你加薪啊! 

  方案四:(加入匿名函数)

def num_t(func,array):
    ret=[]
    for i in num_test:
        res = func(i)#调用传入的方法
        ret.append(res)
    return ret

print(num_t(lambda  x:x*2,num_test))

 方案五:(map函数)

map(lambda x:x*2,num_test)

内置函数

   map()

msg='qweasdasdqwe'
map(lambda x:x.upper(),msg)
#转换大写

   fliter()

peop = ['chen','_liu','huan','_de']
filter(lambda n:not n.startswith('_'),peop)
#过滤第一个为"_"的字符串

   reduce()

from functools import reduce #导入模块
num_l=[1,2,3,100]
print(reduce(lambda x,y:x+y,num_l))
#合并操作

   all()   any()

all([1,2,0])#将所有的元素都做bool运算,只有全部为真,返回true
any([1,2,0])#将所有的元素都做bool运算,只有存在一个为真,返回true

   bin()   oct()   hex()

bin(456)#将整型转换成二进制
oct(456)#将整型转换成八进制
hex(456)#将整型转换成十六进制

     bytes()

bytes('你好',encoding='utf-8')#将字符串按照指定编码格式转换成二进制
bytes('你好',encoding='utf-8').decode('utf-8')#解码二进制

     chr()  ord()

chr(97)#返回ASCLL码的值,返回 a
ord('a')#返回在ASCLL码中的位置 返回 97

  divmod()

divmod(10,3)#返回10比3的商和余 比如(3,1) 对用于分页操作

     eval()

eval('10*2/(6-1)')#提取字符串中的数据结构,返回值为4.0

  hash():可hash的数据类型即不可变类型,不可hash的数据类型即可变类型

hash('chen')#根据hash算法返回一个值 数字签名

     globals()   locals()

globals()#返回当前的全局变量
locals()#返回当前的局部变量

     zip()

zip(('chen','liu','hua'),(1,2,3))
返回一个zip对象  [('a', 1), ('b', 2), ('c', 3)]

dic = {'chen':21,'liu':23,'hua':30}
zip(dic.keys(),dic.values())
返回 [('chen', 21), ('liu', 23), ('hua', 30)]

注:传的两个参数只要为序列即可(字符串)
zip('abc','123')

  min()  max()

max()#取可迭代对象中最大的值
max(dic,lambda dic:dic['key'])#当传入一个字典,是可定义匿名函数,实现比较逻辑

min()#取可迭代对象中最小的值

     pow()

pow(3,3)#3**3
pow(3,3,2)#3**3%2

     round()

round(3.2)#四舍五入操作

     slice()

name='abcdefgh'
s1=slice(3,5)#定义切片规则
name[s1]

s=slice(1,4,2)#定义切片和步长

     sorted()

name = [
    {'name': 'chen', 'age': 18},
    {'name': 'yi', 'age': 16},
    {'name': 'hua', 'age': 23},
    {'name': 'gong', 'age': 25},
    {'name': 'lu', 'age': 22}
]
sorted(name,key=lambda lis:lis['age'])#安装age来排序


name = {
    'chen': 18,
    'yi': 16,
    'hua': 23,
    'gong': 25,
    'lu': 22
}
sorted(name, key=lambda key:name[key])#按照value来排序
sorted(zip(name.values(),name.keys()))#得到姓名和年龄
View Code

     

内置函数总览:

内置函数详情

原文地址:https://www.cnblogs.com/shuzhixia/p/9768865.html