美文网首页
Fluent Python笔记--一等函数

Fluent Python笔记--一等函数

作者: MontyOak | 来源:发表于2017-12-23 23:02 被阅读17次

Python中的函数是”一等公民“。所谓一等公民,含义是:

  1. 运行时创建;
  2. 能够赋值给变量;
  3. 能作为参数传给函数;
  4. 能作为函数返回结果;

可见,大多数Python内置的数据结构(数字,字符,字典,列表,元组等等)都是“一等公民”。

高阶函数

所谓高阶函数,就是接受函数作为参数的函数。比如说,sorted方法就是,一个高阶函数,它的key参数接受函数。

>>> def reverse(word):
... return word[::-1]
>>> reverse('testing')
'gnitset'
>>> sorted(fruits, key=reverse)
['banana', 'apple', 'fig', 'raspberry', 'strawberry', 'cherry']
>>> sorted(fruits, key=lambda word: word[::-1])
['banana', 'apple', 'fig', 'raspberry', 'strawberry', 'cherry']
>>> sorted(fruits, key=len)
['fig', 'apple', 'cherry', 'banana', 'raspberry', 'strawberry']

在函数编程范式中,最为人广为熟知的就是mapreducefilter

# map, filter可以用推导式语法替代
>>> list(map(fact, range(6))) 
[1, 1, 2, 6, 24, 120]
>>> [fact(n) for n in range(6)] 
[1, 1, 2, 6, 24, 120]
>>> list(map(factorial, filter(lambda n: n % 2, range(6)))) 
[1, 6, 120]
>>> [factorial(n) for n in range(6) if n % 2] 
[1, 6, 120]
# reduce一般用于求和
>>> from functools import reduce 
>>> from operator import add 
>>> reduce(add, range(100)) 
4950
>>> sum(range(100)) 
4950

自定义可调用类型

基于Python的“鸭子类型”(duck typing)机制,任何在内部实现了__call__()方法的对象都可以被调用。

import random
class 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): 
        return self.pick()

>>> bingo = BingoCage(range(7))
>>> bingo.pick()
3
>>> bingo()
5
>>> callable(bingo)
True

相关文章

  • Fluent Python笔记--一等函数

    Python中的函数是”一等公民“。所谓一等公民,含义是: 运行时创建; 能够赋值给变量; 能作为参数传给函数; ...

  • fluent_python_part_3

    Fluent Python 第五章 一等函数 函数也是对象并且可以作为参数进行传递,也可以作为函数的返回值,同样可...

  • Fluent Python笔记--一等函数与设计模式

    关于设计模式的讨论,已经有了许多非常好的文章阐述和示例代码实现。但是,鉴于Python的独特语言特性,还是有一些需...

  • Fluent Python 笔记 —— 使用一等函数实现设计模式

    经典的策略模式 “策略模式”:定义一系列算法,把它们一一封装,并且使它们之间可以相互替换。本模式使得算法可以独立于...

  • Python Metaprogramming

    Fluent Python Metaprogramming 部分的笔记, 在加上了其他杂七杂八的东西 Dynami...

  • Fluent系列3

    Fluent Python Notebook Part Three 标签(空格分隔): Python Object...

  • 17 | python中的装饰器

    python中的装饰器 函数核心回顾 1.函数是Python中的一等公民,函数也是对象。可以把函数赋值给变量。 2...

  • 第4天,函数进阶

    [toc] 一、函数对象 在python中,函数是一等对象,“一等对象”满足下述条件的程序实体: 可以被引用 可以...

  • Fluent Python手册(一)

    把函数视为对象:一等函数 把函数视为对象 python函数是对象。 高阶函数 函数式编程的特点之一是使用高阶函数。...

  • 《流畅的Python》分享下载

    书籍信息 书名:《流畅的Python》 原作名:Fluent Python 作者:[巴西] Luciano Ram...

网友评论

      本文标题:Fluent Python笔记--一等函数

      本文链接:https://www.haomeiwen.com/subject/njccgxtx.html