3. Python

下面例子是否显示提示(>>> ...)区分输入输出输入例子中的代码键入提示开头提示所有内容提示开头解释器输出注意例子中的出现第二提示用来结束命令此时键入空白

可以通过示例方块右上 >>> 点击切换显示提示输出如果隐藏示例提示输出那么可以方便输入复制粘贴解释器

手册中的许多例子甚至交互命令包含注释。Python 注释 # 开头直到物理结束注释可以在行开头空白代码之后不能字符串里面字符串中的 # 就是 # 注释用于阐明代码,Python 解释注释键入例子可以输入注释

示例如下

#
第一注释
spam = 1 #
第二注释
# ...
三条
text = "#
不是注释因为引号之内。"

3.1. Python
用作计算器

现在尝试一些简单 Python 命令启动解释器等待提示(>>> )出现
3.1.1.
数字

解释器简单计算器可以输入表达式结果表达式语法直观运算 +, -, * / 用来执行算术运算圆括号 (()) 用来进行分组例如:
>>>

2 + 2
4

50 - 5*6
20

(50 - 5*6) / 4
5.0

8 / 5 #
除法运算总是返回浮点数
1.6

整数,2、4、20 )类型 int,小数,5.0、1.6 )类型 float。教程后半部分介绍数字类型

除法运算 (/) 总是返回浮点数如果 floor division 得到整数结果可以使用 // 运算计算余数可以使用 %:
>>>

17 / 3 #
经典除法运算返回浮点数
5.666666666666667


17 // 3 #
向下除法运算丢弃小数部分
5

17 % 3 # %
运算返回余数
2

5 * 3 + 2 #
向下 * 除数 + 余数
17

Python
** 运算计算乘方 [1]:
>>>

5 ** 2 # 5
平方
25

2 ** 7 # 2
7 次方
128

等号(=)用于变量赋值赋值下一个交互提示位置显示任何结果
>>>

width = 20

height = 5 * 9

width * height
900

如果变量定义赋值),使用变量提示错误
>>>

n #
试图访问定义变量
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name 'n' is not defined

Python
全面支持浮点数混合类型运算数运算整数转换浮点数
>>>

4 * 3.75 - 1
14.0

交互模式上次输出表达式变量 _。 Python 当作计算器变量实现下一步计算简单例如
>>>

tax = 12.5 / 100

price = 100.50

price * tax
12.5625

price + _
113.0625

round(_, 2)
113.06

最好变量当作只读类型不要赋值否则创建同名独立局部变量变量魔法行为屏蔽内置变量

除了 int float,Python 支持其他数字类型例如 Decimal Fraction。Python 内置支持 复数后缀 j J 用于表示虚数例如 3+5j )。
3.1.2.
文本

除了数字 Python 可以操作文本 str 类型表示称为字符串”)。 包括字符 "!", 单词 "rabbit", 名称 "Paris", 句子 "Got your back." 等等. "Yay! :)"。 它们可以成对单引号 ('...') 双引号 ("...") 标示结果完全相同 [2]。
>>>

'spam eggs' # single quotes
'spam eggs'

"Paris rabbit got your back :)! Yay!" # double quotes
'Paris rabbit got your back :)! Yay!'

'1975' # digits and numerals enclosed in quotes are also strings
'1975'

标示引号本身我们需要进行转义”,前面 \。 或者我们可以使用不同类型引号:
>>>

'doesn\'t' #
使用 \' 转义单引号...
"doesn't"

"doesn't" # ...
或者改用双引号
"doesn't"

'"Yes," they said.'
'"Yes," they said.'

"\"Yes,\" they said."
'"Yes," they said.'

'"Isn\'t," they said.'
'"Isn\'t," they said.'

Python shell 字符串定义输出字符串看起来可能不同。 print() 函数略去标示引号打印经过转义特殊字符产生更为易读输出:
>>>

s = 'First line.\nSecond line.' # \n
表示换行

s #
不用 print(),特殊字符包括字符串
'First line.\nSecond line.'

print(s) #
print(),特殊字符转写因此 \n 产生
First line.
Second line.

如果希望前置 \ 字符转义特殊字符可以使用 原始字符串引号添加 r 即可
>>>

print('C:\some\name') #
这里 \n 表示换行
C:\some
ame

print(r'C:\some\name') #
注意引号 r
C:\some\name

