python基础(2)


仅能打印‘Hello World’还远远不够,难道不是吗?你像做得更多 —— 想得到
一些输入,对其进行操作,然后再得到一些输出。在 Python 中可以使用常量和变量
来实现。
5.1 字面意义上的常量
一个字面意义上的常量的例子是如同 5 、 1.23 、 9.25e-3 这样的数,或者如
同 ’This is a string’ 、 "It’sa string!" 这样的字符串。它们被称作字面意义上的,因为它
们具备字面的意义 —— 你按照它们的字面意义使用它们的值。数 2 总是代表它自己,
而不会是别的什么东西 —— 它是一个常量,因为不能改变它的值。因此,所有这些
都被称为字面意义上的常量。
5.2 数
在 Python 中数的类型有三种 —— 整数、浮点数和复数。
• 2 是一个整数的例子。
• 3.23 和 52.3E-4 是浮点数的例子。 E 标记表示 10 的幂。在这里, 52.3E-4 表
示 52.3 * 10−4。
• (-5+4j) 和 (2.3-4.6j) 是复数的例子。
给有经验的程序员的注释:
在 Python 中不用区分‘long int’类型。默认的整数类型可以任意长。(译者注:长度应该与内存
包括虚拟内存的大小有关)
5.3 字符串
字符串是字符的序列。字符串基本上就是一组单词。单词可以是英语或其
它由 Unicode 标准支持的语言,其实这也意味着世界上几乎所有的语言(http:
//www.unicode.org/faq/basic_q.html#16)。
给有经验的程序员的注释:
没有仅仅使用 ASCII 的字符串,原因是 Unicode 是 ASCII 的超集。如果要严格使用 ASCII 编码的
字节流,可用 str.encode("ascii") 。更多细节,请访问在 StackOverflow 上的相关讨论。
默认所有的字符串的编码是 Unicode 。
我保证在你写的几乎每个 Python 程序中都会用到用到字符串,所以注意一下下
一部分中关于如何在 Python 中使用字符串的内容。
Edited by LATEX 14 u
b A Byte of Python 第 5 章 基础
5.4 单引号
你可以用单引号指定字符串,如 ’Quote me on this’ 。所有的空白,即空格和制表
符都照原样保留。
5.5 双引号
在双引号中的字符串与单引号中的字符串的使用完全相同,例如 "What’s your
name?" 。
5.6 三引号
利用三引号("""or”’),你可以指示一个多行的字符串。你可以在三引号中自由
的使用单引号和双引号。例如:
'''This is a multi-line string. This is the first line.
 This is the second line.
 "What's your name?," I asked.
 He said "Bond, James Bond."
 '''
5.7 转义序列
假如你有一个字符串包含单引号(’),如何表示这个字符串呢?例如,字符串
是 What’s your name? 。你不能用 ’What’s your name?’ 来表示,因为 Python 不知道字
符串的起始和结束位置。所以应该将字符串中间的这个单引号指定为不表示字符串的
结束。这可在称之为转义序列的协助下实现。可以讲单引号指定为 ´ —— 注意反斜
杠。现在,就能将字符串表示为 ’What\’s your name?’ 。
还有一种方式就是用双引号 "What’s your name?" 。类似地,在用双引号的字符串
中用双引号必须用转义符。还有,必须用转义符 \\ 来表示反斜杠。
如果你想指定两行字符串,该如何做呢?一种方式就是用前面提到的用三引号的
字符串,或者可以用转义符 \n 表示新的一行的开始。例如 This is the first line\nThis is
the second line 。另外一个有用的转义字符是 Tab 键 ——\ t。有许多转义序列,这儿
仅仅提到了最有用的几个。
需要说明的是,在一个字符串中,在一行末尾的反斜杠仅仅表示下一行的字符串
是上一行的继续。,但并不增加新的行。例如:
 "This is the first sentence.\
 This is the second sentence."


与 "This is the first sentence. This is the second sentence." 等价。
Edited by LATEX 15 u
b A Byte of Python 第 5 章 基础
5.8 自然字符串
如果,你想指定一些不被特殊处理,例如像转义序列,那么,就需要通过在字符
串前面附加 r 或 R 来指定自然字符串。例如,"Newlines are indicated by \n" 。
5.9 字符串是不可变的
这意味着一个字符串一旦创建,就不能在改变它。虽然这似乎是坏事,其实不
是。在下面我们会看到在各种各样的程序中这其实并不是什么限制。
5.10 字符串按字面意义连接
如果你把两个字符串按字面意义相邻放着,他们会被 Python 自动级连。例如,
’What\’s”your name?’ 会被自动转为 "What’s your name?" 。
给 C/C++ 程序员的注释:
在 Python 中没有单独的 char 数据类型。其实也没有必要,我确定你不会再考虑它。
给 Perl/PHP 程序员的注释:
记住单引号和双引号是一样的 —— 没有丝毫差异。
给正则表达式使用者的注释:
用正则表达式的时候请使用自然字符串。否则,可能会用到许多反斜杠。例如,,后向引用符可
以写成 ’\\1’ 或 r’\1’。
5.11 format 方法
有时我们并不想用其他信息来构造字符串。这儿 format() 方法就很有用。
1 #!/usr/bin/python
2 # Filename: str_format.py
3 age = 25
4 name = 'Swaroop'
5 print('{0} is {1} years old'.format(name, age))
6 print('Why is {0} playing with that python?'.format(name))
输出:
1 $ python str_format.py
2 Swaroop is 25 years old
3 Why is Swaroop playing with that python?


运行原理:
一个字符串能使用确定的格式,随后,可以调用 format 方法来代替这些格式,参数要
与 format 方法的参数保持一致。
观察首次使用 0 的地方,这与 format 方法的第一个参变量 name 相一致。类似地,
第二个格式 1 与 format 方法的第二个参变量 age 相一致。
Edited by LATEX 16 u
b A Byte of Python 第 5 章 基础
注意,也可用字符串连接: name + ’ is ’ str(age) + ’ years old’ 来实现,但这似乎
比较难看,容易出错。第二,转为字符串的操作由 format 自动完成,而不需要明确
的转换。第三,用 format 方法的时候,不必处理用过的变量和 vice-versa 就能改变消
息。
在 Python 中, format 方法就是用参变量的值代替格式符。更多细节如下:
1 >>> '{0:.3}'.format(1/3) # decimal (.) precision of 3 for float
2 '0.333'
3 >>> '{0:_^11}'.format('hello') # fill with underscores (_) with the
text
4 centered (^) to 11 width
5 '___hello___'
6 >>> '{name} wrote {book}'.format(name='Swaroop', book='A Byte of
Python')
7 # keyword-based
8 'Swaroop wrote A Byte of Python'


更多关于格式在 Python Enhancement Proposal No.3101 中有解释。
5.12 变量
仅仅使用字面意义上的常量很快就会引发问题 —— 我们需要一种既可以储存信
息又可以对它们进行操作的方法。这是为什么要引入变量。变量就是我们想要的东西
—— 它们的值可以变化,即你可以使用变量存储任何东西。变量只是你的计算机中
存储信息的一部分内存。与字面意义上的常量不同,你需要一些能够访问这些变量的
方法,因此要给变量命名。
5.13 标识符的命名
变量是标识符的例子。标识符是用来标识某样东西的名字。在命名标识符的时
候,你要遵循这些规则:
• 标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线
(‘_’)。
• 标识符名称的其他部分可以由字母(大写或小写)、下划线(‘_’)或数字(0-9)
组成。
• 标识符名称是对大小写敏感的。例如, myname 和 myName 不是一个标识符。注
意前者中的小写 n 和后者中的大写 N 。
• 有效标识符名称的例子有 i 、 __my_name 、 name_23 和 a1b2_c3 。
• 无效标识符名称的例子有 2things 、 this is spaced out 和 my-name 。
Edited by LATEX 17 u
b A Byte of Python 第 5 章 基础
5.14 数据类型
变量可以有不同类型的值,称之为数据类型。基本数据类型是数字和字符串,这
两种已经讨论过了。在后面的章节中,会看到如何用类来创建我们自己的类型。
5.15 对象
记住, Python 将一切在程序中用到的东西都作为对象。这是从广义上来讲的。
我们不会说“某某东西”,我们会说“某个对象”。
给面向对象程序使用者的注释:
Python 是完全面向对象的,在某种意义上,任何东西都被作为对象,包括数字、字符串和函数。
让我们来看看如何与文字意义上的常量一道使用变量。保存下面的例子,运行程
序。
如何写 Python 程序
此后,保存、运行一个 Python 程序的标准过程如下:
1. 打开你喜欢的编辑器。
2. 键入例子中给出的程序代码。
3. 用注释中给的文件名来保存文件,我保持将所有 Python 程序保存成扩展名为.py 的习惯。
4. 用带命令行解释器运行.py 程序,或者用 IDLE 运行程序。也可以用前面提到的执行方式。
5.16 例子:使用变量和文字意义上的常量
1 # Filename : var.py
2 i = 5
3 print(i)
4 i = i + 1
5 print(i)
6 s = '''This is a multi-line string.
7 This is the second line.'''
8 print(s)
输出:
1 $ python var.py
2 5
3 6
4 This is a multi-line string.
5 This is the second line.


运行机理:
这里是这个程序是运行机理。首先,用 = 给变量 i 赋值 5 。这一行叫做一个语句,语
句声明需要做某件事情,在这个地方我们把变量名 i 与值 5 连接在一起。接下来,我
们用 print 语句打印 i 的值,就是把变量的值打印在屏幕上。 然后我们对 i 中存储的
值加 1 ,再把它存回 i 。我们打印它时,得到期望的值 6 。
Edited by LATEX 18 u
b A Byte of Python 第 5 章 基础
类似地,我们把一个字面意义上的字符串赋给变量 s 然后打印它。
给静态语言程序员的注释:
使用变量时只需要给它们赋一个值。不需要声明或定义数据类型。
5.17 逻辑行和物理行
物理行是你在编写程序时所看见的。逻辑行是 Python 看见的单个语句。 Python 假
定每个物理行对应一个逻辑行。
逻辑行的例子如 print ’Hello World’ 这样的语句 —— 如果它本身就是一行(就像
你在编辑器中看到的那样),那么它也是一个物理行。
默认地, Python 希望每行都只使用一个语句,这样使得代码更加易读。
如果你想要在一个物理行中使用多于一个逻辑行,那么你需要使用分号(;)来
特别地标明这种用法。分号表示一个逻辑行/语句的结束。例如:
1 i = 5
2 print i
与下面这个相同:
1 i = 5;
2 print i;
同样也可以写成:
1 i = 5; print i;
甚至可以写成:
1 i = 5; print i


然而,我强烈建议你坚持在每个物理行只写一句逻辑行。仅仅当逻辑行太长的时候,
在多于一个物理行写一个逻辑行。这些都是为了尽可能避免使用分号,从而让代码更
加易读。事实上,我从来没有在 Python 程序中使用过或看到过分号。下面是一个在
多个物理行中写一个逻辑行的例子。它被称为明确的行连接。
1 s = 'This is a string. \
2 This continues the string.'
3 print s
它的输出:
1 This is a string. This continues the string.
类似地,
Edited by LATEX 19 u
b A Byte of Python 第 5 章 基础
1 print \
2 i
与如下写法效果相同:
1 print i


有时候,有一种暗示的假设,可以使你不需要使用反斜杠。这种情况出现在逻辑行中
使用了圆括号、方括号或波形括号的时候。这被称为暗示的行连接。你会在后面介绍
如何使用列表的章节中看到这种用法。
5.18 缩进
在 Python 中空白非常重要。实际上,在每行开头的空白很重要。称之为缩进。
在行首的主要的空白(空格键和制表符)用来决定逻辑行缩进的层次,从而来决定语
句分组。
这意味着同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。我
们将在后面的章节中看到有关块的用处的例子。
你需要记住的一样东西是错误的缩进会引发错误。例如:
1 i = 5
2 print('Value is ', i) # Error! Notice a single space at the start
of the line
3 print('I repeat, the value is ', i)
当你运行的时候,会得到下面的出错信息:
1 File "whitespace.py", line 4
2 print('Value is ', i) # Error! Notice a single space at the start
of the line
3 ^
4 IndentationError: unexpected indent


注意在第二行的开头有一个空格。Python 给出的错误信息告诉我们程序的语法不正
确,例如,程序的写法不正确。它告诉你,你不能随意地开始新的语句块(当然除了
你一直在使用的主块)。何时你能够使用新块,将会在后面的章节,如控制流中详细
介绍。
如何缩进
不要混合使用制表符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。我强烈建
议你在每个缩进层次使用单个制表符或两个或四个空格。选择这三种缩进风格之一。更加重要的
是,选择一种风格,然后一贯地使用它,即只使用这一种风格。
Edited by LATEX 20 u
b A Byte of Python 第 5 章 基础
给静态语言程序员的注释:
Python 总是使用缩进来代表代码块,不再使用括号。运行 from __future__ import braces 来获取更
多信息。


  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值