实用的Python编程
文章平均质量分 77
《practical python programming》的中文翻译,以意译为主,目录不翻译,只翻译内容。英文原版见:https://github.com/dabeaz-course/practical-python
codists
Life is short, You need Python
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
翻译:《实用的Python编程》InstructorNotes
实用的 Python 编程——讲师说明作者:戴维·比兹利(David Beazley)概述对于如何使用我的课程“实用的 Python 编程”进行教学的问题,本文档提供一些通用的说明和建议,包括课程目标、课程受众、棘手的内容等。一些人会在一个典型的、为期三天的公司培训中进行教学,本说明就是提供给这些教学人员的。在如何教授自己的课程方面,这些说明可能会给你带来一些启发。目标受众和一般方法本课程旨在作为已经有一定的编程经验人员的“Python 入门”课程。这绝对不是一门为编程新手而设计的课程。话虽如原创 2021-04-24 20:49:08 · 265 阅读 · 0 评论 -
翻译:《实用的Python编程》TheEnd
完结!你已经完成了本课程。感谢你的关注,感谢你花时间和精力学习本课程。祝你在未来的 Python 编程中快乐并有所收获。我总是很高兴能够收到反馈。你可以在 https://dabeaz.com或者推特( @dabeaz )上找到我。— — 戴维·比兹利(David Beazley)目录注:完整翻译见 https://github.com/codists/practical-python-zh...原创 2021-04-20 22:44:58 · 201 阅读 · 0 评论 -
翻译:《实用的Python编程》09_03_Distribution
目录 | 上一节 (9.2 第三方包) | 下一节 (完结)9.3 Distribution版本分发在某些时候,你可能想要将自己的代码提供给其他人——可能只是同事(使用)。本节给出执行此操作的最基本技术。更多详细信息,请参考 Python 打包用户指南。创建 setup.py 文件请添加一个 setup.py 到项目目录的顶层。# setup.pyimport setuptoolssetuptools.setup( name="porty", version="0.0.1"原创 2021-04-19 18:41:48 · 258 阅读 · 0 评论 -
翻译:《实用的Python编程》09_02_Third_party
目录 | 上一节 (9.1 包) | 下一节 (9.3 版本分发)9.2 第三方模块Python 拥有一个包含各种内置模块的大型库(自带电池(batteries included))(译注:“自带电池”来自于官方文档的翻译,意为“功能齐全”)。甚至还有很多第三方模块(可以使用)。请到 Python 包索引( PyPi ) 查看,或者使用谷歌搜索特定主题。对于 Python 而言,如何处理第三方依赖关系是一个不断演化的主题。本节仅仅涵盖一些基础知识,帮助你了解它们是如何工作的。模块搜索路径sys原创 2021-04-18 09:51:53 · 286 阅读 · 0 评论 -
翻译:《实用的Python编程》09_01_Packages
目录| 上一节 (8.3 调试) | 下一节 (9.2 第三方包)9.1 包如果编写一个较大的程序,我们并不真的想在顶层将其组织为一个个独立文件的大型集合。本节对包(package)进行介绍。模块任何一个 Python 源文件称为一个模块(module)。# foo.pydef grok(a): ...def spam(b): ...一条 import 语句加载并执行 一个模块。# program.pyimport fooa = foo.grok(2)b = fo原创 2021-04-16 16:42:24 · 241 阅读 · 0 评论 -
翻译:《实用的Python编程》09_00_Overview
目录 | 上一节 (8 测试和调试)9 包我们将以“如何把代码组织成包结构”这一主题结束本课程。同时,也将对第三方包的安装、如何将自己的代码提供给其他人使用进行讨论。在 Python 开发中,打包(packaging)是一个演进的,复杂的主题。本节主要关注一些通用的代码组织原则,而不是特定的工具。无论以后使用那种工具来分发代码或者管理依赖,这些通用的代码组织原则都是有用的。9.1 包9.2 第三方模块9.3 将代码提供给其他人(使用)目录 | 上一节 (8 测试和调试)注:完整翻译见原创 2021-04-13 15:31:49 · 213 阅读 · 0 评论 -
翻译:《实用的Python编程》08_03_Debugging
目录 | 上一节 (8.2 日志) | 下一节 (9 包)8.3 调试调试建议假设程序崩溃了:bash % python3 blah.pyTraceback (most recent call last): File "blah.py", line 13, in ? foo() File "blah.py", line 10, in foo bar() File "blah.py", line 7, in bar spam() File "blah.py",原创 2021-04-11 20:27:17 · 265 阅读 · 0 评论 -
翻译:《实用的Python编程》08_02_Logging
目录 | 上一节 (8.1 测试) | 下一节 (8.3 调试)8.2 日志本节对日志模块(logging module)进行简单的介绍。logging 模块logging 模块是用于记录诊断信息的 Python 标准库模块。日志模块非常庞大,具有许多复杂的功能。我们将会展示一个简单的例子来说明其用处。再探异常在本节练习中,我们创建这样一个 parse() 函数:# fileparse.pydef parse(f, types=None, names=None, delimiter=None原创 2021-04-10 22:54:13 · 237 阅读 · 0 评论 -
翻译:《实用的Python编程》08_01_Testing
目录 | 上一节 (7.5 装饰方法 | 下一节 (8.2 日志)8.1 测试多测试,少调试(Testing Rocks, Debugging Sucks)Python 的动态性质使得测试对大多数程序而言至关重要。编译器不会发现你的 bug,发现 bug 的唯一方式是运行代码,并确保尝试了所有的特性。断言(Assertions)assert 语句用于程序的内部检查。如果表达式不为真,则会触发 AssertionError 异常。assert 语句语法:assert <expression原创 2021-04-09 22:50:39 · 242 阅读 · 0 评论 -
翻译:《实用的Python编程》08_00_Overview
目录 | 上一节 (7 高级主题) | 下一节 (9 包)8. 测试和调试本节介绍与测试、日志和调试有关的基本主题。8.1 测试8.2 日志,错误处理和诊断8.3 调试目录 | 上一节 (7 高级主题) | 下一节 (9 包)注:完整翻译见 https://github.com/codists/practical-python-zh...原创 2021-04-08 13:49:36 · 232 阅读 · 0 评论 -
翻译:《实用的Python编程》07_05_Decorated_methods
目录 | 上一节 (7.4 装饰器) | 下一节 (8 测试和调试)7.5 装饰方法本节讨论一些与方法定义结合使用的内置装饰器。预定义的装饰器在类定义中,有许多预定义的装饰器用于指定特殊类型的方法。class Foo: def bar(self,a): ... @staticmethod def spam(a): ... @classmethod def grok(cls,a): ... @pro原创 2021-04-07 14:07:38 · 251 阅读 · 0 评论 -
翻译:《实用的Python编程》02_00_Overview
目录 | 上一节 (1 Python 简介) | 下一节(3 程序组织)2. 处理数据要编写有用的程序,您需要能够处理数据。本节介绍 Python的核心数据结构: 元组(tuple),列表(list),集合(set)和字典(dict),并讨论常见的数据处理习惯用法。本节的最后一部分深入探讨 Python 的底层对象模型。2.1 数据类型和数据结构2.2 容器2.3 格式化输出2.4 序列2.5 collections 模块2.6 列表推导式2.7 对象模型目录 | 上一节 (1原创 2021-04-06 17:04:51 · 212 阅读 · 0 评论 -
翻译:《实用的Python编程》07_04_Function_decorators
目录 | 上一节 (7.3 返回函数) | 下一节 (7.5 装饰方法)7.4 函数装饰器本节介绍装饰器(decorator)。因为这是一个高级主题,所以我们只做简单介绍。译注:根据译者个人的猜测,在《设计模式》(《 Design Patterns: Elements of Reusable Object-Oriented Software》)一书中写到 decorator also known as wrapper,所以下文提到包装器(wrapper),其实说的就是装饰器。这里为了保持和原文一致,所原创 2021-03-23 23:41:59 · 232 阅读 · 0 评论 -
翻译:《实用的Python编程》07_03_Returning_functions
目录 | 上一节 (7.2 匿名函数) | 下一节 (7.4 装饰器)7.3 返回函数本节介绍使用函数创建其它函数的思想。简介考虑以下函数:def add(x, y): def do_add(): print('Adding', x, y) return x + y return do_add这是返回其它函数的函数。>>> a = add(3,4)>>> a<function do_add at原创 2021-03-22 08:42:08 · 320 阅读 · 0 评论 -
翻译:《实用的Python编程》07_02_Anonymous_function
目录 | 上一节 (7.1可变参数) | 下一节 (7.3 返回函数)7.2 匿名函数和 Lambda再探列表排序列表可以使用 sort 方法进行原地(in-place)排序:s = [10,1,7,3]s.sort() # s = [1,3,7,10]也可以进行降序排序(译注:原文使用的是 sort in reverse order,很多时候翻译为倒序排序或者反向排序,个人认为容易引起歧义,故翻译为降序排序):s = [10,1,7,3]s.sort(reverse=True) # s原创 2021-03-21 23:13:35 · 214 阅读 · 0 评论 -
翻译:《实用的Python编程》07_01_Variable_arguments
目录 | 上一节 (6.4 生成器表达式) | 下一节 (7.2 匿名函数)7.1 可变参数本节介绍可变(variadic)参数。有时,可变参数使用 *args 和 **kwargs 进行表示。可变位置参数(*args)如果一个函数接受任意数量的(位置)参数,那么我们称该函数使用了可变参数(variable arguments)。示例:def f(x, *args): ...函数调用:f(1,2,3,4,5)额外的参数作为元组进行传递:def f(x, *args):原创 2021-03-20 09:47:51 · 247 阅读 · 0 评论 -
翻译:《实用的Python编程》07_00_Overview
目录| 上一节 (6 生成器) | 下一节 (8 测试和调试)7. 高级主题本节,我们将探究一些高级的 Python 特性。你可能会在日常编程中遇到这些特性。虽然许多特性本可以在前面的章节中介绍,但是却没有介绍并不是为了让你在当时避免肝脑涂地。应该强调的是:本节主题旨在对这些(特性的)思想做基础介绍。你需要查看更高级的材料来了解它们的细节。7.1 可变参数函数7.2 匿名函数和 lambda7.3 返回函数和闭包7.4 函数装饰器7.5 静态方法和类方法目录 | 上一节 (6 生成器)原创 2021-03-19 22:37:56 · 214 阅读 · 0 评论 -
翻译:《实用的Python编程》06_04_More_generators
目录 | 上一节 (6.3 生产者/消费者) | 下一节 (7 高级主题)6.4 有关生成器的更多信息本节介绍其它与生成器相关的主题,包括生成器表达式(generator expressions)和 itertools 模块。生成器表达式生成器表达式可以理解为列表解析式(list comprehension)的生成器版本:>>> a = [1,2,3,4]>>> b = (2*x for x in a)>>> b<generator原创 2021-03-18 22:24:29 · 223 阅读 · 0 评论 -
翻译:《实用的Python编程》06_03_Producers_consumers
目录 | 上一节 (6.2 自定义迭代) | 下一节 (6.4 生成器表达式)6.3 生产者,消费者和管道生成器在设置各种生产者/消费者问题(producer/consumer problems)和数据流管道(pipeline)中非常有用。本节将对此进行讨论。生产者消费者问题生成器与各种形式的 生产者消费者 问题密切相关。# Producerdef follow(f): ... while True: ... yield line #原创 2021-03-17 23:53:58 · 352 阅读 · 1 评论 -
翻译:《实用的Python编程》06_02_Customizing_iteration
目录 | 上一节 (6.1 迭代协议) | 下一节 (6.3 生产者/消费者)6.2 自定义迭代本节探究如何使用生成器函数自定义迭代。问题假设你想要自定义迭代模式。例如:倒数:>>> for x in countdown(10):... print(x, end=' ')...10 9 8 7 6 5 4 3 2 1>>>有一个j简单方法可以做到这一点。生成器生成器(generator)是定义了迭代的函数:def countdown(n)原创 2021-03-16 23:39:29 · 241 阅读 · 0 评论 -
翻译:《实用的Python编程》06_01_Iteration_protocol
目录 | 上一节 (5.2 封装) | 下一节 (6.2 自定义迭代)6.1 迭代协议本节将探究迭代的底层过程。迭代无处不在许多对象都支持迭代:a = 'hello'for c in a: # Loop over characters in a ...b = { 'name': 'Dave', 'password':'foo'}for k in b: # Loop over keys in dictionary ...c = [1,2,3,4]for i in c:原创 2021-03-15 14:40:23 · 311 阅读 · 1 评论 -
翻译:《实用的Python编程》06_00_Overview
目录 | 上一节 (5 Python对象的内部工作原理) | 下一节 (7 高级主题)6. 生成器在 Python 语言中,迭代(for 循环)是最常用的编程模式之一。程序执行大量的迭代来处理列表、读取文件、查询数据库…Python 最强大的特性之一就是能够以所谓的“生成器函数(generator function)”形式自定义和重新定义迭代。本节将对生成器主题进行介绍。最后,你将学习以一种有趣的方式编写程序来处理实时流数据。6.1 迭代协议6.2 使用生成器自定义迭代6.3 生产者/消费者问题原创 2021-03-14 21:15:26 · 213 阅读 · 0 评论 -
翻译:《实用的Python编程》05_02_Classes_encapsulation
目录 | 上一节 (5.1 再谈字典) | 下一节 (6 生成器)5.2 类和封装创建类时,通常会尝试将类的内部细节进行封装。本节介绍 Python 编程中有关封装的习惯用法(包括私有变量和私有属性)。Public vs Private虽然类的主要作用之一是封装对象的属性和内部实现细节。但是,类还定义了外界用来操作该对象的公有接口(public interface)。实现细节与公有接口之间的区别很重要。问题在 Python 中,几乎所有与类和对象有关的东西都是*开放(open)*的。可以轻松原创 2021-03-13 22:29:00 · 298 阅读 · 0 评论 -
翻译:《实用的Python编程》05_01_Dicts_revisited
目录 | 上一节 (4.4 异常) | 下一节 (5.2 封装)5.1 再谈字典Python 对象系统主要基于字典实现。本节将对此进行讨论。字典字典是命名值(named values)的集合。stock = { 'name' : 'GOOG', 'shares' : 100, 'price' : 490.1}虽然字典常用于简单的数据结构,但是字典也用于解释器的关键部分。字典可能是 Python 中最重要的数据类型。字典和模块在模块内,字典存储所有的全局变量和函数。原创 2021-03-12 08:37:53 · 266 阅读 · 0 评论 -
翻译:《实用的Python编程》05_00_Overview
目录 | 上一节 (4 类和对象) | 下一节 (6 生成器)5. Python 对象的内部工作原理本节介绍 Python 对象的内部工作原理。来自其它语言的程序员通常会发现 Python 的类概念缺乏特性。例如,没有访问控制(access-control)的概念(如:private,protected),self 参数让人感觉很奇怪,并且,坦白地说,使用对象有时候让人感到“一切都是开放的”。虽然某种程度上来说也许是这样,但是我们要了解其工作原理,以及一些常见的编程习惯,以便更好的封装对象的内部。虽然原创 2021-03-11 23:59:51 · 242 阅读 · 0 评论 -
翻译:《实用的Python编程》04_04_Defining_exceptions
目录 | 上一节 (4.3 特殊方法) | 下一节 (5 对象模型)4.4 定义异常用户可以通过类实现自定义异常:class NetworkError(Exception): pass异常类始终继承自 Exception它们通常是空类。空类内部使用 pass 表示。你也可以对异常进行分层:class AuthenticationError(NetworkError): passclass ProtocolError(NetworkError): pass练原创 2021-03-10 22:28:53 · 194 阅读 · 0 评论 -
翻译:《实用的Python编程》04_03_Special_methods
目录 | 上一节 (4.2 继承) | 下一节 (4.4 异常)4.3 特殊方法可以通过特殊方法(或者称为"魔术"方法(magic method))自定义 Python 行为的各部分。本节介绍特殊方法的思想。此外,还将讨论动态属性访问和绑定方法。简介类可以定义特殊方法。特殊方法对于 Python 解释器而言具有特殊的意义。特殊方法总是以双下划线 __ 开头和结尾,例如 __init__。class Stock(object): def __init__(self): .原创 2021-03-09 22:35:24 · 240 阅读 · 0 评论 -
翻译:《实用的Python编程》04_02_Inheritance
目录 | 上一节 (4.1 类) | 下一节 (4.3 特殊方法)4.2 继承继承(inheritance)是编写可扩展程序程序的常用手段。本节对继承的思想(idea)进行探讨。简介继承用于特殊化现有对象:class Parent: ...class Child(Parent): ...新类 Child 称为派生类(derived class)或子类(subclass)。类 Parent 称为基类(base class)或超类(superclass)。在子类名后的括号 ()原创 2021-03-08 18:08:59 · 319 阅读 · 1 评论 -
翻译:《实用的Python编程》04_01_Class
目录 | 上一节 (3.6 设计讨论) | 下一节 (4.2 继承)4.1 类本节介绍 class 语句以及创建新对象的方式。面向对象编程(OOP)面向对象编程是一种将代码组织成对象集合的编程技术。一个对象包括:数据。属性行为。方法——应用于对象的函数。在本课程中,你已经使用了面向对象编程技术。例如,操作列表。>>> nums = [1, 2, 3]>>> nums.append(4) # Method>>> num原创 2021-03-07 14:35:34 · 256 阅读 · 0 评论 -
翻译:《实用的Python编程》04_00_Overview
目录 | 上一节 (3 程序组织) | 下一节 (5 Python对象的内部工作原理)4. 类和对象到目前为止,我们的程序仅使用了内置的 Python 数据类型。本节,我们介绍类(class)和对象(object)的概念。你将学习 class 语句,该语句允许你创建新的对象。我们还将介绍继承(inheritance)的概念,继承通常用于构建可扩展的程序。最后,我们将研究类的一些其它特性,包括特殊方法,动态属性查找以及自定义异常。4.1 类简介4.2 继承4.3 特殊方法4.4 自定义异常目原创 2021-03-06 23:20:19 · 221 阅读 · 0 评论 -
翻译:《实用的Python编程》03_06_Design_discussion
目录 | 上一节 (3.5 主模块) | 下一节 (4 类)3.6 设计讨论本节,我们重新考虑之前所做的设计决策。文件名与可迭代对象考虑以下两个返回相同输出的程序。# Provide a filenamedef read_data(filename): records = [] with open(filename) as f: for line in f: ... records.append(r) ret原创 2021-03-05 19:27:12 · 234 阅读 · 0 评论 -
翻译:《实用的Python编程》03_05_Main_module
目录 | 上一节 (3.4 模块) | 下一节 (3.6 设计讨论)3.5 主模块本节介绍主程序(主模块)的概念主函数在许多编程语言中,存在一个主函数或者主方法的概念。// c / c++int main(int argc, char *argv[]) { ...}// javaclass myprog { public static void main(String args[]) { ... }}这是启动应用程序时执行的第一个函数。Py原创 2021-03-04 23:56:27 · 395 阅读 · 0 评论 -
翻译:《实用的Python编程》03_04_Modules
目录 | 上一节 (3.3 错误检查) | 下一节 (3.5 主模块)3.4 模块本节介绍模块的概念以及如何使用跨多个文件的函数。模块和导入任何一个 Python 源文件都是一个模块。# foo.pydef grok(a): ...def spam(b): ...import 语句加载并执行一个模块。# program.pyimport fooa = foo.grok(2)b = foo.spam('Hello')...命名空间模块是命名值的集合,有时也称原创 2021-03-03 22:38:58 · 248 阅读 · 0 评论 -
翻译:《实用的Python编程》03_03_Error_checking
目录 | 上一节 (3.2 深入函数) | 下一节 (3.4 模块)3.3 错误检查虽然前面已经介绍了异常,但本节补充一些有关错误检查和异常处理的其它细节。程序是如何运行失败的Python 不对函数参数类型或值进行检查或者校验。函数可以处理与函数内部语句兼容的任何数据。def add(x, y): return x + yadd(3, 4) # 7add('Hello', 'World') # 'HelloWorld'add('3', '4')原创 2021-03-02 22:33:45 · 397 阅读 · 0 评论 -
翻译:《实用的Python编程》03_02_More_functions
目录 | 上一节 (3.1 脚本) | 下一节 (3.3 错误检查)3.2 深入函数尽管函数在早先时候介绍了,但有关函数在更深层次上是如何工作的细节却很少提供。本节旨在填补这些空白,并讨论函数调用约定,作用域规则等问题。调用函数考虑以下函数:def read_prices(filename, debug): ...可以使用位置参数调用该函数:prices = read_prices('prices.csv', True)或者,可以使用关键字参数调用该函数:prices = re原创 2021-03-01 23:16:07 · 273 阅读 · 0 评论 -
翻译:《实用的Python编程》03_01_Script
目录 | 上一节 (2.7 对象模型) | 下一节 (3.2 深入函数)3.1 脚本在该部分,我们将深入研究编写 Python 脚本的惯例。什么是脚本?脚本就是运行和终止一系列语句的程序。# program.pystatement1statement2statement3...到目前为止,我们主要在编写脚本。问题如果你编写一个有用的脚本,它的特性和功能将会增加。你可能想要将其应用于相关的问题。随着时间的推移,它可能会成为一个关键的应用程序。如果你不注意的话,它可能会变成一团乱麻。原创 2021-02-28 21:51:21 · 260 阅读 · 2 评论 -
翻译:《实用的Python编程》03_00_Overview
目录 | 上一节 (2 处理数据) | 下一节 (4 类和对象)3. 程序组织到目前为止,我们已经学习了一些 Python 基础知识并编写了一些简短的脚本。但是,当开始编写更大的程序时,我们会想要有条理地组织这些程序。本节将深入讨论关于函数编写,错误处理以及模块的更多细节。最后,您应该能够编写跨多个文件的,并细分为函数的程序。我们还将提供一些有用的代码模板,以编写更有用的脚本。3.1 函数和脚本编写3.2 关于函数的更多细节3.3 异常处理3.4 模块3.5 主模块3.6 关于拥抱灵活性的原创 2021-02-27 23:51:54 · 213 阅读 · 0 评论 -
翻译:《实用的 Python 编程》02_07_Objects
目录 | 上一节 (2.6 列表推导式) | 下一节 (3 从程序组织)2.7 对象本节介绍有关 Python 内部对象模型的更多详细信息,并讨论一些与内存管理,拷贝和类型检查有关的问题。赋值Python 中的许多操作都与赋值或者存储值有关。a = value # Assignment to a variables[n] = value # Assignment to a lists.append(value) # Appending to a listd['k原创 2021-02-26 22:27:42 · 255 阅读 · 0 评论 -
翻译:《实用的Python编程》02_06_List_comprehension
目录 | 上一节 (2.5 collections模块) | 下一节 (2.7 对象模型)2.6 列表推导式一个常见的任务是处理列表中的项(译注:元素)。本节介绍列表推导式,完成此任务的强大工具。创建新列表列表推导式通过将操作应用于序列的每一个元素来创建新列表。>>> a = [1, 2, 3, 4, 5]>>> b = [2*x for x in a ]>>> b[2, 4, 6, 8, 10]>>>再如:&g原创 2021-02-25 14:35:16 · 263 阅读 · 0 评论 -
翻译:《实用的Python编程》02_05_Collections
目录 | 上一节 (2.4 序列) | 下一节 (2.6 列表推导式)2.5 collections 模块collections 模块为数据处理提供了许多有用的对象。本部分简要介绍其中的一些特性。示例:事物计数假设要把每只股票的总份额表格化。portfolio = [ ('GOOG', 100, 490.1), ('IBM', 50, 91.1), ('CAT', 150, 83.44), ('IBM', 100, 45.23), ('GOOG', 75,原创 2021-02-24 23:46:33 · 242 阅读 · 0 评论
分享