python函数式编程之返回函数、匿名函数、装饰器、偏函数学习
python函数式编程之返回函数
高阶函数处理可以接受函数作为参数外,还可以把函数作为结果值返回。
函数作为返回值
def laxy_sum(*args):
def sum():
ax = 0;
for n in args:
ax = ax + n;
return ax;
return sum; print(laxy_sum(1, 3, 5, 7));
# <function laxy_sum.<locals>.sum at 0x000001F2E3272F28>返回一个函数而不是一个值
在这个函数中,内部函数sum可以引用外部函数laxy_sum的参数和局部变量,当外部函数返回函数sum时,相关参数和变量都保存在返回的函数中,这种情况称为“闭包”个人觉得和JavaScript的闭包很相似,这种程序结构拥有极大的威胁。
当我们调用lazy_sum时,每次调用都会返回新的函数,即使传入相同的参数。
- 闭包
当一个函数返回了一个函数后,其内部的局部变量还被新函数引用。返回的函数并没有立即执行,而是直到调用了外部函数才执行
python函数式编程之匿名函数
当我们在传入函数时,有时候不需要显式的定义函数,而是直接传入匿名函数。
匿名函数就是没有函数名的函数,python用关键字lambda表示匿名函数,冒号前面的x表示函数的参数
#匿名函数
p = list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6]));
print(p);
# [1, 4, 9, 16, 25, 36]
匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。
python函数式编程之装饰器
由于函数也是一个对象,函数对象也可以赋值给变量,所以我们可以通过变量也能调用函数。
def now():
print('2017-11-22');
f = now;
print(f());# 2017-11-22
函数对象有一个属性__name__属性,可以拿到函数的名字:像上面的例子就可以用 f.__name__取到函数的名字now
在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)。如,在函数now调用前后自动打印日志,但又不希望修改now()函数的定义。装饰器本质上是一个干返回函数的高阶函数。
def log(func):
def wrapper(*args, **kw):
print('call %s():' % func.__name__);
return func(*args, **kw);
return wrapper;
@log
def now():
print('2017-11-22');
print(now());
# call now():
# 2017-11-22
Python的@语法后续
python函数式编程之偏函数
简单理解
如int()函数可以把字符串转换成整数形式:print(int("1234"));#字符串转换成整数
int函数还提供了base参数,用来把字符串转换成N进制的数,默认是10.
print(int("12345", base=8));
但是当我们要进行很多的值转换的时候,一个个传入函数的话,就会很低效,那么我们就可以编写一个这样的函数,让他能实现我们的想法。
def int2(x, base=2):
return int(x, base)
print(int2("100001"));#33
print(int2("1101110"));#110
向上面这样我们就不用多次输入int(x, base=n),python的functools.partial就帮我们创建了一个偏函数,不需要我们编写函数int2,可以直接创建一个int2函数:
#偏函数
import functools;
int2 = functools.partial(int, base=2);
print(int2("11101"));#29
所以,functools.partial的作用就是,把一个函数的某些参数设置默认值,返回个新的函数,调用这个新函数会更简单。但也可以传入其他的值,如:int2("10010", base=10);
- 总结
当我们函数参数个数很多,需要简化时,我们可以使用python的functools.partial来创建一个偏函数来固定一些参数,使得我们在使用新函数的时候更加方便。
python函数式编程之返回函数、匿名函数、装饰器、偏函数学习的更多相关文章
- Python函数式编程:内置filter函数使用说明
filter操作是函数式编程中对集合的重要操作之一,其作用是从原集合中筛选符合条件的条目,组成一个新的集合. 这在我们日常编程中是非常常见的操作.我们通常的做法是通过循环语句来处理. 而使用filte ...
- Learning Python 012 函数式编程 2 返回函数 匿名函数 装饰器 偏函数
Python 函数式编程 2 返回函数 返回函数的意思就是:函数作为返回值.(高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回.) 举个例子:实现一个可变参数的求和. 正常的函数: de ...
- day03 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数
本节内容 1. 函数基本语法及特性 2. 参数与局部变量 3. 返回值 嵌套函数 4.递归 5.匿名函数 6.函数式编程介绍 7.高阶函数 8.内置函数 温故知新 1. 集合 主要作用: 去重 关系测 ...
- python函数式编程之匿名函数、装饰器、偏函数
匿名函数 当我们在传入函数时,有些时候,不需要显式的定义函数,直接传入匿名函数就行.如下面 lambda x: x*x 在python中,关键字lambda表示匿名函数,冒号前面的x表示函数参数 匿名 ...
- Python 函数式编程 & Python中的高阶函数map reduce filter 和sorted
1. 函数式编程 1)概念 函数式编程是一种编程模型,他将计算机运算看做是数学中函数的计算,并且避免了状态以及变量的概念.wiki 我们知道,对象是面向对象的第一型,那么函数式编程也是一样,函数是函数 ...
- 转自:Python函数式编程指南(二):函数
2. 从函数开始 2.1. 定义一个函数 如下定义了一个求和函数: 1 2 def add(x, y): return x + y 关于参数和返回值的语法细节可以参考其他文档,这里就略过了. ...
- Python核心编程读笔 10:函数和函数式编程
第11章 函数和函数式编程 一 调用函数 1 关键字参数 def foo(x): foo_suite # presumably does some processing with 'x' 标准调用 ...
- python 函数式编程:高阶函数,map/reduce
python 函数式编程:高阶函数,map/reduce #函数式编程 #函数式编程一个特点就是,允许把函数本身作为参数传入另一个函数,还允许返回一个函数 #(一)高阶函数 f=abs f print ...
- Python学习札记(二十) 函数式编程1 介绍 高阶函数介绍
参考: 函数式编程 高阶函数 Note A.函数式编程(Functional Programming)介绍 1.函数是Python内建支持的一种封装,我们通过一层一层的函数调用把复杂任务分解成简单的任 ...
随机推荐
- work_log
机房搬迁 1. 虚拟机-à实体机 2. ldap 服务器 3. 考勤数据服务器 4. glpi 权限管理. 5. 备份脚本. 6. 试验jira重新启动. Luke--- 1,报价文档,相关技术者,技 ...
- telnet --- no route to host solution "iptables -F " in the target machine
telnet --- no route to host solution "iptables -F " in the target machine
- 开机启动/etc/rc.local失效无效怎么办?解决方法
开机启动/etc/rc.local失效问题的解决方法 第一种情况:当centOS 随机启动文件 /etc/rc.local 失效时请按如下修改1.echo /etc/rc.local >> ...
- [译]理解Windows消息循环
出处:http://www.cnblogs.com/zxjay/archive/2009/06/27/1512372.html 理解消息循环和整个消息传送机制对Windows编程来说非常重要.如果对消 ...
- Keras之序贯(Sequential)模型
序贯模型(Sequential) 序贯模型是多个网络层的线性堆叠. 可以通过向Sequential模型传递一个layer的list来构造该模型: from Keras.models import Se ...
- Thymeleaf添加页面模板
在页面编辑中,有一些公共的页面部分(比如header,footer等)可以抽取出来放到模板中,其他页面使用的时候可以调取该模板,这样的好处是如果修改这些公共部分,只修改模板中的代码即可. 为了做到这一 ...
- sublime txet 3 python 开发环境安装配置
下载python 下载地址:https://www.python.org/downloads/windows/ 下载sublime text 3 下载地址:https://www.sublimetex ...
- python 系统相关操作
1.文件 open()代开文件或者创建文件 fout=open('oops.txt','wt') print('Oops, I created a file.',file=fout) fout.clo ...
- 通过SSRS创建动态分组报表的方法!
SSRS是微软专门的报表开发工具,对于一般高级用户(非专业开发人员)可以通过SQL Server Report Builder创建,可以把制作好的发布在单独部署的SQL Server Reportin ...
- kubernetes --> kube-dns 安装
准备yaml文件: 1.kubedns-cm.yaml # Copyright 2016 The Kubernetes Authors. # # Licensed under the Apache L ...