绿林网

《Effective Python》读后感摘抄

《Effective Python》读后感摘抄

《Effective Python》是一本由Brett Slatkin著作,Addison-Wesley Professional出版的Paperback图书,本书定价:USD 39.99,页数:256,特精心收集的读后感,希望对大家能有帮助。

《Effective Python》读后感(一):Effective Python

我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了 我看过了

《Effective Python》读后感(二):记录下对我有用的一些技巧

Item 24: Use @classmethod polymorphism to construct object generically

可以处理如何动态构建模型的问题。

Item 25: Use `super(__class__, self).__init__()` when inheriting

Item 29: use plain attributes instead of getter and setters.

Shortingcoming of @property: can only be shared by subclasses. Use descriptor to enable reusable property logic.

Item 31: descriptor

Need to use `WeakKeyDictionary` in `weakref` to keep track of attributes of different instances. A better solution is in Item 35.

Item 32: __getattr__, __getattribute__, __setattr__

__getattr__ is called if attribute cannot be found in instance dictionary.

__getattribute__ is called everytime even when attribute can be found in instance dictionary.

Avoid infinite recursion in __getattribute__ by using methods from `super()`

Item 33: validate subclasses with metaclass

Validate code in __init__ is runned after an object of the class's type is constructed. Using metaclasses can raise errors much earlier.

Item 34: register class existence with metaclass

Class registration is a helpful pattern for building modualr python programs. Using mataclasses for class registration avoids errors by ensuring that you never miss a registration call.

Item 35: annotate class attributes with metaclass

In this way you can avoid both memory leaks and `weakref` module by metaclasses along with descriptors.

目前只读到前4章。第5章并发和并行目前用的不多。第6章内建模块据说还不如直接读文档。第7、8章的东西对research code没啥意义,不是写大的生产项目用不着。

《Effective Python》读后感(三):好书,有很多其他Python书籍没有覆盖的内容

Effective Python 59 SPECIFIC WAYS TO WRITE BETTER PYTHON 这本书终于读完了。从这本书里学到不少经验,以及之前忽略的知识。书中部分内容也是库的内容(这么说有失公允,大部分属都会有抄库文档的嫌疑的,因为文档包含了最多的信息),也有很多内容基本上是常识,比如七八章合作和产品的东西。这些内容,看了书也不会,不看书实践一下不会也得会。是“纸上得来终觉浅”的东西。

下面按照目录记一下有用的东西。划掉的是垃圾,加粗或者颜色的是干货。

Chapter 1: Pythonic Thinking

Item 1: Know Which Version of Python You’re Using

Item 2: Follow the PEP 8 Style Guide

Item 3: Know the Differences Between bytes, str, and unicode

Item 4: Write Helper Functions Instead of Complex Expressions

Item 5: Know How to Slice Sequences

Item 6: Avoid Using start, end, and stride in a Single Slice

Item 7: Use List Comprehensions Instead of map and filter

Item 8: Avoid More Than Two Expressions in List Comprehensions

Item 9: Consider Generator Expressions for Large Comprehensions

Item 10: Prefer enumerate Over range

Item 11: Use zip to Process Iterators in Parallel

Item 12: Avoid else Blocks After for and while Loops

Item 13: Take Advantage of Each Block in try/except/else/finally

第一张虽然是Pythonic Thinking,却提出了很多不提倡使用的Python特性。但是我觉得书中这些条条框框没有必要必须遵守。比如6,为了可读性不要在一个切片操作上用3个数字,以及12,避免使用while-else,也是为了可读性。但是我认为,用了也不一定破坏了可读性。但是初衷是好的。我觉得只要不是写的太复杂,能保持一眼看明白或者多看一眼也能看明白,甚至看三眼也看不明白但是看看注释能看明白,也是可以的。本章中我觉得3和4非常有价值,4可以极大提高可读性。从这里我们知道不一定是非要为了重用才将代码封装成函数,为了可读性进行封装也可以。毕竟,函数的名字比注释要“优雅”的多。

Chapter 2: Functions

Item 14: Prefer Exceptions to Returning None

Item 15: Know How Closures Interact with Variable Scope

Item 16: Consider Generators Instead of Returning Lists

Item 17: Be Defensive When Iterating Over Arguments

Item 18: Reduce Visual Noise with Variable Positional Arguments

