《流畅的Python》这本书是图灵科技翻译出版的一本书,作者Luciano Ramalho。

作者从Python的特性角度出发,以Python的数据模型和特殊方法为主线,主要介绍了python的集合类型(sequence、mapping、set等)、把函数作为一等对象来使用、类的构建、新的文件控制流程(生成器、上下文管理器、协程)、用描述符来从底层解释Python对象属性的存储等各个方面。

书中主要围绕Python标准库展开,不会涉及太多的标准库以外的包。虽然它们也很实用。

建议大家可以把前言多读几遍。书的结构也挺棒,每一章都有内容大纲、小结、延伸阅读、杂谈。

0x01:这本书适合谁看?

作者在前言中说:“本书的目标读者是那些正在使用 Python,又想熟悉 Python 3 的程序员。” 还有就是希望深入了解Python3新特性的人。

貌似是任何学了Python的人都可以看。

不过正如作者所说的, 我也觉得这本书的确不太适合新手看,主要是因为它并不讲解基础的内容,例如如何开始编程,而是重点讲解如何更好的使用Python。

当然新手看一看也有提升的,毕竟你希望自己有一天也成为老鸟。

那么你到底是不是新手呢?可以看一看官网教程,做一做里面的例子,如果感觉吃力,那么就是新手了。^_^

官网教程中文版http://www.pythondoc.com/pythontutorial3/index.html

英文版https://docs.python.org/3/tutorial/

打个比喻,学习Python好比学走路。

Python入门新手就是刚学会走路的小孩。编程中级水平者就是会走路。编程高手就是会走模特步的人。

0x02:作者简介

作者Luciano Ramalho是ThoughtWorks技术大拿,资深Python程序员,Python软件基金会成员。

Luciano Ramalho 从1998 年开始使用 Python,至今已经近20年。自那以后,他在巴西的几个新闻门户网站工作,使用 Python 做开发,还为巴西的媒体、银行和政府部门做 Python Web 开发培训。他经常在开发者大会上演讲,比如 PyCon US(2013)、OSCON(2002、2013 和 2014),还有多年在 PythonBrasil(在巴西举办的 PyCon)以及 FISL(南半球最大的 FLOSS 大会)上做过的 15 次演讲。Ramalho 是 Python 软件基金会的成员,还是巴西第一个众创空间 Garoa Hacker Clube 的联合创始人。他也是培训公司 Python.pro.br 的共同所有人。

0x03:写作目的

赚钱呗,呵呵。赚钱当然是目的之一,但热爱是成功的因素,不能把赚钱当成唯一目的 。

我觉得,作者在前言里提到的:“这本书不是一本完备的Python手册,而是会强调Python作为编程语言独有的特性。”

这一句话应该是作者背后的目的之一。

此外,向人们介绍如何写出高效的代码,如何利用好现有的工具而不是什么都自己造轮子,这些也是目的之一。

0x04:精彩之处

我是新手,只通读了一遍,还没有全看完。这里结合自己看到的内容,列几处个人觉得精彩的地方:

1、列表推导和生成器表达式(2.2节)

同样的功能,代码的长度不一样。

#方法1 传统的循环加赋值语句symbols = '$¢£¥€¤'
codes = []
for symbol in symbols:codes.append(ord(symbol))print (codes)
#方法2 列表推导
newcodes = [ord(symbol) for symbol in symbols]
print(newcodes)

生成器表达式存在的理由之一,是它并不是一次生成所有的列表,而是在需要时才生成,就不用占用很多的空间。不过有时候,你得取得“时间和空间”的平衡。(第14章中会有更多介绍)

colors = ['black', 'white']
sizes = ['S', 'M', 'L']
for tshirt in ('%s %s' % (c, s) for c in colors for s in sizes):print(tshirt)

2、元组拆包

所谓元组拆包,就是把元组对应的元素分解。

平行赋值

>>> lax_coordinates = (33.9425, -118.408056)
>>> latitude, longitude = lax_coordinates # 元组拆包
>>> latitude
33.9425
>>> longitude
-118.408056

交换变量

>>> b, a = a, b

