• 高阶函数


    定义:一个函数接收另一个函数作为参数,这种函数称为高阶函数

    变量指向函数:函数本身赋值给变量。

    >>> abs(10) #函数调用
    10
    >>> abs #函数本身
    <built-in function abs>
    >>> a = abs(10)
    >>> a
    10
    >>> b = abs
    >>> b
    <built-in function abs>
    >>> b(10)
    10
    >>> 

    函数名也是变量:函数名其实就是指向函数的变量。如abs()中abs为变量,它指向一个可以计算绝对值的函数。

    >>> abs = 10 #abs这个变量指向了一个整数10
    >>> abs(10)
    Traceback (most recent call last):
      File "<pyshell#10>", line 1, in <module>
        abs(10)
    TypeError: 'int' object is not callable
    >>> abs
    10
    >>> del abs #可以恢复abs的使用

    传入函数:高阶函数,让函数的参数能够接收别的函数

    >>> def add(x,y,f):
        return f(x) + f(y)
    
    >>> add(-5,6,abs)
    11
    >>> 
    >>> from math import sqrt
    >>> def some(x,*fs):
        s = [f(x) for f in fs]
        return s
    
    >>> print(some(2,sqrt,abs,bin,hex,oct))
    [1.4142135623730951, 2, '0b10', '0x2', '0o2']
    >>> 

     map():接收两个参数,一个函数,一个Iterable,map将传入的参数依次作用到序列的每个元素,并把结果作为新的Iterable返回

    def f(x):
        return x*x
    >>> r = map(f,[1,2,3,4,5,6,7,8,9])
    >>> list(r)
    [1, 4, 9, 16, 25, 36, 49, 64, 81]
    >>> r
    <map object at 0x02CB0BD0>
    >>> 

     map()函数与for循环的区别:

    >>> for n in [1,2,3,4,5,6,7,8,9]:
        L.append(f(n))
    
        
    >>> print(L)
    [1, 4, 9, 16, 25, 36, 49, 64, 81]
    >>> L
    [1, 4, 9, 16, 25, 36, 49, 64, 81]
    >>> 
    >>> list(map(str,[1,2,3,4,5,6]))
    ['1', '2', '3', '4', '5', '6']

     reduce():reduce(f,[x1,x2,x3,x4]) = f(f(f(x1,x2),x3),x4)

    >>> from functools import reduce
    >>> def add(x,y):
        return x + y
    
    >>> reduce(add,[1,3,5,7,9])
    25
    >>> def fn(x,y):
        return x*10 + y
    
    >>> reduce(fn,[1,3,5,7,9])
    13579
    >>> 

    结合使用map()和reduce():

    >>> from functools import reduce
    >>> def fn(x,y):
        return x*10 + y
    
    >>> def char2num(s):
        return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
    
    >>> reduce(fn,map(char2num,'13579'))
    13579
    >>> map(char2num,'13579')
    <map object at 0x02CB0BF0>
    >>> list(map(char2num,'13579'))
    [1, 3, 5, 7, 9]

     将字符串转换为数字:

    from functools import reduce
    def char2num(s):
        return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
    def str2int(s):
        return reduce(lambda x, y: x*10 + y, map(char2num,s))
    >>> str2int('1024')
    1024
    >>> 

     使用map函数实现给定列表中字符串首字母大写。

    from string import capwords
    L1 = ['zyj','sl','SB']
    L2 = list(map(capwords,L1))
    print(L2)
    
    def normalize(name):
        return name.title()
    name = ['zyj','wh','SBj']
    L = list(map(normalize,name))
    print(L)
    >>> 
    ['Zyj', 'Sl', 'Sb']
    ['Zyj', 'Wh', 'Sbj']
    >>>
    from functools import reduce
    def prod(L):
        return reduce(lambda x,y: x*y, L)
    L1= [1,3,5,7,9]
    print(prod(L1))
    >>> 
    945
    >>> 

    将小数转换为浮点数:

    from functools import reduce
    def char2num(s):
        return {'0':0,'1':1,'2':2,'3':3,'4':4,'5':5,'6':6,'7':7,'8':8,'9':9}[s]
    def str2folat(s):
        return reduce(lambda x,y: x*10+y, map(char2num,s))
    s= '123.456'
    i = s.find('.')
    n = len(s)-(i+1)
    s1 = s[:i]+s[(i+1):]
    #s1,s2 = s.split('.')
    #s1 = s1+s2
    result = str2folat(s1)/10**n
    print(result)
    >>> 
    123.456
    >>> 
  • 相关阅读:
    Anaconda+用conda创建python虚拟环境
    Linux安装matlab及简单操作
    Matlab2016b 版本knnclassify函数在Matlab2019b的替换及解决方案
    WIN TO GO实现win10系统迁移
    ArcMap高版本文件保存成低版本
    matlab 保存大于2GB数据
    Tensorflow_gpu + anconda3_3.4.2 +keras2.1.1 + CUDA8.0+CUDNN5.1
    B
    A
    POJ I Think I Need a Houseboat
  • 原文地址:https://www.cnblogs.com/zhaoyujiao/p/5365958.html
Copyright © 2020-2023  润新知