zoukankan      html  css  js  c++  java
  • Python基础第七天

    编程方法:

         函数式编程、面向过程、面向对象

    高阶函数:满足俩个特性任意一个即为高阶函数


    1.函数的传入参数是一个函数名

    2.函数的返回值是一个函数名
    #把函数当作参数传给另外一个函数
    def foo(n):
        print(n)
    
    def bar(name):
        print('my name is %s' %name)
    
    # foo(bar)   #函数的传入参数是一个函数名bar
    foo(bar('alex'))
    
    #返回值中包含函数
    def bar():
        print('from bar')
    def foo():
        print('from foo')
        return bar
    n=foo()
    n()
    
    def hanle():
        print('from hanle')
        return  hanle
    h=hanle()
    h()
    
    def test1():
        print('from test1')
    def test2():
        print('from handle')
        return test1()  #return 函数的返回结果

    内置函数map、filter、reduce

    #内置函数map函数
    num_l =[1,2,3,4,5,6]
    
    #lambda x:x+1
    def add_one(x):
        return x+1
    #lambda x:x-1
    def reduce_one(x):
        return  x-1
    #lambda x:x**2
    def pf(x):
        return x**2
    
    def map_test(func,array):
        ret=[]
        for i in array:
            res=func(i)
            ret.append(res)
        return ret
    print(map_test(lambda x:x+1,num_l))
    print('内置函数map,处理结果',map(lambda x:x+1,num_l))
    
    msg='linhaifeng'
    print(list(map(lambda x:x.upper(),msg)))
    map
    #内置函数filter
    movie_people=['sb_alex','sb_wepeiqi','linhaifeng','sb_yuanhao']
    
    def filter_test(array):
        ret=[]
        for p in array:
            if not p.startswith('sb'):
                ret.append(p)
        return ret
    print(filter_test(movie_people))
    
    movie_people=['alex_sb','wepeiqi_sb','linhaifeng','yuanhao_sb']
    
    def sb_show(n):
        return n.endswith('sb')
    
    def filter_test(func,array):
        ret=[]
        for p in array:
            if not func(p):
                ret.append(p)
        return ret
    print(filter_test(sb_show,movie_people))
    
    #终极版本
    
    movie_people=['alex_sb','wepeiqi_sb','linhaifeng','yuanhao_sb']
    lambda n:n.endswith('sb')
    
    def sb_show(n):
        return n.endswith('sb')
    
    def filter_test(func,array):
        ret=[]
        for p in array:
            if not func(p):
                ret.append(p)
        return ret
    print(filter_test(lambda n:n.endswith('sb'),movie_people))
    #filter函数
    print(filter(lambda n:n.endswith('sb'),movie_people))
    print(list(filter(lambda n:not n.endswith('sb'),movie_people)))
    filter
    #reduce
    
    num_l=[1,2,3,100]
    
    def reduce_test(array):
        res=0
        for num in array:
            res+=num
        return  res
    print(reduce_test(num_l))
    
    #lambda x,y:x*y (整体把数据压缩成一个结果)
    def reduce_test(func,array,init=None):
        if init is None:
            res=array.pop(0)
        else:
            res=init
        for num in array:
            res=func(res,num)
        return  res
    print(reduce_test(lambda x,y:x*y,num_l,100))
    
    from functools import reduce
    print(reduce(lambda x,y:x*y,num_l,100))
    reduce

    总结:

    
    
    map  处理序列中的每个元素,得到的结果是一个’列表‘,该“列表”元素个数及位置与原来一样

    filter 遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下来
    reduce  处理一个序列,然后把序列进行合并操作
    people=[
        {'name':'alex','age':1000},
        {'name':'wupeiqi','age':10000},
        {'name':'yuanhao','age':9000},
        {'name':'linhaifeng','age':18},
    ]
    print(list(filter(lambda p:p['age']<=18,people)))

    其他常用内置函数:

          1.all():将序列中元素作布尔运算,若是空序列是True

          2.any():与all()作用相反

          3.bin():10进制转2进制

          4.oct():10进制转8进制

          5.hex():10进制转16进制

          6.bool()  空、None、0的布尔值为False

          7.bytes():将字符串转字节。ascii不能编码中文

    name='你好'
    print(bytes(name,encoding='utf-8').decode('utf-8'))

          8.chr():对应ascii转换为字符串

          9.ord():对应ascii字符串转换成数字

    print(chr(97))
    print(ord('a'))

         10.dir():某个对象下所有方法

         11.divmod():取商得余数,分页用 。print(divmod(10,3))

         12.eval():把字符串中的数据结构给提取出来

                       把字符串中的表达式做运算

         13.hash():用于判断文件是否被人修改

    可hash的数据类型即不可变数据类型,不可hash的数据类型即可变数据类型
    14.help():打印方法
    15.isinstance(1,int):判断1是否为int类型 isinstance('abc',str)判断‘abc’是否是str类型
    16.zip((序列),(序列))序列:列表,元祖,字符串

    print(list(zip(('a','n','c'),(1,2,3,4))))
    p={'name':'alex','age':18,'gender':'none'}
    print(list(zip(p.keys(),p.values())))
    print(list(zip(['a','b'],'12334')))


    [('a', 1), ('n', 2), ('c', 3)]
    [('name', 'alex'), ('age', 18), ('gender', 'none')]
    [('a', '1'), ('b', '2')]

         17.max/min  只要是for循环迭代即可

    l1=['a10','b12','c10']
    print(list(max(l1)))
    
    age_dic={'age1':18,'age4':20,'age3':100,'age2':30}
    
    print(max(age_dic.values()))
    print(max(age_dic))  #比较的是Key,但不知道是哪个key
    print(list(max(zip(age_dic.values(),age_dic.keys()))))  #[100, 'age3']
    
    people=[
        {'name':'alex','age':100},
        {'name':'wupeiqi','age':1000},
        {'name':'yuanhao','age':900},
        {'name':'linhaifeng','age':18},
    ]
    print(max(people,key=lambda dic:dic['age']))  #{'name': 'wupeiqi', 'age': 1000}
    #相当于以下循环
    ret=[]
    for item in people:
        ret.append(item['age'])
    print(ret)
    print(max(ret))

        18.round():四舍五入

        19.slice

    l='hello'
    s1=slice(3,5)
    s2=slice(1,4,2)
    print(l[s1])
    print(l[s2])
    print(s2.start)
    print(s2.stop)

       20.sorted

    l=[3,2,31,'a',4]
    print(sorted(l))  #排序本质就是比较大小,不同类型不能比较    报错
    
    people=[
        {'name':'alex','age':100},
        {'name':'wupeiqi','age':1000},
        {'name':'yuanhao','age':900},
        {'name':'linhaifeng','age':18},
    ]
    print(sorted(people,key=lambda dic:dic['age']))

       

  • 相关阅读:
    单例对象
    G1回收算法
    Java锁
    VUE开发
    Java线程池
    Java线程状态
    什么是进程,什么是线程
    maven 常用命令
    linux启动脚本,暂停脚本
    delphi---控件使用
  • 原文地址:https://www.cnblogs.com/xyd134/p/6438886.html
Copyright © 2011-2022 走看看