函数之高阶函数

内置函数

1,初级内置函数

  • eval:执行字符串类型的代码,并返回最终结果。

    eval('2 + 2')  # 4
    n=81
    eval("n + 4")  # 85
    eval('print(666)')  # 666
    
  • exec:执行字符串类型的代码。

    s = '''
    for i in [1,2,3]:
        print(i)
    '''
    exec(s)
    

    以上两个内置函数很强大 工作中禁止使用

  • hash:获取一个对象(可哈希对象:int,str,Bool,tuple)的哈希值。

    print(hash(12322))
    print(hash('123'))
    print(hash('arg'))
    print(hash('alex'))
    print(hash(True))
    print(hash(False))
    print(hash((1,2,3)))
    
    '''
    -2996001552409009098
    -4637515981888139739
    1
    2528502973977326415
    '''
    
  • help:函数用于查看函数或模块用途的详细说明。

    print(help(list))
    print(help(str.split))
    
  • callable:函数用于检查一个对象是否是可调用的。如果返回True,仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。

    name = 'alex'
    def func():
        pass
    print(callable(name))  # False
    print(callable(func))  # True
    
  • int:函数用于将一个字符串或数字转换为整型。

    print(int())  # 0
    print(int('12'))  # 12
    print(int(3.6))  # 3
    print(int('0100',base=2))  # 将2进制的 0100 转化成十进制。结果为 4
    
  • float:函数用于将整数和字符串转换成浮点数。

  • complex:函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数。。

    print(float(3))  # 3.0
    print(complex(1,2))  # (1+2j)
    
  • bin:将十进制转换成二进制并返回。

  • oct:将十进制转化成八进制字符串并返回。

  • hex:将十进制转化成十六进制字符串并返回。

    print(bin(10),type(bin(10)))  # 0b1010 <class 'str'>
    print(oct(10),type(oct(10)))  # 0o12 <class 'str'>
    print(hex(10),type(hex(10)))  # 0xa <class 'str'>
    

    divmod:计算除数与被除数的结果,返回一个包含商和余数的元组(a // b, a % b)。

    round:保留浮点数的小数位数,默认保留整数。

    pow:求xy次幂。(三个参数为xy的结果对z取余)

    print(divmod(7,2))  # (3, 1)
    print(round(7/3,2))  # 2.33
    print(round(7/3))  # 2
    print(round(3.32567,3))  # 3.326
    print(pow(2,3))  # 两个参数为2**3次幂
    print(pow(2,3,3))  # 三个参数为2**3次幂,对3取余。
    
  • bytes:用于不同编码之间的转化。

    # s = '你好'
    # bs = s.encode('utf-8')
    # print(bs)
    # s1 = bs.decode('utf-8')
    # print(s1)
    # bs = bytes(s,encoding='utf-8')
    # print(bs)
    # b = '你好'.encode('gbk')
    # b1 = b.decode('gbk')
    # print(b1.encode('utf-8'))
    
  • ord:输入字符找当前字符编码的位置

  • chr:输入当前编码的位置数字找出其对应的字符

    # ord 输入字符找该字符编码的位置
    # print(ord('a'))
    # print(ord('中'))
    
    # chr 输入位置数字找出其对应的字符
    # print(chr(97))
    # print(chr(20013))
    
  • repr:返回一个对象的string形式(原形毕露)。

    # %r  原封不动的写出来
    # name = 'taibai'
    # print('我叫%r'%name)
    
    # repr 原形毕露
    print(repr('{"name":"alex"}'))
    print('{"name":"alex"}')
    
  • all:可迭代对象中,全都是True才是True

  • any:可迭代对象中,有一个True 就是True

    # all  可迭代对象中,全都是True才是True
    # any  可迭代对象中,有一个True 就是True
    # print(all([1,2,True,0]))
    # print(any([1,'',0]))
    

高阶函数

  • abs():绝对值--返回的都是正数

  • lis = [1,2,-3,-5,6]
    print([abs(i) for i in lis])
    ##################
    [1, 2, 3, 5, 6]
    
  • enumerate:枚举--(可迭代对象,序号的起始值)默认的起始值是0

  • lis =[1,2,3,4,5,6]
    print([i for i in enumerate(lis)])
    print([i for i in enumerate(lis,10)])
    ##########################
    [(0, 1), (1, 2), (2, 3), (3, 4), (4, 5), (5, 6)]
    [(10, 1), (11, 2), (12, 3), (13, 4), (14, 5), (15, 6)]
    
  • max() :取最大值

  • min():取最小值

  • sum():求和

  • lis = [1,2,3,4,5,6]
    print(max(lis))
    print(min(lis))
    print(sum(lis))
    ##############
    6
    1
    21
    
  • range():可迭代对象

  • Python2

    • range(0,10) :获取的是一个列表
    • xrange(0,10):或取的是一个可迭代对象
  • Python3

    • range():是一个可迭代对象
    • range.iter()
  • sep="" :多个元素的连接符

  • end="" :end"\n", end"\t" ,end==" "

  • dict()

  • tu =( (1,2),(2,3),(3,4))
    print(dict(tu))
    print(dict([i for i in enumerate(range(6),1)]))
    print(dict(key=1,a=b))
    #################################
    {1: 2, 2: 3, 3: 4}
    {1: 0, 2: 1, 3: 2, 4: 3, 5: 4, 6: 5}
    {'key': 1, 'a': 2}
    
  • list():可迭代对象迭代到列表中

  • print(list('david'))
    ['d', 'a', 'v', 'i', 'd']
    
  • zip() :拉链,按照最少的进行合并

  • lis = [1,2,3,4,5]
    lis1 = ['a','b','c','d','e','f']
    print(dict(zip(lis,lis1)))
    print(dict(list()zip(lis,lis1)))
    ##########################
    {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
    {1: 'a', 2: 'b', 3: 'c', 4: 'd', 5: 'e'}
    
  • dir:查看当前函数的方法

  • print(dir(list))
    

匿名函数

  • lambda:关键字

  • 语法:函数名 = lambda 参数:返回值

    ​ 参数位置是函数的形参,形参之间用逗号隔开

    ​ 返回值在冒号之后设置

    ​ 参数位置可以没有形参,但是必须有返回值

  • 匿名函数不管多复杂,只能写一行,且逻辑结束后直接返回数据,只能返回一种数据类型

  • func = lambda x:x
    print(func(2))
    ####################
    print((lambda x:x)(2))
    ####################
    lis = [lambda x:x*x for x in range(5)]
    print(lis[2](2))
    ####################
    lis = [lambda  : x for i in range(5)]
    print(lis[2]())
    ######################
    2
    2
    4
    16
    

常用函数

  • format()

    • format(13,">20") 右对齐
    • format(13,"<20") 左对齐
    • format(13,"^20") 居中
    • format(13,'o8b') 十进制转换二进制
    • format(13,"08d") 十进制加八位
    • format(13,'08o') 十进制转换成八进制
    • format(13,'08x') 十进制转换成十六进制
  • filter() :筛选过滤

  • 语法:filter(function,iterable)

    • function :用来筛选的函数,在filter中会自动的把iterable中的元素传递给function,然后根据function返回单True或者False来判断是否表刘此项数据
    • iterable:可迭代对象
  • lis = [1,2,3,4,5,6,7]
    def func(s):
    	return  s>3
    lis = list(filter(func,lis))
    print(lis)
    ############################
    print(list(filter(lambda x : x % 2 == 1 ,lis)))
    
    
    
  • map():对象映射

  • map(function,iterable),可以对可迭代对象中的每一个元素进行映射,分别执行function

  • print(list(map(lambda x : x*x,[1,2,3,5,7,6,9])))
    ##########################
    [1, 4, 9, 25, 49, 36, 81]
    
    
  • reversed :反转

  • 反转后的新建空间,相当于copy后反转

  • 列表的reverse反转后的内存地址不变

  • sorted :排序函数

    • 语法(iterable.key=None,reverse=False)

    • iterable :可迭代对象

    • key:排序规则,指定函数,在sorted内部会将可迭代对象中的每一个元素传递个这个函数的参数,根据函数运算的结果进行排序

    • reverse:是否是倒序,True 倒序;False 正序;

    • lis = [1,3,2,4,64,2,9]
      lis1 = sorted(lis)
      print(lis)      ###原列表不会变
      print(lis1) ###返回单列表是经过排序的
      
      
      
    • 字典用sorted排序

    • dic= {1:'a',2:'b',3:'c'}
      print(sorted(dic)  ###字典排序返回的就是排序后的key
      ###################
      [1,2,3])
      
      
  • reduce l:累计算

    • print(reduce(lambda x,y:x-y,[1,2,3,4,5]))
      ################
      15
      
      
posted @ 2019-12-13 10:08  阿浪阿浪  阅读(177)  评论(0编辑  收藏  举报