《流畅的Python》函数装饰器与闭包

fluent-python-logo

有很多人抱怨,把这个特性命名为“装饰器”不好。主要原因是,这个名称与 GoF 书使用的不一致。装饰器这个名称可能更适合在编译器领域使用,因为它会遍历并注解语法书。 —“PEP 318 — Decorators for Functions and Methods”

本章的最终目标是解释清楚函数装饰器的工作原理,包括最简单的注册装饰器和较复杂的参数化装饰器。

讨论内容:

  • Python 如何计算装饰器语法
  • Python 如何判断变量是不是局部的
  • 闭包存在的原因和工作原理
  • nonlocal 能解决什么问题
  • 实现行为良好的装饰器
  • 标准库中有用的装饰器
  • 实现一个参数化的装饰器
……

《流畅的 Python》一等函数

fluent-python-logo

不管别人怎么说或怎么想,我从未觉得 Python 受到来自函数式语言的太多影响。我非常熟悉命令式语言,如 C 和 Algol 68,虽然我把函数定为一等对象,但是我并不把 Python 当作函数式编程语言。
—— Guido van Rossum: Python 仁慈的独裁者

在 Python 中,函数是一等对象。
编程语言理论家把“一等对象”定义为满足下述条件的程序实体:

  • 在运行时创建
  • 能赋值给变量或数据结构中的元素
  • 能作为参数传给函数
  • 能作为函数的返回结果
……

Python 之禅

Beautiful is better than ugly. (优美比丑陋好) Explicit is better than implicit.(清晰比晦涩好) Simple is better than complex.(简单比复杂好) Complex is better than complicated.(复杂比错综复杂好) Flat is better than nested.(扁平比嵌套好) Sparse is better than dense.(稀疏比密集好) Readability counts.(可读性很重要) Special cases aren't special enough to break the rules.(特殊……

Django 导出和导入数据

dumpdata 命令: 它可以用来备份(导出)模型实例或整个数据库 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ./manage.py dumpdata --help usage: manage.py dumpdata [-h] [--format FORMAT] [--indent INDENT] [--database DATABASE] [-e EXCLUDE] [--natural-foreign] [--natural-primary] [-a] [--pks PRIMARY_KEYS] [-o OUTPUT] [--version] [-v {0,1,2,3}] [--settings SETTINGS] [--pythonpath PYTHONPATH] [--traceback] [--no-color] [--force-color] [app_label[.ModelName] [app_label[.ModelName] ...]] Output the contents of the database as a fixture of the given format (using each model's default manager unless --all is specified). positional arguments: app_label[.ModelName] Restricts dumped data to the specified app_label or app_label.ModelName. optional arguments: -h, --help show this help message and exit --format FORMAT Specifies the output serialization format for fixtures. --indent INDENT Specifies……

Python 之代码规范

以下所有内容包含在官方 PEP(Python Enhancement Proposals) 链接为 [pep8][https://www.python.org/dev/peps/pep-0008/] 简要版本 代码编排 缩进。4个空格的缩进(编辑器都可以完成此功能),不使用Tap,更不能混合使用Tap和空格。 针对不同编辑器兼容性,对 tab 可能有不同的标准,导致样式不统一。 每行最大长度79,换行可以使用反斜杠,最好使用圆括号。换行点要在操作符的后边敲回车。 早期 unix 主机终端……

Django 项目后端模板

Django 项目本身可以通过 django-admin 或者直接运行 python manage.py ARGS 来进行脚手架生成。但是生成的项目框架层次不算太好。 首先生成一个 Django 项目: 1 django-admin startproject backend 生成的项目框架如下: 1 2 3 4 5 6 7 backend ├── backend │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ └── wsgi.py └── manage.py 其中的两个 backend 分别表示项目,以及 app 全局配置 建立文件夹 apps 用来放置应用,把内层 backend 改为 conf 1 2 3 4 5 6……

理解递归的小故事

理解递归的小故事 转载一篇对递归理解有帮助的小故事 对递归的理解的要点主要在于放弃! 放弃你对于理解和跟踪递归全程的企图,只理解递归两层之间的交接,以及递归终结的条件。 想象你来到某个热带丛林,意外发现了十层之高的汉诺塔。正当你苦苦思索如何搬动它时,林中出来一个土著,毛遂自荐要帮你搬塔。他名叫二傻,戴着一个……

《流畅的Python》 字典和集合

字典这个数据结构活跃在所有 Python 程序的背后,即便你的源码里并没有直接用到它。 ——A. M. Kuchling dict 是 Python 语言的基石。 可散列对象需要实现 __hash__ 和 __eq__ 函数。 如果两个可散列对象是相等的,那么它们的散列值一定是一样的。 范映射类型 collections.abc 模块中有 Mapping 和 MutableMapping 两个抽象基类,起作用是为 dict 和其他类似的类型定义形式接口。 //pic 但非抽象映射类型一般不会直……

《流畅的Python》 序列构成的数组

你可能注意到了,之前提到的几个操作可以无差别地应用于文本、列表和表格上。 我们把文本、列表和表格叫作数据火车……FOR 命令通常能作用于数据火车上。 ——Geurts、Meertens 和 Pemberton ABC Programmer’s Handbook 内置序列类型概览 容器序列 list、tuple 和 collections.deque 这些序列能存放不同类型的数据。 扁平序列 st……

Markdown 语法总结

Markdown 语法总结 斜体和粗体 1 2 3 4 *斜体*或_斜体_ **粗体** ***加粗斜体*** ~~删除线~~ 斜体或_斜体_ 粗体 加粗斜体 删除线 分级标题 1 2 3 4 5 6 # 一级标题 ## 二级标题 ###三级标题 ### 四级标题 #### 五级标题 ##### 六级标题 一级标题字号最大,依级递减。 超链接 Markdown 支持两种形式的链接语法: 行内式和参考式两种形式,行内式一……