Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
pythonspot-zh
提交
ae68a0c3
P
pythonspot-zh
项目概览
OpenDocCN
/
pythonspot-zh
8 个月 前同步成功
通知
0
Star
46
Fork
11
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
P
pythonspot-zh
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
ae68a0c3
编写于
11月 20, 2019
作者:
W
wizardforcel
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
2019-11-20 11:39:55
上级
2f1cf1f3
变更
34
隐藏空白更改
内联
并排
Showing
34 changed file
with
124 addition
and
128 deletion
+124
-128
docs/10.md
docs/10.md
+4
-7
docs/11.md
docs/11.md
+4
-4
docs/12.md
docs/12.md
+4
-4
docs/13.md
docs/13.md
+12
-13
docs/14.md
docs/14.md
+1
-1
docs/15.md
docs/15.md
+2
-2
docs/16.md
docs/16.md
+5
-5
docs/17.md
docs/17.md
+3
-3
docs/19.md
docs/19.md
+1
-1
docs/20.md
docs/20.md
+3
-3
docs/21.md
docs/21.md
+8
-11
docs/22.md
docs/22.md
+1
-1
docs/23.md
docs/23.md
+4
-4
docs/24.md
docs/24.md
+2
-2
docs/25.md
docs/25.md
+3
-3
docs/26.md
docs/26.md
+6
-6
docs/27.md
docs/27.md
+1
-1
docs/28.md
docs/28.md
+2
-2
docs/29.md
docs/29.md
+5
-5
docs/31.md
docs/31.md
+2
-2
docs/32.md
docs/32.md
+3
-2
docs/33.md
docs/33.md
+3
-4
docs/34.md
docs/34.md
+2
-2
docs/35.md
docs/35.md
+2
-2
docs/36.md
docs/36.md
+3
-3
docs/39.md
docs/39.md
+5
-5
docs/4.md
docs/4.md
+5
-2
docs/40.md
docs/40.md
+6
-6
docs/43.md
docs/43.md
+5
-5
docs/5.md
docs/5.md
+2
-2
docs/6.md
docs/6.md
+8
-7
docs/7.md
docs/7.md
+1
-1
docs/8.md
docs/8.md
+4
-5
docs/9.md
docs/9.md
+2
-2
未找到文件。
docs/10.md
浏览文件 @
ae68a0c3
...
...
@@ -2,8 +2,7 @@
> 原文: [https://pythonspot.com/global-local-variables/](https://pythonspot.com/global-local-variables/)
变量有两种类型:
**全局变量**
和
**局部变量**
。
全局变量可以在代码中的任何位置访问,局部变量只能在
[
作用域
](
https://pythonspot.com/scope/
)
中访问。
变量有两种类型:
**全局变量**
和
**局部变量**
。全局变量可以在代码中的任何位置访问,局部变量只能在
[
作用域
](
https://pythonspot.com/scope/
)
中访问。
![
global-local-variable
](
img/b096b6df86baa4af3f1d9b86a8b57af2.jpg
)
...
...
@@ -23,8 +22,7 @@ print(sum(8,6))
```
变量 x 和 y 只能在函数 sum 之内使用,而在函数外部则不存在。
局部变量不能在其作用域之外使用,此行将不起作用:
变量
`x`
和
`y`
只能在函数
`sum`
之内使用,而在函数外部则不存在。局部变量不能在其作用域之外使用,此行将不起作用:
```
py
...
...
@@ -34,8 +32,7 @@ print(x)
## 全局变量
全局变量可以在代码中的任何位置使用。
在下面的示例中,我们定义了全局变量z
全局变量可以在代码中的任何位置使用。在下面的示例中,我们定义了全局变量
`z`
```
py
...
...
@@ -65,7 +62,7 @@ print(z)
```
调用
afunction()
之后,将更改整个程序的全局变量。
调用
`afunction()`
之后,将更改整个程序的全局变量。
## 练习
...
...
docs/11.md
浏览文件 @
ae68a0c3
...
...
@@ -4,13 +4,13 @@
## 作用域
变量只能到达定义它们的区域,这称为
_ 作用域 _
。 将其视为可以使用变量的代码区域。 Python 支持全局变量(可在整个程序中使用)和局部变量。
变量只能到达定义它们的区域,这称为
作用域
。 将其视为可以使用变量的代码区域。 Python 支持全局变量(可在整个程序中使用)和局部变量。
默认情况下,函数中声明的所有变量都是局部变量。
要访问函数内部的全局变量,必须明确定义“全局变量”。
默认情况下,函数中声明的所有变量都是局部变量。要访问函数内部的全局变量,必须明确定义“全局变量”。
## 示例
下面我们将研究
用法 局部变量和作用域。 此 _
**不起作用**
_
:
下面我们将研究
局部变量和作用域的用法。它
**不起作用**
:
```
py
#!/usr/bin/python
...
...
@@ -72,6 +72,6 @@ print(result)
```
如果在代码中的任何位置都可以访问变量,则称为
_
**全局变量。**
_ 如果仅在作用域内部知道变量,则将其称为 _
**局部变量。**
_
如果在代码中的任何位置都可以访问变量,则称为
**全局变量**
。如果仅在作用域内部知道变量,则将其称为
**局部变量**
。
[
下载 Python 练习
](
https://pythonspot.com/download-python-exercises/
)
\ No newline at end of file
docs/12.md
浏览文件 @
ae68a0c3
...
...
@@ -2,9 +2,9 @@
> 原文: [https://pythonspot.com/loops/](https://pythonspot.com/loops/)
可以使用循环来重复代码。 代码行可以重复 N 次,其中 N 是可以手动配置的。 实际上,这意味着将重复执行代码,直到满足条件为止。 此条件通常为(
x
>
= N
),但这不是唯一可能的条件。
可以使用循环来重复代码。 代码行可以重复 N 次,其中 N 是可以手动配置的。 实际上,这意味着将重复执行代码,直到满足条件为止。 此条件通常为(
`x <= N`
),但这不是唯一可能的条件。
Python 有 3 种循环类型:
for 循环,while
循环和嵌套循环。
Python 有 3 种循环类型:
`for`
循环,
`while`
循环和嵌套循环。
## `for`循环
...
...
@@ -20,11 +20,11 @@ for item in items:
```
for
循环的可视化:
`for`
循环的可视化:
![
for loop
](
img/82f73ddadae94db3c7fa209585564d41.jpg
)
for
循环也可以重复 N 次:
`for`
循环也可以重复 N 次:
```
py
#!/usr/bin/python
...
...
docs/13.md
浏览文件 @
ae68a0c3
...
...
@@ -2,7 +2,7 @@
> 原文: [https://pythonspot.com/python-range/](https://pythonspot.com/python-range/)
**range()**
函数的 return
会生成一个数字序列,从下限到上限。
`range()`
函数
会生成一个数字序列,从下限到上限。
```
py
...
...
@@ -10,11 +10,11 @@ range(lower_bound, upper_bound, step_size)
```
*
lower_bound:_ 列表的起始值。_
*
`lower_bound`
:列表的起始值。
*
upper_bound:_ 列表的最大值,不包括此数字。_
*
`upper_bound`
:列表的最大值,不包括此数字。
*
step_bound:_ 步长,列表中每个数字之间的差。_
*
`step_bound`
:步长,列表中每个数字之间的差。
`lower_bound`
和
`step_size`
参数是可选的。默认情况下,下限设置为零,增量步长设置为一。参数必须为整数类型,但可以为负。
...
...
@@ -24,11 +24,11 @@ range(lower_bound, upper_bound, step_size)
## 范围实现差异
通常是一个问题。 在 Python 版本中,
range()
的实现略有不同:
通常是一个问题。 在 Python 版本中,
`range()`
的实现略有不同:
*
Python 2.x:
_range()函数返回一个列表。_
*
Python 2.x:
`range()`
函数返回一个列表。
*
Python 3.x:
_range()函数生成一个序列。_
*
Python 3.x:
`range()`
函数生成一个序列。
## python 2.7 中的范围
...
...
@@ -40,7 +40,7 @@ range(lower_bound, upper_bound, step_size)
```
调用
range(1,10)返回:1,2,3,4,5,6,7,8,9
调用
`range(1, 10)`
返回:
`1,2,3,4,5,6,7,8,9`
```
py
...
...
@@ -48,7 +48,7 @@ range(lower_bound, upper_bound, step_size)
```
调用
范围(0,10,2)返回:0,2,4,6,8
调用
`range(0, 10, 2)`
返回:
`0,2,4,6,8`
```
py
...
...
@@ -56,8 +56,7 @@ range(lower_bound, upper_bound, step_size)
```
python 3 中的
**范围**
要使用范围生成列表,请添加列表功能
python 3 中的
**范围**
。要使用范围生成列表,请添加列表函数。
```
py
...
...
@@ -76,8 +75,8 @@ python 3 中的**范围**
## python 2 实现
此版本的
range()
分配计算机内存,并在后台填充计算机内存。 对于大范围,这不是很有效的实现。
此版本的
`range()`
分配计算机内存,并在后台填充计算机内存。 对于大范围,这不是很有效的实现。
通常,
range2
的 Python2 实现不会有任何问题,但如果使用大量(数百万个项目),则可能会遇到问题。
通常,
`range`
的 Python2 实现不会有任何问题,但如果使用大量(数百万个项目),则可能会遇到问题。
[
下载 Python 练习
](
https://pythonspot.com/download-python-exercises/
)
\ No newline at end of file
docs/14.md
浏览文件 @
ae68a0c3
...
...
@@ -2,7 +2,7 @@
> 原文: [https://pythonspot.com/python-tuples/](https://pythonspot.com/python-tuples/)
元组
_ 数据结构 _
用于存储一组数据。 该组中的元素用逗号分隔。 创建后,元组的值将无法更改。
元组
数据结构
用于存储一组数据。 该组中的元素用逗号分隔。 创建后,元组的值将无法更改。
## Python 元组
...
...
docs/15.md
浏览文件 @
ae68a0c3
...
...
@@ -2,7 +2,7 @@
> 原文: [https://pythonspot.com/python-dictionaries/](https://pythonspot.com/python-dictionaries/)
字典可以看作是
_ 键的无序集合:值 _ 对
。
字典可以看作是
键值对的无序集合
。
一对大括号创建一个空字典:
`{}`
。 每个元素都可以映射到某个值。 整数或字符串可用于索引。 字典没有命令。
...
...
@@ -33,7 +33,7 @@ Non
```
我们绝不限于
价
值部分中的单个单词定义。 演示:
我们绝不限于值部分中的单个单词定义。 演示:
```
py
#!/usr/bin/python
...
...
docs/16.md
浏览文件 @
ae68a0c3
...
...
@@ -11,9 +11,9 @@ y = "text"
```
它发现
_x 是整数 _ 类型, _y 是字符串 _
类型。
它发现
`x`
是整数类型,
`y`
是字符串
类型。
函数接受某种数据类型。 例如,
print
仅接受字符串数据类型。
函数接受某种数据类型。 例如,
`print`
仅接受字符串数据类型。
## 数据类型转换
...
...
@@ -31,9 +31,9 @@ print("y = " + str(y))
```
我们使用
str()函数将变量 x(整数)和变量 y
(浮点数)转换为字符串。
我们使用
`str()`
函数将变量
`x`
(整数)和变量
`y`
(浮点数)转换为字符串。
如果我们有要存储为数字的文本怎么办? 我们将不得不再次
铸造
。
如果我们有要存储为数字的文本怎么办? 我们将不得不再次
转型
。
```
py
a
=
"135.31421"
...
...
@@ -44,7 +44,7 @@ print(c)
```
在上面的示例中,我们将两个具有数据类型字符串的变量强制转换为数据类型
float
。
在上面的示例中,我们将两个具有数据类型字符串的变量强制转换为数据类型
`float`
。
## 转换函数
...
...
docs/17.md
浏览文件 @
ae68a0c3
...
...
@@ -2,11 +2,11 @@
> 原文: [https://pythonspot.com/random-numbers/](https://pythonspot.com/random-numbers/)
使用
_ 随机 _ 模块,我们可以生成伪随机数。 函数 random()生成一个介于零和一之间的随机数[0,0.1 .. 1]
。 用此模块生成的数字不是真正随机的,但对于大多数用途而言,它们是足够随机的。
使用
`random`
模块,我们可以生成伪随机数。 函数
`random()`
生成一个介于零和一之间的随机数
`[0, 0.1 .. 1]`
。 用此模块生成的数字不是真正随机的,但对于大多数用途而言,它们是足够随机的。
## 介于 0 和 1 之间的随机数。
我们
可以使用以下小代码生成(伪)随机浮点数:
我们可以使用以下小代码生成(伪)随机浮点数:
```
py
from
random
import
*
...
...
@@ -38,7 +38,7 @@ print(x)
## 1 到 10 之间的随机数
要生成 1 到 10 之间的随机
_ 浮点数 _,您可以使用匀速()
函数
要生成 1 到 10 之间的随机
浮点数,您可以使用
`uniform()`
函数
```
py
from
random
import
*
...
...
docs/19.md
浏览文件 @
ae68a0c3
...
...
@@ -31,7 +31,7 @@ for line in content:
代码的第一部分将读取文件内容。 读取的所有行将存储在变量内容中。 第二部分将遍历变量内容中的每一行。
如果您不想读取换行符
“
\
n”,则可以将语句 f.readlines()
更改为此:
如果您不想读取换行符
`"\n"`
,则可以将语句
`f.readlines()`
更改为此:
```
py
content
=
f
.
read
().
splitlines
()
...
...
docs/20.md
浏览文件 @
ae68a0c3
...
...
@@ -2,9 +2,9 @@
> 原文: [https://pythonspot.com/write-file/](https://pythonspot.com/write-file/)
Python 默认支持写文件,不需要特殊模块。 您可以使用
.write()
方法以及包含文本数据的参数来写入文件。
Python 默认支持写文件,不需要特殊模块。 您可以使用
`.write()`
方法以及包含文本数据的参数来写入文件。
在将数据写入文件之前,请调用
open(filename,’w’)函数,其中 filename
包含文件名或文件名的路径。 最后,别忘了关闭文件。
在将数据写入文件之前,请调用
`open(filename, 'w')`
函数,其中
`filename`
包含文件名或文件名的路径。 最后,别忘了关闭文件。
## 创建要写入的文件
...
...
@@ -27,7 +27,7 @@ myfile.close()
```
“ w”
标志可使 Python 截断该文件(如果已存在)。 也就是说,如果文件内容存在,它将被替换。
`"w"`
标志可使 Python 截断该文件(如果已存在)。 也就是说,如果文件内容存在,它将被替换。
## 附加到文件
...
...
docs/21.md
浏览文件 @
ae68a0c3
...
...
@@ -6,16 +6,13 @@
技术总是在发展。什么是类,它们从何而来?
**1.语句**
:
在计算的早期,程序员仅编写命令。
**1\. 语句**
:在计算的早期,程序员仅编写命令。
**2.函数**
:
可重用的语句组,有助于结构化代码并提高了可读性。
**2\. 函数**
:可重用的语句组,有助于结构化代码并提高了可读性。
**3.类**
:
这些类用于创建具有功能和变量的对象。 字符串是对象的示例:字符串书具有功能 book.replace()和 book.lowercase()。 这种样式通常称为面向对象编程。
**3\. 类**
:这些类用于创建具有功能和变量的对象。 字符串是对象的示例:字符串书具有功能
`book.replace()`
和
`book.lowercase()`
。这种样式通常称为面向对象编程。
让我们一起
潜水
吧!
让我们一起
深入
吧!
## Python 类
...
...
@@ -42,15 +39,15 @@ david.sayHello()
```
运行该程序。 在此代码中,我们有 3 个虚拟对象:
james,david 和 eric。 每个对象都是 User
类的实例。
运行该程序。 在此代码中,我们有 3 个虚拟对象:
`james`
,
`david`
和
`eric`
。 每个对象都是
`User`
类的实例。
![
python class: creation of objects
](
img/4915adfc6d1a53dddb74cfc74d45644b.jpg
)
Python 类:创建对象
在此类中,我们定义了
sayHello()方法,这就是为什么我们可以为每个对象调用它的原因。
**初始化**
()方法被称为
**构造函数**
,并且在创建对象时始终被调用。 该类拥有的变量在这种情况下为“名称”。
这些变量有时称为类属性。
在此类中,我们定义了
`sayHello()`
方法,这就是为什么我们可以为每个对象调用它的原因。
`__init__()`
方法被称为
**构造函数**
,并且在创建对象时始终被调用。该类拥有的变量在这种情况下为
`name`
。
这些变量有时称为类属性。
我们可以在类中创建方法来更新对象的内部变量。
这听起来可能有些含糊,但我将举一个例子进行说明。
我们可以在类中创建方法来更新对象的内部变量。这听起来可能有些含糊,但我将举一个例子进行说明。
## 类变量
...
...
@@ -103,7 +100,7 @@ pythonBean.printState()
```
运行该程序。 代码的顶部定义了我们所描述的类。 下面的代码是我们创建虚拟对象的地方。 在此示例中,我们只有一个对象称为
“ pythonBean”
。 然后我们调用更改内部变量的方法,这是可能的,因为我们在类中定义了这些方法。 输出:
运行该程序。 代码的顶部定义了我们所描述的类。 下面的代码是我们创建虚拟对象的地方。 在此示例中,我们只有一个对象称为
`pythonBean`
。 然后我们调用更改内部变量的方法,这是可能的,因为我们在类中定义了这些方法。 输出:
```
py
...
...
docs/22.md
浏览文件 @
ae68a0c3
...
...
@@ -22,7 +22,7 @@ duck.walk()
```
我们在动物类中创建了一个名为
“鸭子”的对象。 该类具有一个可以在每个对象上调用的方法(walk)。 我们还有一个称为
**init**
()的方法,该方法在创建新对象时总是被调用。 每种方法都必须使用 self 关键字。 我们使用类(self.name = ..
)设置变量。
我们在动物类中创建了一个名为
`duck`
的对象。 该类具有一个可以在每个对象上调用的方法(
`walk`
)。 我们还有一个称为
`__init__()`
的方法,该方法在创建新对象时总是被调用。 每种方法都必须使用
`self`
关键字。 我们使用类(
`self.name = ..`
)设置变量。
![
python class
](
img/cb722e238db4c81d1854b65097d597a9.jpg
)
...
...
docs/23.md
浏览文件 @
ae68a0c3
...
...
@@ -2,7 +2,7 @@
> 原文: [https://pythonspot.com/encapsulation](https://pythonspot.com/encapsulation)
在面向对象的 python 程序中,您可以
_ 限制对方法和变量的访问 _。 这可以防止意外修改数据,这就是 _ 封装 _
。 让我们从一个例子开始。
在面向对象的 python 程序中,您可以
限制对方法和变量的访问。这可以防止意外修改数据,这就是封装
。 让我们从一个例子开始。
## 私有方法
...
...
@@ -10,7 +10,7 @@
封装。限制访问方法或变量
我们创建了一个
Car 类,它具有两种方法:drive()和 updateSoftware()。 创建汽车对象时,它将调用私有方法 __updateSoftware()
。
我们创建了一个
`Car`
类,它具有两种方法:
`drive()`
和
`updateSoftware()`
。创建汽车对象时,它将调用私有方法
`__updateSoftware()`
。
仅在类内部不能直接在对象上调用此函数。
...
...
@@ -44,9 +44,9 @@ driving
封装可以防止意外访问,但不是有意访问。
私有属性和方法并未真正隐藏,而是在其名称的开头加上了
_Car”
来重命名。
私有属性和方法并未真正隐藏,而是在其名称的开头加上了
`_Car`
来重命名。
实际上可以使用
redcar._Car__updateSoftware()
调用该方法。
实际上可以使用
`redcar._Car__updateSoftware()`
调用该方法。
## 私有变量
...
...
docs/24.md
浏览文件 @
ae68a0c3
...
...
@@ -12,7 +12,7 @@
根据函数定义,可以使用零个,一个,两个或多个参数来调用它。
这称为
_ 方法重载。_
并非所有的编程语言都支持方法重载,但是 Python 支持。
这称为
方法重载。
并非所有的编程语言都支持方法重载,但是 Python 支持。
## 方法重载示例
...
...
@@ -51,7 +51,7 @@ Hello Guido
```
为了澄清
_ 方法的重载 _,我们现在可以通过两种方式调用 sayHello()
方法:
为了澄清
方法的重载,我们现在可以通过两种方式调用
`sayHello()`
方法:
```
py
obj
.
sayHello
()
...
...
docs/25.md
浏览文件 @
ae68a0c3
...
...
@@ -38,11 +38,11 @@ class Programmer(User):
```
除了参数中提供了
User 之外,这看起来非常像标准类。 这意味着可以在 Programmer 类中访问 User
类的所有功能。
除了参数中提供了
`User`
之外,这看起来非常像标准类。 这意味着可以在
`Programmer`
类中访问
`User`
类的所有功能。
## 继承示例
Full example of Python inheritance:
Python 继承的完整示例:
```
py
class
User
:
...
...
@@ -79,6 +79,6 @@ Programming Python
```
Brian 是 User 的实例,只能访问方法 printName。 Diana 是 Programmer 的一个实例,该类是继承自 User 的类,并且可以访问 Programmer 和 User
中的方法。
`Brian`
是
`User`
的实例,只能访问方法
`printName`
。
`Diana`
是
`Programmer`
的一个实例,该类是继承自
`User`
的类,并且可以访问
`Programmer`
和
`User`
中的方法。
[
下载练习
](
https://pythonspot.com/download-oop-exercises/
)
\ No newline at end of file
docs/26.md
浏览文件 @
ae68a0c3
...
...
@@ -2,7 +2,7 @@
> 原文: [https://pythonspot.com/polymorphism/](https://pythonspot.com/polymorphism/)
有时,对象有多种类型或形式。 如果我们有一个按钮,则有许多不同的绘制输出(圆形按钮,复选按钮,方形按钮,带有图像的按钮),但它们确实共享相同的逻辑:
onClick()。 我们使用相同的方法访问它们。 这个想法称为 _ 多态 _
。
有时,对象有多种类型或形式。 如果我们有一个按钮,则有许多不同的绘制输出(圆形按钮,复选按钮,方形按钮,带有图像的按钮),但它们确实共享相同的逻辑:
`onClick()`
。 我们使用相同的方法访问它们。 这个想法称为多态
。
多态是基于希腊语 Poly(许多)和 morphism(形式)。 我们将创建一个可以采用或使用多种形式的对象的结构。
...
...
@@ -42,7 +42,7 @@ Woof woof!
![
polymorphism example
](
img/2c012acbbf068f97276301d4bf125959.jpg
)
视觉多态
。
多态可视化
。
抽象结构在
`Document`
类中定义。
...
...
@@ -56,7 +56,7 @@ print document.name + ': ' + document.show()
```
为此,我们创建了一个称为
document 的抽象类。 此类没有任何实现,但是定义了所有形式都必须具有的结构(以功能形式)。 如果我们定义函数 show(),则 PdfDocument 和 WordDocument 都必须具有 show()函数。
完整代码:
为此,我们创建了一个称为
`document`
的抽象类。 此类没有任何实现,但是定义了所有形式都必须具有的结构(以函数形式)。 如果我们定义函数
`show()`
,则
`PdfDocument`
和
`WordDocument`
都必须具有
`show()`
函数。
完整代码:
```
py
class
Document
:
...
...
@@ -100,9 +100,9 @@ Document3: Show word contents!
抽象类中的结构,其他类中的实现
另一个例子是拥有一个抽象类
Car,其中包含了 drive()和 stop()
结构。
另一个例子是拥有一个抽象类
`Car`
,其中包含了
`drive()`
和
`stop()`
结构。
我们定义了两个对象
Sportcar 和 Truck,它们都是 Car
的一种形式。 用伪代码我们将要做的是:
我们定义了两个对象
`Sportcar`
和
`Truck`
,它们都是
`Car`
的一种形式。 用伪代码我们将要做的是:
```
py
class
Car
:
...
...
@@ -119,7 +119,7 @@ class Truck(Car):
```
然后,我们可以访问任何类型的汽车并调用
功能
,而无需进一步考虑表格是 Sportscar 还是 Truck。 完整代码:
然后,我们可以访问任何类型的汽车并调用
函数
,而无需进一步考虑表格是 Sportscar 还是 Truck。 完整代码:
```
py
class
Car
:
...
...
docs/27.md
浏览文件 @
ae68a0c3
...
...
@@ -36,7 +36,7 @@ talking...
```
在上面的程序中,我们有内部类
Head(),它具有自己的方法。 内部类可以同时具有方法和变量。 在此示例中,类 Human(
**init**
)的构造函数创建了一个新的 head
对象。
在上面的程序中,我们有内部类
`Head()`
,它具有自己的方法。内部类可以同时具有方法和变量。在此示例中,类
`Human`
的构造函数(
`__init__`
)创建了一个新的
`head`
对象。
## 多个内部类
...
...
docs/28.md
浏览文件 @
ae68a0c3
...
...
@@ -3,7 +3,7 @@
> 原文: [https://pythonspot.com/factory-method/](https://pythonspot.com/factory-method/)
我们可能并不总是知道我们要预先创建什么样的对象。
在用户请求执行后,只
能在执行时创建 _ 的某些对象。_
在用户请求执行后,只
在执行时创建某些对象。
可能使用
**工厂方法**
的示例:
...
...
@@ -23,7 +23,7 @@ obj.drive()
```
**关键事实**
:
_ 工厂方法返回(新)对象。_
**关键事实**
:
工厂方法返回(新)对象。
对象的类型取决于您指定的输入字符串的类型。 这种技术还可以使您的程序更容易扩展。 新的程序员可以通过添加新的字符串和类来轻松添加功能,而无需阅读所有源代码。
...
...
docs/29.md
浏览文件 @
ae68a0c3
...
...
@@ -11,7 +11,7 @@
您可能需要将一个复杂的问题分解为几个较小的问题。 您已经熟悉
[
循环或迭代
](
https://pythonspot.com/loops/
)
。 在某些情况下,递归可能是更好的解决方案。
在 Python 中,
**如果函数调用自身并且具有终止条件**
,则该函数是递归的。 为什么要终止条件? 阻止函数
自称广告无穷大
。
在 Python 中,
**如果函数调用自身并且具有终止条件**
,则该函数是递归的。 为什么要终止条件? 阻止函数
无限自我调用
。
## 递归示例
...
...
@@ -36,7 +36,7 @@ print(sum([5,7,3,8,10]))
```
在我们简单地调用
sum 函数的地方,该函数将每个元素添加到变量 sum
并返回。 递归执行此操作:
在我们简单地调用
`sum`
函数的地方,该函数将每个元素添加到变量
`sum`
并返回。 递归执行此操作:
```
py
#!/usr/bin/env python
...
...
@@ -51,11 +51,11 @@ print(sum([5,7,3,8,10]))
```
如果列表的长度为 1,则返回列表(终止条件)。 否则,它返回元素,并调用函数
sum()
减去列表中的一个元素。 如果执行了所有调用,则返回达到终止条件并返回应答。
如果列表的长度为 1,则返回列表(终止条件)。 否则,它返回元素,并调用函数
`sum()`
减去列表中的一个元素。 如果执行了所有调用,则返回达到终止条件并返回应答。
## 递归阶乘
阶乘的数学定义是:
n! = n
*
(n-1)!,如果 n
>
1 并且 f(1)= 1.示例:3! = 3 x 2 x 1 =6
。我们可以使用递归函数在 Python 中实现:
阶乘的数学定义是:
`n! = n * (n-1)!`
,如果
`n > 1`
并且
`f(1) = 1`
。示例:
`3! = 3 x 2 x 1 = 6`
。我们可以使用递归函数在 Python 中实现:
```
py
#!/usr/bin/env python
...
...
@@ -70,7 +70,7 @@ print(factorial(3))
```
调用阶乘函数
n = 3 时。它将返回 n
*
阶乘(n-1)。 该过程将一直持续到 n =1。如果达到 n == 1
,它将返回结果。
调用阶乘函数
`n = 3`
时。它将返回
`n * factorial(n-1)`
。 该过程将一直持续到
`n = 1`
。如果达到
`n == 1`
,它将返回结果。
## 递归限制
...
...
docs/31.md
浏览文件 @
ae68a0c3
...
...
@@ -19,7 +19,7 @@ print stdout
```
process.communicate()调用从进程中读取输入和输出。 stdout 是进程输出。 仅当发生错误时,stderr 才会被写入。 如果要等待程序完成,可以调用 Popen.wait()
。
`process.communicate()`
调用从进程中读取输入和输出。
`stdout`
是进程输出。仅当发生错误时,
`stderr`
才会被写入。 如果要等待程序完成,可以调用
`Popen.wait()`
。
## `subprocess.call()`:
...
...
@@ -32,7 +32,7 @@ subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
```
在下面的示例中,完整的命令将为
“ ls -l”
在下面的示例中,完整的命令将为
`ls -l`
```
py
#!/usr/bin/env python
...
...
docs/32.md
浏览文件 @
ae68a0c3
...
...
@@ -2,7 +2,8 @@
> 原文: [https://pythonspot.com/threading](https://pythonspot.com/threading)
在 Python 中,您可以使用 Python 2.x 中的
`threading`
模块或 Python 3 中的 _thread 模块创建线程。我们将使用
`threading`
模块与之交互。
在 Python 中,您可以使用 Python 2.x 中的
`threading`
模块或 Python 3 中的
`_thread`
模块创建线程。我们将使用
`threading`
模块与之交互。
线程是一种操作系统进程,具有与正常进程不同的功能:
*
线程作为进程的子集存在
...
...
@@ -44,7 +45,7 @@ for x in xrange(10):
```
如果运行一次,线程不必停止。 线程可以是定时的,每
x
秒重复执行一次线程功能。
如果运行一次,线程不必停止。 线程可以是定时的,每
`x`
秒重复执行一次线程功能。
## 定时线程
...
...
docs/33.md
浏览文件 @
ae68a0c3
...
...
@@ -2,7 +2,7 @@
> 原文: [https://pythonspot.com/python-lambda/](https://pythonspot.com/python-lambda/)
我们可以创建匿名函数,称为 lambda 函数。 Lambda 函数与常规 Python 函数不同,它们源自 Lambda
微积分
。 它允许您编写非常简短的函数。
我们可以创建匿名函数,称为 lambda 函数。 Lambda 函数与常规 Python 函数不同,它们源自 Lambda
演算
。 它允许您编写非常简短的函数。
## Lambda 函数示例
...
...
@@ -16,8 +16,7 @@ print f(3)
```
Lambda 函数从不使用 return 语句,它总是返回
。 Lambda 函数可能包含 if 语句:
Lambda 函数从不使用
`return`
语句,它总是返回。 Lambda 函数可能包含
`if`
语句:
```
py
#!/usr/bin/env python
...
...
@@ -56,7 +55,7 @@ print(newList)
```
返回列表只包含 lambda 表达式
“ lamba x:x%2 == 0”
为真的元素。
返回列表只包含 lambda 表达式
`lamba x: x % 2 == 0`
为真的元素。
## `reduce`函数
...
...
docs/34.md
浏览文件 @
ae68a0c3
...
...
@@ -8,7 +8,7 @@ Python 中的集合是对象的集合。 集合在 Python 2.4 和更高版本中
## 集合示例
要创建一个集合,我们使用
set()
函数。
要创建一个集合,我们使用
`set()`
函数。
```
py
#!/usr/bin/env python
...
...
@@ -18,7 +18,7 @@ print(x)
```
如果我们多次添加相同的
item
元素,则会将其删除。 一个集合不能多次包含相同的元素。
如果我们多次添加相同的
`item`
元素,则会将其删除。 一个集合不能多次包含相同的元素。
```
py
#!/usr/bin/env python
...
...
docs/35.md
浏览文件 @
ae68a0c3
...
...
@@ -38,7 +38,7 @@ print(dir(sys))
可以按照以下步骤创建自己的模块:
创建一个名为
test.py
的文件(您的模块)
创建一个名为
`test.py`
的文件(您的模块)
```
py
#!/usr/bin/env python
...
...
@@ -48,7 +48,7 @@ def add(a,b):
```
然后创建一个名为
app.py
的文件:
然后创建一个名为
`app.py`
的文件:
```
py
from
test
import
*
...
...
docs/36.md
浏览文件 @
ae68a0c3
...
...
@@ -14,7 +14,7 @@ Python 没有图数据类型。 要使用图,我们可以使用模块,也可
*
自己实现图
*
networkx
模块
*
`networkx`
模块
## Python 中的图
...
...
@@ -32,9 +32,9 @@ print(graph)
```
## 使用
networkx
的图
## 使用
`networkx`
的图
networkx
软件模块支持创建,处理图。
`networkx`
软件模块支持创建,处理图。
```
py
#!/usr/bin/env python
...
...
docs/39.md
浏览文件 @
ae68a0c3
...
...
@@ -4,7 +4,7 @@
![
binary numbers
](
img/74c0efc42f7bf310489f953f2b5cbd0e.jpg
)
我们之前已经看过简单的数字和运算。 在本文中,您将学习数字在计算机内部的工作方式以及与此相关的一些魔术
:
-)
我们之前已经看过简单的数字和运算。 在本文中,您将学习数字在计算机内部的工作方式以及与此相关的一些魔术
:
-)
更详细:虽然这在 Web 应用程序或大多数桌面应用程序中没有直接用处,但了解它非常有用。
...
...
@@ -16,7 +16,7 @@
这些微小的信息,是您可以在计算机中存储的最小信息,称为位。我们将位表示为低(0)或高(1)。
为了表示大于
1
的数字,使用一系列位的主意诞生了。 一个八位的序列可以存储更大的数字,这称为字节。 由一和零组成的序列称为二进制。我们传统的十位数计数系统称为十进制。
为了表示大于
1
的数字,使用一系列位的主意诞生了。 一个八位的序列可以存储更大的数字,这称为字节。 由一和零组成的序列称为二进制。我们传统的十位数计数系统称为十进制。
![
binary
](
img/74c0efc42f7bf310489f953f2b5cbd0e.jpg
)
...
...
@@ -62,7 +62,7 @@ _ 二进制左移和二进制右移 _
| 0 | 1 个 | 0 | 1 个 |
| 1 个 | 0 | 1 个 | 0 |
在移位(
0,1,0,1)之前,我们有数字 5。 移位(1,0,1,0)后,我们得到数字 10。在 python 中,您可以使用按位向左运算符(
<
<
)向左移动,按位向右运算符(
>
>
) 向右移动。
在移位(
`0,1,0,1`
)之前,我们有数字 5。 移位(
`1,0,1,0`
)后,我们得到数字 10。在 python 中,您可以使用按位向左运算符(
`<<`
)向左移动,按位向右运算符(
`>>`
) 向右移动。
```
py
inputA
=
int
(
'0101'
,
2
)
...
...
@@ -90,7 +90,7 @@ After shifting in decimal: 10
按位 AND
在代码中,这就像使用
&
符号一样简单,该符号代表逻辑 AND 运算符。
在代码中,这就像使用
`&`
符号一样简单,该符号代表逻辑 AND 运算符。
```
py
# This code will execute a bitwise logical AND. Both inputA and inputB are bits.
...
...
@@ -165,7 +165,7 @@ print bin(inputA | inputB) # Execute bitwise logical OR and print result in bi
按位 XOR
为了执行它,我们使用
^
运算符。 可以像这样简单地执行一系列位:
为了执行它,我们使用
`^`
运算符。 可以像这样简单地执行一系列位:
```
py
inputA
=
int
(
'00100011'
,
2
)
# define binary number
...
...
docs/4.md
浏览文件 @
ae68a0c3
...
...
@@ -39,7 +39,10 @@ print(name)
```
要测试您的版本,请执行以下操作:
_python –version_
```
python –version
```
## 字符串比较
...
...
@@ -56,7 +59,7 @@ if q == sentence:
```
要测试两个字符串是否相等,请使用
inequality 运算符(!=
)
要测试两个字符串是否相等,请使用
不等运算符(
`!=`
)
```
py
#!/usr/bin/python
...
...
docs/40.md
浏览文件 @
ae68a0c3
...
...
@@ -4,7 +4,7 @@
我们可以使用调试工具来最小化和发现错误。 在本文中,您将学习最佳的 Python 调试技巧。
## PuDB
-
基于控制台的 Python 调试器
## PuDB
-
基于控制台的 Python 调试器
![
python-debugging-pudb
](
img/be30d3c5aa2158a9864d173116eb6291.jpg
)
...
...
@@ -42,19 +42,19 @@ $ pudb3 program.py
(或 sudo(如果您没有正确的权限))
您可以逐步完成该程序。 使用
**n**
键逐步执行该程序。 当前变量内容显示在右上方。
您可以逐步完成该程序。 使用
`n`
键逐步执行该程序。 当前变量内容显示在右上方。
![
pudb-debug
](
img/224bd2a6a881437fdda6c2509430673e.jpg
)
python 调试
您可以使用
**b**
键设置断点。 要继续执行直到下一个断点,请按
**c**
键。
您可以使用
`b`
键设置断点。 要继续执行直到下一个断点,请按
`c`
键。
![
python-breakpoint
](
img/b4dc9a1dbd2f3dbfa9b8223a63b62c12.jpg
)
Python 程序中的断点
## PDB
-
Python 调试器
## PDB
-
Python 调试器
`pdb`
模块支持设置断点。 断点是程序的有意暂停。 您可以在其中获取有关程序状态的更多信息。
...
...
@@ -83,7 +83,7 @@ pdb.set_trace()
```
我们在该程序中插入了一些断点。 程序将在每个断点处暂停(
**pdb.set_trace()**
)。 要查看变量内容,只需键入变量名称:
我们在该程序中插入了一些断点。 程序将在每个断点处暂停(
`pdb.set_trace()`
)。 要查看变量内容,只需键入变量名称:
```
py
...
...
@@ -98,7 +98,7 @@ $ python3 program.py
```
按
**c**
或
**继续**
继续执行程序,直到下一个断点
按
`c`
或
**继续**
继续执行程序,直到下一个断点
```
py
...
...
docs/43.md
浏览文件 @
ae68a0c3
...
...
@@ -21,7 +21,7 @@ with open('persons.csv', 'wb') as csvfile:
```
运行此代码将为我们提供以下内容的
filpeople.csv
:
运行此代码将为我们提供以下内容的
`filpeople.csv`
:
```
py
Name
,
Profession
...
...
@@ -31,11 +31,11 @@ Paul,Manager
```
您可以在您喜欢的 Office 程序中导入
person.csv
文件。
您可以在您喜欢的 Office 程序中导入
`person.csv`
文件。
![
python csv
](
img/f177725bc03d4c71b4a00e1334990e57.jpg
)
Spreadsheet file created in Python
用 Python 创建的电子表格文件
## 读取电子表格文件(csv)
...
...
@@ -64,7 +64,7 @@ with open('persons.csv', 'rb') as f:
```
也许您想将其存储到 Python 列表中。 我们从 csv 文件中获取数据,然后将其存储到 Python 列表中。 我们使用
if
语句跳过标题,因为它不属于列表。 完整代码:
也许您想将其存储到 Python 列表中。 我们从 csv 文件中获取数据,然后将其存储到 Python 列表中。 我们使用
`if`
语句跳过标题,因为它不属于列表。 完整代码:
```
py
import
csv
...
...
@@ -102,5 +102,5 @@ print jobs
```
大多数电子表格或 Office 程序都可以导出 csv 文件,因此我们建议您创建任何类型的 csv 文件并进行处理:-)
大多数电子表格或 Office 程序都可以导出 csv 文件,因此我们建议您创建任何类型的 csv 文件并进行处理
:-)
docs/5.md
浏览文件 @
ae68a0c3
...
...
@@ -10,7 +10,7 @@
Python 为字符串的字符建立索引,每个索引都与一个唯一字符相关联。 例如,字符串
`"python"`
中的字符具有索引:
![
String
](
img/9faa714fe3700fc2441dae01484b73c3.jpg
)
<
/picture
>
](/wp-content/uploads/2016/03/python-string.png)
![
String
](
img/9faa714fe3700fc2441dae01484b73c3.jpg
)
字符串编号
...
...
@@ -37,7 +37,7 @@ s[ startIndex : pastIndex ]
```
startIndex 是字符串的起始索引。 pastIndex 是切片末尾的
1。
`startIndex`
是字符串的起始索引。
`pastIndex`
是切片末尾加
1。
如果省略第一个索引,则切片将从头开始。 如果省略最后一个索引,则切片将转到字符串的末尾。 例如:
...
...
docs/6.md
浏览文件 @
ae68a0c3
...
...
@@ -10,11 +10,11 @@ Python 中的变量(`x`,`y`,`z`)。它们可以稍后在程序中使用
数字可以是以下数据类型之一:
*
整数
_(1,2,3,4)_
*
整数
(
`1,2,3,4`
)
*
浮点
_(点后面的数字)_
*
浮点
(点后面的数字)
*
布尔值
_(对或错)_
*
布尔值
(真或假)
## 数值变量示例
...
...
@@ -27,7 +27,7 @@ z = True
```
您可以使用
print()
函数将它们输出到屏幕上。
您可以使用
`print()`
函数将它们输出到屏幕上。
```
py
x
=
1
...
...
@@ -40,7 +40,7 @@ print(z)
```
Python 支持算术运算,例如加法(
+),乘法(
*
),除法(/)和减法(-
)。
Python 支持算术运算,例如加法(
`+`
),乘法(
`*`
),除法(
`/`
)和减法(
`-`
)。
```
py
#!/usr/bin/env python
...
...
@@ -73,8 +73,9 @@ print(sum)
```
**Python 2**
(旧版本)
您也可以使用 _raw_input_ 函数要求用户输入:
## Python 2 (旧版本)
您也可以使用
`raw_input`
函数要求用户输入:
```
py
#!/usr/bin/env python
...
...
docs/7.md
浏览文件 @
ae68a0c3
...
...
@@ -52,7 +52,7 @@ print(l) # prints all elements
```
如果要按降序排列列表,只需使用
reverse()
函数。
如果要按降序排列列表,只需使用
`reverse()`
函数。
```
py
#!/usr/bin/python
...
...
docs/8.md
浏览文件 @
ae68a0c3
...
...
@@ -2,8 +2,7 @@
> 原文: [https://pythonspot.com/if-statements/](https://pythonspot.com/if-statements/)
在 Python 中,您可以定义条件语句,称为 if 语句。
如果满足某些条件,则将执行代码块。
在 Python 中,您可以定义条件语句,称为
`if`
语句。如果满足某些条件,则将执行代码块。
## `if`语句
...
...
@@ -21,7 +20,7 @@ else:
```
如果将
x
设置为大于 10,它将执行第二个代码块。 我们使用缩进(4 个空格)定义块。
如果将
`x`
设置为大于 10,它将执行第二个代码块。 我们使用缩进(4 个空格)定义块。
## 一个小游戏:
...
...
@@ -66,7 +65,7 @@ if a > 10:
```
考虑结合 4 或 6 个条件,这可能很快变得难以阅读。 幸运的是,Python 有一个解决方案,我们可以使用
_ 和 _
关键字组合条件。
考虑结合 4 或 6 个条件,这可能很快变得难以阅读。 幸运的是,Python 有一个解决方案,我们可以使用
`and`
关键字组合条件。
```
py
guess
=
24
...
...
@@ -77,6 +76,6 @@ else:
```
有时您可能想使用
_ 或 _
运算符。
有时您可能想使用
`or`
运算符。
[
下载 Python 练习
](
https://pythonspot.com/download-python-exercises/
)
\ No newline at end of file
docs/9.md
浏览文件 @
ae68a0c3
...
...
@@ -17,7 +17,7 @@ def function(parameters):
```
**
def
关键字**
告诉 Python 我们有一段可重用的代码(一个函数)。 一个程序可以具有许多函数。
**
`def`
关键字**
告诉 Python 我们有一段可重用的代码(一个函数)。 一个程序可以具有许多函数。
## 实际例子
...
...
@@ -40,7 +40,7 @@ print(f(3))
```
该函数具有一个参数
x
。 返回值是函数返回的值。 并非所有函数都必须返回某些内容。
该函数具有一个参数
`x`
。 返回值是函数返回的值。 并非所有函数都必须返回某些内容。
## 参数
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录