zoukankan      html  css  js  c++  java
  • 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不能导入字符串
    
    
  • 相关阅读:
    Codeforces Round #183 (Div. 2) B. Calendar
    FZU Problem 2030 括号问题
    NEU(1262: ASCII Sequence II)动态规划
    ZOJ(1711)Sum It Up (DFS+剪枝+去重复)
    ZOJ(1004)Anagrams by Stack (DFS+stack)
    HDU(3374) (KMP + 最小表示法)
    FZU Problem 1926 填空(KMP好题一枚,确实好)
    POJ(2481)Cows 树状数组
    HOJ (1042) 整数划分
    LeetCode: Two Sum
  • 原文地址:https://www.cnblogs.com/Essaycode/p/10095292.html
Copyright © 2011-2022 走看看