流畅的python 第5章:一等函数
2018-01-31 17:16
162 查看
在 Python 中,函数是一等对象。编程语言理论家把“一等对象”定义为满足下述条件的程
序实体:
* 在运行时创建
* 能赋值给变量或数据结构中的元素
* 能作为参数传给函数
* 能作为函数的返回结果
在 Python 中,整数、字符串和字典都是一等对象。
示例创建一个函数并调用它的__doc__属性
例如map,filter, sorted等内置函数。
除了用户定义的函数, 调用运算符即
用户定义的函数: 使用def语句或lambda表达式创建
内置函数:如len
内置方法:如dict.get
方法:在类定义体中的函数
类
类的实例: 如果类定义了
生成器函数: 使用
__call__:
def __call__(self):
return self.__dict__
可变参数和关键字参数:
序实体:
* 在运行时创建
* 能赋值给变量或数据结构中的元素
* 能作为参数传给函数
* 能作为函数的返回结果
在 Python 中,整数、字符串和字典都是一等对象。
1.把函数视作对象
在 Python 中,所有函数都是一等对象, 函数可以赋值给变量,可以当作参数传递给其实函数示例创建一个函数并调用它的__doc__属性
>>> def factorial(n): '''returns n!''' return 1 if n < 2 else n * factorial(n-1) >>> factorial(42) 1405006117752879898543142606244511569936384000000000L >>> factorial.__doc__ 'returns n!' >>>
2.高阶函数
接受函数为参数,或者把函数作为结果返回的函数是高阶函数,例如map,filter, sorted等内置函数。
>>> fruits = ['strawberry', 'fig', 'apple', 'cherry', 'raspberry', 'banana'] >>> sorted(fruits, key=len) ['fig', 'apple', 'cherry', 'banana', 'raspberry', 'strawberry'] >>> fileList = list(filter(lambda _ : _ not in ('__init__.py','.') and _.endswith('.py'),os.listdir(r'c:\py\')))
3.可调用对象
除了用户定义的函数, 调用运算符即
()还可以应用到其他对象上. 如果像判断对象能否被调用, 可以使用内置的
callable()函数进行判断. python的数据模型中有7种可是可以被调用的:
用户定义的函数: 使用def语句或lambda表达式创建
内置函数:如len
内置方法:如dict.get
方法:在类定义体中的函数
类
类的实例: 如果类定义了
__call__, 那么它的实例可以作为函数调用.
生成器函数: 使用
yield关键字的函数或方法
__call__:
def __call__(self):
return self.__dict__
可变参数和关键字参数:
def fun(name, age, *args, **kwargs): pass*args 和 **kwargs 都是可迭代对象, 展开后映射到单个参数. args是个元组, kwargs是字典.
相关文章推荐
- 『流畅的Python』第5章_一等函数
- 流畅的python第五章一等函数学习记录
- 流畅的python 第六章: 使用一等函数实现设计模式
- 流程的Python 第五章:一等函数
- 流程的Python 第六章:使用一等函数来设计模式
- Python 一等函数
- python学习笔记之各种函数各种库
- Python中内建函数的简单用法说明
- 【more effective c++读书笔记】【第5章】技术(7)——让函数根据一个以上的对象类型来决定如何虚化(2)
- python循环,函数
- Java转Python之函数、模块和异常处理
- Python函数中接受元组和字典
- python学习03--函数定义与调用
- python threading获取线程函数返回值
- Python zip函数详解
- 零基础学python-15.3 函数的定义、调用与多态
- python中的函数any()和all()
- python download url 函数详解
- python学习--函数
- Python内建函数之——filter,map,reduce