Fluent Python 读书手记

  • Python数据模型:特殊方法用来给整个语言模型特殊使用,一致性体现。如:__len__, __getitem__
  • AOP: zope.inteface
  • 列表推导(list comprehensive)和 表达式生成器(generator expression),分别用 [...] 和 (...)表未。后者是迭代生成,更节省内存。
  • 元组tuple两大功能特性:不可变、用作数据记录结构(位置信息)。元组里的元素最好也是不可变数据。
  • array 和 列表相比的区别和优势。array只能存单一数据类型,比如array[int],而列表是任何数据类型的容器。但是array在存储上更节约内存,因为实现就是分配连续的内存记录二进制数据表示。
  • dict的 setdefault,可以方便处理可能不存在键的值操作。
  • dict的键是可散列的,满足三个条件。支持hash()函数,通过__hash__实现;通过 __eq__ 检测相等性;若 a == b,则 hash(a) == hash(b)
  • 接收函数参数或者返回函数的函数可以称为高阶函数
  • 自定义类中重写 __call__( ) 方法,可以把类实例变为可直接调用的函数对象。
  • python中的inspect模块,提供了很多内省方法,像java的reflect包。six库。
  • operator 和 functools 模块中有很多定义好的高阶函数可以,方便编写函数式代码风格。
  • 抽象类可以继承abc.ABC,使用 @abstractmethod 修饰。
  • 因为在Python中函数也是对象,可以用来传参和返回,所以23经典设计模式在Python中可能不完全适用,或者以更简单的方式使用。
  • 装饰器函数是导入模块时(load module)时就执行,而不是运行时执行。这个特性可用于框架处理一些启动注册的工作。
  • 在嵌套函数中,如果要引用外部的不可变象并重新赋值,则需要使用 nolocal 关键字声明变量再操作。
  • functools.lru_cache 可以缓存某个计算代价很大的函数结果。
  • functools.singledispatch 可以写出类似Java中方法重载的代码
  • @classmethod 和 @staticmethod 的区别。前者第一个参数是Class本身,后者就是一普通函数。
  • @Property 设置getter/setter属性
  • Python中接口,是指“鸭子类型”协议,即一个类具有相似的行为,但跟继承没有什么关系。但是抽象类(接口)在现实世界中是存在的,所以可以通过 abc.ABC 来定义抽象基类。
  • 不要直接继承内置的类,比如 list, dict。因为继承内置类,子类重写的方法如果通过python协议调用,不会使用子类的方法。比如 A extends list, A重写了 __len__,但是调用 len(a) 还是使用list的内置方法。解决办法是使用 pypy中的类,比如collections.abc中的类。
  • for/while/try - else 更应该按 for/while/try - then 语义理解更好些。
  • GIL指CPython实现一次只允许使用一个线程执行Python字节码,因为CPython解释器本来不是安全的。但是对于IO密集型场景无害,因为标准库中所有阻塞IO都会释放GIL(global interpreter locl)。但是CPU密集型计算则会有影响。