原始字符串还有微妙限制原始字符串不能奇数 \ 字符结束参阅 FAQ 条目 了解信息绕过办法

字符串面值可以跨越一种做法使用三重引号: """...""" '''...'''。 结束自动包括字符串可以通过在行添加 \ 避免行为在下面的例子开头换行不会包括:
>>>

print("""\

Usage: thingy [OPTIONS]

-h Display this usage message

-H hostname Hostname to connect to

""")
Usage: thingy [OPTIONS]
-h Display this usage message
-H hostname Hostname to connect to


字符串可以 + 合并一起),可以 * 重复
>>>

# 3
乘以 'un', 'ium'

3 * 'un' + 'ium'
'unununium'

相邻多个 字符串面值引号标注字符自动合并
>>>

'Py' 'thon'
'Python'

拼接分隔字符串这个功能特别实用
>>>

text = ('Put several strings within parentheses '

'to have them joined together.')

text
'Put several strings within parentheses to have them joined together.'

功能只能用于面值不能用于变量表达式
>>>

prefix = 'Py'

prefix 'thon' #
不能拼接变量字符串面值
File "<stdin>", line 1
prefix 'thon'
^^^^^^
SyntaxError: invalid syntax

('un' * 3) 'ium'
File "<stdin>", line 1
('un' * 3) 'ium'
^^^^^
SyntaxError: invalid syntax

合并多个变量合并变量面值 +:
>>>

prefix + 'thon'
'Python'

字符串支持 索引下标访问),第一字符索引 0。单字没有专用类型就是长度字符串
>>>

word = 'Python'

word[0] # 0
字符
'P'

word[5] # 5
字符
'n'

索引支持负数负数索引右边开始计数
>>>

word[-1] #
最后字符
'n'

word[-2] #
倒数第二字符
'o'

word[-6]
'P'

注意,-0 0 一样因此负数索引 -1 开始

除了索引操作支持 切片索引用来获取单个字符 切片 允许获取字符串:
>>>

word[0:2] #
0 () 2 () 字符
'Py'

word[2:5] #
2 () 5 () 字符
'tho'

切片索引默认有用省略开始索引默认 0,省略结束索引认为字符串结尾
>>>

word[:2] #
开头 2 () 字符
'Py'

word[4:] #
4 () 末尾
'on'

word[-2:] #
倒数第二 () 末尾
'on'

注意输出结果包含切片开始包含切片结束因此,s[:i] + s[i:] 总是等于 s:
>>>

word[:2] + word[2:]
'Python'

word[:4] + word[4:]
'Python'

可以这样理解切片索引指向字符 之间第一字符左侧 0,最后字符右侧 n ,n 字符串长度例如

+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1

第一数字字符串索引 0...6 位置第二数字对应负数索引位置。i j 切片 i j 之间所有对应字符组成

对于使用索引切片如果索引越界切片长度就是索引例如, word[1:3] 长度 2。

索引越界报错
>>>

word[42] # word
只有 6 字符
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: string index out of range

但是切片自动处理越界索引
>>>

word[4:42]
'on'

word[42:]
''

Python
字符串不能修改 immutable 因此字符串索引位置赋值报错
>>>

word[0] = 'J'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

word[2:] = 'py'
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

生成不同字符串新建字符串
>>>

'J' + word[1:]
'Jython'

word[:2] + 'py'
'Pypy'

内置函数 len() 返回字符串长度
>>>

s = 'supercalifragilisticexpialidocious'

len(s)
34

参见

文本序列类型 --- str

字符串 序列类型支持序列类型各种操作
字符串方法

字符串支持变形查找方法
f
字符串

表达式字符串面值
格式字符串语法

使用 str.format() 格式化字符串
printf
风格字符串格式化

这里详述 % 运算格式化字符串操作

3.1.3.
列表

Python
支持多种 复合 数据类型不同组合在一起常用 列表方括号标注逗号分隔列表 可以包含不同类型元素一般情况各个元素类型相同
>>>

squares = [1, 4, 9, 16, 25]

squares
[1, 4, 9, 16, 25]

字符串其他内置 sequence 类型一样列表支持索引切片
>>>

squares[0] #
索引操作返回条目
1

squares[-1]
25

squares[-3:] #
切片操作返回列表
[9, 16, 25]

