Skip to content

two #1

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 35 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
1a52b2a
更新 Django 翻译文章
walter201230 Apr 25, 2018
319ad74
更新失效的视频地址
walter201230 Jul 4, 2018
2add141
修改目录结构
walter201230 Jul 20, 2018
c9ba8dd
删除代码模块
walter201230 Jul 6, 2019
a17e0bf
新增章节:为什么学 Python?
walter201230 Jul 6, 2019
5d9caf3
新增章节:为什么学Python?
walter201230 Jul 6, 2019
087b0fc
Update codeSpecification_first.md
bugmaker2 Aug 3, 2019
79937c6
修改 「第一个 Python 程序」章节内容
walter201230 Aug 9, 2019
3ef01ba
重新修改文章 0 - 5 章
walter201230 Sep 1, 2019
54be4f5
no message
walter201230 Sep 1, 2019
7a2e614
更新list.remove,更改5中竟然为既然
wwivywwivy Sep 25, 2019
95ad977
重新修订 6 - 8 章节
walter201230 Oct 9, 2019
d7a75da
所有基础文章修改完毕
walter201230 Oct 14, 2019
1ee3b7e
修改 gitbook 的目录
walter201230 Oct 14, 2019
4e6621b
修改网友提出的错误,元组 `for x in (1, 2, 3): print x,` 改为 `for x in (1, 2, 3): …
walter201230 Oct 15, 2019
81aef4d
Merge pull request #24 from wwivywwivy/wwivywwivy-patch-1
walter201230 Oct 26, 2019
eb1acf2
新增文章:自己搭建ss:ssr 服务器
walter201230 Oct 26, 2019
13e6a8c
略加润色,“是或关系”=>"是或(OR)关系"
luo-zi Nov 26, 2019
a754768
Merge pull request #30 from Zeng-JianWen/patch-1
walter201230 Dec 6, 2019
e46ad76
Merge pull request #1 from TwoWater/master
KaylaZhou Dec 17, 2019
253d5e7
Merge pull request #31 from KaylaZhou/master
walter201230 Dec 17, 2019
3834ef4
list关键字错误
0xMario27 Feb 2, 2020
e35ed12
Update 1.md
IbenZhou Mar 8, 2020
8349428
Update 3.md
IbenZhou Mar 8, 2020
595017b
1、解决 Article/pythonBasis/python8/2.md 不能显示图片问题
walter201230 Mar 9, 2020
979a6a5
Merge pull request #44 from IBen-dev/master
walter201230 Mar 9, 2020
2618ad5
Merge pull request #38 from 0xfreeman/master
walter201230 Mar 9, 2020
7eb243f
Merge pull request #22 from Tqlsdlddw/patch-1
walter201230 Mar 9, 2020
8d2dda9
修改 README.md 说明该
walter201230 Jul 28, 2020
2165e2d
Merge branch 'master' of github.com:TwoWater/Python
walter201230 Jul 28, 2020
5cce491
更新 readme
walter201230 Sep 7, 2020
6ef641c
更新 readme
walter201230 Sep 7, 2020
ddc9a67
no message
walter201230 Sep 15, 2020
5b2f515
no message
walter201230 Sep 15, 2020
39b1d5b
no message
walter201230 Sep 15, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
429 changes: 429 additions & 0 deletions Article/Linux/Linux命令-文件管理模块.md

Large diffs are not rendered by default.

38 changes: 38 additions & 0 deletions Article/Linux/Linux命令-用户,权限管理模块.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
## 用户,权限管理

用户是 Unix/Linux 系统工作中重要的一环,用户管理包括用户与组账号的管理。

在 Unix/Linux 系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限。

Unix/Linux 系统中的 root 账号通常用于系统的维护和管理,它对 Unix/Linux 操作系统的所有部分具有不受限制的访问权限。

在 Unix/Linux 安装的过程中,系统会自动创建许多用户账号,而这些默认的用户就称为“标准用户”。

在大多数版本的 Unix/Linux 中,都不推荐直接使用 root 账号登录系统。

#### 1.多用户系统

> 什么是多用户呢?
「多用户」指允许多个用户(逻辑上的账户),同时使用的操作系统或应用软件。

而 Linux 就是多用户操作系统,允许多个用户通过远程登录的方式访问一台机器并同时进行使用,相互之间互不影响。

> 那我们经常使用的 Windows 是不是多用户操作系统呢?
Windows 系列的话,Windows 1.x、2.x、3.x(不含NT 3.x)、9x、Me 均为单用户操作系统,其中 9x 虽然有多用户的雏形但基本形同虚设,Windows Me 是最后一个非 NT 内核的 Windows 系统,同样不具备实用性的多用户设计。

有人会问, Windows 不是可以创建多个账号吗?为什么不是多用户操作系统呢?

其实 Windows 的多用户不是真正的多用户,就好比你在家里远程登录了你公司的电脑,你公司的电脑会立刻进入到锁屏状态,而且被人是不可以操作的。这就说明不能多账号同时操作一台电脑了。











43 changes: 43 additions & 0 deletions Article/PythonBasis/python0/WhyStudyPython.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
### Python 越来越火爆

Python 在诞生之初,因为其功能不好,运转功率低,不支持多核,根本没有并发性可言,在计算功能不那么好的年代,一直没有火爆起来,甚至很多人根本不知道有这门语言。

随着时代的发展,物理硬件功能不断提高,而软件的复杂性也不断增大,开发效率越来越被企业重视。因此就有了不一样的声音,在软件开发的初始阶段,性能并没有开发效率重要,没必然为了节省不到 1ms 的时间却让开发量增加好几倍,这样划不过来。也就是开发效率比机器效率更为重要,那么 Python 就逐渐得到越来越多开发者的亲睐了。

在 12-14 年,云计算升温,大量创业公司和互联网巨头挤进云计算领域,而最著名的云核算开源渠道 OpenStack 就是基于 Python 开发的。

随后几年的备受关注的人工智能,机器学习首选开发语言也是 Python。

至此,Python 已经成为互联网开发的焦点。在「Top 10 的编程语言走势图」可以看到,Python 已经跃居第三位,而且在 2017 年还成为了最受欢迎的语言。

![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-07-06-084240.png)

### Python 开发薪资高

Python 开发人员是收入最高的开发人员之一,特别是在数据科学,机器学习和 Web 开发方面。

在北上广深一线城市上,Python 开发的薪资都达到了 2w+ 。

![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-07-06-090549.jpg)

### Python 容易入门且功能强大

如果你是一名初学者,学习 Python 就是你最好的选择,因为它容易学,功能强大,很容易就能构建 Web 应用,非常适合初学者作为入门的开发语言。

Python 还一度被爆纳入高考,收编到小学课本。

![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-07-06-091204.png)

如果你有一定的编程语言基础,学习 Python 也是不错的选择,因为 Python 很可能就是未来开发的主流方向,多学一门语言,多一个防身技能。而且 Python 有强大的功能库,能非常快速的开发工具,为你的本职开发工作提供护航。












9 changes: 9 additions & 0 deletions Article/PythonBasis/python1/IDE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
# 四、集成开发环境(IDE): PyCharm #

我本人一直是建议在学习周期使用文本编辑器或者是[Sublime Text](http://www.sublimetext.com/) 这个工具来写 Python 程序的,因为这样有利于我们了解整个流程。

当然,如果你有一定的编程基础,是可以使用集成的开发环境的,这样可以提高效率。这时,你可以选择 PyCharm ,PyCharm 是由 JetBrains 打造的一款 Python IDE,支持 macOS、 Windows、 Linux 系统。

PyCharm 下载地址 : [https://www.jetbrains.com/pycharm/download/](https://www.jetbrains.com/pycharm/download/)


68 changes: 68 additions & 0 deletions Article/PythonBasis/python1/Installation.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
# 二、Python 的安装 #

因为 Python 是跨平台的,它可以运行在 Windows、Mac 和各种 Linux/Unix 系统上。目前,Python 有两个版本,一个是 2.x 版,一个是 3.x版,这两个版本是不兼容的。本草根安装的是 3.6.1 版本的。

至于在哪里下载,草根我建议大家最好直接官网下载,随时下载下来的都是最新版本。官网地址:[https://www.python.org/](https://www.python.org/)

## 1、windows 系统下安装配置 ##

如果是 windows 系统,下载完后,直接安装,不过这里记得勾上Add Python 3.6 to PATH,然后点 「Install Now」 即可完成安装。

这里要注意了,记得把「Add Python 3.6 to Path」勾上,勾上之后就不需要自己配置环境变量了,如果没勾上,就要自己手动配置。

![Python安装.png](http://upload-images.jianshu.io/upload_images/2136918-2bf6591f0a12e80b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

如果你一时手快,忘记了勾上 「Add Python 3.6 to Path」,那也不要紧,只需要手动配置一下环境变量就好了。

在命令提示框中 cmd 上输入 :

```
path=%path%;C:\Python
```

特别特别注意: `C:\Python` 是 Python 的安装目录,如果你的安装目录是其他地方,就得填上你对应的目录。

安装完成后,打开命令提示符窗口,敲入 python 后,出现下面的情况,证明 Python 安装成功了。

![运行python.png](http://upload-images.jianshu.io/upload_images/2136918-817c22f802e8cfce.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

而你看到提示符 `>>>` 就表示我们已经在 Python 交互式环境中了,可以输入任何 Python 代码,回车后会立刻得到执行结果。


## 2、Mac 系统下安装配置 ##

MAC 系统一般都自带有 Python2.x 版本的环境,不过现在都不用 2.x 的版本了,所以建议你在 https://www.python.org/downloads/mac-osx/ 上下载最新版安装。

安装完成之后,如何配置环境变量呢?

先查看当前环境变量:

```
echo $PATH
```

然后打开 ``` ~/.bash_profile(没有请新建) ```

```
vi ~/.bash_profile
```

我装的是 Python3.7 ,Python 执行路径为:`/Library/Frameworks/Python. Framework/Versions/3.7/bin` 。于是写入

```
export PATH="/Library/Frameworks/Python. Framework/Versions/3.7/bin:$PATH"
```

![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-07-22-084149.png)

最后保存退出,激活运行一下文件:

```
source ~/.bash_profile
```






Original file line number Diff line number Diff line change
Expand Up @@ -6,11 +6,11 @@ Python 是著名的“龟叔” Guido van Rossum 在 1989 年圣诞节期间,

这是 2017 年 2 月编程语言排行榜 TOP20 榜单:

![2 月编程语言排行榜 TOP20 榜单.png](http://upload-images.jianshu.io/upload_images/2136918-f7fc786f001cbfc0?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![2 月编程语言排行榜 TOP20 榜单.png](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-07-22-080118.jpg)

还有就是 Top 10 编程语言 TIOBE 指数走势:

![Top 10 编程语言 TIOBE 指数走势.png](http://upload-images.jianshu.io/upload_images/2136918-2714dba010ea5d75.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-07-22-080145.jpg)

总的来说,这几种编程语言各有千秋,但不难看出,最近几年 Python 的发展非常的快,特别最近流行的机器学习,数据分析,更让 python 快速的发展起来。

Expand All @@ -21,3 +21,5 @@ Python 是高级编程语言,它有一个特点就是能快速的开发。Pyth
第一个缺点就是运行速度慢,和C程序相比非常慢,因为Python是解释型语言,你的代码在执行时会一行一行地翻译成CPU能理解的机器码,这个翻译过程非常耗时,所以很慢。而C程序是运行前直接编译成CPU能执行的机器码,所以非常快。

第二个缺点就是代码不能加密。如果要发布你的 Python 程序,实际上就是发布源代码。像 JAVA , C 这些编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。


8 changes: 8 additions & 0 deletions Article/PythonBasis/python1/Preface.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
# 前言 #

每个编程语言的学习,第一个程序都是先向世界问好,Python 也不例外,这节我们先写下第一个 Python 程序 —— Hello World 。

# 目录 #

![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-08-16-%E7%AC%AC%E4%B8%80%E4%B8%AA%20Python%20%E7%A8%8B%E5%BA%8F.png)

28 changes: 28 additions & 0 deletions Article/PythonBasis/python1/The_first_procedure.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
# 三、第一个 Python 程序 #

好了,说了那么多,现在我们可以来写一下第一个 Python 程序了。

一开始写 Python 程序,个人不太建议用专门的工具来写,不方便熟悉语法,所以这里我先用 [Sublime Text](http://www.sublimetext.com/) 来写,后期可以改为用 PyCharm 。

第一个 Python 程序当然是打印 Hello Python 啦。

如果你没编程经验,什么都不懂,没关系,第一个 Python 程序,只要跟着做,留下个印象,尝试一下就好。

新建一个文件,命名为 `HelloPython.py` , 注意,这里是以 `.py` 为后缀的文件。

然后打开文件,输入 `print('Hello Python')`


![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-08-17-075948.jpg)


最后就可以打开命令行窗口,把当前目录切换到 HelloPython.py 所在目录,就可以运行这个程序了,下面就是运行的结果。


![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-08-17-075956.jpg)


当然,如果你是使用 [Sublime Text](http://www.sublimetext.com/) ,并且在安装 Python 的时候配置好了环境变量,直接按 Ctrl + B 就可以运行了,运行结果如下:

![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-08-17-080018.jpg)

12 changes: 9 additions & 3 deletions Article/python10/1.md → Article/PythonBasis/python10/1.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# 一、Python 的 Magic Method #

在 Python 中,所有以 "__" 双下划线包起来的方法,都统称为"魔术方法"。比如我们接触最多的 `__init__` 。魔术方法有什么作用呢?
在 Python 中,所有以 "__" 双下划线包起来的方法,都统称为"魔术方法"。比如我们接触最多的 `__init__` 。

魔术方法有什么作用呢?

使用这些魔术方法,我们可以构造出优美的代码,将复杂的逻辑封装成简单的方法。

Expand All @@ -22,6 +24,10 @@ if __name__ == '__main__':

输出的结果:

![Python 类的魔术方法](http://p1ceh5usj.bkt.clouddn.com/Python%20%E7%B1%BB%E7%9A%84%E9%AD%94%E6%9C%AF%E6%96%B9%E6%B3%95.png)
```
['__class__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__weakref__']
```

可以看到,一个类的魔术方法还是挺多的,不过我们只需要了解一些常见和常用的魔术方法就好了。


可以看到,一个类的魔术方法还是挺多的,截图也没有截全,不过我们只需要了解一些常见和常用的魔术方法就好了。
12 changes: 9 additions & 3 deletions Article/python10/2.md → Article/PythonBasis/python10/2.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
# 二、构造(`__new__`)和初始化(`__init__`) #

通过上一篇的内容,我们已经知道定义一个类时,我们经常会通过 `__init__(self)` 的方法在实例化对象的时候,对属性进行设置。比如下面的例子:
通过之前的学习,我们已经知道定义一个类时,我们经常会通过 `__init__(self)` 的方法在实例化对象的时候,对属性进行设置。

比如下面的例子:

```python
#!/usr/bin/env python3
Expand All @@ -14,9 +16,11 @@ class User(object):
user=User('两点水',23)
```

实际上,创建一个类的过程是分为两步的,一步是创建类的对象,还有一步就是对类进行初始化。`__new__` 是用来创建类并返回这个类的实例, 而`__init__` 只是将传入的参数来初始化该实例.`__new__` 在创建一个实例的过程中必定会被调用,但 `__init__` 就不一定,比如通过pickle.load 的方式反序列化一个实例时就不会调用 `__init__` 方法。
实际上,创建一个类的过程是分为两步的,一步是创建类的对象,还有一步就是对类进行初始化。

`__new__` 是用来创建类并返回这个类的实例, 而`__init__` 只是将传入的参数来初始化该实例.`__new__` 在创建一个实例的过程中必定会被调用,但 `__init__` 就不一定,比如通过 pickle.load 的方式反序列化一个实例时就不会调用 `__init__` 方法。

![Python类创建的过程](http://upload-images.jianshu.io/upload_images/2136918-a2b39b078cc81841?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-10-14-Python%E7%B1%BB%E5%88%9B%E5%BB%BA%E7%9A%84%E8%BF%87%E7%A8%8B.png)

`def __new__(cls)` 是在 `def __init__(self)` 方法之前调用的,作用是返回一个实例对象。还有一点需要注意的是:`__new__` 方法总是需要返回该类的一个实例,而 `__init__` 不能返回除了 `None` 的任何值

Expand Down Expand Up @@ -57,3 +61,5 @@ if __name__ == '__main__':
其实在实际开发中,很少会用到 `__new__` 方法,除非你希望能够控制类的创建。通常讲到 `__new__` ,都是牵扯到 `metaclass`(元类)的。

当然当一个对象的生命周期结束的时候,析构函数 `__del__` 方法会被调用。但是这个方法是 Python 自己对对象进行垃圾回收的。


File renamed without changes.
18 changes: 15 additions & 3 deletions Article/python10/4.md → Article/PythonBasis/python10/4.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,20 @@
# 四、对象的描述器 #

一般来说,一个描述器是一个有“绑定行为”的对象属性 (object attribute),它的访问控制被描述器协议方法重写。这些方法是 `__get__()`, `__set__()` , 和 `__delete__()` 。有这些方法的对象叫做描述器。
一般来说,一个描述器是一个有“绑定行为”的对象属性 (object attribute),它的访问控制被描述器协议方法重写。

默认对属性的访问控制是从对象的字典里面 (`__dict__`) 中获取 (get) , 设置 (set) 和删除 (delete) 。举例来说, `a.x` 的查找顺序是, `a.__dict__['x']` , 然后 `type(a).__dict__['x']` , 然后找 `type(a)` 的父类 ( 不包括元类 (metaclass) ).如果查找到的值是一个描述器, Python 就会调用描述器的方法来重写默认的控制行为。这个重写发生在这个查找环节的哪里取决于定义了哪个描述器方法。注意, 只有在新式类中时描述器才会起作用。在之前的篇节中已经提到新式类和旧式类的,有兴趣可以查看之前的篇节来看看,至于新式类最大的特点就是所有类都继承自 type 或者 object 的类
这些方法是 `__get__()`, `__set__()` , 和 `__delete__()`

在面向对象编程时,如果一个类的属性有相互依赖的关系时,使用描述器来编写代码可以很巧妙的组织逻辑。在 Django 的 ORM 中,models.Model中的 InterField 等字段, 就是通过描述器来实现功能的。
有这些方法的对象叫做描述器。

默认对属性的访问控制是从对象的字典里面 (`__dict__`) 中获取 (get) , 设置 (set) 和删除 (delete) 。

举例来说, `a.x` 的查找顺序是, `a.__dict__['x']` , 然后 `type(a).__dict__['x']` , 然后找 `type(a)` 的父类 ( 不包括元类 (metaclass) ).如果查找到的值是一个描述器, Python 就会调用描述器的方法来重写默认的控制行为。

这个重写发生在这个查找环节的哪里取决于定义了哪个描述器方法。

注意, 只有在新式类中时描述器才会起作用。在之前的篇节中已经提到新式类和旧式类的,有兴趣可以查看之前的篇节来看看,至于新式类最大的特点就是所有类都继承自 type 或者 object 的类。

在面向对象编程时,如果一个类的属性有相互依赖的关系时,使用描述器来编写代码可以很巧妙的组织逻辑。在 Django 的 ORM 中,models.Model 中的 InterField 等字段, 就是通过描述器来实现功能的。

我们先看下下面的例子:

Expand Down Expand Up @@ -129,3 +139,5 @@ if __name__ == '__main__':
我们只是修改了 meter ,并且将其赋值成为 int ,但 foot 也修改了。这是 `__set__` 发挥了作用.

描述器对象 (Meter、Foot) 不能独立存在, 它需要被另一个所有者类 (Distance) 所持有。描述器对象可以访问到其拥有者实例的属性,比如例子中 Foot 的 `instance.meter` 。


10 changes: 8 additions & 2 deletions Article/python10/5.md → Article/PythonBasis/python10/5.md
Original file line number Diff line number Diff line change
@@ -1,8 +1,12 @@
# 五、自定义容器(Container) #

经过之前编章的介绍,我们知道在 Python 中,常见的容器类型有: dict, tuple, list, string。其中也提到过可容器和不可变容器的概念。其中 tuple, string 是不可变容器,dict, list 是可变容器。 可变容器和不可变容器的区别在于,不可变容器一旦赋值后,不可对其中的某个元素进行修改。当然具体的介绍,可以看回之前的文章,有图文介绍。
经过之前编章的介绍,我们知道在 Python 中,常见的容器类型有: dict, tuple, list, string。其中也提到过可容器和不可变容器的概念。其中 tuple, string 是不可变容器,dict, list 是可变容器。

那么这里先提出一个问题,这些数据结构就够我们开发使用吗?不够的时候,或者说有些特殊的需求不能单单只使用这些基本的容器解决的时候,该怎么办呢?
可变容器和不可变容器的区别在于,不可变容器一旦赋值后,不可对其中的某个元素进行修改。当然具体的介绍,可以看回之前的文章,有图文介绍。

那么这里先提出一个问题,这些数据结构就够我们开发使用吗?

不够的时候,或者说有些特殊的需求不能单单只使用这些基本的容器解决的时候,该怎么办呢?

这个时候就需要自定义容器了,那么具体我们该怎么做呢?

Expand Down Expand Up @@ -78,3 +82,5 @@ class FunctionalList:
return self.values[:n]

```


8 changes: 6 additions & 2 deletions Article/python10/6.md → Article/PythonBasis/python10/6.md
Original file line number Diff line number Diff line change
Expand Up @@ -107,6 +107,10 @@ num1 >= num2 ? --------> False
|`__xor__(self, other)`|实现了位操作 `^`|


最后,如果对本文感兴趣的,可以关注下公众号:
可以关注下公众号:

这个公号可能很少更新,但是一更新,就是把整理的一系列文章更新上去。

![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-10-14-WechatIMG697.jpeg)


![公众号](http://twowater.com.cn/images/20171204192251900.gif)
11 changes: 11 additions & 0 deletions Article/PythonBasis/python10/Preface.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# 前言 #

有时候修改文章,真的修改到想死。真的很耗时间,很烦的。

好吧,每次都是安慰自己,快完结了,快更新完了。

# 目录 #

![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-10-14-Python%20%E7%9A%84%20Magic%20Method.png)


Loading