python基础知识2

转义序列

想象一下,如果你希望生成一串包含单引号( ' )的字符串,你应该如何指定这串字符串?
例如,你想要的字符串是 "What's your name?" 。你不能指定 'What's your name?' ,因为这
会使 Python 对于何处是字符串的开始、何处又是结束而感到困惑。所以,你必须指定这个单
引号不代表这串字符串的结尾。这可以通过 转义序列(Escape Sequence) 来实现。你通过
\ 来指定单引号:要注意它可是反斜杠。现在,你可以将字符串指定为 'What's your
name?' 。
另一种指定这一特别的字符串的方式是这样的: "What's your name?" ,如这个例子般使用
双引号。类似地, 你必须在使用双引号括起的字符串中对字符串内的双引号使用转义序列。
同样,你必须使用转义序列 \ 来指定反斜杠本身。
如果你想指定一串双行字符串该怎么办?一种方式即使用如前所述的三引号字符串,或者你
可以使用一个表示新一行的转义序列—— \n 来表示新一行的开始。下面是一个例子:

'This is the first line\nThis is the second line'

另一个你应该知道的大有用处的转义序列是制表符: \t 。实际上还有很多的转义序列,但
我必须只在此展示最重要的一些。
还有一件需要的事情,在一个字符串中,一个放置在末尾的反斜杠表示字符串将在下一行继
续,但不会添加新的一行。来看看例子:

"This is the first sentence. \
This is the second sentence."
相当于
基础
36
"This is the first sentence. This is the second sentence."

原始字符串

如果你需要指定一些未经过特殊处理的字符串,比如转义序列,那么你需要在字符串前增加
r 或 R 来指定一个 原始(Raw) 字符串。下面是一个例子:
r"Newlines are indicated by \n"
针对正则表达式用户的提示
在处理正则表达式时应全程使用原始字符串。否则,将会有大量 Backwhacking 需要处
理。举例说明的话,反向引用可以通过 '\1' 或 r'\1' 来实现。

变量

如果只使用字面常量很快就会让人感到无聊——我们需要一些能够存储任何信息并且也能操
纵它们的方式。这便是 变量(Variables) 登场的时刻。正如其名字所述那般,变量的值是可
以变化的,也就是说,你可以用变量来存储任何东西。变量只是你的计算机内存中用以存储
信息的一部分。与文字常量不同,你需要通过一些方式来访问这些变量,因此,你需要为它
们命名。

标识符命名

变量是标识符的一个例子。标识符(Identifiers) 是为 某些东西 提供的给定名称。在你命名
标识符时,你需要遵守以下规则:
第一个字符必须是字母表中的字母(大写 ASCII 字符或小写 ASCII 字符或 Unicode 字
符)或下划线( _ )。
标识符的其它部分可以由字符(大写 ASCII 字符或小写 ASCII 字符或 Unicode 字符)、
下划线( _ )、数字(0~9)组成。
标识符名称区分大小写。例如, myname 和 myName 并不等同。要注意到前者是小写字
母 n 而后者是大写字母 N 。
有效 的标识符名称可以是 i 或 name_2_3 ,无效 的标识符名称可能是
2things , this is spaced out , my-name 和 >a1b2_c3 。

数据类型

4
基础
37
变量可以将各种形式的值保存为不同的数据类型(Data Type)。基本的类型是我们已经讨论
过的数字与字符串。在后面的章节中,我们会了解如何通过 类(Classes) 类创建我们自己
的类型。

对象

需要记住的是,Python 将程序中的任何内容统称为 对象(Object)。这是一般意义上的说
法。我们以“某某对象(object)”相称,而非“某某东西(something)”。
针对面向对象编程语言用户的提示:
Python 是强(Strongly)面向对象的,因为所有的一切都是对象, 包括数字、字符串与
函数。
接下来我们将看见如何使用变量与字面常量。你需要保存以下案例并试图运行程序。

如何编写 Python 程序

从今以后,保存和运行 Python 程序的标准步骤如下:
对于 PyCharm 用户

  1. 打开 PyCharm。
  2. 以给定的文件名创建新文件。
  3. 输入案例中给出的代码。
  4. 右键并运行当前文件。
    注意:每当你需要提供 命令行参数(Command Line Arguments)时,点击 Run -> Edit
    Configurations 并在 Script parameters: 部分输入相应参数,并点击 OK 按钮:
    基础
    38
    对于其他编辑器用户
  5. 打开你选择的编辑器。
  6. 输入案例中给出的代码。
  7. 以给定的文件名将其保存成文件。
  8. 在解释器中通过命令 python program.py 来运行程序。
    案例:使用变量与字面常量
    输入并运行以下程序:
# 文件名:var.py
i = 5
print(i)
i = i + 1
print(i)
s = '''This is a multi-line string.
This is the second line.'''
print(s)
输出:
基础
39
5
6
This is a multi-line string.
This is the second line.

它是如何工作的
下面是这一程序的工作原理。首先,我们使用赋值运算符( = )将字面常量数值 5 赋值给
变量 i 。这一行被称之为声明语句(Statement)因为其工作正是声明一些在这一情况下应
当完成的事情:我们将变量名 i 与值 5 相连接。然后,我们通过 print 语句来打印变量
i 所声明的内容,这并不奇怪,只是将变量的值打印到屏幕上。
接着,我们将 1 加到 i 变量所存储的值中,并将得出的结果重新存储进这一变量。然后我
们将这一变量打印出来,并期望得到的值应为 6 。
类似地,我们将字面文本赋值给变量 s ,并将其打印出来。
针对静态编程语言程序员的提示
变量只需被赋予某一值。不需要声明或定义数据类型。

逻辑行与物理行

所谓物理行(Physical Line)是你在编写程序时 你所看到 的内容。所谓逻辑行(Logical
Line)是 Python 所看到 的单个语句。Python 会假定每一 物理行 会对应一个 逻辑行。
有关逻辑行的一个例子是诸如 print('hello world') 这样一句语句——如果其本身是一行
(正如你在编辑器里所看到的那样),那么它也对应着一行物理行。
Python 之中暗含这样一种期望:Python 鼓励每一行使用一句独立语句从而使得代码更加可
读。
如果你希望在一行物理行中指定多行逻辑行,那么你必须通过使用分号( ; )来明确表明逻辑
行或语句的结束。下面是一个例子:

i = 5
print(i)
实际上等同于
i = 5;
print(i);
同样可以看作
基础
40
i = 5; print(i);
也与这一写法相同
i = 5; print(i)

然而,我强烈建议你对于每一行物理行最多只写入一行逻辑行。这个观点就是说你不应该使
用分号。实际上,我从未在 Python 程序中使用、甚至是见过一个分号。
在一类情况下这一方法会颇为有用:如果你有一行非常长的代码,你可以通过使用反斜杠将
其拆分成多个物理行。这被称作显式行连接(Explicit Line Joining) :

s = 'This is a string. \
This continues the string.'
print(s)
输出:
This is a string. This continues the string.
类似地,
i = \
5
等同于
i = 5

在某些情况下,会存在一个隐含的假设,允许你不使用反斜杠。这一情况即逻辑行以括号开
始,它可以是方括号或花括号,但不能是右括号。这被称作 隐式行连接(Implicit Line
Joining)。你可以在后面当我们讨论列表(List)的章节时了解这一点。

缩进

空白区在 Python 中十分重要。实际上,空白区在各行的开头非常重要。这被称作 缩进
(Indentation)。在逻辑行的开头留下空白区(使用空格或制表符)用以确定各逻辑行的缩
进级别,而后者又可用于确定语句的分组。
5
6
基础
41
这意味着放置在一起的语句必须拥有相同的缩进。每一组这样的语句被称为 块(block)。我
们将会在后文章节的案例中了解块这一概念是多么重要。
有一件事你需要记住:错误的缩进可能会导致错误。下面是一个例子:

i = 5
# 下面将发生错误,注意行首有一个空格
print('Value is', i)
print('I repeat, the value is', i)
当你运行这一程序时,你将得到如下错误:
File "whitespace.py", line 3
print('Value is', i)
^
IndentationError: unexpected indent
# 缩进错误:意外缩进

你会注意到第二行开头有一个空格。Python 指出的错误信息告诉我们程序的语法是无效的,
意即,程序没有被正确地写入。这一信息对你的意义是 你不能任意开始一个新的语句块(当
然,除非你一直在使用默认的主代码块)。你可以使用新块的情况将会在后面诸如控制流等
章节加以介绍。

如何缩进

使用四个空格来缩进。这是来自 Python 语言官方的建议。好的编辑器会自动为你完成这
一工作。请确保你在缩进中使用数量一致的空格,否则你的程序将不会运行,或引发不
期望的行为。
针对静态编程语言程序员的提示
Python 将始终对块使用缩进,并且绝不会使用大括号。你可以通过运行 from
future import braces 来了解更多信息。

总结

现在我们已经了解了诸多本质性的细节,我们可以前去了解控制流语句等更多更加有趣的东
西。记得一定要充分理解你在本章所阅读的内容。
. 自本章起,书中将出现大量程序源代码内容,在源代码中会包含一些英文语句或者英
文注释。为保持源代码整体美观以及避免其它不必要的改动,在代码内容中出现的英文
语句将会保持原样,英文注释将酌情翻译。 ↩
1
2
基础
42
. “字面常量”原文作 Literal Constants。沈洁元译本译作“字面意义上的常量”。在一些
Python 中文文档中,Literal 译作“字面值”。 ↩
. 原文作 literal。 ↩
. “原始字符串”原文作 Raw String。沈洁元译本译作“自然字符串”。 ↩
. 沈洁元译本译作“明确的行连接”。 ↩
. 空白区原文作“Whitespace”,沈洁元译本译作“空白”。它可能被理解成“空格”,但为了
与后文的空格(Space)区分,此处取字面意。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,324评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,303评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,192评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,555评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,569评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,566评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,927评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,583评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,827评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,590评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,669评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,365评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,941评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,928评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,159评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,880评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,399评论 2 342

推荐阅读更多精彩内容

  • 一、变量的定义 1.1、在 Python 中,每个变量在使用前都必须赋值,变量 赋值以后 该变量 才会被创建 1....
    IIronMan阅读 433评论 0 1
  • 1.注释 以 # 开头,# 右边的所有东西都被当做说明文字,而不是真正要执行的程序,只起到辅助说明作用 示例代码如...
    錦魚阅读 266评论 0 0
  • python条件判断语句 //多个条件语句一起使用时,若前面的语句已经判断出了整个表达式的值,则后面的表达式不会再...
    Hf1dw阅读 329评论 3 0
  • 模块 定义:用来从逻辑上组织python代码(变量,函数,累,逻辑:实现一个功能),本质就是.py结尾的pytho...
    哈_1_哈阅读 338评论 1 0
  • 1、时间的表示 计算机中时间的表示是从“1970年1月1日00:00:00”开始,以毫秒(1/1000秒)进行计算...
    Hugh1987阅读 425评论 0 0