「Fluent Python」今年最佳技术书籍的更多相关文章

  1. 「python」: arp脚本的两种方法

    「python」: arp脚本的两种方法 第一种是使用arping工具: #!/usr/bin/env python import subprocess import sys import re de ...

  2. 「Python」socket指南

    开始 网络中的 Socket 和 Socket API 是用来跨网络的消息传送的,它提供了 进程间通信(IPC) 的一种形式.网络可以是逻辑的.本地的电脑网络,或者是可以物理连接到外网的网络,并且可以 ...

  3. python爬虫22 | 以后我再讲python「模拟登录」我就是狗

    接下来就是 学习python的正确姿势 做爬虫 绕不开模拟登录 为此小帅b给大家支了几招 python爬虫19 | 遇到需要的登录的网站怎么办?用这3招轻松搞定! 有些网站的登录很弱鸡 传个用户名和密 ...

  4. 解决 VS Code「Code Runner」插件运行 python 时的中文乱码问题

    描述 这里整理了两种 VS Code「Code Runner」插件运行 python 时乱码的解决方案.至于设置「Auto Guess Encoding」为 true 的操作这里就不多描述了. 乱码截 ...

  5. Windows 平台做 Python 开发的最佳组合

    在 Windows 上怎样做 Python 开发?是像大神那样使用纯文本编辑器,还是用更加完善的 IDE?到底是用自带的命令行工具,还是需要装新的 Terminal?本文将带你了解如何利用微软官方维护 ...

  6. fir.im Weekly - 如何打造 Github 「爆款」开源项目

    最近 Android 转用 Swift 的传闻甚嚣尘上,Swift 的 Github 主页上已经有了一次 merge>>「Port to Android」,让我们对 Swift 的想象又多 ...

  7. 「zigbee - 1」工欲善其事必先利其器 - IAR for 8051 IDE customization

    最近在实验室做一些 Zigbee 相关的事情,然而一直没在博客上记录啥东西,也不像原来在公司有动力在 Confluence wiki 上扯东扯西.直到前些阵子,跑到 feibit 论坛上(国内较大的一 ...

  8. NLP领域的ImageNet时代到来:词嵌入「已死」,语言模型当立

    http://3g.163.com/all/article/DM995J240511AQHO.html 选自the Gradient 作者:Sebastian Ruder 机器之心编译 计算机视觉领域 ...

  9. 多本Python极速入门最佳书籍,不可错过的Python学习资料!

    Python作为现在很热门的一门编程语言,介于Python的友好,许多的初学者都将其作为首选,为了帮助大家更好的学习Python,我筛选了2年内优秀的python书籍,个别经典的书籍扩展到5年内.   ...

随机推荐

  1. JAVA 设计模式遵循的六大基本准则

    JAVA 设计模式遵循的六大基本准则 一.单一职责原则:(Single Responsibility Pinciple)  一个类只负责一项职责. 当超过一项职责需要负责时,需要增加新的类来负责新的职 ...

  2. centos6分辨率设置

    问题描述 centos 6.9最小化安装后, 分辨率会很大, 当然也可以最小化VM虚拟机, 但是有强迫症的朋友可以设置一下. 解决方法 打开/etc/grub.conf配置文件, 在kernel 的最 ...

  3. python第二十二天-----在做作业当中............

    作业 1, ATM:模拟实现一个ATM + 购物商城程序 额度 自定义实现购物商城,买东西加入 购物车,调用信用卡接口结账可以提现,手续费5%支持多账户登录支持账户间转账记录每月日常消费流水提供还款接 ...

  4. Oracle SQL: DDL DML DCL TCL

    Data Definition Language 自带commit,与表结构有关(数据字典)(会等待对象锁) Data Manipulation Language (数据文件相关变化有关,会产生锁)不 ...

  5. php报错 【 Call to undefined function imagecreatetruecolor()】

    刚才在写验证码的时候,发现报错,然后排查分析了一下,原来是所用的php版本(PHP/5.3.13)没有开启此扩展功能. 进入php.ini 找到extension=php_gd2.dll ,将其前面的 ...

  6. 4.4Python数据类型(4)之字符串函数

    返回总目录 目录: 1.字符串的查找计算 2.字符串的转换 3.字符串的填充压缩 4.字符串的分割拼接 5.字符串的判定 (一)字符串的查找计算 (1)len(str)计算字符串的总数 (2)find ...

  7. The resource configuration is not modifiable in this context.

    项目中使用了Jersey RESTful 框架, 更新代码后服务能正常起来, 在页面登录时验证码不显示 后台报错 java.lang.IllegalStateException: The resour ...

  8. Windows安装PostgreSQL11.1

    Windows安装PostgreSQL11.1 安装过程如下: 1.下载安装包postgresql-11.1-1-windows-x64.exe 2.点击下一步 3.选择安装位置,默认路径C:\Pro ...

  9. IO流_SequenceInputStream(序列流)

    SequenceInputStream(序列流):就是将多个流合成一个有序的流 需求:将三个文件中的数据合并到一个文件中 import java.io.FileInputStream; import ...

  10. centos7下安装docker(8.1运行容器)

    从今天开始学习docker container 1.docker run 之前我们在学习制作镜像以及制作私有仓库的时候已经用到docker run -it以及docker run -d来临时运行一个容 ...