博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python【6】-函数式编程
阅读量:4338 次
发布时间:2019-06-07

本文共 1494 字,大约阅读时间需要 4 分钟。

一、高阶函数 map,reduce

1.map()

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

def f(x):    return x*xprint map(f,range(1,5))运行结果: [1, 4, 9, 16]

 

2. reduce

把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算

例如求1-100之和

def f(x,y):    return x+yprint reduce(f,range(1,5))运行结果:10

 

3.sorted排序

sorted()函数也是一个高阶函数,它还可以接收一个比较函数来实现自定义的排序。

l=[34,25,1,3,50]print sorted(l)#运行结果:[1, 3, 25, 34, 50]

 

def reverse(x,y):    if(x>y):        return -1    elif (x

 

4.函数作为返回值

def f(*args):  def sub():    sum = 0    for x in args:      sum = sum + x    return sum  return subd=f(1,2,3,4,5,6,7)print d()#运行结果:28

 

把函数作为参数传入,或者把函数作为返回值返回,这样的函数称为高阶函数,函数式编程就是指这种高度抽象的编程范式。

二、匿名函数

关键字lambda表示匿名函数,冒号前面的x表示函数参数。匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

print map(lambda x:x*x,range(1,6))#运行结果:[1, 4, 9, 16, 25]

 

三、装饰器

在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。

import functools#定义装饰器def log(f):    @functools.wraps(f)    def wrapper(*args,**kw):        print "call %s"%(f.__name__)        f(*args,**kw)    return wrapper

 

因为它是一个decorator,所以接受一个函数作为参数,并返回一个函数。我们要借助Python的@语法,把decorator置于函数的定义处

#使用装饰器@logdef getNow():    print '2016-05-26'#调用getNow()#运行结果:2016-05-26

 

 

四、偏函数

functools.partial的作用就是,把一个函数的某些参数(不管有没有默认值)给固定住(也就是设置默认值),返回一个新的函数,调用这个新函数会更简单。

import functools

def func(a,b=1,c=2):
return a+b+c

func2=functools.partial(func,b=2)

func3=functools.partial(func,c=3)

print func2(5)#运行结果9

print func3(1,4)#运行结果8

 如需转载,请标明原文链接:http://www.cnblogs.com/janes/

转载于:https://www.cnblogs.com/janes/p/5531173.html

你可能感兴趣的文章
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_19、SpringBoot个性化启动banner设置debug日志...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_20、SpringBoot2.x配置全局异常实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第5节 SpringBoot部署war项目到tomcat9和启动原理讲解_23、SpringBoot2.x启动原理概述...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_21、SpringBoot2.x配置全局异常返回自定义页面...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_34、SpringBoot整合Mybatis实操和打印SQL语句...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_35、事务介绍和常见的隔离级别,传播行为...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_40、Redis工具类封装讲解和实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_37、分布式缓存Redis介绍...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_42、SpringBoot常用定时任务配置实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第9节 SpringBoot2.x整合Redis实战_39、SpringBoot2.x整合redis实战讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第14节 高级篇幅之SpringBoot多环境配置_59、SpringBoot多环境配置介绍和项目实战...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_41、SpringBoot定时任务schedule讲解...
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第10节 SpringBoot整合定时任务和异步任务处理_43、SpringBoot2.x异步任务实战(核心知识)...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_01课程简介
查看>>
小D课堂 - 零基础入门SpringBoot2.X到实战_第11节 Logback日志框架介绍和SpringBoot整合实战_45、SpringBoot2.x日志讲解和Logback配置实战...
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_1_02技术选型
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_汇总
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_01传统架构演进到分布式架构
查看>>
小D课堂 - 新版本微服务springcloud+Docker教程_2_02 微服务核心基础讲解
查看>>