博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

二、Python开发---13、高阶函数与内置函数

Posted on 2019-10-08 20:56  兰智杰  阅读(229)  评论(0编辑  收藏  举报

常用高阶函数

  

#map
list01 = [1,3,5,7,9]
new_list01=map(lambda x:x*2,list01)
print(list(new_list01))                             #输出为[2, 6, 10, 14, 18]  将map对象转换为list
list02 = [2,4,6,8,10]
new_list02 = map(lambda x,y:x*y,list01,list02)
print(new_list02)                                   #<map object at 0x0000000001F0A518>
print(list(new_list02))                             #输出为[2, 12, 30, 56, 90]
print(list(new_list02))                             #输出为[]  用一遍就没了

#
filter new_list03 = filter(lambda x:x>4,list02) print(list(new_list03)) #输出为[6, 8, 10]
#
reduce from functools import reduce #引入一个模块 new_list04 = reduce(lambda x,y:x+y,list01) #list01 = [1,3,5,7,9],第一次将1赋给x,3赋给y,第二次将上次x+y=4的结果赋给x,list01中的5赋给y,以此类推 print(new_list04) #输出为25 new_list05 = reduce(lambda x,y:x+y,list02,0) #0用于对x的初始赋值 #list02 = [2,4,6,8,10],第一次将0赋给x,list02中2赋给y,第二次将上次x+y=2的结果赋给x,list02中的4赋给y,以此类推 print(new_list05) #输出为30

  练习

    1、格式化用户的英文名,要求首字母大写,其它字母小写

       2、将用户英文名、年龄、性别三个集合的数据结合到一起,形成一个集合

    3、过滤性别为男的用户

    4、求性别为男的用户的平均年龄

name = ['joe','susan','black','lili']
age = [18,19,20,21]
sex = ['m','w','m','w']
#格式化用户的英文名,要求首字母大写,其它字母小写
new_name = map(lambda x:x.title() ,name)
print(list(new_name))                               #输出为['Joe', 'Susan', 'Black', 'Lili']
#将用户英文名、年龄、性别三个集合的数据结合到一起,形成一个元祖列表
users = map(lambda x,y,z:(x,y,z),name,age,sex)
new_users=list(users)
print(new_users)                                   #输出为[('joe', 18, 'm'), ('susan', 19, 'w'), ('black', 20, 'm'), ('lili', 21, 'w')]
#过滤出来性别为男的用户
man_users = filter(lambda x:x[2] == 'm',new_users)
man_users=list(man_users)
print(man_users)                                   #输出为[('joe', 18, 'm'), ('black', 20, 'm')]
#求性别为男的用户的平均年龄
from functools import reduce                      #引入一个模块
total_age = reduce(lambda x,y:x+y[1],man_users,0)
print(total_age/len(man_users))                    #输出为19.0

常用内置函数

  

#字典排序——通过内置函数sorted进行排序
dict = {'a':1,'c':2,'b':3}
dict01 = sorted(dict.items())                                    #从小到大排  reverse默认False
print(dict01)                                                    #输出为[('a', 1), ('b', 3), ('c', 2)]
dict02 = sorted(dict.items(),reverse = True)                     #内传入x中的元素为dict.items()列表的元组默认按元组的第一个元素排
print(dict02)                                                    #输出为[('c', 2), ('b', 3), ('a', 1)]
dict03 = sorted(dict.items(),key = lambda x:x[1],reverse= True)  #内置函数有返回值
print(dict03)                                                    #输出为[('b', 3), ('c', 2), ('a', 1)]
print({k:v for k,v in dict01})                                   #字典推导式  输出为{'a': 1, 'b': 3, 'c':2}
lsit01 = [
            {'name':'joe','age':18},
            {'name':'susan','age':19},
            {'name':'tom','age':17}
          ]
dict04 = sorted(lsit01,key = lambda x:x['age'],reverse=True)     #传入x中的元素为list01中的字典元素
print(dict04)

    

num = [1,3,5]
print(isinstance(num,int))                       #输出为 False
print(isinstance(num,(int,float,list)))          #输出为 True

a='100';b='19'
print(eval(a)+eval(b))                           #输出为119
print(eval(a+b))                                 #输出为10019
print(type(eval(a+b)))                           #输出为<class 'int'>

a = "{'中单': 'faker', '打野': 'bengi'}"
print(type(a))                                   #输出为<class 'str'>
print(type(eval(a)))                             #输出为<class 'dict'>
print(eval(a))                                   #输出为{'中单': 'faker', '打野': 'bengi'}
'''
    D:\学习文件\python\面向对象\python代码块.txt路径下保存了一个可执行的txt文件
    里面是可执行的Python代码,如下所示
        def fact(n):
            if n==1:
                return 1
            else:
                return n*fact(n-1)
        t = fact(6)
        print(t)
'''
with open('D:\学习文件\python\面向对象\python代码块.txt', 'r') as f:
    s = f.read()
exec(s)                                           #输出为720