diff --git "a/Day16-20/16-20.Python\350\257\255\350\250\200\350\277\233\351\230\266.md" "b/Day16-20/16-20.Python\350\257\255\350\250\200\350\277\233\351\230\266.md"
index c815a6e4d..62dba5df3 100644
--- "a/Day16-20/16-20.Python\350\257\255\350\250\200\350\277\233\351\230\266.md"
+++ "b/Day16-20/16-20.Python\350\257\255\350\250\200\350\277\233\351\230\266.md"
@@ -566,7 +566,7 @@
@singleton
- class President():
+ class President:
"""总统(单例类)"""
pass
```
diff --git a/res/pycharm-activate.png b/res/pycharm-activate.png
deleted file mode 100644
index 89b8c33d3..000000000
Binary files a/res/pycharm-activate.png and /dev/null differ
diff --git a/res/pycharm-activation.png b/res/pycharm-activation.png
new file mode 100644
index 000000000..ca003b390
Binary files /dev/null and b/res/pycharm-activation.png differ
diff --git a/res/pycharm-comm-django-1.png b/res/pycharm-comm-django-1.png
deleted file mode 100644
index d71b8fb99..000000000
Binary files a/res/pycharm-comm-django-1.png and /dev/null differ
diff --git a/res/pycharm-comm-django-2.png b/res/pycharm-comm-django-2.png
deleted file mode 100644
index 4a378184c..000000000
Binary files a/res/pycharm-comm-django-2.png and /dev/null differ
diff --git a/res/pycharm-comm-django-3.png b/res/pycharm-comm-django-3.png
deleted file mode 100644
index c5168274a..000000000
Binary files a/res/pycharm-comm-django-3.png and /dev/null differ
diff --git a/res/pycharm-comm-django-4.png b/res/pycharm-comm-django-4.png
deleted file mode 100644
index 028199b00..000000000
Binary files a/res/pycharm-comm-django-4.png and /dev/null differ
diff --git a/res/pycharm-comm-django-5.png b/res/pycharm-comm-django-5.png
deleted file mode 100644
index 947145c4e..000000000
Binary files a/res/pycharm-comm-django-5.png and /dev/null differ
diff --git a/res/pycharm-comm-django-6.png b/res/pycharm-comm-django-6.png
deleted file mode 100644
index f6a5510a5..000000000
Binary files a/res/pycharm-comm-django-6.png and /dev/null differ
diff --git a/res/pycharm-comm-django-7.png b/res/pycharm-comm-django-7.png
deleted file mode 100644
index 8a26afe10..000000000
Binary files a/res/pycharm-comm-django-7.png and /dev/null differ
diff --git a/res/pycharm-comm-django-8.png b/res/pycharm-comm-django-8.png
deleted file mode 100644
index 9813dbc77..000000000
Binary files a/res/pycharm-comm-django-8.png and /dev/null differ
diff --git a/res/pycharm-create-launcher-script.png b/res/pycharm-create-launcher-script.png
deleted file mode 100644
index dd5198885..000000000
Binary files a/res/pycharm-create-launcher-script.png and /dev/null differ
diff --git a/res/pycharm-create-launcher.png b/res/pycharm-create-launcher.png
new file mode 100644
index 000000000..9abef2e90
Binary files /dev/null and b/res/pycharm-create-launcher.png differ
diff --git a/res/pycharm-import-settings.png b/res/pycharm-import-settings.png
index 4684e3e22..dd07c5da8 100644
Binary files a/res/pycharm-import-settings.png and b/res/pycharm-import-settings.png differ
diff --git a/res/pycharm-install-plugins.png b/res/pycharm-install-plugins.png
new file mode 100644
index 000000000..530fb5a14
Binary files /dev/null and b/res/pycharm-install-plugins.png differ
diff --git a/res/pycharm-installation.png b/res/pycharm-installation.png
new file mode 100644
index 000000000..00bde7277
Binary files /dev/null and b/res/pycharm-installation.png differ
diff --git a/res/pycharm-new-project.png b/res/pycharm-new-project.png
deleted file mode 100644
index 70801a655..000000000
Binary files a/res/pycharm-new-project.png and /dev/null differ
diff --git a/res/pycharm-plugins.png b/res/pycharm-plugins.png
deleted file mode 100644
index 4a2eb1dae..000000000
Binary files a/res/pycharm-plugins.png and /dev/null differ
diff --git a/res/pycharm-prof-django-2.png b/res/pycharm-prof-django-2.png
deleted file mode 100644
index 3b5d27327..000000000
Binary files a/res/pycharm-prof-django-2.png and /dev/null differ
diff --git a/res/pycharm-prof-django-3.png b/res/pycharm-prof-django-3.png
deleted file mode 100644
index 2496deb75..000000000
Binary files a/res/pycharm-prof-django-3.png and /dev/null differ
diff --git a/res/pycharm-project-wizard.png b/res/pycharm-project-wizard.png
new file mode 100644
index 000000000..e674dd4c8
Binary files /dev/null and b/res/pycharm-project-wizard.png differ
diff --git a/res/pycharm-run-result.png b/res/pycharm-run-result.png
new file mode 100644
index 000000000..321339ab3
Binary files /dev/null and b/res/pycharm-run-result.png differ
diff --git a/res/pycharm-set-ui-theme.png b/res/pycharm-set-ui-theme.png
deleted file mode 100644
index 4e5a4ea76..000000000
Binary files a/res/pycharm-set-ui-theme.png and /dev/null differ
diff --git a/res/pycharm-ui-themes.png b/res/pycharm-ui-themes.png
new file mode 100644
index 000000000..ceda97525
Binary files /dev/null and b/res/pycharm-ui-themes.png differ
diff --git a/res/pycharm-welcome.png b/res/pycharm-welcome.png
index 19d3a23d0..30a0ec3d2 100644
Binary files a/res/pycharm-welcome.png and b/res/pycharm-welcome.png differ
diff --git a/res/pycharm-workspace.png b/res/pycharm-workspace.png
index 28a4faca6..fac84a453 100644
Binary files a/res/pycharm-workspace.png and b/res/pycharm-workspace.png differ
diff --git "a/\347\216\251\350\275\254PyCharm.md" "b/\347\216\251\350\275\254PyCharm.md"
index cf74f5dca..decf9752b 100644
--- "a/\347\216\251\350\275\254PyCharm.md"
+++ "b/\347\216\251\350\275\254PyCharm.md"
@@ -2,94 +2,104 @@
PyCharm是由JetBrains公司开发的提供给Python专业的开发者的一个集成开发环境,它最大的优点是能够大大提升Python开发者的工作效率,为开发者集成了很多用起来非常顺手的功能,包括代码调试、高亮语法、代码跳转、智能提示、自动补全、单元测试、版本控制等等。此外,PyCharm还提供了对一些高级功能的支持,包括支持基于Django框架的Web开发。
-### PyCharm的安装
+### PyCharm的下载和安装
-可以在[JetBrains公司的官方网站]()找到PyCharm的[下载链接](https://www.jetbrains.com/pycharm/download/),有两个可供下载的版本一个是社区版一个是专业版,社区版在[Apache许可证](https://zh.wikipedia.org/wiki/Apache%E8%AE%B8%E5%8F%AF%E8%AF%81)下发布,专业版在专用许可证下发布(需要购买授权下载后可试用30天),其拥有许多额外功能。安装PyCharm需要有JRE(Java运行时环境)的支持,如果没有可以在安装过程中选择在线下载安装。
+可以在[JetBrains公司的官方网站]()找到PyCharm的[下载链接](https://www.jetbrains.com/pycharm/download/),有两个可供下载的版本,一个是社区版(PyCharm CE),一个是专业版(PyCharm Professional)。社区版在Apache许可证下发布,可以免费使用;专业版在专用许可证下发布,需要购买授权后才能使用,但新用户可以试用30天。很显然,专业版提供了更为强大的功能和对企业级开发的各种支持,但是对于初学者来说,社区版已经足够强大和好用了。安装PyCharm只需要直接运行下载的安装程序,然后持续的点击“下一步”就可以啦。下面是我在Windows系统下安装PyCharm的截图。
-> 说明:如果你是一名学生,希望购买PyCharm来使用,可以看看[教育优惠官方申请指南](https://sales.jetbrains.com/hc/zh-cn/articles/207154369)。
+
### 首次使用的设置
-第一次使用PyCharm时,会有一个导入设置的向导,如果之前没有使用PyCharm或者没有保存过设置的就直接选择“Do not import settings”进入下一步即可。
+第一次使用PyCharm时,会有一个导入设置的向导,如果之前没有使用PyCharm或者没有保存过设置的就直接选择“Do not import settings”进入下一步即可,下面是我在macOS系统下第一个使用PyCharm时的截图。

-专业版的PyCharm是需要激活的,**强烈建议为优秀的软件支付费用**,如果不用做商业用途,我们可以暂时选择试用30天或者使用社区版的PyCharm。
+专业版的PyCharm是需要激活的,**强烈建议大家在条件允许的情况下支付费用来支持优秀的产品**,如果不用做商业用途或者不需要使用PyCharm的高级功能,我们可以暂时选择试用30天或者使用社区版的PyCharm。如果你是一名学生,希望购买PyCharm来使用,可以看看[教育优惠官方申请指南](https://sales.jetbrains.com/hc/zh-cn/articles/207154369)。
-
+
接下来是选择UI主题,这个可以根据个人喜好进行选择。
-
+
再接下来是创建可以在终端(命令行)中使用PyCharm项目的启动脚本,当然也可以直接跳过这一步。
-
+
然后可以选择需要安装哪些插件,我们可以暂时什么都不安装等需要的时候再来决定。
-
+
+
+最后点击上图右下角的“Start using PyCharm”就可以开始使用PyCharm了。
### 用PyCharm创建项目
-点击上图中的“Start using PyCharm”按钮就可以开始使用PyCharm啦,首先来到的是一个欢迎页,在欢迎页上我们可以选择“创建新项目”、“打开已有项目”和“从版本控制系统中检出项目”。
+启动PyCharm之后会来到一个欢迎页,在欢迎页上我们可以选择“创建新项目”(Create New Project)、“打开已有项目”(Open)和“从版本控制系统中检出项目”(Get from Version Control)。

-如果选择了“Create New Project”来创建新项目就会打一个创建项目的向导页。
+如果选择了“Create New Project”来创建新项目就会打一个创建项目的向导页。下图所示是PyCharm专业版创建新项目的向导页,可以看出专业版支持的项目类型非常的多,而社区版只能创建纯Python项目(Pure Python),没有这一系列的选项。
-
+
-在如上图所示的界面中,我们可以选择创建项目的模板,包括了纯Python项目、基于各种不同框架的Web项目、Web前端项目、跨平台项目等各种不同的项目模板。如果选择Python的项目,那么有一个非常重要的设定是选择“New environment…”(创建新的虚拟环境)还是使用“Existing Interpreter”(已经存在的解释器)。前者肯定是更好的选择,因为新的虚拟环境不会对系统环境变量中配置的Python环境造成影响,简单举个例子就是你在虚拟环境下安装或者更新了任何三方库,它并不会对系统原有的Python解释器造成任何的影响,但代价是需要额外的存储空间来建立这个虚拟环境。
+接下来,我们要为项目创建专属的虚拟环境,每个Python项目最好都在自己专属的虚拟环境中运行,因为每个项目对Python解释器和三方库的需求并不相同,虚拟环境对不同的项目进行了隔离。在上图所示的界面在,我们可以选择新建虚拟环境(New environment using Virtualenv),这里的“Virtualenv”是PyCharm默认选择的创建虚拟环境的工具,我们就保留这个默认的选项就可以了。
-项目创建完成后就可以开始新建各种文件来书写Python代码了。
+项目创建完成后就可以开始新建各种文件来书写Python代码了,如下图所示。左侧是项目浏览器,可以看到刚才创建的项目文件夹以及虚拟环境文件夹。我们可以在项目上点击鼠标右键,选择“New”,在选择“Python File”来创建Python代码文件,下图中我们创建了两个Python文件,分别是`poker_game.py`和`salary_system.py`。当然,如果愿意,也可以使用复制粘贴的方式把其他地方的Python代码文件复制到项目文件夹下。

-在工作窗口的右键菜单中可以找到“Run ...”和“Debug ...”菜单项,通过这两个菜单项我们就可以运行和调试我们的代码啦。建议关注一下菜单栏中的“Code”、“Refactor”和“Tools”菜单,这里面为编写Python代码提供了很多有用的帮助。
-
-### 创建Django项目
-
-#### 专业版
-
-PyCharm专业版提供了对Django、Flask、Google App Engine、web2py等Python Web框架以及SQL、UML、前端语言和框架、远程调试、虚拟化部署等功能的支持,如果使用PyCharm专业版,在创建项目时可以直接选择创建Django项目并设置模板语言以及放置模板页的文件夹。
-
-
-
-创建好项目之后,打开终端输入`pip list`命令,可以看到项目所需的依赖项已经安装好了,而且可以直接点击屏幕右上方的运行或调试按钮来直接运行Django项目。
-
-
-
-#### 社区版
-
-PyCharm社区版只能创建Python项目,如果项目中需要Django的支持,可以自行安装依赖库并创建Django项目。
+在工作窗口点击鼠标右键可以在上下文菜单中找到“Run”选项,例如要运行`salary_system.py`文件,右键菜单会显示“Run 'salary_system'”选项,点击这个选项我们就可以运行Python代码啦,运行结果在屏幕下方的窗口可以看到,如下图所示。
-
+
-创建好Python项目之后,可以打开屏幕下方的终端(Terminal),并通过`pip install`安装Django项目的依赖项,可以通过`-i https://pypi.doubanio.com/simple`来指定下载依赖库的镜像仓库。
+### 常用操作和快捷键
-
+PyCharm为写Python代码提供了自动补全和高亮语法功能,这也是PyCharm作为集成开发环境(IDE)的基本功能。PyCharm的“File”菜单有一个“Settings”菜单项(macOS上是在“PyCharm”菜单的“Preferences…”菜单项),这个菜单项会打开设置窗口,可以在此处对PyCharm进行设置,如下图所示。
-当然也可以在项目的设置菜单中找到解释器配置,并选择要添加的依赖项。
+
-
+PyCharm的菜单项中有一个非常有用的“Code”菜单,菜单中提供了自动生成代码、自动补全代码、格式化代码、移动代码等选项,这些功能对开发者来说是非常有用的,大家可以尝试使用这些菜单项或者记住它们对应的快捷键,例如在macOS上,格式化代码这个菜单项对应的快捷键是`alt+command+L`。除此之外,“Refactor”菜单也非常有用,它提供了一些重构代码的选项。所谓重构是在不改变代码执行结果的前提下调整代码的结构,这也是资深程序员的一项重要技能。还有一个值得一提的菜单是“VCS”,VCS是“Version Control System”(版本控制系统)的缩写,这个菜单提供了对代码版本管理的支持。版本控制的知识会在其他的课程中为大家讲解。
-下面是搜索依赖项的界面,可以通过点击“Install Package”按钮来安装指定的依赖项;也可以通过点击“Manage Repositories”按钮来指定下载依赖项的仓库,国内用户推荐使用豆瓣镜像。
+下表列出了一些PyCharm中特别常用的快捷键,当然如果愿意,也可以通过设置窗口中“Keymap”菜单项自定义快捷键,PyCharm本身也针对不同的操作系统和使用习惯对快捷键进行了分组。
-
+| 快捷键 | 作用 |
+| --------------------------------------------- | -------------------------------------- |
+| `command + j` | 显示可用的代码模板 |
+| `command + b` | 查看函数、类、方法的定义 |
+| `ctrl + space` | 万能代码提示快捷键,一下不行按两下 |
+| `command + alt + l` | 格式化代码 |
+| `alt + enter` | 万能代码修复快捷键 |
+| `ctrl + /` | 注释/反注释代码 |
+| `shift + shift` | 万能搜索快捷键 |
+| `command + d` / `command + y` | 复制/删除一行代码 |
+| `command + shift + -` / `command + shift + +` | 折叠/展开所有代码 |
+| `F2` | 快速定位到错误代码 |
+| `command+ alt + F7` | 查看哪些地方用到了指定的函数、类、方法 |
-接下来可以在终端中输入`django-amdin startproject`指令来创建项目。
+> **说明**:Windows系统下如果使用PyCharm的默认设置,可以将上面的`command`键换成`ctrl`键即可,唯一的例外是`ctrl + space`那个快捷键,因为它跟Windows系统切换输入法的快捷键是冲突的,所以在Windows系统下没有与之对应的快捷键。
-
+### 常用操作和快捷键
-如果要运行项目,可以在终端中输入`python manage.py runserver`启动测试服务器。当然,也可以点击屏幕右上方的“Add Configuration”按钮,进入如下所示的配置界面,并点击窗口左上角的“+”来添加一个运行配置。
+PyCharm为写Python代码提供了自动补全和高亮语法功能,这也是PyCharm作为集成开发环境(IDE)的基本功能。PyCharm的“File”菜单有一个“Settings”菜单项(macOS上是在“PyCharm”菜单的“Preferences…”菜单项),这个菜单项会打开设置窗口,可以在此处对PyCharm进行设置,如下图所示。
-
+
-在配置窗口的右侧,指定要执行的脚本路径(Django项目的manage.py文件的位置)和运行参数(runserver),运行参数的后面还可以跟IP地址和端口。
+PyCharm的菜单项中有一个非常有用的“Code”菜单,菜单中提供了自动生成代码、自动补全代码、格式化代码、移动代码等选项,这些功能对开发者来说是非常有用的,大家可以尝试使用这些菜单项或者记住它们对应的快捷键,例如在macOS上,格式化代码这个菜单项对应的快捷键是`alt+command+L`。除此之外,“Refactor”菜单也非常有用,它提供了一些重构代码的选项。所谓重构是在不改变代码执行结果的前提下调整代码的结构,这也是资深程序员的一项重要技能。还有一个值得一提的菜单是“VCS”,VCS是“Version Control System”(版本控制系统)的缩写,这个菜单提供了对代码版本管理的支持。版本控制的知识会在其他的课程中为大家讲解。
-
+下表列出了一些PyCharm中特别常用的快捷键,当然如果愿意,也可以通过设置窗口中“Keymap”菜单项自定义快捷键,PyCharm本身也针对不同的操作系统和使用习惯对快捷键进行了分组。
-注意到窗口的右上角了吗?现在可以点击运行或调试按钮来启动测试服务器运行项目了。
+| 快捷键 | 作用 |
+| --------------------------------------------- | -------------------------------------- |
+| `command + j` | 显示可用的代码模板 |
+| `command + b` | 查看函数、类、方法的定义 |
+| `ctrl + space` | 万能代码提示快捷键,一下不行按两下 |
+| `command + alt + l` | 格式化代码 |
+| `alt + enter` | 万能代码修复快捷键 |
+| `ctrl + /` | 注释/反注释代码 |
+| `shift + shift` | 万能搜索快捷键 |
+| `command + d` / `command + y` | 复制/删除一行代码 |
+| `command + shift + -` / `command + shift + +` | 折叠/展开所有代码 |
+| `F2` | 快速定位到错误代码 |
+| `command+ alt + F7` | 查看哪些地方用到了指定的函数、类、方法 |
-
\ No newline at end of file
+> **说明**:Windows系统下如果使用PyCharm的默认设置,可以将上面的`command`键换成`ctrl`键即可,唯一的例外是`ctrl + space`那个快捷键,因为它跟Windows系统切换输入法的快捷键是冲突的,所以在Windows系统下没有与之对应的快捷键。
\ No newline at end of file
diff --git "a/\347\225\252\345\244\226\347\257\207/\347\247\237\346\210\277\347\275\221\351\241\271\347\233\256\346\216\245\345\217\243\346\226\207\346\241\243.md" "b/\347\225\252\345\244\226\347\257\207/\347\247\237\346\210\277\347\275\221\351\241\271\347\233\256\346\216\245\345\217\243\346\226\207\346\241\243.md"
index 159658cb1..2b3f57503 100644
--- "a/\347\225\252\345\244\226\347\257\207/\347\247\237\346\210\277\347\275\221\351\241\271\347\233\256\346\216\245\345\217\243\346\226\207\346\241\243.md"
+++ "b/\347\225\252\345\244\226\347\257\207/\347\247\237\346\210\277\347\275\221\351\241\271\347\233\256\346\216\245\345\217\243\346\226\207\346\241\243.md"
@@ -8,7 +8,7 @@
最后修改时间:
- 接口说明:登录成功后,会在`tb_user_token`表中保存或更新用户令牌(token)。
+ 接口说明:登录成功后,会生成或更新用户令牌(token)。
使用帮助:测试数据库中预设了四个可供使用的账号,如下表所示。
diff --git "a/\347\225\252\345\244\226\347\257\207/\351\202\243\344\272\233\345\271\264\346\210\221\344\273\254\350\270\251\350\277\207\347\232\204\351\202\243\344\272\233\345\235\221.md" "b/\347\225\252\345\244\226\347\257\207/\351\202\243\344\272\233\345\271\264\346\210\221\344\273\254\350\270\251\350\277\207\347\232\204\351\202\243\344\272\233\345\235\221.md"
index f9cd50d42..e8a92f0bc 100644
--- "a/\347\225\252\345\244\226\347\257\207/\351\202\243\344\272\233\345\271\264\346\210\221\344\273\254\350\270\251\350\277\207\347\232\204\351\202\243\344\272\233\345\235\221.md"
+++ "b/\347\225\252\345\244\226\347\257\207/\351\202\243\344\272\233\345\271\264\346\210\221\344\273\254\350\270\251\350\277\207\347\232\204\351\202\243\344\272\233\345\235\221.md"
@@ -7,7 +7,7 @@
- `is`比较的是两个整数对象的id值是否相等,也就是比较两个引用是否代表了内存中同一个地址。
- `==`比较的是两个整数对象的内容是否相等,使用`==`时其实是调用了对象的`__eq__()`方法。
-知道了`is`和`==`的区别之后,我们可以来看看下面的代码,了解Python中整数比较有哪些坑:
+知道了`is`和`==`的区别之后,我们可以来看看下面的代码,了解Python中整数比较有哪些坑,**以CPython解释器为例**,大家先看看下面的代码。
```Python
def main():
@@ -36,7 +36,7 @@ if __name__ == '__main__':
main()
```
-上面代码的部分运行结果如下图所示,出现这个结果的原因是Python出于对性能的考虑所做的一项优化。对于整数对象,Python把一些频繁使用的整数对象缓存起来,保存到一个叫`small_ints`的链表中,在Python的整个生命周期内,任何需要引用这些整数对象的地方,都不再重新创建新的对象,而是直接引用缓存中的对象。Python把频繁使用的整数对象的值定在[-5, 256]这个区间,如果需要这个范围的整数,就直接从`small_ints`中获取引用而不是临时创建新的对象。因为大于256或小于-5的整数不在该范围之内,所以就算两个整数的值是一样,但它们是不同的对象。
+上面代码的部分运行结果如下图所示。这个结果是因为CPython出于性能优化的考虑,把频繁使用的整数对象用一个叫`small_ints`的对象池缓存起来造成的。`small_ints`缓存的整数值被设定为`[-5, 256]`这个区间,也就是说,如果使用CPython解释器,在任何引用这些整数的地方,都不需要重新创建`int`对象,而是直接引用缓存池中的对象。如果整数不在该范围内,那么即便两个整数的值相同,它们也是不同的对象。