Item 19: Provide Optional Behavior with Keyword Arguments

Item 20: Use None and Docstrings to Specify Dynamic Default Arguments

Item 21: Enforce Clarity with Keyword-Only Arguments

14,15,16是干货,抛出一个有时候我们希望错误打断函数运行(如果出错之后后面的代码没有价值了的话),这样更好调试。对于调用出也可以使用try-except处理,而不是罗列一些if-else。有关闭包是一个重点知识。以及迭代器,不过这里感觉也并不是太深入。有关yield我还得多花点时间研究下。后面几条基本上是为了可维护性做的一些惯例。

Chapter 3: Classes and Inheritance

Item 22: Prefer Helper Classes Over Bookkeeping with Dictionaries and Tuples

Item 23: Accept Functions for Simple Interfaces Instead of Classes

Item 24: Use @classmethod Polymorphism to Construct Objects Generically

Item 25: Initialize Parent Classes with super

Item 26: Use Multiple Inheritance Only for Mix-in Utility Classes

Item 27: Prefer Public Attributes Over Private Ones

Item 28: Inherit from collections.abc for Custom Container Types

本章是面向对象的内容。Python很好入门,但是很多人将他当做一门面向过程的语言,项目都用函数组织。其实Python是纯正的面向对象的语言。就连函数也是一等的object。目前我们公司的项目都是以函数的形式组织的,我觉得很多地方都可以使用class,重用性会更好。

Chapter 4: Metaclasses and Attributes

Item 29: Use Plain Attributes Instead of Get and Set Methods

Item 30: Consider @property Instead of Refactoring Attributes Item 31: Use Descriptors for Reusable @property Methods

Item 32: Use __getattr__, __getattribute__, and __setattr__ for Lazy Attributes

Item 33: Validate Subclasses with Metaclasses

Item 34: Register Class Existence with Metaclasses

Item 35: Annotate Class Attributes with Metaclasses

这一章比较好,主要讲了Python获取属性的过程。这里的内容我觉得大多数和Python有关的书都讲不到。关于获取属性的部分我结合文档写了这篇博客。有关metaclass的部分我总结了这篇博客。都是干货。

Chapter 5: Concurrency and Parallelism

Item 36: Use subprocess to Manage Child Processes

Item 37: Use Threads for Blocking I/O, Avoid for Parallelism

Item 38: Use Lock to Prevent Data Races in Threads

Item 39: Use Queue to Coordinate Work Between Threads

Item 40: Consider Coroutines to Run Many Functions Concurrently

Item 41: Consider concurrent.futures for True Parallelism

这章涉及并行,进程、线程、协程等概念。目前用到的不太多,所以没有深入研究。这部分内容要结合操作系统的知识。以后再深入了解吧。

Chapter 6: Built-in Modules

Item 42: Define Function Decorators with functools.wraps

Item 43: Consider contextlib and with Statements for Reusable try/finally Behavior

Item 44: Make pickle Reliable with copyreg

Item 45: Use datetime Instead of time for Local Clocks

Item 46: Use Built-in Algorithms and Data Structures

Item 47: Use decimal When Precision Is Paramount

Item 48: Know Where to Find Community-Built Modules

Chapter 7: Collaboration

Item 49: Write Docstrings for Every Function, Class, and Module

Item 50: Use Packages to Organize Modules and Provide Stable APIs

Item 51: Define a Root Exception to Insulate Callers from APIs

Item 52: Know How to Break Circular Dependencies

Item 53: Use Virtual Environments for Isolated and Reproducible Dependencies

Chapter 8: Production

Item 54: Consider Module-Scoped Code to Configure Deployment Environments

Item 55: Use repr Strings for Debugging Output Item 56: Test Everything with unittest

Item 57: Consider Interactive Debugging with pdb Item 58: Profile Before Optimizing

Item 59: Use tracemalloc to Understand Memory Usage and Leaks

第六章将build-in函数,不如文档详细。甚至有点过时。

第七八章是开发经验,可以参考一下。不过没有应用的话都是纸上谈兵。

就写这些吧,下一步准备结合源代码和文档研究一下常用的函数、数据结构和库。

我的博客:https://www.kawabangga.com

本文由作者上传并发布(或网友转载),绿林网仅提供信息发布平台。文章仅代表作者个人观点,未经作者许可,不可转载。
点击查看全文
相关推荐
热门推荐