zoukankan      html  css  js  c++  java
  • python 函数式编程:高阶函数,map/reduce

    python 函数式编程:高阶函数,map/reduce

     1 #函数式编程
     2 #函数式编程一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数
     3 #(一)高阶函数
     4 
     5 f=abs
     6 f
     7 print(f(-20))
     8 #结果  20
     9 #函数可以赋值给一个变量,即:变量可以指向函数
    10 #那么函数名是什么?函数名其实就是指向函数的变量!
    11 
    12 #下面的代码,执行后,abs已经不指向求绝对值函数而是一个整数10了。
    13 #后面的abs(-10)将报错,无法执行,必须重启python才可以。
    14 #abs=10
    15 #abs(-10)
    16 
    17 #一个简单的高阶函数
    18 #所谓高阶函数,即是可以把函数作为其参数传入。
    19 def add(x,y,f):
    20     return  f(x)+f(y)
    21 
    22 print(add(-5,6,abs))
    23 
    24 #演示高阶函数map()/reduce()
    25 #map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次
    26 #作用到序列的每个元素,并把结果作为新的Iterator返回
    27 #比如我们有一个函数f(x)=x^2,要把它作用在一个list[1,2,3,4,5,6,7,8,9]上
    28 
    29 def f(x):
    30     return  x*x
    31 r=map(f,[1,2,3,4,5,6,7,8,9])
    32 #Iterator是个迭代器,即是个惰性序列,需要list()函数让它把整个序列计算出来返回一个list
    33 print(list(r))
    34 #结果 [1,4,9,16,25,36,49,64,81]
    35 
    36 #map()作为高阶函数,事实上它把运算规则抽象了。
    37 #再来一个例子,把list所有数字转为字符串
    38 print(list(map(str,[1,2,3,4,5,6,7,8])))
    39 #结果  ['1', '2', '3', '4', '5', '6', '7', '8']
    40 
    41 #reduce()函数
    42 #它的效果就是:
    43 #reduce(f,[x1,x2,x3,x4])=f(f(f(x1,x2),x3),x4)
    44 from functools import reduce
    45 def fn(x,y):
    46     return  x*10+y
    47 
    48 print(reduce(fn,[1,3,5,7,9]))
    49 #结果:13579, 即把序列转成了一个整数
    50 
    51 #另一个例子,实现int()函数的功能
    52 def str2int(s):
    53     def fn(x,y):
    54         return x*10+y
    55     def char2num(s):
    56         return {'0':0,'1':1,'2':2,'3':3,'4':4,
    57                 '5':5,'6':6,'7':7,'8':8,'9':9}[s]
    58     return reduce(fn,map(char2num,s))
    59 print(str2int('784533'))
    60 #结果  784533
    61 
    62 #还可以用lambda函数进一步简化成
    63 def char2num(s):
    64     return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4,
    65             '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
    66 def str2int(s):
    67     return reduce(lambda x,y:x*10+y,map(char2num,s))
    68 print(str2int('743092'))
    69 #结果  743092
  • 相关阅读:
    实战-百度云[大文件/文件夹]下载限制破解
    IOCP之客户端及消息传递
    IOCP简单实现
    Charles V4系列更新 | 绿色特别版 | 视频教程
    Charles 3.11.5 绿色特别版
    VC运行库合集2005/2008/2010/2012/2013/2015
    手游测试之《弱网测试》
    后端性能测试不可不知的二三事
    linux性能指标及分析工具
    Shell笔记-04
  • 原文地址:https://www.cnblogs.com/hackpig/p/8151211.html
Copyright © 2011-2022 走看看