Skip to content

Commit 18bb116

Browse files
authored
Merge pull request #2 from wyaopeng/remote
Remote
2 parents 2add141 + 39b1d5b commit 18bb116

File tree

199 files changed

+3368
-5696
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

199 files changed

+3368
-5696
lines changed
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
## 用户,权限管理
2+
3+
用户是 Unix/Linux 系统工作中重要的一环,用户管理包括用户与组账号的管理。
4+
5+
在 Unix/Linux 系统中,不论是由本机或是远程登录系统,每个系统都必须拥有一个账号,并且对于不同的系统资源拥有不同的使用权限。
6+
7+
Unix/Linux 系统中的 root 账号通常用于系统的维护和管理,它对 Unix/Linux 操作系统的所有部分具有不受限制的访问权限。
8+
9+
在 Unix/Linux 安装的过程中,系统会自动创建许多用户账号,而这些默认的用户就称为“标准用户”。
10+
11+
在大多数版本的 Unix/Linux 中,都不推荐直接使用 root 账号登录系统。
12+
13+
#### 1.多用户系统
14+
15+
> 什么是多用户呢?
16+
17+
「多用户」指允许多个用户(逻辑上的账户),同时使用的操作系统或应用软件。
18+
19+
而 Linux 就是多用户操作系统,允许多个用户通过远程登录的方式访问一台机器并同时进行使用,相互之间互不影响。
20+
21+
> 那我们经常使用的 Windows 是不是多用户操作系统呢?
22+
23+
Windows 系列的话,Windows 1.x、2.x、3.x(不含NT 3.x)、9x、Me 均为单用户操作系统,其中 9x 虽然有多用户的雏形但基本形同虚设,Windows Me 是最后一个非 NT 内核的 Windows 系统,同样不具备实用性的多用户设计。
24+
25+
有人会问, Windows 不是可以创建多个账号吗?为什么不是多用户操作系统呢?
26+
27+
其实 Windows 的多用户不是真正的多用户,就好比你在家里远程登录了你公司的电脑,你公司的电脑会立刻进入到锁屏状态,而且被人是不可以操作的。这就说明不能多账号同时操作一台电脑了。
28+
29+
30+
31+
32+
33+
34+
35+
36+
37+
38+
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
### Python 越来越火爆
2+
3+
Python 在诞生之初,因为其功能不好,运转功率低,不支持多核,根本没有并发性可言,在计算功能不那么好的年代,一直没有火爆起来,甚至很多人根本不知道有这门语言。
4+
5+
随着时代的发展,物理硬件功能不断提高,而软件的复杂性也不断增大,开发效率越来越被企业重视。因此就有了不一样的声音,在软件开发的初始阶段,性能并没有开发效率重要,没必然为了节省不到 1ms 的时间却让开发量增加好几倍,这样划不过来。也就是开发效率比机器效率更为重要,那么 Python 就逐渐得到越来越多开发者的亲睐了。
6+
7+
在 12-14 年,云计算升温,大量创业公司和互联网巨头挤进云计算领域,而最著名的云核算开源渠道 OpenStack 就是基于 Python 开发的。
8+
9+
随后几年的备受关注的人工智能,机器学习首选开发语言也是 Python。
10+
11+
至此,Python 已经成为互联网开发的焦点。在「Top 10 的编程语言走势图」可以看到,Python 已经跃居第三位,而且在 2017 年还成为了最受欢迎的语言。
12+
13+
![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-07-06-084240.png)
14+
15+
### Python 开发薪资高
16+
17+
Python 开发人员是收入最高的开发人员之一,特别是在数据科学,机器学习和 Web 开发方面。
18+
19+
在北上广深一线城市上,Python 开发的薪资都达到了 2w+ 。
20+
21+
![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-07-06-090549.jpg)
22+
23+
### Python 容易入门且功能强大
24+
25+
如果你是一名初学者,学习 Python 就是你最好的选择,因为它容易学,功能强大,很容易就能构建 Web 应用,非常适合初学者作为入门的开发语言。
26+
27+
Python 还一度被爆纳入高考,收编到小学课本。
28+
29+
![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-07-06-091204.png)
30+
31+
如果你有一定的编程语言基础,学习 Python 也是不错的选择,因为 Python 很可能就是未来开发的主流方向,多学一门语言,多一个防身技能。而且 Python 有强大的功能库,能非常快速的开发工具,为你的本职开发工作提供护航。
32+
33+
34+
35+
36+
37+
38+
39+
40+
41+
42+
43+