@@ -58,7 +58,7 @@ if __name__ == "__main__":
main()
```
-程序的执行结果已经用注释写在代码上了。够坑吧!看上去`a`、`b`和`c`的值都是一样的,但是`is`运算的结果却不一样。为什么会出现这样的结果,首先我们来说说Python程序中的代码块。所谓代码块是程序的一个最小的基本执行单位,一个模块文件、一个函数体、一个类、交互式命令中的单行代码都叫做一个代码块。上面的代码由两个代码块构成,`a = 257`是一个代码块,`main`函数是另外一个代码块。Python内部为了进一步提高性能,凡是在一个代码块中创建的整数对象,如果值不在`small_ints`缓存范围之内,但在同一个代码块中已经存在一个值与其相同的整数对象了,那么就直接引用该对象,否则创建一个新的对象出来,这条规则对不在`small_ints`范围的负数并不适用,对负数值浮点数也不适用,但对非负浮点数和字符串都是适用的,这一点读者可以自行证明。所以 `b is c`返回了`True`,而`a`和`b`不在同一个代码块中,虽然值都是257,但却是两个不同的对象,`is`运算的结果自然是`False`了。
+程序的执行结果已经用注释写在代码上了。够坑吧!看上去`a`、`b`和`c`的值都是一样的,但是`is`运算的结果却不一样。为什么会出现这样的结果,首先我们来说说Python程序中的代码块。所谓代码块是程序的一个最小的基本执行单位,一个模块文件、一个函数体、一个类、交互式命令中的单行代码都叫做一个代码块。上面的代码由两个代码块构成,`a = 257`是一个代码块,`main`函数是另外一个代码块。CPython内部为了进一步提高性能,凡是在一个代码块中创建的整数对象,如果值不在`small_ints`缓存范围之内,但在同一个代码块中已经存在一个值与其相同的整数对象了,那么就直接引用该对象,否则创建一个新的对象出来,在早些时候的CPython中,这条规则对负数并不适用,但对非负整数、浮点数和字符串都是适用的,这一点读者可以自行证明。所以 `b is c`返回了`True`,而`a`和`b`不在同一个代码块中,虽然值都是257,但却是两个不同的对象,`is`运算的结果自然是`False`了。
为了验证刚刚的结论,我们可以借用`dis`模块(听名字就知道是进行反汇编的模块)从字节码的角度来看看这段代码。如果不理解什么是字节码,可以先看看[《谈谈 Python 程序的运行原理》]((http://www.cnblogs.com/restran/p/4903056.html))这篇文章。可以先用`import dis`导入`dis`模块并按照如下所示的方式修改代码。
```Python