【元组拆包可以应用到任何可迭代对象上,唯一的硬性要求是,被可迭代对象中的元素数量必须要跟接受这些元素的元组的空档数一致。除非我们用* 来表示忽略多余的元素,在“用* 来处理多余的元素”一节里,我会讲到它的具体用法。Python 爱好者们很喜欢用元组拆包这个说法 ,但是可迭代元素拆包这个表达也慢慢流行了起来,比如“ PEP 3132—Extended Iterable Unpacking”(https://www.python.org/dev/peps/pep-3132/)的标题就是这么用的。】

3、一等函数(第5.1节):

这个例子中把函数作为返回值传回。作者书中是以IDLE运行写的代码。这里你可以将下面代码存为py程序尝试一下。

def factorial(n):'''returns n!'''return 1 if n < 2 else n * factorial(n-1)print(factorial(9))

你可以尝试自己编写一段(阶乘)的函数。看看如果运行条件发生变化,两段程序运行时间有没有差异。

4、高阶函数(第5.2节)

这一节中作者举了一个按照结尾字符来排序的例子。

fruits = ['strawberry', 'fig', 'apple', 'cherry', 'raspberry', 'banana']
a = sorted(fruits, key=len)
print(a)def reverse(word):return word[::-1]b = sorted(fruits, key=reverse)
print(b)

5、变量及函数命名(第8.1节)

这一节阐述了一个重要的观念变化。“变量是标注,而不是盒子。如果你不知道引用式变量是什么,可以像这样对别人解释别名。”

在左图中,人们认为a和b是两个盒子。而在引用式变量中,我们认为a和b的值相等,a也是b。下面的代码你可以看到alex虽然值和charle相等。

但是“alex is not charles”返回了真值(True)。

 >>> charles = {'name': 'Charles L. Dodgson', 'born': 1832}
>>> lewis = charles .
>>> lewis is charles
True
>>> id(charles), id(lewis) .
(4300473992, 4300473992)
>>> lewis['balance'] = 950 .
>>> charles
{'name': 'Charles L. Dodgson', 'balance': 950, 'born': 1832}>>> charles = {'name': 'Charles L. Dodgson', 'born': 1832}>>> lewis = charles
>>> alex = {'name': 'Charles L. Dodgson', 'born': 1832, 'balance': 950} .
>>> alex == charles .
True
>>> alex is not charles .
True

6、装饰器(第7.1节、第21.2节)

书中是这样定义装饰器的。“装饰器的一大特性是,能把被装饰的函数替换成其他函数。第二个特性是,装饰器在加载模块时立即执行。”

这个概念还是不很明白,但是通过书中的例子感觉更明白了一些。在需要提前导入时运行的内容,就可以提前导入了。例如GUI开发时。

导入时和运行时是有区别的。

此外,变量是有作用域的,Python 不要求声明变量,但是假定在函数定义体中赋值的变量是局部变量。

registry = []
def register(func):print('running register(%s)' % func)registry.append(func)return func@register
def f1():print('running f1()')@register
def f2():print('running f2()')def f3():print('running f3()')def main():print('running main()')print('registry ->', registry)f1()f2()f3()if __name__=='__main__':main()

#猜一猜结果会是什么?b的值能正确输出吗?能的话是几?b = 6
def f2(a):print(a)print(b)b = 9

f2(3)

#如果你想要让b输出为6,那么就要global声明b = 6
def f3(a):global bprint(a)print(b)b = 9

f3(3)#如果下一行再来一个f3(3),输出会是多少?# f3(3)

7、和硬件打交道

你了解的Python都能干什么呢?科学计算、爬虫、做web站点?在书里面搜索一下“from dis import dis”、“pingo.io”。

看看吧,python还可以和汇编、Raspberry Pi硬件进行交互。

8、观察python内部执行的网站

有的时候是不是不知道python内部到底是如何赋值的,你可以将代码输入下面网站,就可以看到了。

http://pythontutor.com/

0x05:给新手的建议

我也是个新手,这些建议记录在这里:多在Github找一些代码,不只是复制粘贴,要自己敲一遍,在python shell中执行试试。

将代码中不懂的地方自行搜索,通过加注释深入了解,然后找机会用一用。

多看看作者在前言、小结里面提到的网站。

最后结合自己的兴趣和工作实际,找个项目做一做。

0x06:书中提到的一些词汇和有用的网站

1、语法糖(Syntactic Sugar),也叫糖衣语法,是英国计算机科学家彼得·约翰·兰达(Peter J. Landin)发明的一个术语。指的是,在计算机语言中添加某种语法,这种语法能使程序员更方便的使用语言开发程序,同时增强程序代码的可读性,避免出错的机会;但是这种语法对语言的功能并没有影响。

2、Python语言动画

http://pythontutor.com/

0x07:后续学习

1、另一个图灵小伙伴关于本书的笔记。 里面有本书大部分章节的提要介绍。想要深入学习时,从任一章开始,深入学习即可。

2、Python之美微信公众号。

3、申龙斌的零基础学编程系列:有小例子,挺有趣的

4、父与子的编程之旅

5、shell里面输入import this:多看看python之禅。

0x08:Python新手该看什么书

我看的这本《笨办法学Python》,基本上以养成编程习惯为主要目的。

《Python基础教程》第二版这本也不错。

最后分享一点,不要轻易吹牛自己python很熟练,时刻记得什么是熟练的定义,请参考创宇知道的技能表中“熟练的定义”小节:

http://blog.knownsec.com/Knownsec_RD_Checklist/v3.0.html

转载于:https://www.cnblogs.com/viphhs/p/7153628.html

[读书笔记]流畅的Python(Fluent Python)相关推荐

  1. 黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第一章 配置python环境

    黑帽python第二版(Black Hat Python 2nd Edition)读书笔记 之 第一章 配置python环境 文章目录 黑帽python第二版(Black Hat Python 2nd ...

  2. 读书笔记:算法图解 using Python

    读书笔记:算法图解 using Python 阅读书目:[美] Aditya Bhargava. "算法图解" 写在前面: 作者称自己是"视觉型学习者,对图解式写作风格钟 ...

  3. 【Python 自然语言处理 第二版】读书笔记1:语言处理与Python

    文章目录 前言 语言处理与Python 一.语言计算:文本和单词 1.NLTK入门 (1)安装(nltk.nltk.book) (2)搜索文本 (3)词汇计数 2.列表与字符串 (1)列表操作 (2) ...

  4. 【Todo】【读书笔记】机器学习实战(Python版)

    还是把这本书的读书笔记,单独拎出来吧,因为内容比较多. P38. Logistic 回归. 觉得还蛮实用的.囫囵吞枣看的.要细看.

  5. 读书笔记-流畅的python(1-6章)

    前言:这正是本书的主要目的:着重讲解这门语言的基本惯用法,让你的代码简洁.高效且可读,把你打造成熟练的 Python 程序员. 自己总结学习作为输出,很多为了节省时间只是复制粘贴,不具有广泛意义 第一 ...

  6. python编写代码避免内存增加_读书笔记(6): 编写高质量python代码的59个有效方法-完结...

    前言 <编写高质量python代码的59个有效方法>这本书分类逐条地介绍了编写python代码的有效思路和方法,对理解python和提高编程效率有一定的帮助.本笔记简要整理其中的重要方法. ...

  7. <读书笔记> Thinking in python (Python 设计模式) 1. Singlton的c++与python的实现

    1.由于python的天然的泛型特征,python 中没有接口继承,所有的继承都是实现继承,子类为了继承父类的实现. 2.Singlton 单件模式 singlton in c++ 下面看一个最简单的 ...

  8. <读书笔记> Thinking in python (Python 设计模式) 3. Proxy and State模式

    1.Proxy代理模式  1 #: c04:ProxyDemo.py  2   3 # Simple demonstration of the Proxy pattern.  4   5   6    ...

  9. 读书笔记:ReLU函数的Python代码 ← 斋藤康毅

    [ReLU函数] [ReLU函数的Python代码] import numpy as np import matplotlib.pylab as pltdef relu(x):return np.ma ...

  10. 读书笔记:《流畅的Python》第五章 一等函数

    # 一等对象/一等函数 ''' 1.在运行时创建 2.能赋值给变量或数据结构中的元素 3.能作为函数的参数传给函数 4.能作为函数的返回值返回结果 '''# 函数对象本身时function对象的实例d ...

最新文章

  1. 2016年日本信息安全市场规模分析
  2. JVM SandBox 的技术原理与应用分析
  3. matlab实现单纯型法解线性规划_【运筹学教程】求解线性规划问题的单纯形法
  4. idea下快速创建SpringBoot项目
  5. 数据挖掘之关联分析六(子图模式)
  6. c#中将WM_CLOSE消息发送到没有窗口的进程的方法
  7. 超越“迁移”的思考:应用程序该如何被Kubernetes接管?
  8. 【ZOJ - 3956】Course Selection System(01背包)
  9. WORD常用版式保存为模板?
  10. oracle union all 特别慢_值得收藏的Oracle数据库性能优化
  11. amazon alexa 大陆安装调试
  12. 五分钟学Java:一篇文章带你搞懂spring全家桶套餐
  13. Nginx for Mac - 苹果系统SSL证书安装
  14. Linux系统中使用vim编写C语言代码实现过程
  15. Mac和Windows哪个好 ?windows和mac对比介绍
  16. 婚礼策划|婚礼相册|情人节表白快闪动态PPT模板
  17. python cmap_Python cmap包_程序模块 - PyPI - Python中文网
  18. c语言双精度小数点后取几位_c语言float类型小数点后位数
  19. Ubuntu:end Kernel panic – not syncing:System is deadlocked on memory
  20. 让人爱不释手的工具,每款都是高质量工具分享

热门文章

  1. 《潜伏在办公室》 作者:陆琪
  2. 计算机视觉论文-2021-12-01
  3. 让人头大的Tablet PC
  4. Java数据结构和算法---程序员常用10种算法
  5. ITIL 4讲解: 变更管理
  6. ShellCode欺骗的艺术!
  7. VB查询ACCESS数据库内容
  8. 计算机中的振动原理,机械振动
  9. 《遗传算法原理及应用》笔记—并行遗传算法
  10. DAVINCI DM6446 开发攻略——V4L2视频驱动和应用分析