Python随心记--函数式编程及常用内置函数,及部分实例

函数式编程
不可变数据:不用变量保存状态、不修改变量
第一类对象:函数即变量

递归尾调用调优
尾调用优化:函数bar在food内为尾调用
def bar():
    return n
def foo():
    return bar(x)
函数bar1和bar2在foo内均为尾调用,二者在if判断条件不同的情况下都有肯能作为函数的最后一步
def bar1():
    return n
def bar2():
    return n+1
def foo():
    if type(x) is str:
        return bar1(x)
    elif type(x) is int:
        return bar2(x)
函数bar在foo内为非尾调用
def bar(n):
    return n
def foo():
    y = bar(x)
    return y
函数bar在foo内为非尾调用
def bar(x):
    return x
def foo():
    return bar(x)+1
map函数   #lambda x:x+n ,map()
求一个列表的所有平方
arra = [1,2,3,1,5]
def map_test(array):
    res = []
    for i in array:
        res.append(i**2)
    return res
ret = map_test(arra)
print(ret)
def add_num(x):
    return x+1
arra = [1,2,3,1,5]
def map_test(func,array):
    ret = []
    for i in array:
        res = func(i)
        ret.append(res)
    return  ret
print(map_test(add_num,arra))
print(map_test(lambda x:x+1,arra))
print(map_test(lambda x:x-1,arra))
print(map_test(lambda x:x**2,arra))
print(map(lambda x:x**2,arra))   #内置函数map,需要处理一下才能看
过滤  startswith(),endswith(),filter(),lambda n:n.endswith,

arra = ['sn_1','sb_1']
def filter_test(arra,func):
    ret = []
    for i in arra:
        if not func(i):
            ret.append(i)
    return ret
print(filter_test(arra,lambda n:n.startswith('sb')))
print(filter(lambda n:n.startswith('sb'),arra))   #内置函数filter,需要处理一下才能看,遍历序列中并判断的每一个元素得到布尔值如果是True则留下

reduce函数
from functools import reduce   #引入reduce
arra = [1,2,3,1,5]
def redce_test(arra,func,init=None):
    if init is None:
        res = arra.pop(0)   #把第一个数拿出来
    else:
        res = init
    for i in arra:
        res = func(res,i)
    return  res
print(redce_test(arra,lambda x,y:x*y,10))
print(reduce(lambda x,y:x*y,arra,10))   #reduce内置函数
zip实列
p = {'name':'nana','age':'18','gender':'none'}
print(list(zip(p.keys(),p.values())))

#取年龄最大的出来
age_dic = {'agea':20,'ages':30,'ash':18,'ahes':9}
print(max(age_dic.values()))

#取年龄最大的出来
age_dic = {'agea':20,'ages':30,'ash':18,'ahes':9}
print(max(age_dic.values()))
newage = zip(age_dic.values(),age_dic.keys())
for i in newage:
     print(i)
print(list(max(newage)))

people = [
        {'name':'sad','age':20},
        {'name':'sdd','age':20},
        {'name':'sda','age':50},
    ]
print(max(people,key = lambda dic:dic['age']))

sorted()   #排序
name_dic = {'ss':23,'bb':12,'cc':56}
print(sorted(name_dic,key = lambda key:name_dic[key]))
print(sorted(zip(name_dic.values(),name.keys())))
__import__()   #导入特殊文件  import不能导入字符串

module_name = 'test'
__import__(module_name )

内置函数

abs(1)   #获取绝对值
all([1,2,'sa'])   #把序列中每一个元素拿出来做布尔运算
any([2,''])   #y有空返回False
bin(2)   #把十进制转二进制
hex()   #十进制转十六进制
oct()   #十进制转八进制
bytes('你那',encoding='utf-8',decode='utf-8')   #把字符串转字节 编码 解码
chr(97)   #阿史克码
ord(a)   #对应编码
dir(all)   #打印某一个对象的方法
divmod(10,3)   #取除、余数
eval()   #1、把字符串中的数据结构提取出来,2、可以计算字符串中的数学运算
hash()   #哈希运算,可哈希运算即不可变数据类型,不可哈希的及可变数据类型
help()   #帮助
isinstance(1,int)   #判断是否是int类型,返回True or False ,int可换成str、bool......list
globals()
locals()   #打印局部的
max([1,2,3])   #取最大值
min([1,2,3])   #取最小值
zip(('a','b','c'),(1,2,3))
pow(3,3)   #3**3
pow(3,3,2)   #3**3%2
reversed()   #反转
round()   #四舍五入
set()   #转字典
slice(3,5)   #类似切片
slice(3,5,2)   #类似切片 2为步长
sorted()   #排序
sum()   #求和
vars()   #查看方法下的函数
__import__()   #导入特殊文件  import不能导入字符串

posted @ 2018-12-10 11:01  爱跑步的乌龟  阅读(244)  评论(0编辑  收藏  举报