Article/PythonBasis/python1/IDE.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,9 @@
1+
# 四、集成开发环境(IDE): PyCharm #
2+
3+
我本人一直是建议在学习周期使用文本编辑器或者是[Sublime Text](http://www.sublimetext.com/) 这个工具来写 Python 程序的,因为这样有利于我们了解整个流程。
4+
5+
当然,如果你有一定的编程基础,是可以使用集成的开发环境的,这样可以提高效率。这时,你可以选择 PyCharm ,PyCharm 是由 JetBrains 打造的一款 Python IDE,支持 macOS、 Windows、 Linux 系统。
6+
7+
PyCharm 下载地址 : [https://www.jetbrains.com/pycharm/download/](https://www.jetbrains.com/pycharm/download/)
8+
9+
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# 二、Python 的安装 #
2+
3+
因为 Python 是跨平台的,它可以运行在 Windows、Mac 和各种 Linux/Unix 系统上。目前,Python 有两个版本,一个是 2.x 版,一个是 3.x版,这两个版本是不兼容的。本草根安装的是 3.6.1 版本的。
4+
5+
至于在哪里下载,草根我建议大家最好直接官网下载,随时下载下来的都是最新版本。官网地址:[https://www.python.org/](https://www.python.org/)
6+
7+
## 1、windows 系统下安装配置 ##
8+
9+
如果是 windows 系统,下载完后,直接安装,不过这里记得勾上Add Python 3.6 to PATH,然后点 「Install Now」 即可完成安装。
10+
11+
这里要注意了,记得把「Add Python 3.6 to Path」勾上,勾上之后就不需要自己配置环境变量了,如果没勾上,就要自己手动配置。
12+
13+
![Python安装.png](http://upload-images.jianshu.io/upload_images/2136918-2bf6591f0a12e80b.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
14+
15+
如果你一时手快,忘记了勾上 「Add Python 3.6 to Path」,那也不要紧,只需要手动配置一下环境变量就好了。
16+
17+
在命令提示框中 cmd 上输入 :
18+
19+
```
20+
path=%path%;C:\Python
21+
```
22+
23+
特别特别注意: `C:\Python` 是 Python 的安装目录,如果你的安装目录是其他地方,就得填上你对应的目录。
24+
25+
安装完成后,打开命令提示符窗口,敲入 python 后,出现下面的情况,证明 Python 安装成功了。
26+
27+
![运行python.png](http://upload-images.jianshu.io/upload_images/2136918-817c22f802e8cfce.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
28+
29+
而你看到提示符 `>>>` 就表示我们已经在 Python 交互式环境中了,可以输入任何 Python 代码,回车后会立刻得到执行结果。
30+
31+
32+
## 2、Mac 系统下安装配置 ##
33+
34+
MAC 系统一般都自带有 Python2.x 版本的环境,不过现在都不用 2.x 的版本了,所以建议你在 https://www.python.org/downloads/mac-osx/ 上下载最新版安装。
35+
36+
安装完成之后,如何配置环境变量呢?
37+
38+
先查看当前环境变量:
39+
40+
```
41+
echo $PATH
42+
```
43+
44+
然后打开 ``` ~/.bash_profile(没有请新建) ```
45+
46+
```
47+
vi ~/.bash_profile
48+
```
49+
50+
我装的是 Python3.7 ,Python 执行路径为:`/Library/Frameworks/Python. Framework/Versions/3.7/bin` 。于是写入
51+
52+
```
53+
export PATH="/Library/Frameworks/Python. Framework/Versions/3.7/bin:$PATH"
54+
```
55+
56+
![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-07-22-084149.png)
57+
58+
最后保存退出,激活运行一下文件:
59+
60+
```
61+
source ~/.bash_profile
62+
```
63+
64+
65+
66+
67+
68+

Article/python1/Introduction.md renamed to Article/PythonBasis/python1/Introduction.md

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,11 +6,11 @@ Python 是著名的“龟叔” Guido van Rossum 在 1989 年圣诞节期间,
66

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

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

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

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

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

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

2323
第二个缺点就是代码不能加密。如果要发布你的 Python 程序,实际上就是发布源代码。像 JAVA , C 这些编译型的语言,都没有这个问题,而解释型的语言,则必须把源码发布出去。
24+
25+
Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
# 前言 #
2+
3+
每个编程语言的学习,第一个程序都是先向世界问好,Python 也不例外,这节我们先写下第一个 Python 程序 —— Hello World 。
4+
5+
# 目录 #
6+
7+
![](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)
8+
Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
# 三、第一个 Python 程序 #
2+
3+
好了,说了那么多,现在我们可以来写一下第一个 Python 程序了。
4+
5+
一开始写 Python 程序,个人不太建议用专门的工具来写,不方便熟悉语法,所以这里我先用 [Sublime Text](http://www.sublimetext.com/) 来写,后期可以改为用 PyCharm 。
6+
7+
第一个 Python 程序当然是打印 Hello Python 啦。
8+
9+
如果你没编程经验,什么都不懂,没关系,第一个 Python 程序,只要跟着做,留下个印象,尝试一下就好。
10+
11+
新建一个文件,命名为 `HelloPython.py` , 注意,这里是以 `.py` 为后缀的文件。
12+
13+
然后打开文件,输入 `print('Hello Python')`
14+
15+
16+
![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-08-17-075948.jpg)
17+
18+
19+
最后就可以打开命令行窗口,把当前目录切换到 HelloPython.py 所在目录,就可以运行这个程序了,下面就是运行的结果。
20+
21+
22+
![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-08-17-075956.jpg)
23+
24+
25+
当然,如果你是使用 [Sublime Text](http://www.sublimetext.com/) ,并且在安装 Python 的时候配置好了环境变量,直接按 Ctrl + B 就可以运行了,运行结果如下:
26+
27+
![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-08-17-080018.jpg)
28+

Article/python10/1.md renamed to Article/PythonBasis/python10/1.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# 一、Python 的 Magic Method #
22

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

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

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

2325
输出的结果:
2426

25-
![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)
27+
```
28+
['__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__']
29+
```
30+
31+
可以看到,一个类的魔术方法还是挺多的,不过我们只需要了解一些常见和常用的魔术方法就好了。
32+
2633

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

Article/python10/2.md renamed to Article/PythonBasis/python10/2.md

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
# 二、构造(`__new__`)和初始化(`__init__`) #
22

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

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

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

19-
![Python类创建的过程](http://upload-images.jianshu.io/upload_images/2136918-a2b39b078cc81841?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
23+
![](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)
2024

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

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

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

Article/python10/4.md renamed to Article/PythonBasis/python10/4.md

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,20 @@
11
# 四、对象的描述器 #
22

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

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

7-
在面向对象编程时,如果一个类的属性有相互依赖的关系时,使用描述器来编写代码可以很巧妙的组织逻辑。在 Django 的 ORM 中,models.Model中的 InterField 等字段, 就是通过描述器来实现功能的。
7+
有这些方法的对象叫做描述器。
8+
9+
默认对属性的访问控制是从对象的字典里面 (`__dict__`) 中获取 (get) , 设置 (set) 和删除 (delete) 。
10+
11+
举例来说, `a.x` 的查找顺序是, `a.__dict__['x']` , 然后 `type(a).__dict__['x']` , 然后找 `type(a)` 的父类 ( 不包括元类 (metaclass) ).如果查找到的值是一个描述器, Python 就会调用描述器的方法来重写默认的控制行为。
12+
13+
这个重写发生在这个查找环节的哪里取决于定义了哪个描述器方法。
14+
15+
注意, 只有在新式类中时描述器才会起作用。在之前的篇节中已经提到新式类和旧式类的,有兴趣可以查看之前的篇节来看看,至于新式类最大的特点就是所有类都继承自 type 或者 object 的类。
16+
17+
在面向对象编程时,如果一个类的属性有相互依赖的关系时,使用描述器来编写代码可以很巧妙的组织逻辑。在 Django 的 ORM 中,models.Model 中的 InterField 等字段, 就是通过描述器来实现功能的。
818

919
我们先看下下面的例子:
1020

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

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

Article/python10/5.md renamed to Article/PythonBasis/python10/5.md

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
# 五、自定义容器(Container) #
22

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

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

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

@@ -78,3 +82,5 @@ class FunctionalList:
7882
return self.values[:n]
7983

8084
```
85+
86+

Article/python10/6.md renamed to Article/PythonBasis/python10/6.md

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -107,6 +107,10 @@ num1 >= num2 ? --------> False
107107
|`__xor__(self, other)`|实现了位操作 `^`|
108108

109109

110-
最后,如果对本文感兴趣的,可以关注下公众号:
110+
可以关注下公众号:
111+
112+
这个公号可能很少更新,但是一更新,就是把整理的一系列文章更新上去。
113+
114+
![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-10-14-WechatIMG697.jpeg)
115+
111116

112-
![公众号](http://twowater.com.cn/images/20171204192251900.gif)
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
# 前言 #
2+
3+
有时候修改文章,真的修改到想死。真的很耗时间,很烦的。
4+
5+
好吧,每次都是安慰自己,快完结了,快更新完了。
6+
7+
# 目录 #
8+
9+
![](http://twowaterimage.oss-cn-beijing.aliyuncs.com/2019-10-14-Python%20%E7%9A%84%20Magic%20Method.png)
10+
11+

0 commit comments

Comments
 (0)