diff --git a/md2rst.py b/md2rst.py index 8567b15..14669d3 100644 --- a/md2rst.py +++ b/md2rst.py @@ -1,28 +1,14 @@ # coding:utf-8 import os -# import commands import subprocess import platform -from git import Repo - osName = platform.system() -repo_path ='.' -if (osName == 'Windows'): - repo_path = 'E:\\MING-Git\\magic-python' - blog_path = 'E:\\MING-Git\\magic-python\\source' - index_path = 'E:\\MING-Git\\magic-python\\README.md' -elif (osName == 'Darwin'): - repo_path = '/Users/MING/Github/magic-python/' - blog_path = '/Users/MING/Github/magic-python/source' - index_path = '/Users/MING/Github/magic-python/README.md' - - -repo = Repo.init(path=repo_path) -if not repo.is_dirty(): - # 没有文件变更 - os._exit(0) +pwd = os.getcwd() +blog_path = os.path.join(pwd, "source") +index_path = os.path.join(pwd, "README.md") + base_link = "http://python.iswbm.com/en/latest/" readme_header = ''' diff --git a/source/c01/c01_01.rst b/source/c01/c01_01.rst index c392c51..7b6449e 100644 --- a/source/c01/c01_01.rst +++ b/source/c01/c01_01.rst @@ -1,7 +1,7 @@ 1.1 默默无闻的省略号很好用 ========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在Python中,一切皆对象,省略号也不例外。 @@ -62,8 +62,4 @@ $ python3 demo.py ok -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_02.rst b/source/c01/c01_02.rst index 488f13c..5757773 100644 --- a/source/c01/c01_02.rst +++ b/source/c01/c01_02.rst @@ -1,7 +1,7 @@ 1.2 使用 end 来结束代码块 ========================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 有不少编程语言,循环、判断代码块需要用 end 标明结束,这样一定程度上会使代码逻辑更加清晰一点。 @@ -34,8 +34,4 @@ 10 10 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_03.rst b/source/c01/c01_03.rst index e1420ad..fd41366 100644 --- a/source/c01/c01_03.rst +++ b/source/c01/c01_03.rst @@ -1,7 +1,7 @@ 1.3 可直接运行的 zip 包 ======================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 我们可以经常看到有 Python 包,居然可以以 zip 包进行发布,并且可以不用解压直接使用。 @@ -38,8 +38,4 @@ 5 [root@localhost ~]# -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_04.rst b/source/c01/c01_04.rst index ba81d2c..f112b88 100644 --- a/source/c01/c01_04.rst +++ b/source/c01/c01_04.rst @@ -1,7 +1,7 @@ 1.4 反斜杠的倔强: 不写最后 ========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png ``\`` 在 Python 中的用法主要有两种 @@ -48,8 +48,4 @@ ^ SyntaxError: EOL while scanning string literal -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_05.rst b/source/c01/c01_05.rst index ca73f7a..862929e 100644 --- a/source/c01/c01_05.rst +++ b/source/c01/c01_05.rst @@ -1,7 +1,7 @@ 1.5 如何修改解释器提示符 ======================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 这个当做今天的一个小彩蛋吧。应该算是比较冷门的,估计知道的人很少了吧。 @@ -33,8 +33,4 @@ 0 1 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_06.rst b/source/c01/c01_06.rst index 86c4ca7..57951aa 100644 --- a/source/c01/c01_06.rst +++ b/source/c01/c01_06.rst @@ -1,7 +1,7 @@ 1.6 简洁而优雅的链式比较 ======================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 先给你看一个示例: @@ -28,8 +28,4 @@ 这个用法叫做链式比较。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_07.rst b/source/c01/c01_07.rst index e9e9b1a..ae88d08 100644 --- a/source/c01/c01_07.rst +++ b/source/c01/c01_07.rst @@ -1,7 +1,7 @@ 1.7 and 和 or 的短路效应 ======================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png and 和 or 是我们再熟悉不过的两个逻辑运算符,在 Python 也有它的妙用。 @@ -16,8 +16,4 @@ and 和 or 是我们再熟悉不过的两个逻辑运算符,在 Python 也有 >>>(2 or 3) * (5 and 6 and 7) 14 # 2*7 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_08.rst b/source/c01/c01_08.rst index bf54908..da110d4 100644 --- a/source/c01/c01_08.rst +++ b/source/c01/c01_08.rst @@ -1,7 +1,7 @@ 1.8 连接多个列表最极客的方式 ============================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png .. code:: python @@ -12,8 +12,4 @@ >>> sum((a,b,c), []) [1, 2, 3, 4, 5, 6] -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_09.rst b/source/c01/c01_09.rst index 4c4e28e..0352919 100644 --- a/source/c01/c01_09.rst +++ b/source/c01/c01_09.rst @@ -1,7 +1,7 @@ 1.9 字典居然是可以排序的? ========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在 Python 3.6 之前字典不可排序的思想,似乎已经根深蒂固。 @@ -24,8 +24,4 @@ >>> mydict {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4} -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_10.rst b/source/c01/c01_10.rst index d18579f..9747b73 100644 --- a/source/c01/c01_10.rst +++ b/source/c01/c01_10.rst @@ -1,7 +1,7 @@ 1.10 哪些情况下不需要续行符? ============================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在写代码时,为了代码的可读性,代码的排版是尤为重要的。 @@ -47,8 +47,4 @@ >>> text 'talk is cheap,\nshow me code.' -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_11.rst b/source/c01/c01_11.rst index 23f245a..de3258b 100644 --- a/source/c01/c01_11.rst +++ b/source/c01/c01_11.rst @@ -1,7 +1,7 @@ 1.11 用户无感知的小整数池 ========================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 为避免整数频繁申请和销毁内存空间,Python 定义了一个小整数池 [-5, 256] 这些整数对象是提前建立好的,不会被垃圾回收。 @@ -34,8 +34,4 @@ 因为当你在同一行里,同时给两个变量赋同一值时,解释器知道这个对象已经生成,那么它就会引用到同一个对象。如果分成两行的话,解释器并不知道这个对象已经存在了,就会重新申请内存存放这个对象。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_12.rst b/source/c01/c01_12.rst index c9cbdab..421cad7 100644 --- a/source/c01/c01_12.rst +++ b/source/c01/c01_12.rst @@ -1,7 +1,7 @@ 1.12 神奇的 intern 机制 ======================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 字符串类型作为Python中最常用的数据类型之一,Python解释器为了提高字符串使用的效率和使用性能,做了很多优化。 @@ -42,8 +42,4 @@ intern(字符串驻留)的技术来提高字符串效率,什么是intern >>> s1 is s2 False -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_13.rst b/source/c01/c01_13.rst index 24ea911..3886da0 100644 --- a/source/c01/c01_13.rst +++ b/source/c01/c01_13.rst @@ -1,7 +1,7 @@ 1.13 site-packages和 dist-packages ================================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 如果你足够细心,你会在你的机器上,有些包是安装在 **site-packages** 下,而有些包安装在 **dist-packages** 下。 @@ -26,8 +26,4 @@ Debian 这么设计的原因,是为了减少不同来源的 Python 之间产 >>> print(get_python_lib()) /usr/lib/python2.7/site-packages -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_14.rst b/source/c01/c01_14.rst index 2fe2f94..6f4566c 100644 --- a/source/c01/c01_14.rst +++ b/source/c01/c01_14.rst @@ -1,7 +1,7 @@ 1.14 argument 和 parameter 的区别? ================================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png arguments 和 parameter 的翻译都是参数,在中文场景下,二者混用基本没有问题,毕竟都叫参数嘛。 @@ -22,8 +22,4 @@ arguments 和 parameter output_msg("error") -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_15.rst b/source/c01/c01_15.rst index 990627a..1c0e0aa 100644 --- a/source/c01/c01_15.rst +++ b/source/c01/c01_15.rst @@ -1,7 +1,7 @@ 1.15 /usr/bin/env python 有什么用? =================================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 我们经常会在别人的脚本或者项目的入口文件里看到第一行是下面这样 @@ -20,7 +20,7 @@ 稍微接触过 linux 的人都知道 ``/usr/bin/python`` 就是我们执行 ``python`` 进入console 模式里的 ``python`` -|image1| +.. image:: http://image.iswbm.com/20200331184021.png 而当你在可执行文件头里使用 ``#!`` + ``/usr/bin/python`` ,意思就是说你得用哪个软件 (python)来执行这个文件。 @@ -29,20 +29,20 @@ 不加的话,你每次执行这个脚本时,都得这样: ``python xx.py`` , -|image2| +.. image:: http://image.iswbm.com/20200331185034.png 有没有一种方式?可以省去每次都加 ``python`` 呢? 当然有,你可以文件头里加上\ ``#!/usr/bin/python`` ,那么当这个文件有可执行权限 时,只直接写这个脚本文件,就像下面这样。 -|image3| +.. image:: http://image.iswbm.com/20200331184755.png 明白了这个后,再来看看 ``!/usr/bin/env python`` 这个 又是什么意思 ? 当我执行 ``env python`` 时,自动进入了 python console 的模式。 -|image4| +.. image:: http://image.iswbm.com/20200331185741.png 这是为什么?和 直接执行 python 好像没什么区别呀 @@ -57,20 +57,11 @@ 具体演示过程,你可以看下面。 -|image5| +.. image:: http://image.iswbm.com/20200331190224.png 那么对于这两者,我们应该使用哪个呢? 个人感觉应该优先使用 ``#!/usr/bin/env python``\ ,因为不是所有的机器的 python 解释器都是 ``/usr/bin/python`` 。 -|image6| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200331184021.png -.. |image2| image:: http://image.iswbm.com/20200331185034.png -.. |image3| image:: http://image.iswbm.com/20200331184755.png -.. |image4| image:: http://image.iswbm.com/20200331185741.png -.. |image5| image:: http://image.iswbm.com/20200331190224.png -.. |image6| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_16.rst b/source/c01/c01_16.rst index a5f3935..4b1a960 100644 --- a/source/c01/c01_16.rst +++ b/source/c01/c01_16.rst @@ -1,7 +1,7 @@ 1.16 dict() 与 {} 生成空字典有什么区别? ======================================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在初始化一个空字典时,有的人会写 dict(),而有的人会写成 {} @@ -55,8 +55,4 @@ 可以发现使用 dict(),会多了个调用函数的过程,而这个过程会有进出栈的操作,相对更加耗时。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_17.rst b/source/c01/c01_17.rst index 0c6b956..beee74f 100644 --- a/source/c01/c01_17.rst +++ b/source/c01/c01_17.rst @@ -1,7 +1,7 @@ 1.17 有趣但没啥用的 import 用法 =============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png import 是 Python 导包的方式。 @@ -52,9 +52,6 @@ import 是 Python 导包的方式。 就会自动打开一个网页。 |image1| -|image2| +.. image:: http://image.iswbm.com/20200607174235.png -.. |image0| image:: http://image.iswbm.com/20200804124133.png .. |image1| image:: http://image.iswbm.com/20190511165735.png -.. |image2| image:: http://image.iswbm.com/20200607174235.png - diff --git a/source/c01/c01_18.rst b/source/c01/c01_18.rst index 1b00f6b..463cbc3 100644 --- a/source/c01/c01_18.rst +++ b/source/c01/c01_18.rst @@ -1,7 +1,7 @@ 1.18 正负得负,负负得正 ======================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 从初中开始,我们就开始接触了\ ``负数`` ,并且都知道了\ ``负负得正`` 的思想。 @@ -22,8 +22,4 @@ Python 作为一门高级语言,它的编写符合人类的思维逻辑,包 >>> 5---3 2 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_19.rst b/source/c01/c01_19.rst index 3d21b69..b3e5e5b 100644 --- a/source/c01/c01_19.rst +++ b/source/c01/c01_19.rst @@ -1,7 +1,7 @@ 1.19 return不一定都是函数的终点 =============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 众所周知,try…finally… 的用法是:不管try里面是正常执行还是有报异常,最终都能保证finally能够执行。 @@ -57,8 +57,4 @@ return 真的是直接被忽视,那当finally 下没有显式的 return 会直接覆盖 try 里的 return,而如果 finally 里没有 显式的 return,那么 try 里的 return 仍然有效。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_20.rst b/source/c01/c01_20.rst index bb252cc..96486de 100644 --- a/source/c01/c01_20.rst +++ b/source/c01/c01_20.rst @@ -1,7 +1,7 @@ 1.20 字符串里的缝隙是什么? =========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在Python中求一个字符串里,某子字符(串)出现的次数。 @@ -31,9 +31,9 @@ 因此 对于 ``aabb`` 这个字符串在 Python 来看应该是这样的 -|image1| +.. image:: http://image.iswbm.com/20200509172331.png -理解了这个“**缝隙**” 的概念后,以下这些就好理解了。 +理解了这个“\ **缝隙**\ ” 的概念后,以下这些就好理解了。 .. code:: python @@ -46,9 +46,4 @@ >>> "" in "M" True -|image2| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200509172331.png -.. |image2| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_21.rst b/source/c01/c01_21.rst index 08ec573..c1a86d5 100644 --- a/source/c01/c01_21.rst +++ b/source/c01/c01_21.rst @@ -1,7 +1,7 @@ 1.21 Python2下 也能使用 print(“”) ================================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 可能会有不少人,觉得只有 Python 3 才可以使用 print(),而 Python 2 只能使用\ ``print ""``\ 。 @@ -33,8 +33,4 @@ ,但是这仅用于两个 python 版本之间的代码兼容,并不是说在 python2.6+下使用 print() 后,就成了函数。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_22.rst b/source/c01/c01_22.rst index 6e2a3df..2dcdf75 100644 --- a/source/c01/c01_22.rst +++ b/source/c01/c01_22.rst @@ -1,7 +1,7 @@ 1.22 字母也玩起了障眼法 ======================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 以下我分别在 Python2.7 和 Python 3.7 的 console 模式下,运行了如下代码。 @@ -25,11 +25,11 @@ 什么?没有截图你不信? -|image1| +.. image:: http://image.iswbm.com/20200509122954.png 如果你在自己的电脑上尝试一下,结果可能是这样的 -|image2| +.. image:: http://image.iswbm.com/20200509123107.png **怎么又好了呢?** @@ -52,10 +52,4 @@ 细思恐极,在这里可千万不要得罪同事们,万一离职的时候,对方把你项目里的 ``e`` 全局替换成 ``e``\ ,到时候你就哭去吧,肉眼根本看不出来嘛。 -|image3| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200509122954.png -.. |image2| image:: http://image.iswbm.com/20200509123107.png -.. |image3| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_23.rst b/source/c01/c01_23.rst index 3ccef50..83c2cad 100644 --- a/source/c01/c01_23.rst +++ b/source/c01/c01_23.rst @@ -1,7 +1,7 @@ 1.23 数值与字符串的比较 ======================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在 Python2 中,数字可以与字符串直接比较。结果是数值永远比字符串小。 @@ -19,8 +19,4 @@ >>> 100000000 < "" TypeError: '<' not supported between instances of 'int' and 'str' -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_24.rst b/source/c01/c01_24.rst index 1c65ed7..4fa42ea 100644 --- a/source/c01/c01_24.rst +++ b/source/c01/c01_24.rst @@ -1,7 +1,7 @@ 1.24 时有时无的切片异常 ======================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 这是个简单例子,alist 只有5 个元素,当你取第 6 个元素时,会抛出索引异常。这与我们的认知一致。 @@ -25,8 +25,4 @@ >>> alist[100:] [] -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_25.rst b/source/c01/c01_25.rst index 139421e..a6a357b 100644 --- a/source/c01/c01_25.rst +++ b/source/c01/c01_25.rst @@ -1,7 +1,7 @@ 1.25 迷一样的字符串 =================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 示例一 @@ -56,8 +56,4 @@ >>> 'a' * 21 is 'aaaaaaaaaaaaaaaaaaaaa' True -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_26.rst b/source/c01/c01_26.rst index f931fef..4ff81d9 100644 --- a/source/c01/c01_26.rst +++ b/source/c01/c01_26.rst @@ -1,7 +1,7 @@ 1.26 x 与 +x 等价吗? ===================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在大多数情况下,这个等式是成立的。 @@ -33,8 +33,4 @@ >>> +ct Counter({'a': 3, 'b': 2}) -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_27.rst b/source/c01/c01_27.rst index 8fbcb37..00a9bcc 100644 --- a/source/c01/c01_27.rst +++ b/source/c01/c01_27.rst @@ -1,7 +1,7 @@ 1.27 += 不等同于=+ ================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 对列表 进行\ ``+=`` 操作相当于 extend,而使用 ``=+`` 操作是新增了一个列表。 @@ -29,8 +29,4 @@ >>> b [1, 2, 3, 4, 5, 6, 7, 8] -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_28.rst b/source/c01/c01_28.rst index 0aee763..b5e1f46 100644 --- a/source/c01/c01_28.rst +++ b/source/c01/c01_28.rst @@ -1,7 +1,7 @@ 1.28 循环中的局部变量泄露 ========================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在Python 2中 x 的值在一个循环执行之后被改变了。 @@ -25,8 +25,4 @@ >>> x 1 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_29.rst b/source/c01/c01_29.rst index e049b89..a84061b 100644 --- a/source/c01/c01_29.rst +++ b/source/c01/c01_29.rst @@ -1,7 +1,7 @@ 1.29 局部/全局变量傻傻分不清 ============================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在开始讲之前,你可以试着运行一下下面这小段代码。 @@ -50,8 +50,4 @@ $ python demo.py 1 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_30.rst b/source/c01/c01_30.rst index ce56735..19de541 100644 --- a/source/c01/c01_30.rst +++ b/source/c01/c01_30.rst @@ -1,7 +1,7 @@ 1.30 break /continue 和 上下文管理器哪个优先级高? ================================================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 众所周知,在循环体中(无论是 for 还是 while),continue 会用来跳入下一个循环,而 break 则用来跳出某个循环体。 @@ -54,8 +54,4 @@ print 来替代)。 1. continue 与 break 一样,如果先遇到上下文管理器会先进行资源的释放 2. 上面只举例了 while 循环体,而 for 循环也是同样的。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_31.rst b/source/c01/c01_31.rst index 5faadc1..eecd121 100644 --- a/source/c01/c01_31.rst +++ b/source/c01/c01_31.rst @@ -1,7 +1,7 @@ 1.31 如何像 awk一样分割字符串? =============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 若你使用过 Shell 中的 awk 工具,会发现用它来分割字符串是非常方便的。特别是多个连续空格会被当做一个处理。 @@ -68,7 +68,7 @@ split函数不加参数,就能达到 awk 的效果 查看了注释,原来是这个函数会适配 None 的情况,当第一个参数是None的时候,返回第二个参数(可迭代对象)中非空的值,非常方便。 -|image1| +.. image:: http://image.iswbm.com/20200821173708.png 换用函数的写法,可以这样 @@ -81,9 +81,4 @@ split函数不加参数,就能达到 awk 的效果 >>> filter(lambda item: True if item else False, msg.split('-')) ['hello', 'world'] -|image2| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200821173708.png -.. |image2| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c01/c01_32.rst b/source/c01/c01_32.rst index 96c6234..cb1067f 100644 --- a/source/c01/c01_32.rst +++ b/source/c01/c01_32.rst @@ -1,7 +1,7 @@ 1.32 如何让大数变得更易于阅读? =============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 当一个数非常大时,可能过百万,也可能上亿,太多位的数字 ,会给我们阅读带来很大的障碍。 @@ -28,8 +28,4 @@ >>> number 281028344 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_01.rst b/source/c02/c02_01.rst index a854371..210630b 100644 --- a/source/c02/c02_01.rst +++ b/source/c02/c02_01.rst @@ -1,5 +1,7 @@ -2.1 懒人必备技能:使用 “_” |image0| -=================================== +2.1 懒人必备技能:使用 “_” +========================== + +.. image:: http://image.iswbm.com/20200804124133.png 对于 ``_`` ,大家对于他的印象都是用于 **占位符**\ ,省得为一个不需要用到的变量,绞尽脑汁的想变量名。 @@ -63,8 +65,4 @@ 知道这两个魔法方法的人,一看就明白了,这里不再解释啦。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_02.rst b/source/c02/c02_02.rst index e09eced..1c6a46c 100644 --- a/source/c02/c02_02.rst +++ b/source/c02/c02_02.rst @@ -1,7 +1,7 @@ 2.2 最快查看包搜索路径的方式 ============================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 当你使用 import 导入一个包或模块时,Python 会去一些目录下查找,而这些目录是有优先级顺序的,正常人会使用 sys.path @@ -63,8 +63,4 @@ 从输出你可以发现,这个列的路径会比 sys.path 更全,它包含了用户环境的目录。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_03.rst b/source/c02/c02_03.rst index b15223a..e1b103e 100644 --- a/source/c02/c02_03.rst +++ b/source/c02/c02_03.rst @@ -1,7 +1,7 @@ 2.3 使用 json.tool 来格式化 JSON ================================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 假设现在你需要查看你机器上的json文件,而这个文件没有经过任何的美化,阅读起来是非常困难的。 @@ -61,8 +61,4 @@ ] } -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_04.rst b/source/c02/c02_04.rst index 6c06e0a..1563d46 100644 --- a/source/c02/c02_04.rst +++ b/source/c02/c02_04.rst @@ -1,7 +1,7 @@ 2.4 命令行式执行 Python 代码 ============================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 有时候你只是想验证一小段 Python 代码是否可用时,通常有两种方法 @@ -17,8 +17,4 @@ 只要加 -c 参数,就可以输入你的 Python 代码了。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_05.rst b/source/c02/c02_05.rst index b84daff..9ac5a69 100644 --- a/source/c02/c02_05.rst +++ b/source/c02/c02_05.rst @@ -1,7 +1,7 @@ 2.5 用调试模式执行脚本 ====================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 当你使用 pdb 进行脚本的调试时,你可能会先在目标代码处输入 ``import pdb;pdb.set_trace()`` 来设置断点。 @@ -15,8 +15,4 @@ -> import sys (Pdb) -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_06.rst b/source/c02/c02_06.rst index 94ce3c7..fe07dc9 100644 --- a/source/c02/c02_06.rst +++ b/source/c02/c02_06.rst @@ -1,7 +1,7 @@ 2.6 如何快速搭建 HTTP 服务器 ============================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 搭建FTP,或者是搭建网络文件系统,这些方法都能够实现Linux的目录共享。但是FTP和网络文件系统的功能都过于强大,因此它们都有一些不够方便的地方。比如你想快速共享Linux系统的某个目录给整个项目团队,还想在一分钟内做到,怎么办?很简单,使用Python中的SimpleHTTPServer。 @@ -17,13 +17,8 @@ SimpleHTTPServer是Python # python3 python3 -m http.server 8888 -|image1| +.. image:: http://image.iswbm.com/20190511165716.png SimpleHTTPServer有一个特性,如果待共享的目录下有index.html,那么index.html文件会被视为默认主页;如果不存在index.html文件,那么就会显示整个目录列表。 -|image2| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20190511165716.png -.. |image2| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_07.rst b/source/c02/c02_07.rst index 0eaf0ec..f7b8424 100644 --- a/source/c02/c02_07.rst +++ b/source/c02/c02_07.rst @@ -1,7 +1,7 @@ 2.7 快速构建 HTML 帮助文档 ========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 当你不知道一个内置模块如何使用时,会怎么做呢? @@ -23,11 +23,6 @@ 帮助文档的效果如下 -|image1| - -|image2| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200718191249.png -.. |image2| image:: http://image.iswbm.com/20200607174235.png +.. image:: http://image.iswbm.com/20200718191249.png +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_08.rst b/source/c02/c02_08.rst index d98da9b..da5a668 100644 --- a/source/c02/c02_08.rst +++ b/source/c02/c02_08.rst @@ -1,7 +1,7 @@ 2.8 最正确且优雅的装包方法 ========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 当你使用 pip 来安装第三方的模块时,通常会使用这样的命令 @@ -32,8 +32,4 @@ Python3.9,那你安装包时就会很困惑,我到底把包安装在了哪 # 在 python3.9 中安装 $ python3.9 -m pip install requests -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_09.rst b/source/c02/c02_09.rst index ffe7697..ae86a7c 100644 --- a/source/c02/c02_09.rst +++ b/source/c02/c02_09.rst @@ -1,7 +1,7 @@ 2.9 往 Python Shell 中传入参数 ============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 往一个 Python 脚本传入参数,是一件非常简单的事情。 @@ -17,11 +17,6 @@ 经过我的摸索,终于找到了方法,具体方法如下: -|image1| - -|image2| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200801195158.png -.. |image2| image:: http://image.iswbm.com/20200607174235.png +.. image:: http://image.iswbm.com/20200801195158.png +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_10.rst b/source/c02/c02_10.rst index c64afca..e4817d0 100644 --- a/source/c02/c02_10.rst +++ b/source/c02/c02_10.rst @@ -1,7 +1,7 @@ 2.10 让脚本报错后立即进入调试模式 ================================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 当你在使用 ``python xxx.py`` 这样的方法,执行 Python 脚本时,若因为代码 bug 导致异常未捕获,那整个程序便会终止退出。 @@ -23,7 +23,7 @@ Shell 模式,方便你进行调试。 具体演示如下: -|image1| +.. image:: http://image.iswbm.com/20200801195950.png 需要注意的是:脚本执行完毕,有两种情况: @@ -33,14 +33,8 @@ Shell 模式,方便你进行调试。 这两种都会进入 Python Shell,如果脚本并无异常,最终也会进入 Python Shell 模式,需要你手动退出 -|image2| +.. image:: http://image.iswbm.com/20200801201110.png 如果希望脚本正确完成时自动退出,可以在脚本最后加上一行\ ``__import__("os")._exit(0)`` -|image3| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200801195950.png -.. |image2| image:: http://image.iswbm.com/20200801201110.png -.. |image3| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_11.rst b/source/c02/c02_11.rst index f067548..6fc242d 100644 --- a/source/c02/c02_11.rst +++ b/source/c02/c02_11.rst @@ -1,28 +1,21 @@ 2.11 极简模式执行 Python Shell ============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在终端输入 Python 就会进入 Python Shell 。 方便是挺方便,就是有点说不出的难受,谁能告诉我,为什么要多出这么大一段无关的内容。 -|image1| +.. image:: http://image.iswbm.com/20200801202733.png 这有点像,你上爱某艺看视频吧,都要先看个 90 秒的广告。 如果你和我一样不喜欢这种 『牛皮癣』,那么可以加个 ``-q`` 参数,静默进入 Python Shell,就像下面这样子,开启了极简模式,舒服多了。 -|image2| +.. image:: http://image.iswbm.com/20200801203047.png -|image3| - -|image4| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200801202733.png -.. |image2| image:: http://image.iswbm.com/20200801203047.png -.. |image3| image:: http://image.iswbm.com/20200512125643.png -.. |image4| image:: http://image.iswbm.com/20200607174235.png +.. image:: http://image.iswbm.com/20200512125643.png +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_12.rst b/source/c02/c02_12.rst index e9625ce..7b56f56 100644 --- a/source/c02/c02_12.rst +++ b/source/c02/c02_12.rst @@ -1,9 +1,9 @@ 2.12 在执行任意代码前自动念一段平安经 ===================================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png -最近的“平安经”可谓是引起了不小的风波啊。 +最近的”平安经”可谓是引起了不小的风波啊。 作为一个正儿八经的程序员,最害怕的就是自己的代码上线出现各种各样的 BUG。 @@ -16,7 +16,7 @@ 我要开始作妖了,噢不,是开始念经了。 -|image1| +.. image:: http://image.iswbm.com/20200801221705.png 感谢佛祖保佑,Everything is ok,No bugs in the code. @@ -34,7 +34,7 @@ 我们需要新建一个用户环境目录,这个目录比较长,不需要你死记硬背,使用 site 模块的方法就可以获取,然后使用 ``mkdir -p`` 命令创建它。 -|image2| +.. image:: http://image.iswbm.com/20200801220819.png 在这个目录下,新建一个 ``usercustomize.py`` 文件,注意名字必须是这个,换成其他的可就识别不到啦。 @@ -42,29 +42,20 @@ site 模块的方法就可以获取,然后使用 ``mkdir -p`` 命令创建它 这个 ``usercustomize.py`` 的内容如下(明哥注:佛祖只保佑几个 Python 的主要应用方向,毕竟咱是 Python 攻城狮嘛…) -|image3| +.. image:: http://image.iswbm.com/20200801221413.png 这个文件我放在了我的 github 上,点击\ `这里 `__\ 直达。 一切都完成后,无论你是使用 ``python xxx.py`` 执行脚本 -|image4| +.. image:: http://image.iswbm.com/20200801221705.png 还是使用 ``python`` 进入 Python Shell ,都会先念一下平安经保平安。 -|image5| +.. image:: http://image.iswbm.com/20200801221457.png 另外,有读者反馈这种设置会导致在Win10环境下 VSCode不能正常识别已安装的Python环境,并报出代码有导包错误等问题,因此请在你知道你自己在做什么,会千万什么后果,否则请在体验后还原你的环境。 -|image6| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200801221705.png -.. |image2| image:: http://image.iswbm.com/20200801220819.png -.. |image3| image:: http://image.iswbm.com/20200801221413.png -.. |image4| image:: http://image.iswbm.com/20200801221705.png -.. |image5| image:: http://image.iswbm.com/20200801221457.png -.. |image6| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_13.rst b/source/c02/c02_13.rst index 27e1053..647adaf 100644 --- a/source/c02/c02_13.rst +++ b/source/c02/c02_13.rst @@ -1,7 +1,7 @@ 2.13 启动 Python Shell 前自动执行某脚本 ======================================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 前一节我们介绍了一种,只要运行解释器就会自动触发执行 Python 脚本的方法。 @@ -13,7 +13,7 @@ 目录下并没有 ``usercustomize.py`` 文件,但是在执行 python 进入 Python Shell 模式后,还是会打印平安经。 -|image1| +.. image:: http://image.iswbm.com/20200801225652.png 这是如何做到的呢? @@ -22,7 +22,7 @@ Shell 模式后,还是会打印平安经。 第一件事,在任意你喜欢的目录下,新建 一个Python 脚本,名字也随意,比如我叫 ``startup.py``\ ,内容还是和上面一样 -|image2| +.. image:: http://image.iswbm.com/20200801221413.png 第二件事,设置一个环境变量 PYTHONSTARTUP,指向你的脚本路径 @@ -34,19 +34,11 @@ Shell 模式后,还是会打印平安经。 但是这种方法只适用于 Python Shell ,并不适用于 Python 执行脚本的方法。 -|image3| +.. image:: http://image.iswbm.com/20200801230230.png 如果要在脚本中实现这种效果,我目前想到最粗糙我笨拙的方法了 – ``手动加载执行`` -|image4| - -|image5| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200801225652.png -.. |image2| image:: http://image.iswbm.com/20200801221413.png -.. |image3| image:: http://image.iswbm.com/20200801230230.png -.. |image4| image:: http://image.iswbm.com/20200801230503.png -.. |image5| image:: http://image.iswbm.com/20200607174235.png +.. image:: http://image.iswbm.com/20200801230503.png +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_14.rst b/source/c02/c02_14.rst index 2481894..07249c5 100644 --- a/source/c02/c02_14.rst +++ b/source/c02/c02_14.rst @@ -1,7 +1,7 @@ 2.14 把模块当做脚本来执行 7 种方法及原理 ======================================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 1. 用法举例 ----------- @@ -74,7 +74,7 @@ Python 先看一下 ``pip`` 的源码目录,发现在其下有一个 ``__main__.py`` 的文件,难道这是 ``-m`` 的入口? -|image1| +.. image:: http://image.iswbm.com/20200811155234.png 再看一下 ``json.tool`` 的源码文件,json 库下面却没有 ``__main__.py`` 的文件。 @@ -85,7 +85,7 @@ Python 查看 tool 模块的源代码,有一个名为 main 的函数 -|image2| +.. image:: http://image.iswbm.com/20200811154945.png 但它这不是关键,main 函数是在模块中直接被调用的。 @@ -146,7 +146,7 @@ Python 执行过程如下: -|image3| +.. image:: http://image.iswbm.com/20200811184733.png 再来验证一下使用第二种方法。 @@ -196,11 +196,4 @@ Python 的包导入机制会帮你做这些事情。 如此一对比,哪个更方便?你心里应该有数了。 -|image4| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200811155234.png -.. |image2| image:: http://image.iswbm.com/20200811154945.png -.. |image3| image:: http://image.iswbm.com/20200811184733.png -.. |image4| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_15.rst b/source/c02/c02_15.rst index c32b255..0782a8c 100644 --- a/source/c02/c02_15.rst +++ b/source/c02/c02_15.rst @@ -1,7 +1,7 @@ 2.15 命令行式打开 idle 编辑脚本 =============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在你安装 Python 解释器的时候,会有一个选项,让你选择是否安装 idle,这是一个极简的 Python 编辑器,对于有点 python @@ -27,16 +27,10 @@ idle,这也是为什么 idle 是大多数人的第一个 Python 代码编辑 使用的效果如下 -|image1| +.. image:: http://image.iswbm.com/20210504110446.png 如果你不加文件的路径,默认会打开 idle 的 shell 模式 -|image2| - -|image3| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20210504110446.png -.. |image2| image:: http://image.iswbm.com/20210504110758.png -.. |image3| image:: http://image.iswbm.com/20200607174235.png +.. image:: http://image.iswbm.com/20210504110758.png +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_16.rst b/source/c02/c02_16.rst index a0b1060..fae57d6 100644 --- a/source/c02/c02_16.rst +++ b/source/c02/c02_16.rst @@ -1,7 +1,7 @@ 2.16 快速计算字符串 base64编码 ============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 对字符串编码和解码 ------------------ @@ -18,7 +18,7 @@ 效果如下 -|image1| +.. image:: http://image.iswbm.com/20210504111702.png 对文件进行编码和解码 -------------------- @@ -43,17 +43,10 @@ 效果如下 -|image2| +.. image:: http://image.iswbm.com/20210504112153.png 如果你的文件是 py 脚本的话,可以直接执行它 -|image3| - -|image4| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20210504111702.png -.. |image2| image:: http://image.iswbm.com/20210504112153.png -.. |image3| image:: http://image.iswbm.com/20210504112257.png -.. |image4| image:: http://image.iswbm.com/20200607174235.png +.. image:: http://image.iswbm.com/20210504112257.png +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_17.rst b/source/c02/c02_17.rst index ce2bb56..0c17a17 100644 --- a/source/c02/c02_17.rst +++ b/source/c02/c02_17.rst @@ -1,7 +1,7 @@ 2.17 快速找到指定文件的mime类型 =============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 识别 html 文件 @@ -36,8 +36,4 @@ $ python -m mimetypes sample.py.gz type: text/x-python encoding: gzip # python文件,gzip压缩 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_18.rst b/source/c02/c02_18.rst index 003cb43..a0d3d01 100644 --- a/source/c02/c02_18.rst +++ b/source/c02/c02_18.rst @@ -1,7 +1,7 @@ 2.18 快速查看 Python 的环境信息 =============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 所有与 Python 相关的信息与配置,你都可以使用下面这条命令将其全部打印出来 @@ -16,11 +16,6 @@ - 包的搜索路径 - 以及各种环境变量 -|image1| - -|image2| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20210504114516.png -.. |image2| image:: http://image.iswbm.com/20200607174235.png +.. image:: http://image.iswbm.com/20210504114516.png +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_19.rst b/source/c02/c02_19.rst index 448d3ee..50041df 100644 --- a/source/c02/c02_19.rst +++ b/source/c02/c02_19.rst @@ -1,7 +1,7 @@ 2.19 快速解压和压缩文件 ======================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png tar 格式压缩包 -------------- @@ -86,8 +86,4 @@ zip 格式压缩包 drwxr-xr-x 3 MING staff 96 5 4 12:57 demo -rw-r--r-- 1 MING staff 74890 5 4 12:55 demo.zip -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_20.rst b/source/c02/c02_20.rst index 9fe874a..e68b207 100644 --- a/source/c02/c02_20.rst +++ b/source/c02/c02_20.rst @@ -1,7 +1,7 @@ 2.20 快速编辑 Python 脚本 ========================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png pyc是一种二进制文件,是由py文件经过编译后,生成的文件,是一种byte code,py文件变成pyc文件后,加载的速度会有所提高。因此在一些场景下,可以预先编译成 @@ -25,8 +25,4 @@ pyc 文件,来提高加载速度。 │   └── main.cpython-39.opt-1.pyc └── main.py -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_21.rst b/source/c02/c02_21.rst index 4d5f6eb..9b94aa6 100644 --- a/source/c02/c02_21.rst +++ b/source/c02/c02_21.rst @@ -1,7 +1,7 @@ 2.21 使用自带的 telnet 端口检测工具 =================================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 若你想检测指定的机器上有没有开放某端口,但本机并没有安装 telnet 工具,不如尝试一下 python 自带的 telnetlib 库,亦可实现你的需求。 @@ -20,8 +20,4 @@ Telnet(192.168.56.200,22): recv b'' *** Connection closed by remote host *** -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_22.rst b/source/c02/c02_22.rst index f129ad4..394fd9d 100644 --- a/source/c02/c02_22.rst +++ b/source/c02/c02_22.rst @@ -1,11 +1,11 @@ 2.22 快速将项目打包成应用程序 ============================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 假设我当前有一个 demo 项目,目录结构树及相关文件的的代码如下 -|image1| +.. image:: http://image.iswbm.com/20210504133550.png 现在我使用如下命令,将该项目进行打包,其中 demo 是项目的文件夹名,\ ``main:main`` 中的第一个 main 指的 @@ -19,12 +19,6 @@ 具体演示过程如下 -|image2| - -|image3| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20210504133550.png -.. |image2| image:: http://image.iswbm.com/20210504133711.png -.. |image3| image:: http://image.iswbm.com/20200607174235.png +.. image:: http://image.iswbm.com/20210504133711.png +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c02/c02_23.rst b/source/c02/c02_23.rst index f716a41..b1726ff 100644 --- a/source/c02/c02_23.rst +++ b/source/c02/c02_23.rst @@ -1,7 +1,7 @@ 2.23 快速打印函数的调用栈 ========================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在使用pdb时,手动打印调用栈 @@ -28,8 +28,4 @@ -> self.handle_one_response() /usr/lib/python2.7/site-packages/eventlet/wsgi.py(481)handle_one_response() -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c03/c03_01.rst b/source/c03/c03_01.rst index f6efaf3..cca4068 100644 --- a/source/c03/c03_01.rst +++ b/source/c03/c03_01.rst @@ -1,7 +1,7 @@ 3.1 八种连接列表的方式 ====================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 1、最直观的相加 --------------- @@ -190,8 +190,4 @@ heapq.merge,因为它采用堆排序,效率非常高。但若你不希望得 [1, 2, 3, 4, 5, 6, 7, 8, 9] >> -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c03/c03_02.rst b/source/c03/c03_02.rst index 65fe60b..14d42ad 100644 --- a/source/c03/c03_02.rst +++ b/source/c03/c03_02.rst @@ -1,7 +1,7 @@ 3.2 合并字典的 7 种方法 ======================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 1、最简单的原地更新 ------------------- @@ -207,8 +207,4 @@ Operator),用它可以很直观地合并多个字典。 7 种合并字典的方法,实际在工作中,你只要选用一种最顺手的方式即可,但是在协同工作中,或者在阅读他人代码时,你不可避免地会碰到各式各样的写法,这时候你能下意识地知道这是在做合并字典的操作,那这篇文章就是有意义的。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c03/c03_03.rst b/source/c03/c03_03.rst index 4330464..3e59131 100644 --- a/source/c03/c03_03.rst +++ b/source/c03/c03_03.rst @@ -1,7 +1,7 @@ 3.3 花式导包的八种方法 ====================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 1. 直接 import -------------- @@ -302,8 +302,4 @@ python 文件,如果后面导入成功会打印 ``ok``\ 。 这种方法足够了,而对于那些想要自己开发框架的人来说,深入学习\ ``__import__``\ 以及 importlib 是非常有必要的。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c03/c03_04.rst b/source/c03/c03_04.rst index 82d83da..21a3565 100644 --- a/source/c03/c03_04.rst +++ b/source/c03/c03_04.rst @@ -1,7 +1,7 @@ 3.4 条件语句的七种写法 ====================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 第一种:原代码 -------------- @@ -158,8 +158,4 @@ Python 功力。 看到这里,有没有涨姿势了,学了这么久的 Python ,这么多骚操作,还真是活久见。。这六种写法里,我最推荐使用的是第一种,自己也经常在用,简洁直白,代码行还少。而其他的写法虽然能写,但是不会用,也不希望在我余生里碰到会在公共代码里用这些写法的同事。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c03/c03_05.rst b/source/c03/c03_05.rst index a83e0d2..4cf5fc6 100644 --- a/source/c03/c03_05.rst +++ b/source/c03/c03_05.rst @@ -1,7 +1,7 @@ 3.5 判断是否包含子串的七种方法 ============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 1、使用 in 和 not in -------------------- @@ -130,8 +130,4 @@ python 代码快。 print(is_in("hello, python", "llo")) # True print(is_in("hello, python", "lol")) # False -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c03/c03_06.rst b/source/c03/c03_06.rst index a139415..503744d 100644 --- a/source/c03/c03_06.rst +++ b/source/c03/c03_06.rst @@ -1,7 +1,7 @@ 3.6 海象运算符的三种用法 ======================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png Python 版本发展非常快,如今最新的版本已经是 Pyhton 3.9,即便如此,有很多人甚至还停留在 3.6 或者 3.7,连 3.8 还没用上。 @@ -14,7 +14,7 @@ Python 版本发展非常快,如今最新的版本已经是 Pyhton 它的英文原名叫 ``Assignment Expressions``\ ,翻译过来也就是 ``赋值表达式``\ ,不过现在大家更普遍地称之为海象运算符,就是因为它长得真的太像海象了。 -|image1| +.. image:: http://image.iswbm.com/image-20200418122739417.png 第一个用法:if/else ------------------- @@ -173,9 +173,4 @@ Golang,那这里要注意,Golang 中的 ``:=`` 海象运算符,是一个新奇的特性,有不少人觉得这样这样会破坏代码的可读性。确实在一个新鲜事物刚出来时是会这样,但我相信经过时间的沉淀后,越来越多的人使用它并享受它带来的便利时,这种争议也会慢慢消失在历史的长河中。 -|image2| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/image-20200418122739417.png -.. |image2| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c03/c03_07.rst b/source/c03/c03_07.rst index 10ce129..06a0909 100644 --- a/source/c03/c03_07.rst +++ b/source/c03/c03_07.rst @@ -1,7 +1,7 @@ 3.7 模块重载的五种方法 ====================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 环境准备 -------- @@ -152,8 +152,4 @@ sys.modules 来重载模块这种方法是失效的。 >>> from foo import bar >>> -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c03/c03_08.rst b/source/c03/c03_08.rst index 188d26a..528ea72 100644 --- a/source/c03/c03_08.rst +++ b/source/c03/c03_08.rst @@ -1,7 +1,7 @@ 3.8 Python 转义的五种表示法 =========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 1. 为什么要有转义? ------------------- @@ -36,12 +36,12 @@ ASCII 表中一共有 128 把八进制的 13 转成 10 进制后是 11 -|image1| +.. image:: http://image.iswbm.com/image-20201125122441089.png 对照查看 ASCII 码表,11 对应的是一个垂直定位符号,这就能解释,为什么是阶梯状的输出字符串。 -|image2| +.. image:: http://image.iswbm.com/image-20201125122651086.png 2. 转义的 5 种表示法 -------------------- @@ -84,7 +84,7 @@ ASCII 有 128 个字符,如果用 与此类似的表示法,还有如下这些 -|image3| +.. image:: http://image.iswbm.com/image-20201125213925997.png 于是,要实现 ``hello`` + 回车 + ``world`` ,就有了第三种方法 @@ -161,7 +161,7 @@ Unicode 编码其实还可以由 8 试想一下,假如你的同事,在打印日志时,使用这种 unicode 编码,然后你在定位问题的时候使用这个关键词去搜,却发现什么都搜不到?这就扑街了。 -|image4| +.. image:: http://image.iswbm.com/image-20201126090917123.png 虽然这种行为真的很 sb,但在某些人看来也许是非常牛逼的操作呢? @@ -335,12 +335,4 @@ Unicode 编码其实还可以由 8 如果本文对你有些许帮助,不如给明哥 **来个四连** ~ 比心 -|image5| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/image-20201125122441089.png -.. |image2| image:: http://image.iswbm.com/image-20201125122651086.png -.. |image3| image:: http://image.iswbm.com/image-20201125213925997.png -.. |image4| image:: http://image.iswbm.com/image-20201126090917123.png -.. |image5| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c03/c03_09.rst b/source/c03/c03_09.rst index 52d0162..b4897a4 100644 --- a/source/c03/c03_09.rst +++ b/source/c03/c03_09.rst @@ -1,7 +1,7 @@ 3.9 Python 装包的八种方法 ========================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 1. 使用 easy_install -------------------- @@ -49,7 +49,7 @@ pip 是最主流的包管理方案,使用 ``pip install xxx`` 就可以从 PYP $ pip install pkg<=2.1.2 更多 pip 的使用方法,可参考我之前写过的文章,介绍得非常清楚:\ `8.8 pip -的详细使用指南 `__ +的详细使用指南 `__ 3. 使用 pipx ------------ @@ -73,8 +73,7 @@ pipx 是一个专门用于安装和管理 cli 应用程序的工具,使用它 $ pipx install pkg 更多 pipx 的使用方法,可参考我之前写过的文章,介绍得非常清楚:\ `12.4 -pipx -安装程序的使用指南 `__ +pipx 安装程序的使用指南 `__ 4. 使用 setup.py ---------------- @@ -141,8 +140,4 @@ Python 包在使用 ``setup.py`` $ curl -sSL https://raw.githubusercontent.com/python-poetry/poetry/master/get-poetry.py | python -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c03/c03_10.rst b/source/c03/c03_10.rst index 703e627..c20c7d4 100644 --- a/source/c03/c03_10.rst +++ b/source/c03/c03_10.rst @@ -1,7 +1,7 @@ 3.10 Python装饰器的六种写法 =========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。 @@ -338,11 +338,6 @@ Python工匠:使用装饰器的小技巧) 其实例化的过程,你可以参考我这里的调试过程,加以理解。 -|image1| - -|image2| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20190512113917.png -.. |image2| image:: http://image.iswbm.com/20200607174235.png +.. image:: http://image.iswbm.com/20190512113917.png +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c03/c03_11.rst b/source/c03/c03_11.rst index a5885ba..6c49d68 100644 --- a/source/c03/c03_11.rst +++ b/source/c03/c03_11.rst @@ -1,7 +1,7 @@ 3.11 Python 读取文件的六种方式 ============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 第一种:使用 open ----------------- @@ -94,8 +94,4 @@ os 模块也自带了 open 函数,直接操作的是底层的 I/O b'hello, world' >>> os.close(fp) -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c03/c03_12.rst b/source/c03/c03_12.rst index 6b67cec..f2e337b 100644 --- a/source/c03/c03_12.rst +++ b/source/c03/c03_12.rst @@ -1,7 +1,7 @@ 3.12 调用函数的九种方法 ======================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 方法一:直接调用函数运行 ------------------------ @@ -221,8 +221,4 @@ open 来读取,最后使用 compile 函数编译运行。 p = People() caller(p) -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c04/c04_01.rst b/source/c04/c04_01.rst index 7f01caa..c8a0531 100644 --- a/source/c04/c04_01.rst +++ b/source/c04/c04_01.rst @@ -1,7 +1,7 @@ 4.1 精通上下文管理器 ==================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png ``with`` 这个关键字,对于每一学习Python的人,都不会陌生。 @@ -195,11 +195,11 @@ open)的上下文管理器。 这段代码的主逻辑是\ ``创建快照``\ ,而\ ``创建临时目录``\ ,属于前置条件,\ ``删除临时目录``\ ,是收尾工作。 -虽然代码量很少,逻辑也不复杂,但是“``创建临时目录,使用完后再删除临时目录``”这个功能,在一个项目中很多地方都需要用到,如果可以将这段逻辑处理写成一个工具函数作为一个上下文管理器,那代码的复用率也大大提高。 +虽然代码量很少,逻辑也不复杂,但是“\ ``创建临时目录,使用完后再删除临时目录``\ ”这个功能,在一个项目中很多地方都需要用到,如果可以将这段逻辑处理写成一个工具函数作为一个上下文管理器,那代码的复用率也大大提高。 代码是这样的 -|image1| +.. image:: http://image.iswbm.com/20190310172800.png 总结起来,使用上下文管理器有三个好处: @@ -207,9 +207,4 @@ open)的上下文管理器。 2. 提高代码的优雅度; 3. 提高代码的可读性; -|image2| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20190310172800.png -.. |image2| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c04/c04_02.rst b/source/c04/c04_02.rst index fb9aacb..136f1ee 100644 --- a/source/c04/c04_02.rst +++ b/source/c04/c04_02.rst @@ -1,7 +1,7 @@ 4.2 深入理解描述符 ================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 学习 Python 这么久了,说起 Python 的优雅之处,能让我脱口而出的, Descriptor(描述符)特性可以排得上号。 @@ -76,7 +76,7 @@ Descriptor(描述符)特性可以排得上号。 这下程序稍微有点人工智能了,能够自己明辨是非了。 -|image1| +.. image:: http://image.iswbm.com/20190425221322.png 程序是智能了,但在\ ``__init__``\ 里有太多的判断逻辑,很影响代码的可读性。巧的是,你刚好学过 Property @@ -131,7 +131,7 @@ Property 程序还是一样的人工智能,非常好。 -|image2| +.. image:: http://image.iswbm.com/20190425221322.png 你以为你写的代码,已经非常优秀,无懈可击了。 @@ -201,7 +201,7 @@ math、chinese、english这三个属性的时候,都会经过 Score 实现的效果和前面的一样,可以对数据的合法性进行有效控制(字段类型、数值区间等) -|image3| +.. image:: http://image.iswbm.com/20190425221233.png 以上,我举了下具体的实例,从最原始的编码风格到 Property ,最后引出描述符。由浅入深,一步一步带你感受到描述符的优雅之处。 @@ -473,7 +473,7 @@ property 其实就相当于一个描述符类,而\ ``myfunc`` 在此刻变成了一个描述符。关于 ``staticmethod`` 的实现,你可以参照下面这段我自己写的代码,加以理解。 -|image4| +.. image:: http://image.iswbm.com/20190519001930.png 调用这个方法可以知道,每调用一次,它都会经过描述符类的 ``__get__`` 。 @@ -628,7 +628,7 @@ Student 引导程序逻辑进入描述符之后,不管你是获取属性,还是设置属性,都是直接作用于 instance 的。 -|image5| +.. image:: http://image.iswbm.com/20200812085823.png 这段代码,你可以仔细和前面的对比一下。 @@ -639,13 +639,4 @@ instance 的。 以上便是我对描述符的全部分享,希望能对你有所帮助。 -|image6| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20190425221322.png -.. |image2| image:: http://image.iswbm.com/20190425221322.png -.. |image3| image:: http://image.iswbm.com/20190425221233.png -.. |image4| image:: http://image.iswbm.com/20190519001930.png -.. |image5| image:: http://image.iswbm.com/20200812085823.png -.. |image6| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c04/c04_03.rst b/source/c04/c04_03.rst index a22320a..7049fdb 100644 --- a/source/c04/c04_03.rst +++ b/source/c04/c04_03.rst @@ -1,7 +1,7 @@ 4.3 神奇的元类编程 ================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 1. 类是如何产生的 ----------------- @@ -369,8 +369,4 @@ ORM的一个类(User),就对应数据库中的一张表。id,name,email,passwo 元编程 `__ - `深刻理解Python中的元类 `__ -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_01.rst b/source/c05/c05_01.rst index 6df44d3..2f3d56a 100644 --- a/source/c05/c05_01.rst +++ b/source/c05/c05_01.rst @@ -1,7 +1,7 @@ 5.1 嵌套上下文管理的另类写法 ============================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 当我们要写一个嵌套的上下文管理器时,可能会这样写 @@ -38,8 +38,4 @@ with test_context('aaa'), test_context('bbb'): print('========== in main ============') -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_02.rst b/source/c05/c05_02.rst index 827de8b..f81118b 100644 --- a/source/c05/c05_02.rst +++ b/source/c05/c05_02.rst @@ -1,7 +1,7 @@ 5.2 将嵌套 for 循环写成单行 =========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 我们经常会写如下这种嵌套的 for 循环代码 @@ -44,8 +44,4 @@ 14 15 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_03.rst b/source/c05/c05_03.rst index 33b9c9f..fbc11c8 100644 --- a/source/c05/c05_03.rst +++ b/source/c05/c05_03.rst @@ -1,7 +1,7 @@ 5.3 单行实现 for 死循环如何写? =============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 如果让你在不借助 while ,只使用 for 来写一个死循环? @@ -39,8 +39,4 @@ 由于int() 永远返回0,永远返回不了1,所以这个 for 循环会没有终点。一直运行下去。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_04.rst b/source/c05/c05_04.rst index 55e8d76..006c3ab 100644 --- a/source/c05/c05_04.rst +++ b/source/c05/c05_04.rst @@ -1,7 +1,7 @@ 5.4 如何关闭异常自动关联上下文? ================================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 当你在处理异常时,由于处理不当或者其他问题,再次抛出另一个异常时,往外抛出的异常也会携带原始的异常信息。 @@ -88,8 +88,4 @@ RuntimeError: Something bad happened (PythonCodingTime) -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_05.rst b/source/c05/c05_05.rst index c501fac..613b9d8 100644 --- a/source/c05/c05_05.rst +++ b/source/c05/c05_05.rst @@ -1,7 +1,7 @@ 5.5 自带的缓存机制不用白不用 ============================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 缓存是一种将定量数据加以保存,以备迎合后续获取需求的处理方式,旨在加快数据获取的速度。 @@ -47,8 +47,4 @@ calculating: 2 + 3 5 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_06.rst b/source/c05/c05_06.rst index 7f862eb..589942c 100644 --- a/source/c05/c05_06.rst +++ b/source/c05/c05_06.rst @@ -1,7 +1,7 @@ 5.6 如何流式读取数G超大文件 =========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 使用 with…open… 可以从一个文件中读取数据,这是所有 Python 开发者都非常熟悉的操作。 @@ -68,8 +68,4 @@ while chunk := fp.read(block_size): yield chunk -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_07.rst b/source/c05/c05_07.rst index cfd3da8..c8633a9 100644 --- a/source/c05/c05_07.rst +++ b/source/c05/c05_07.rst @@ -1,7 +1,7 @@ 5.7 实现类似 defer 的延迟调用 ============================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在 Golang 中有一种延迟调用的机制,关键字是 defer,例如下面的示例 @@ -50,8 +50,4 @@ A B -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_08.rst b/source/c05/c05_08.rst index 5884c95..71bb7cd 100644 --- a/source/c05/c05_08.rst +++ b/source/c05/c05_08.rst @@ -1,7 +1,7 @@ 5.8 如何快速计算函数运行时间 ============================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 计算一个函数的运行时间,你可能会这样子做 @@ -43,8 +43,4 @@ timeit ​ 使用它,只用一行代码即可 2 10.020059824 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_09.rst b/source/c05/c05_09.rst index d333815..28bb9c7 100644 --- a/source/c05/c05_09.rst +++ b/source/c05/c05_09.rst @@ -1,7 +1,7 @@ 5.9 重定向标准输出到日志 ======================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 假设你有一个脚本,会执行一些任务,比如说集群健康情况的检查。 @@ -39,8 +39,4 @@ with close_stdout(): you_task() -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_10.rst b/source/c05/c05_10.rst index d068b86..1fcd6f2 100644 --- a/source/c05/c05_10.rst +++ b/source/c05/c05_10.rst @@ -1,7 +1,7 @@ 5.10 快速定位错误进入调试模式 ============================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 当你在写一个程序时,最初的程序一定遇到不少零零散散的错误,这时候就免不了调试一波。 @@ -23,18 +23,12 @@ pdb 的代码。 方法很简单,只需要你在执行脚本时,加入 ``-i`` 参考 -|image1| +.. image:: http://image.iswbm.com/20200615235900.png 如果你的程序没有任何问题,加上 ``-i`` 后又会有什么不一样呢? 从下图可以看出,程序执行完成后会自动进入 console 交互模式。 -|image2| - -|image3| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200615235900.png -.. |image2| image:: http://image.iswbm.com/image-20200616000039009.png -.. |image3| image:: http://image.iswbm.com/20200607174235.png +.. image:: http://image.iswbm.com/image-20200616000039009.png +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_11.rst b/source/c05/c05_11.rst index 6cea8c1..bbc500b 100644 --- a/source/c05/c05_11.rst +++ b/source/c05/c05_11.rst @@ -1,7 +1,7 @@ 5.11 在程序退出前执行代码的技巧 =============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 使用 atexit 这个内置模块,可以很方便地注册退出函数。 @@ -9,7 +9,7 @@ 示例如下 -|image1| +.. image:: http://image.iswbm.com/20200510112133.png 如果\ ``clean()``\ 函数有参数,那么你可以不用装饰器,而是直接调用\ ``atexit.register(clean_1, 参数1, 参数2, 参数3='xxx')``\ 。 @@ -22,9 +22,4 @@ - 如果发生了严重的 Python 内部错误,你注册的函数无法正常执行。 - 如果你手动调用了\ ``os._exit()``\ ,你注册的函数无法正常执行。 -|image2| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200510112133.png -.. |image2| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_12.rst b/source/c05/c05_12.rst index 62502ac..e05e8d5 100644 --- a/source/c05/c05_12.rst +++ b/source/c05/c05_12.rst @@ -1,7 +1,7 @@ 5.12 逗号也有它的独特用法 ========================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 逗号,虽然是个很不起眼的符号,但在 Python 中也有他的用武之地。 @@ -44,8 +44,4 @@ print 的取消换行 0 1 2 [root@localhost ~]# -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_13.rst b/source/c05/c05_13.rst index 0362cff..f400762 100644 --- a/source/c05/c05_13.rst +++ b/source/c05/c05_13.rst @@ -1,7 +1,7 @@ 5.13 如何在运行状态查看源代码? =============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 查看函数的源代码,我们通常会使用 IDE 来完成。 @@ -36,8 +36,4 @@ def add(x, y): return x + y -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_14.rst b/source/c05/c05_14.rst index 5cc5304..48036e5 100644 --- a/source/c05/c05_14.rst +++ b/source/c05/c05_14.rst @@ -1,7 +1,7 @@ 5.14 单分派泛函数如何写? ========================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 泛型,如果你尝过java,应该对他不陌生吧。但你可能不知道在 Python 中(3.4+ ),也可以实现 简单的泛型函数。 @@ -166,8 +166,4 @@ ('apple', 'huawei', 'vivo', 'oppo') 【错误】:参数类型不同,无法拼接!! -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_15.rst b/source/c05/c05_15.rst index 4c97bc3..3aacf37 100644 --- a/source/c05/c05_15.rst +++ b/source/c05/c05_15.rst @@ -1,7 +1,7 @@ 5.15 让我爱不释手的用户环境 =========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 当你在机器上并没有 root 权限时,如何安装 Python 的第三方包呢? @@ -41,8 +41,4 @@ [root@localhost ~]$ pip list | grep requests [root@localhost ~]$ -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_16.rst b/source/c05/c05_16.rst index ddfeee1..52fd8ad 100644 --- a/source/c05/c05_16.rst +++ b/source/c05/c05_16.rst @@ -1,7 +1,7 @@ 5.16 字符串的分割技巧 ===================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 当我们对字符串进行分割时,且分割符是 ``\n``\ ,有可能会出现这样一个窘境: @@ -75,8 +75,4 @@ 因此在多个换行符的情况下,请务必使用 split 方法。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_17.rst b/source/c05/c05_17.rst index 508dcb9..b24dcde 100644 --- a/source/c05/c05_17.rst +++ b/source/c05/c05_17.rst @@ -1,7 +1,7 @@ 5.17 反转字符串/列表最优雅的方式 ================================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 反转序列并不难,但是如何做到最优雅呢? @@ -46,8 +46,4 @@ >>> ml[::-1] [3, 2, 1] -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_18.rst b/source/c05/c05_18.rst index 7229359..72d6ab9 100644 --- a/source/c05/c05_18.rst +++ b/source/c05/c05_18.rst @@ -1,7 +1,7 @@ 5.18 如何将 print 内容输出到文件 ================================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png Python 3 中的 print 作为一个函数,由于可以接收更多的参数,所以功能变为更加强大。 @@ -18,8 +18,4 @@ Python 3 中的 print $ cat test.log hello, python -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_19.rst b/source/c05/c05_19.rst index bba03f6..03ad9cc 100644 --- a/source/c05/c05_19.rst +++ b/source/c05/c05_19.rst @@ -1,7 +1,7 @@ 5.19 改变默认递归次数限制 ========================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 上面才提到递归,大家都知道使用递归是有风险的,递归深度过深容易导致堆栈的溢出。如果你这字符串太长啦,使用递归方式反转,就会出现问题。 @@ -21,8 +21,4 @@ >>> sys.getrecursionlimit() 2000 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_20.rst b/source/c05/c05_20.rst index 91667ba..f9191c4 100644 --- a/source/c05/c05_20.rst +++ b/source/c05/c05_20.rst @@ -1,7 +1,7 @@ 5.20 让你晕头转向的 else 用法 ============================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png if else 用法可以说是最基础的语法表达式之一,但是今天不是讲这个的。 @@ -67,8 +67,4 @@ break,还是没有break? 总结一下,for else 和 try else 相同,只要代码正常走下去不被 break,不抛出异常,就可以走else。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_21.rst b/source/c05/c05_21.rst index 74da09a..2caf116 100644 --- a/source/c05/c05_21.rst +++ b/source/c05/c05_21.rst @@ -1,7 +1,7 @@ 5.21 字典访问不存在的key时不再报错 ================================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 当一个字典里没有某个 key 时,此时你访问他是会报 KeyError 的。 @@ -64,8 +64,4 @@ defaultdict 接收一个工厂方法,工厂方法返回的对象就是字典 >>> info["msg"] 'default value' -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_22.rst b/source/c05/c05_22.rst index a006dd0..94968b5 100644 --- a/source/c05/c05_22.rst +++ b/source/c05/c05_22.rst @@ -1,7 +1,7 @@ 5.22 如何实现函数的连续调用? ============================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 现在我想写一个函数可以实现把所有的数进行求和,并且可以达到反复调用的目的。 @@ -54,8 +54,4 @@ 27 >>> -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_23.rst b/source/c05/c05_23.rst index 113631b..50998c2 100644 --- a/source/c05/c05_23.rst +++ b/source/c05/c05_23.rst @@ -1,7 +1,7 @@ 5.23 如何实现字典的多级排序 =========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在一个列表中,每个元素都是一个字典,里面的每个字典结构都是一样的。 @@ -46,8 +46,4 @@ >>> students [{'age': 17, 'score': 80, 'name': 'Julia'}, {'age': 16, 'score': 80, 'name': 'Tom'}, {'age': 17, 'score': 89, 'name': 'Jack'}] -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_24.rst b/source/c05/c05_24.rst index adb47c3..6cb6c2d 100644 --- a/source/c05/c05_24.rst +++ b/source/c05/c05_24.rst @@ -1,7 +1,7 @@ 5.24 对齐字符串的两种方法 ========================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 第一种:使用 format ------------------- @@ -141,8 +141,4 @@ 09 081 0729 10 100 1000 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_25.rst b/source/c05/c05_25.rst index 22f6fae..5fc0fa9 100644 --- a/source/c05/c05_25.rst +++ b/source/c05/c05_25.rst @@ -1,7 +1,7 @@ 5.25 将位置参数变成关键字参数 ============================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在 Python 中,参数的种类,大概可以分为四种: @@ -33,8 +33,4 @@ 2 3 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_26.rst b/source/c05/c05_26.rst index 30984e6..44738a1 100644 --- a/source/c05/c05_26.rst +++ b/source/c05/c05_26.rst @@ -1,7 +1,7 @@ 5.26 如何获取一个函数设定的参数 =============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在 Python 中有一个叫 inspect 的库,非常的好用,利用它可以获取一些数据,这在写一些框架时非常有用。 @@ -39,8 +39,4 @@ raise TypeError(msg) from None TypeError: missing a required argument: 'age' -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_27.rst b/source/c05/c05_27.rst index 3a4e50d..0fe2894 100644 --- a/source/c05/c05_27.rst +++ b/source/c05/c05_27.rst @@ -1,7 +1,7 @@ 5.27 如何进行版本的比较 ======================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 使用 distutils -------------- @@ -38,8 +38,4 @@ >>> version.parse("1.3.a4") < version.parse("10.1.2") True -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_28.rst b/source/c05/c05_28.rst index 1814d27..772b1c2 100644 --- a/source/c05/c05_28.rst +++ b/source/c05/c05_28.rst @@ -22,28 +22,23 @@ 在不进行任何设置的情况下,警告会直接打印在终端上。 -|image0| +.. image:: http://image.iswbm.com/20210313143425.png 3. 捕获警告方法一 ----------------- 在 warnings 中有一系列的过滤器。 -+---------------+--------------------------------------------------------+ -| 值 | 处置 | -+===============+========================================================+ -| ``"default"`` | 为发出警告的每个位置(模块+行号)打印第一个匹配警告 | -+---------------+--------------------------------------------------------+ -| ``"error"`` | 将匹配警告转换为异常 | -+---------------+--------------------------------------------------------+ -| ``"ignore"`` | 从不打印匹配的警告 | -+---------------+--------------------------------------------------------+ -| ``"always"`` | 总是打印匹配的警告 | -+---------------+--------------------------------------------------------+ -| ``"module"`` | 为发出警告的每个模块打印第一次匹配警告(无论行号如何) | -+---------------+--------------------------------------------------------+ -| ``"once"`` | 无论位置如何,仅打印第一次出现的匹配警告 | -+---------------+--------------------------------------------------------+ +============= ====================================================== +值 处置 +============= ====================================================== +``"default"`` 为发出警告的每个位置(模块+行号)打印第一个匹配警告 +``"error"`` 将匹配警告转换为异常 +``"ignore"`` 从不打印匹配的警告 +``"always"`` 总是打印匹配的警告 +``"module"`` 为发出警告的每个模块打印第一次匹配警告(无论行号如何) +``"once"`` 无论位置如何,仅打印第一次出现的匹配警告 +============= ====================================================== 当你指定为 error 的时候,就会将匹配警告转换为异常。 @@ -61,7 +56,7 @@ 运行后,效果如下 -|image1| +.. image:: http://image.iswbm.com/20210313144501.png 4. 捕获警告方法二 ----------------- @@ -107,9 +102,4 @@ 运行后,效果如下 -|image2| - -.. |image0| image:: http://image.iswbm.com/20210313143425.png -.. |image1| image:: http://image.iswbm.com/20210313144501.png -.. |image2| image:: http://image.iswbm.com/20210313144751.png - +.. image:: http://image.iswbm.com/20210313144751.png diff --git a/source/c05/c05_29.rst b/source/c05/c05_29.rst index 0d6aa21..29e8c0b 100644 --- a/source/c05/c05_29.rst +++ b/source/c05/c05_29.rst @@ -1,7 +1,7 @@ 5.29 如何禁止对象深拷贝? ======================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 当你使用 copy 模块的 deepcopy 拷贝一个对象后,会创建出来一个全新的的对象。 @@ -47,8 +47,4 @@ Python 的魔法方法了。 >>> id(new_obj) 140151569169808 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_30.rst b/source/c05/c05_30.rst index 534c79f..08e29e6 100644 --- a/source/c05/c05_30.rst +++ b/source/c05/c05_30.rst @@ -1,7 +1,7 @@ 5.30 如何将变量名和变量值转为字典? =================================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 千言万语,不如上示例演示下效果 @@ -46,8 +46,4 @@ 附上 :\ `inspect 学习文档 `__ -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_31.rst b/source/c05/c05_31.rst index 2e872d3..2da60be 100644 --- a/source/c05/c05_31.rst +++ b/source/c05/c05_31.rst @@ -1,7 +1,7 @@ 5.31 替换实例方法的最佳实践 =========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 思路一:简单替换 ---------------- @@ -58,7 +58,7 @@ method ,你可以把替换前后的 speak 打印出来 有 Python 2 使用经验的朋友,可以会知道类实例的方法,都有 ``im_func`` 和 ``im_class`` 属性,分别指向了该方法的函数和类。 -|image1| +.. image:: http://image.iswbm.com/20210328111610.png 很抱歉的是,这些在 Python3 中全都取消了,意味你无法再使用 ``im_func`` 和 ``im_class`` 。 @@ -69,19 +69,19 @@ method ,你可以把替换前后的 speak 打印出来 因为在 Python2 中不推荐普通用户对类实例的方法进行替换,所以 Python 给类实例的方法赋予了只读属性 -|image2| +.. image:: http://image.iswbm.com/20210328111904.png 思路三:非常危险的字节码替换 ---------------------------- 表层不行,但这个方法在字节码层面却是可行的 -|image3| +.. image:: http://image.iswbm.com/20210328112231.png 这种方法,非常的粗暴且危险,他会直接影响到使用 People 的所有实例的 speak 方法,因此这种方法千万不要使用。 -|image4| +.. image:: http://image.iswbm.com/20210328112501.png 思路四:利用 types 绑定方法 --------------------------- @@ -109,12 +109,4 @@ method ,你可以把替换前后的 speak 打印出来 这种方法,最为安全,不会影响其他实例。并且 Python 2 和 Python 3 都适用,是官方推荐的一种做法。 -|image5| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20210328111610.png -.. |image2| image:: http://image.iswbm.com/20210328111904.png -.. |image3| image:: http://image.iswbm.com/20210328112231.png -.. |image4| image:: http://image.iswbm.com/20210328112501.png -.. |image5| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c05/c05_32.rst b/source/c05/c05_32.rst index 46c3ab0..521d63e 100644 --- a/source/c05/c05_32.rst +++ b/source/c05/c05_32.rst @@ -1,7 +1,7 @@ 5.32 如何动态创建函数? ======================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在下面的代码中,每一次 for 循环都会创建一个返回特定字符串的函数。 @@ -26,8 +26,4 @@ world python -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c06/c06_01.rst b/source/c06/c06_01.rst index 77aa6b4..a68e842 100644 --- a/source/c06/c06_01.rst +++ b/source/c06/c06_01.rst @@ -1,7 +1,7 @@ 6.1 不要直接调用类的私有方法 ============================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 大家都知道,类中可供直接调用的方法,只有公有方法(protected类型的方法也可以,但是不建议)。也就是说,类的私有方法是无法直接调用的。 @@ -40,8 +40,4 @@ ins._Kls__private() ins.call_private() -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c06/c06_02.rst b/source/c06/c06_02.rst index ac11fc3..0ab9ca1 100644 --- a/source/c06/c06_02.rst +++ b/source/c06/c06_02.rst @@ -1,7 +1,7 @@ 6.2 默认参数最好不为可变对象 ============================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 函数的参数分三种 @@ -43,11 +43,6 @@ Python 中的 def 的时候,会先生成这个可变对象的内存地址,然后将这个默认参数 item_list 会与这个内存地址绑定。在后面的函数调用中,如果调用方指定了新的默认值,就会将原来的默认值覆盖。如果调用方没有指定新的默认值,那就会使用原来的默认值。 -|image1| - -|image2| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20190511165650.png -.. |image2| image:: http://image.iswbm.com/20200607174235.png +.. image:: http://image.iswbm.com/20190511165650.png +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c06/c06_03.rst b/source/c06/c06_03.rst index 70a0867..73aa3bf 100644 --- a/source/c06/c06_03.rst +++ b/source/c06/c06_03.rst @@ -1,7 +1,7 @@ 6.3 增量赋值的性能更好 ====================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 诸如 ``+=`` 和 ``*=`` 这些运算符,叫做 增量赋值运算符。 @@ -26,8 +26,4 @@ a+b,前者是直接在原列表上进行扩展,而后者是先从原列表中 所以在能使用增量赋值的时候尽量使用它。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c06/c06_04.rst b/source/c06/c06_04.rst index 5191ea1..4b99dcd 100644 --- a/source/c06/c06_04.rst +++ b/source/c06/c06_04.rst @@ -1,7 +1,7 @@ 6.4 别再使用 pprint 打印了 ========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 1. 吐槽问题 ----------- @@ -47,7 +47,7 @@ pprint 你应该很熟悉了吧? 好像有点效果,真的是 “神器”呀。 但是你告诉我, -**:raw-latex:`\xe`4:raw-latex:`\xbd`:raw-latex:`\xa`0:raw-latex:`\xe`7:raw-latex:`\x`9a** +**:raw-latex:`\xe4`:raw-latex:`\xbd`:raw-latex:`\xa0`:raw-latex:`\xe7`:raw-latex:`\x`9a** 这些是什么玩意?本来想提高可读性的,现在变成完全不可读了。 好在我懂点 Python 2 的编码,知道 Python 2 @@ -162,7 +162,7 @@ Python,本来我可以选择不用的,因为有更好的替代方案(\ ** 输出如下,已经解决了中文的显示问题: -|image1| +.. image:: http://image.iswbm.com/20200507171451.png 打印双引号 ~~~~~~~~~~ @@ -269,7 +269,7 @@ stream,也就是标准输出。 就像下面这样。 -|image2| +.. image:: http://image.iswbm.com/20200507174459.png 知道了问题所在,再修改下代码 @@ -294,7 +294,7 @@ stream,也就是标准输出。 终于成功了,太不容易了吧。 -|image3| +.. image:: http://image.iswbm.com/20200507174802.png 3. 何必折腾 ----------- @@ -379,11 +379,4 @@ json.dumps 的关键参数有两个: 2. 若真要使用,且有和我一样的改造需求,可以参考我的实现 3. Python 2 中的 print 语句后居然可以加 逗号 -|image4| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200507171451.png -.. |image2| image:: http://image.iswbm.com/20200507174459.png -.. |image3| image:: http://image.iswbm.com/20200507174802.png -.. |image4| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c06/c06_05.rst b/source/c06/c06_05.rst index 25875c4..d42a33b 100644 --- a/source/c06/c06_05.rst +++ b/source/c06/c06_05.rst @@ -1,7 +1,7 @@ 6.5 变量名与保留关键字冲突怎么办? ================================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 所有的编程语言都有一些保留关键字,这是代码得以编译/解释的基础。 @@ -65,7 +65,7 @@ Python 的关键字,可以通过 keyword 这个模块列出来,一共有 33 建议当你想使用的变量名被关键字所占用时,可以使用 ``变量_`` 这样在变量后面加一个单下划线的形式来命名,这种后缀一下划线的方式优先于缩写或拼写错误。 -|image1| +.. image:: http://image.iswbm.com/20200823203106.png 有了 PEP8 做为指导,我们可以这样子写了 @@ -73,9 +73,4 @@ Python 的关键字,可以通过 keyword 这个模块列出来,一共有 33 >>> try_ = True -|image2| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200823203106.png -.. |image2| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c06/c06_06.rst b/source/c06/c06_06.rst index 4389c58..d055432 100644 --- a/source/c06/c06_06.rst +++ b/source/c06/c06_06.rst @@ -1,7 +1,7 @@ 6.6 不想让子类继承的变量名该怎么写? ==================================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 先来看下面这段代码 @@ -47,11 +47,6 @@ Parent 验证过程如下: -|image1| - -|image2| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200823205210.png -.. |image2| image:: http://image.iswbm.com/20200607174235.png +.. image:: http://image.iswbm.com/20200823205210.png +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c06/c06_07.rst b/source/c06/c06_07.rst index d5be221..1d2094b 100644 --- a/source/c06/c06_07.rst +++ b/source/c06/c06_07.rst @@ -1,7 +1,7 @@ 6.7 利用 any 代替 for 循环 ========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在某些场景下,我们需要判断是否满足某一组集合中任意一个条件 @@ -34,8 +34,4 @@ 只要有一个不满足条件,all 函数的结果就会立刻返回 False -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c06/c06_08.rst b/source/c06/c06_08.rst index ac69ff1..1bc4dc5 100644 --- a/source/c06/c06_08.rst +++ b/source/c06/c06_08.rst @@ -1,7 +1,7 @@ 6.8 不同条件分支里应减少重合度 ============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 如下是一个简单的条件语句模型 @@ -39,8 +39,4 @@ else: process_international_payment(payment) -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c06/c06_09.rst b/source/c06/c06_09.rst index 08455b4..b31cf6b 100644 --- a/source/c06/c06_09.rst +++ b/source/c06/c06_09.rst @@ -1,7 +1,7 @@ 6.9 如无必要,勿增实体噢 ======================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 删除没必要的调用\ ``keys()`` ---------------------------- @@ -67,8 +67,4 @@ 这样可以缩短代码并删除不必要的变量,从而减轻了读取函数的负担。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c06/c06_10.rst b/source/c06/c06_10.rst index e8be3b4..75fde65 100644 --- a/source/c06/c06_10.rst +++ b/source/c06/c06_10.rst @@ -1,7 +1,7 @@ 6.10 保持代码的简洁与可诗性 =========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 将条件简化为return语句 ---------------------- @@ -22,8 +22,4 @@ def function(): return isinstance(a, b) or issubclass(b, a) -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c06/c06_11.rst b/source/c06/c06_11.rst index b93ac41..9e56739 100644 --- a/source/c06/c06_11.rst +++ b/source/c06/c06_11.rst @@ -1,7 +1,7 @@ 6.11 给模块的私有属性上保险 =========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 保护对象 -------- @@ -57,8 +57,4 @@ 甚至是,使用\ ``import tools``\ 也可以轻易突破保护限制。所以可见,“保护属性”是一种简单的隐藏机制,只有在\ ``from tools import *``\ 时,由解释器提供简单的保护,但是可以轻易突破。这种保护更多地依赖程序员的共识:不访问、修改“保护属性”。除此之外,有没有更安全的保护机制呢?有,就是下一部分讨论的私有变量。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c06/c06_12.rst b/source/c06/c06_12.rst index 3c81868..03d974d 100644 --- a/source/c06/c06_12.rst +++ b/source/c06/c06_12.rst @@ -1,7 +1,7 @@ 6.12 变量不能与保留关键字重名 ============================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在 Python 中有很多的保留关键字,这些关键字的使用,不需要我们定义,也不需要我们导入,只要你进入到了 @@ -30,8 +30,4 @@ class,这个有类别的意思,可能你也想使用它来作为变量名, def tag(name,*content,class_): pass -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c07/c07_01.rst b/source/c07/c07_01.rst index b75c0f2..becf148 100644 --- a/source/c07/c07_01.rst +++ b/source/c07/c07_01.rst @@ -1,7 +1,7 @@ 7.1 远程登陆服务器的最佳利器 ============================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在使用 Python 写一些脚本的时候,在某些情况下,我们需要频繁登陆远程服务去执行一次命令,并返回一些结果。 @@ -59,7 +59,7 @@ os.popen,os.system,commands,subprocess 等一些命令执行库来间接 为了解决这几个问题,我搜索了全网关于 Python ssh 的文章,没有看到有完整介绍这方面的技巧的。 -|image1| +.. image:: http://image.iswbm.com/20200512125643.png 为此,我就翻阅了一个很火的 Github 项目: awesome-python-cn (https://github.com/BingmingWong/awesome-python-cn)。 @@ -136,7 +136,7 @@ os.popen,os.system,commands,subprocess 等一些命令执行库来间接 2017 年就已经存在这个问题了,到现在 2020 年了还没有修复,看来使用 ``sh.ssh`` 的人并不多,于是我又“追问”了下,期望能得到回复。 -|image2| +.. image:: http://image.iswbm.com/20200228085749.png 以上这个问题,只有在需要输入密码才会出现,如果设置了机器互信是没有问题的。 @@ -173,11 +173,11 @@ top 命令看到已连接的终端的变化,会先 ``+1`` 再 你得使用它的兄弟库 - ``pbs`` ,然后我又去 pypi 看了一眼 `pbs `__\ ,已经 “年久失修”,没人维护了。 -|image3| +.. image:: http://image.iswbm.com/20200228093627.png 至此,我离 “卒”,就差最后一根稻草了。 -|image4| +.. image:: http://image.iswbm.com/20200512125643.png 3. 使用 paramiko ---------------- @@ -340,7 +340,7 @@ Windows,这里就有一件好事,一件坏事了。 坏事就是:你需要做很多复杂的准备,你可 google 解决,但是我建议你直接放弃,坑太深了。 -|image5| +.. image:: http://image.iswbm.com/20200228111654.png 注意事项 ~~~~~~~~ @@ -389,13 +389,4 @@ Windows,这里就有一件好事,一件坏事了。 模块是运维人员必学模块之一,如果你恰好需要在 Python 代码中实现 ssh 到远程服务器去获取一些信息,那么我把 Paramiko 推荐给你。 -|image6| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200512125643.png -.. |image2| image:: http://image.iswbm.com/20200228085749.png -.. |image3| image:: http://image.iswbm.com/20200228093627.png -.. |image4| image:: http://image.iswbm.com/20200512125643.png -.. |image5| image:: http://image.iswbm.com/20200228111654.png -.. |image6| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c07/c07_02.rst b/source/c07/c07_02.rst index 769bee0..ef29dff 100644 --- a/source/c07/c07_02.rst +++ b/source/c07/c07_02.rst @@ -1,14 +1,14 @@ 7.2 代码 BUG 变得酷炫的利器 =========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 当我们写的一个脚本或程序发生各种不可预知的异常时,如果我们没有进行捕获处理的时候,通常都会致使程序崩溃退出,并且会在终端打印出一堆 **密密麻麻** 的 traceback 堆栈信息来告诉我们,是哪个地方出了问题。 就像这样子,天呐,密集恐惧症要犯了都 -|image1| +.. image:: http://image.iswbm.com/image-20200307210853246.png 上面这段 traceback @@ -47,18 +47,18 @@ 随便写一个没有使用 pretty-errors ,并且报错了的程序,是这样子的。 -|image2| +.. image:: http://image.iswbm.com/image-20200307212823345.png 而使用了 pretty_errors 后,报错信息被美化成这样了。 -|image3| +.. image:: http://image.iswbm.com/image-20200307213534278.png 是不是感觉清楚了不少,那种密密麻麻带来的焦虑感是不是都消失了呢? 当然这段代码少,你可能还没感受到,那就来看下 该项目在 Github上的一张效果对比图吧 -|image4| +.. image:: https://warehouse-camo.cmh1.psfhosted.org/31399c5a034c3989b9e99b35249e8f2f0d40e102/68747470733a2f2f692e696d6775722e636f6d2f306a7045716f622e706e67 3. 配置全局可用 --------------- @@ -81,23 +81,23 @@ traceback 输出都自动美化。 $ python3 -m pretty_errors -|image5| +.. image:: http://image.iswbm.com/image-20200307214742135.png 配置完成后,你再运行任何脚本,traceback 都会自动美化了。 不仅是在我的 iTerm 终端下 -|image6| +.. image:: http://image.iswbm.com/image-20200307213534278.png 在 PyCharm 中也会 -|image7| +.. image:: http://image.iswbm.com/image-20200307215530270.png 唯一的缺点就是,原先在 PyCharm 中的 traceback 可以直接点击 ``文件路径`` 直接跳转到对应错误文件代码行,而你如果是在 VSCode 可以使用 下面自定义配置的方案解决这个问题(下面会讲到,参数是:\ ``display_link``\ )。 -|image8| +.. image:: http://image.iswbm.com/image-20200307215834623.png 因此,有些情况下,你并不想设置 ``pretty_errors`` 全局可用。 @@ -105,7 +105,7 @@ traceback 输出都自动美化。 只需要再次输入 ``python -m pretty_errors``\ ,选择 ``C`` 即可清除。 -|image9| +.. image:: http://image.iswbm.com/image-20200307214600749.png 4. 单文件中使用 --------------- @@ -179,7 +179,7 @@ traceback 输出都自动美化。 在你像上面这样使用 ``pretty_errrs.configure`` 进行配置时,抛出的异常信息就变成这样了。 -|image10| +.. image:: http://image.iswbm.com/image-20200308121949011.png 当然了,\ ``pretty_errors.configure()`` 还可以接收很多的参数,你可以根据你自己的需要进行配置。 @@ -212,18 +212,24 @@ traceback 输出都自动美化。 其中,\ ``_BACKGROUND`` 用于设置背景色,举个例子如下。 -|image11| +.. image:: http://image.iswbm.com/image-20200308125431779.png 5.2 设置显示内容 ~~~~~~~~~~~~~~~~ - ``line_number_first`` 启用后,将首先显示行号,而不是文件名。 + - ``lines_before`` : 显示发生异常处的前几行代码 + - ``lines_after``\ : 显示发生异常处的后几行代码 + - ``display_link``\ :启用后,将在错误位置下方写入链接,VScode将允许您单击该链接。 + - ``separator_character``\ :用于创建标题行的字符。默认情况下使用连字符。如果设置为 ``''`` 或者 ``None`` ,标题将被禁用。 + - ``display_timestamp``\ :启用时,时间戳将写入回溯头中。 + - ``display_locals`` 启用后,将显示在顶部堆栈框架代码中的局部变量及其值。 @@ -268,19 +274,4 @@ PEP8 规范一样,没有它是可以,但是有了它会更好一样。对于某些想自定义错误输出场景的人,\ ``pretty_errors`` 会是一个不错的解决方案,明哥把它推荐给你。 -|image12| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/image-20200307210853246.png -.. |image2| image:: http://image.iswbm.com/image-20200307212823345.png -.. |image3| image:: http://image.iswbm.com/image-20200307213534278.png -.. |image4| image:: https://warehouse-camo.cmh1.psfhosted.org/31399c5a034c3989b9e99b35249e8f2f0d40e102/68747470733a2f2f692e696d6775722e636f6d2f306a7045716f622e706e67 -.. |image5| image:: http://image.iswbm.com/image-20200307214742135.png -.. |image6| image:: http://image.iswbm.com/image-20200307213534278.png -.. |image7| image:: http://image.iswbm.com/image-20200307215530270.png -.. |image8| image:: http://image.iswbm.com/image-20200307215834623.png -.. |image9| image:: http://image.iswbm.com/image-20200307214600749.png -.. |image10| image:: http://image.iswbm.com/image-20200308121949011.png -.. |image11| image:: http://image.iswbm.com/image-20200308125431779.png -.. |image12| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c07/c07_03.rst b/source/c07/c07_03.rst index 62eef2b..eca9cb7 100644 --- a/source/c07/c07_03.rst +++ b/source/c07/c07_03.rst @@ -1,7 +1,7 @@ 7.3 少有人知的 Python “重试机制” ================================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 为了避免由于一些网络或其他不可控因素,而引起的功能性问题。比如在发送请求时,会因为网络不稳定,往往会有请求超时的问题。 @@ -220,8 +220,4 @@ RetryError,而不是最根本的原因。 执行回调函数 False -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c07/c07_04.rst b/source/c07/c07_04.rst index 157e501..50899de 100644 --- a/source/c07/c07_04.rst +++ b/source/c07/c07_04.rst @@ -1,7 +1,7 @@ 7.4 规整字符串提取数据的神器 ============================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 从一段指定的字符串中,取得期望的数据,正常人都会想到正则表达式吧? @@ -33,7 +33,7 @@ in_port 对应的 n_bytes、n_packets 的值 。 我来给你展示一下,我是怎么做的? -|image1| +.. image:: http://image.iswbm.com/image-20200903214325849.png 可以看到,我使用了一个叫做 parse 的第三方包,是需要自行安装的 @@ -144,8 +144,8 @@ parse 的结果只有两种: 更多类型请参考官方文档: +---+-----------------------------------------------------------+-------+ -| T | Characters Matched | Outpu | -| y | | t | +| T | Characters Matched | O | +| y | | utput | | p | | | | e | | | +===+===========================================================+=======+ @@ -169,8 +169,8 @@ parse 的结果只有两种: +---+-----------------------------------------------------------+-------+ | f | Fixed-point numbers | float | +---+-----------------------------------------------------------+-------+ -| F | Decimal numbers | Decim | -| | | al | +| F | Decimal numbers | De | +| | | cimal | +---+-----------------------------------------------------------+-------+ | e | Floating-point numbers with exponent e.g. 1.1e-10, NAN | float | | | (all case insensitive) | | @@ -183,26 +183,26 @@ parse 的结果只有两种: +---+-----------------------------------------------------------+-------+ | x | Hexadecimal numbers (lower and upper case) | int | +---+-----------------------------------------------------------+-------+ -| t | ISO 8601 format date/time e.g. 1972-01-20T10:21:36Z (“T” | datet | -| i | and “Z” optional) | ime | +| t | ISO 8601 format date/time e.g. 1972-01-20T10:21:36Z (“T” | dat | +| i | and “Z” optional) | etime | +---+-----------------------------------------------------------+-------+ -| t | RFC2822 e-mail format date/time e.g. Mon, 20 Jan 1972 | datet | -| e | 10:21:36 +1000 | ime | +| t | RFC2822 e-mail format date/time e.g. Mon, 20 Jan 1972 | dat | +| e | 10:21:36 +1000 | etime | +---+-----------------------------------------------------------+-------+ -| t | Global (day/month) format date/time e.g. 20/1/1972 | datet | -| g | 10:21:36 AM +1:00 | ime | +| t | Global (day/month) format date/time e.g. 20/1/1972 | dat | +| g | 10:21:36 AM +1:00 | etime | +---+-----------------------------------------------------------+-------+ -| t | US (month/day) format date/time e.g. 1/20/1972 10:21:36 | datet | -| a | PM +10:30 | ime | +| t | US (month/day) format date/time e.g. 1/20/1972 10:21:36 | dat | +| a | PM +10:30 | etime | +---+-----------------------------------------------------------+-------+ -| t | ctime() format date/time e.g. Sun Sep 16 01:03:52 1973 | datet | -| c | | ime | +| t | ctime() format date/time e.g. Sun Sep 16 01:03:52 1973 | dat | +| c | | etime | +---+-----------------------------------------------------------+-------+ -| t | HTTP log format date/time e.g. 21/Nov/2011:00:07:11 +0000 | datet | -| h | | ime | +| t | HTTP log format date/time e.g. 21/Nov/2011:00:07:11 +0000 | dat | +| h | | etime | +---+-----------------------------------------------------------+-------+ -| t | Linux system log format date/time e.g. Nov 9 03:37:44 | datet | -| s | | ime | +| t | Linux system log format date/time e.g. Nov 9 03:37:44 | dat | +| s | | etime | +---+-----------------------------------------------------------+-------+ | t | Time e.g. 10:21:36 PM -5:30 | time | | t | | | @@ -356,9 +356,4 @@ parse 库在字符串解析处理场景中提供的便利,肉眼可见,上 在一些简单的场景中,使用 parse 可比使用 re 去写正则开发效率不知道高几个 level,用它写出来的代码富有美感,可读性高,后期维护起代码来一点压力也没有,推荐你使用。 -|image2| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/image-20200903214325849.png -.. |image2| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c07/c07_05.rst b/source/c07/c07_05.rst index 037c03f..55bba72 100644 --- a/source/c07/c07_05.rst +++ b/source/c07/c07_05.rst @@ -1,7 +1,7 @@ 7.5 一行代码让代码运行速度提高100倍 =================================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png python一直被病垢运行速度太慢,但是实际上python的执行效率并不慢,慢的是python用的解释器Cpython运行效率太差。 @@ -278,8 +278,4 @@ f_add就是一个动态生成的机器码函数,我们可以把它想象成C numba所完成的工作就是:解析Python函数的ast语法树并加以改造,添加类型信息;将带类型信息的ast语法树通过llvmpy动态地转换为机器码函数,然后再通过和ctypes类似的技术为机器码函数创建包装函数供Python调用。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c07/c07_06.rst b/source/c07/c07_06.rst index 4d82163..b6a450e 100644 --- a/source/c07/c07_06.rst +++ b/source/c07/c07_06.rst @@ -1,7 +1,7 @@ 7.6 新一代的调试神器:PySnooper =============================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 对于每个程序开发者来说,调试几乎是必备技能。 @@ -135,7 +135,7 @@ PySnooper 如此一来,PySnooper 会在 ``out["foo"]`` 值有变化时,也将其打印出来 -|image1| +.. image:: http://image.iswbm.com/20201114183018.png watch 参数,接收一个可迭代对象(可以是list 或者 tuple),里面的元素为字符串表达式,什么意思呢?看下面例子就知道了 @@ -187,7 +187,7 @@ tuple),里面的元素为字符串表达式,什么意思呢?看下面例 效果如下 -|image2| +.. image:: http://image.iswbm.com/20201114193131.png 3.5 设置最大的输出长度 ~~~~~~~~~~~~~~~~~~~~~~ @@ -225,7 +225,7 @@ PySnooper 同样支持多线程的调试,通过设置参数 效果如下 -|image3| +.. image:: http://image.iswbm.com/20201114194449.png 2.7 自定义对象的格式输出 ~~~~~~~~~~~~~~~~~~~~~~~~ @@ -287,7 +287,7 @@ PySnooper 在打印对象的调试信息时,会逐个判断它是否是 Person 运行一下,观察一下效果。 -|image4| +.. image:: http://image.iswbm.com/20201114201042.png 如果你要自定义格式输出的有很多个类型,那么 ``custom_repr`` 参数的值可以这么写 @@ -328,12 +328,4 @@ PySnooper 在打印对象的调试信息时,会逐个判断它是否是 Person 以上就是明哥今天给大家介绍的一款调试神器(\ ``PySnooper``\ ) 的详细使用手册,是不是觉得还不错? -|image5| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20201114183018.png -.. |image2| image:: http://image.iswbm.com/20201114193131.png -.. |image3| image:: http://image.iswbm.com/20201114194449.png -.. |image4| image:: http://image.iswbm.com/20201114201042.png -.. |image5| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c07/c07_07.rst b/source/c07/c07_07.rst index 34b3afd..855272a 100644 --- a/source/c07/c07_07.rst +++ b/source/c07/c07_07.rst @@ -1,7 +1,7 @@ 7.7 比open更好用、更优雅的读取文件 ================================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 使用 open 函数去读取文件,似乎是所有 Python 工程师的共识。 @@ -277,7 +277,7 @@ fileinput 若你没有传入任何的勾子,fileinput 默认使用的是 open 函数。 -|image1| +.. image:: http://image.iswbm.com/image-20210227095708676.png ``fileinput`` 为我们内置了两种勾子供你使用 @@ -446,9 +446,4 @@ fileinput 是对 open 函数的再次封装,在仅需读取数据的场景中 就无能为力啦,本身从 fileinput 的命名上就知道这个模块只专注于输入(读)而不是输出(写)。 -|image2| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/image-20210227095708676.png -.. |image2| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c07/c07_08.rst b/source/c07/c07_08.rst index 8af9138..b12b254 100644 --- a/source/c07/c07_08.rst +++ b/source/c07/c07_08.rst @@ -1,7 +1,7 @@ 7.8 像操作路径一样,操作嵌套字典 ================================ -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 在使用前先安装它,要注意的是该模块只能在 Python 3.8+ 中使用 @@ -44,8 +44,4 @@ 更多案例,请前往 `官方文档 `__ 查阅。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c07/c07_09.rst b/source/c07/c07_09.rst index 1e56d71..021ef1a 100644 --- a/source/c07/c07_09.rst +++ b/source/c07/c07_09.rst @@ -1,7 +1,7 @@ 7.9 读取文件中任意行的数据 ========================== -|image0| +.. image:: http://image.iswbm.com/20200804124133.png ``linecache`` 是 Python 中的一个内置模块。 @@ -24,8 +24,4 @@ >>> -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c07/c07_10.rst b/source/c07/c07_10.rst index bd38534..d1c4e5d 100644 --- a/source/c07/c07_10.rst +++ b/source/c07/c07_10.rst @@ -1,7 +1,7 @@ 7.10 让你的装饰器写得更轻松的神库 ================================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 本篇文章会为你介绍的是一个已经存在十三年,但是依旧不红的库 decorator,好像很少有人知道他的存在一样。 @@ -42,12 +42,12 @@ Python 中被装饰器装饰后的方法长得更像装饰前的方法。 有一些比较聪明的同学,会利用 PyCharm 来自动生成装饰器模板 -|image1| +.. image:: http://image.iswbm.com/image-20210420211718252.png 然后要使用的时候,直接敲入 ``deco`` 就会生成一个简单的生成器代码,提高编码的准备效率 -|image2| +.. image:: http://image.iswbm.com/deco.gif 2. 使用神库 ----------- @@ -246,10 +246,4 @@ deco 这么棒的一个库,推荐你使用起来。 -|image3| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/image-20210420211718252.png -.. |image2| image:: http://image.iswbm.com/deco.gif -.. |image3| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c07/c07_11.rst b/source/c07/c07_11.rst index ef595c2..4c3e87f 100644 --- a/source/c07/c07_11.rst +++ b/source/c07/c07_11.rst @@ -1,7 +1,7 @@ 7.11 国际化模块,让翻译更优雅 ============================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 国际化与本地化 -------------- @@ -73,8 +73,4 @@ gettext 是一套 GNU下的国际化工具。主要有工具: >>> _('hello world') '你好世界' -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c07/c07_12.rst b/source/c07/c07_12.rst index ca97650..fe6c265 100644 --- a/source/c07/c07_12.rst +++ b/source/c07/c07_12.rst @@ -1,7 +1,7 @@ 7.12 非常好用的调度模块 ======================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png Python 自带一个调度器模块\ ``sched``\ ,它能为你实现优先级队列/延迟队列和定时队列。 @@ -21,7 +21,7 @@ Python 代码运行以后,会卡在\ ``sch.run()``\ 这里,5秒钟以后执行\ ``do_work('iswbm')``\ ,运行效果如下图所示: -|image1| +.. image:: http://image.iswbm.com/20210521215217.png 其中,\ ``sch.enter()``\ 的第一个参数为延迟的时间,单位为秒,第二个参数为优先级,数字越小优先级越高。当两个任务同时要执行时,优先级高的先执行。但需要注意的是,如果你这样写: @@ -39,7 +39,7 @@ Python 那么先打印出来的是\ ``你好:python`` -|image2| +.. image:: http://image.iswbm.com/20210521215257.png 为什么这里优先级失效了?1的优先级大于2,应该先运行下面的才对啊。 @@ -65,7 +65,7 @@ Python 运行效果如下图所示: -|image3| +.. image:: http://image.iswbm.com/20210521215402.png ``sch.enterabs()``\ 的第一个参数是任务开始时间的时间戳,这是一个绝对时间,这个时间可以使用datetime模块来生成,或者其他你熟悉的方式。后面的参数和\ ``sch.enter()``\ 完全一样。 @@ -89,13 +89,6 @@ Python argument参数对应的元组存放普通参数,kwargs对应的字典存放带参数名的参数。 -本文来源于:公众号“未闻Code”,作者:kingname - -|image4| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20210521215217.png -.. |image2| image:: http://image.iswbm.com/20210521215257.png -.. |image3| image:: http://image.iswbm.com/20210521215402.png -.. |image4| image:: http://image.iswbm.com/20200607174235.png +本文来源于:公众号”未闻Code”,作者:kingname +.. image:: http://image.iswbm.com/20200607174235.png diff --git a/source/c07/c07_13.rst b/source/c07/c07_13.rst index 7efe641..fc996a9 100644 --- a/source/c07/c07_13.rst +++ b/source/c07/c07_13.rst @@ -1,7 +1,7 @@ 7.13 实现字典的点式操作 ======================= -|image0| +.. image:: http://image.iswbm.com/20200804124133.png 字典是 Python 中基础的数据结构之一,字典的使用,可以说是非常的简单粗暴,但即便是这样一个与世无争的数据结构,仍然有很多人 @@ -268,8 +268,4 @@ Munch 支持序列化为 JSON 或者 YAML 格式的字符串对象 也正是因为这样,原生字典至今还是不可替代的存在。 -|image1| - -.. |image0| image:: http://image.iswbm.com/20200804124133.png -.. |image1| image:: http://image.iswbm.com/20200607174235.png - +.. image:: http://image.iswbm.com/20200607174235.png