列表支持合并操作
>>>

squares + [36, 49, 64, 81, 100]
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]

immutable 字符串不同, 列表 mutable 类型内容可以改变
>>>

cubes = [1, 8, 27, 65, 125] #
这里有点问题

4 ** 3 # 4
立方 64,不是 65!
64

cubes[3] = 64 #
替换错误

cubes
[1, 8, 27, 64, 125]

可以通过使用 list.append() 方法列表末尾添加条目我们后面介绍相关方法):
>>>

cubes.append(216) #
添加 6 立方

cubes.append(7 ** 3) #
7 立方

cubes
[1, 8, 27, 64, 125, 216, 343]

Python
中的简单赋值不会复制数据列表赋值变量变量引用 现有列表通过变量列表任何更改都会引用所有其他变量看到。:
>>>

rgb = ["Red", "Green", "Blue"]

rgba = rgb

id(rgb) == id(rgba) #
它们指向同一对象
True

rgba.append("Alph")

rgb
["Red", "Green", "Blue", "Alph"]

切片操作返回包含请求元素列表以下切片操作返回列表 拷贝
>>>

correct_rgba = rgba[:]

correct_rgba[-1] = "Alpha"

correct_rgba
["Red", "Green", "Blue", "Alpha"]

rgba
["Red", "Green", "Blue", "Alph"]

切片赋值可以改变列表大小甚至清空整个列表
>>>

letters = ['a', 'b', 'c', 'd', 'e', 'f', 'g']

letters
['a', 'b', 'c', 'd', 'e', 'f', 'g']

#
替换一些

letters[2:5] = ['C', 'D', 'E']

letters
['a', 'b', 'C', 'D', 'E', 'f', 'g']

#
现在移除它们

letters[2:5] = []

letters
['a', 'b', 'f', 'g']

#
通过列表替代所有元素清空列表

letters[:] = []

letters
[]

内置函数 len() 支持列表
>>>

letters = ['a', 'b', 'c', 'd']

len(letters)
4

可以嵌套列表创建包含其他列表列表),例如
>>>

a = ['a', 'b', 'c']

n = [1, 2, 3]

x = [a, n]

x
[['a', 'b', 'c'], [1, 2, 3]]

x[0]
['a', 'b', 'c']

x[0][1]
'b'

3.2.
走向编程第一步

当然我们 Python 完成二更复杂任务例如我们可以下面这样 斐波那契数列 初始部分序列:
>>>

#
斐波那契数列

#


a, b = 0, 1

while a < 10:

print(a)

a, b = b, a+b


0
1
1
2
3
5
8

引入几个功能

第一中的 多重赋值变量 a b 同时获得 0 1 。最后一行一次多重赋值体现等号右边所有表达式语句任何变量之前出来——求值顺序

while
循环只要条件这里 a < 10)一直执行。Python C 一样任何非零整数这个条件可以字符串列表类型事实上任何序列可以长度非零序列示例中的判断只是简单比较比较操作符写法 C 语言一样: < (小于)、 > (大于)、 == (等于)、 <= (小于等于)、 >= (大于等于 != (等于)。

循环 缩进缩进 Python 组织语句方式交互命令行缩进输入空格制表)。使用文本编辑器可以实现复杂输入方式所有像样文本编辑器支持自动缩进交互输入复合语句最后输入空白表示完成因为解析知道一行代码代码最后一行)。注意同一语句一行缩进相同

print()
函数输出给定参数除了可以单一表达式作为参数比如前面计算器例子),处理多个参数包括浮点数字符串输出字符串不带引号参数之间插入空格这样可以实现格式化操作这样:
>>>

i = 256*256

print('The value of i is', i)
The value of i is 65536

关键字参数 end 可以取消输出后面换行, 另一字符串结尾
>>>

a, b = 0, 1

while a < 1000:

print(a, end=',')

a, b = b, a+b


0,1,1,2,3,5,8,13,21,34,55,89,144,233,377,610,987,

备注
[1]

**
- 优先级, 所以 -3**2 解释 -(3**2) ,因此结果 -9。避免这个问题并且得到 9, 可以 (-3)**2。
[2]

其他语言不同特殊字符 \n 单引号('...' )双引号("..." )意义一样引号唯一区别需要单引号转义双引号 " (此时必须单引号转义 \' ),反之亦然