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中Collections.sort排序详解(转)

    转自CSDN: Comparator是个接口,可重写compare()及equals()这两个方法,用于比价功能:如果是null的话,就是使用元素的默认顺序,如a,b,c,d,e,f,g,就是a,b, ...

  2. 阿里云 centos7 django + uWSGI+Nginx + python3 部署攻略

    centos7+nginx+python3+django+uwsgi配置Django 项目部署   1.租的服务器(选择centos)的话,需要在阿里云后台控制台开放几个端口,克隆一下已开放的端口,t ...

  3. [Kali_Debian] 清除无用的库文件(清理系统,洁癖专用)-布布扣-bubuko.com - Google Chrome

    [Kali_Debian] 清除无用的库文件(清理系统,洁癖专用) 时间:2014-11-07 16:25:36      阅读:1486      评论:0      收藏:0      [点我收藏 ...

  4. Chrome_浏览器开发人员工具

    Google Chrome 浏览器开发人员工具,让网页开发变得更轻松 无论是 IE 6/7 的 Internet Explorer Developer Toolbar 或者是 IE 8 自带的 Dev ...

  5. persist与checkpoint

    1.当反复使用某些RDD时建议使用persist(缓存级别)(采用默认缓存级别时为cache())来对数据进行缓存. 2.如果某个步骤的RDD计算特别耗时或经历很多步骤的计算,当重新计算时代价特别大, ...

  6. ubuntu通过apt-get安装JDK8

    安装python-software-properties apt-get install python-software-properties apt-get install software-pro ...

  7. 视频截图Util

    ​​ VideoToPicUtil.java package com.zhwy.util; import java.io.File; import java.util.ArrayList; impor ...

  8. Centos7下gogs数据配置迁移

    工作需要把测试版的gogs迁移到正式版gogs,顺便记下笔记防止以后需要忘记了 环境: centos7测试版gogs:192.168.1.63 centos7正式版gogs:192.168.0.100 ...

  9. 遇到电脑IP地址冲突了怎么解决

    由于路由器是自动分配IP地址的,如果多个设备设置的是IP地址自动获取,就会出现IP地址冲突的情况当局域网内有相同IP,并且该机器启动了防火墙,那就没办法自动更新到下一个IP的地址了,所以此时发生了冲突 ...

  10. Linux 小知识翻译 - 「RAID」

    最近术语「RAID」变得比较有名.「RAID」是指将多个HDD组合起来使用,从而提高存储可靠性的一种技术. 那么,关于 RAID 中的 「RAID 0」「RAID 1」「RAID 5」等各种「RAID ...