流程的Python 第五章:一等函数
来源:互联网 发布:twitter第三方登录js 编辑:程序博客网 时间:2024/06/07 12:15
前言:
Python函数的一等本性,这意味着,我们可以把函数赋值给变量、传给其他函数、存储在数据结构中,以及访问函数的属性,供框架和一些工具使用。
目录:
- 内容回顾
- 相关资料
- 阅读后感
正文:
一. 内容回顾
1.1 把函数视作对象
通过别的名称使用函数,再把函数作为参数传递,典型的函数式编程。如下:
# -*- coding:utf-8 -*-def factorial(n): return nfact = factorialprint fact(2)
1.2 高阶函数
接受函数为参数,或者把函数作为结果返回的函数是高阶函数。如下:
# -*- coding:utf-8 -*-def call_function(func): print ("callFunc.") func()def function(): print ("call function")call_function(function)
1.3 匿名函数
lambda关键字在python表达式内创建匿名函数
1.4 可调用对象
Python中有各式各样可调用的类型,因此判断对象能否调用,最安全的方法是使用内置的callable()函数
1.5 用户定义的可调用类型
不仅python函数是真正的对象,任何python对象都可以表现得像函数,为此,只需实现实例方法_ call _。
# -*- coding:utf-8 -*-import randomclass BingoCage: def __init__(self, items): self._items = list(items) random.shuffle(self._items) def pick(self): try: return self._items.pop() except IndexError: raise LookupError("pick from empty BingoCage") def __call__(self, *args, **kwargs): return self.pick()bingo = BingoCage(range(3))print callable(bingo)
1.6 函数内省
除了doc,函数对象还有很多属性。使用dir函数可以探知
1.7 从定位参数到仅限关键字参数
1.8 获取关于参数的信息
1.9 函数注解
1.10 支持函数式编程的包
Python的目标不是变成函数式编程语言,但是有益于operator和functools等包的支持,函数式编程风格也可以信手拈来。
二. 相关资料
2.1 高阶函数
要理解“函数本身也可以作为参数传入”,可以从Python内建的map/reduce函数入手。
2.2 可调用函数
class route(object): def __init__(self, res) self.resource = res @classmethod def factory(cls): print 'factory' return cls() @webob.dec.wsgify def __call__(self,req): print 'route __call__' return self.resource() class resource(object): @webob.dec.wsgify def __call__(self,req): print 'resource __call__' class API(route): def __init__(self): res = resource() super(API, self).__init__(res) wsgi.server(eventlet.listen(('', 80)), API.factory())
2.3 函数注解
Python 3.x 引入了函数注释,以增强函数的注释功能,下面是一个普通的自定义函数:
def dog(name, age, species): return (name, age, species)
添加了注释的自定义函数:
def dog(name:str, age:(1, 99), species:'狗狗的品种') -> tuple: return (name, age, species)
如上,可以使用:对参数逐个进行注释,注释内容可以是任何形式,比如参数的类型、作用、取值范围等等,返回值使用->标注,所有的注释都会保存至函数的属性。
2.4 operator模块
operator模块是python中内置的操作符函数接口,它定义了一些算术和比较内置操作的函数。operator模块是用c实现的,所以执行速度比python代码快。
相关运算符: https://docs.python.org/2/library/operator.html
2.5 functools模块
这个模块提供了3个有趣的函数:
1.partial函数,它可以重新绑定函数的可选参数,生成一个callable的partial对象
2.update_wrapper函数,它可以把被封装函数的name、module、doc和 dict都复制到封装函数去
3.wraps函数,它将update_wrapper也封装了进来
三. 阅读后感
阅读本章节对函数有了更深的理解,函数不仅仅是平时写的一些静态函数,类成员函数,还可以把函数当作对象,正如Python提倡的一切皆对象。
参考:
1. Python operator 模块简单介绍
2. Python 的函数注释
3. Python可调用对象call方法的用法分析
4. Python的functools模块
5. Python 高阶函数
- 流程的Python 第五章:一等函数
- 流程的Python 第六章:使用一等函数来设计模式
- javascript挑战编程技能-第五题:函数作为javascript的一等公民
- JavaScript世界的一等公民 - 函数
- JavaScript世界的一等公民 - 函数
- JavaScript世界的一等公民 - 函数
- JavaScript世界的一等公民 - 函数
- JavaScript世界的一等公民 - 函数
- JavaScript世界的一等公民 - 函数
- JavaScript世界的一等公民 - 函数
- JavaScript世界的一等公民 - 函数
- JavaScript世界的一等公民 - 函数
- JavaScript世界的一等公民 - 函数
- JavaScript世界的一等公民 - 函数
- JavaScript世界的一等公民 - 函数
- JavaScript世界的一等公民 - 函数
- JavaScript世界的一等公民 - 函数
- JavaScript世界的一等公民 - 函数ZZ
- 2.Action的使用
- MySQL 5.7.9版本sql_mode=only_full_group_by问题
- HDU 1180 诡异的楼梯
- DOS命令初次接触
- 暂时保存代码
- 流程的Python 第五章:一等函数
- ARM初体验
- 打包后的工具类 God+BlueJ+ClassLoader
- jvm 内存区域划分
- Python中变量
- ASP.NET基础篇--2、学习笔记
- 当数据迁移遇到MySql表统计分析(Cardinality)不准确的坑
- hdu2256
- 暑假测试 Day 1