第一章-快速上手:基础知识
1.1 交互式解释器
print("hello world!")
可以输出hello world!
1.2 算法是什么
算法由一些列必须按照一定顺序执行的操作说明组成,要素为对象和语句。
1.3 数和表达式
- 一般加减乘除操作即为简单的”+-*/“操作。
- 除法运算的结果为小数,即为浮点数。
- 如果想在除法运算中丢弃小数部分,即执行整数运算,可以使用双斜杠”//“。
- 求余数可以用求余(求模)运算符”%”
- 应该注意整数的除法运算为向下圆整的结果,例如:
>>> 10 // 3 3 >>> 10 // -3 -4 >>> -10 // 3 -4 >>> -10 // -3 3 >>> 10 % 3 1 >>> 10 % -3 -2 >>> -10 % 3 2 >>> -10 % -3 -1
- 乘方运算符为”**”,注:乘方运算符的优先级比求负(单目减)高,因此负数的乘方运算要加括号。
- 十六进制(0x)、八进制(0)和二进制(0b)表示都以0打头,例如:
>>> 0xAF 175 >>> 010 8 >>> 0b1011010010 722
1.4 变量
变量是表示(或指示)特定值的名称,给变量赋予特定值的操作称为赋值,例如:
>>> x = 3
>>> x * 2
6
注:在Python中,名称(标识符)只能由字母、数字和下划线(_)构成,且不能以数字打头。因此在Python中Plan9是合法的变量名,而9Plan不是。
1.5 语句
表达式是一些东西,而语句做一些事情。
>>> 2 * 2##表达式
4
>>> print(2 * 2)##语句,print实际上为一个函数,因此所说的print语句其实是函数调用。
4
所有语句的根本特征:执行修改操作。例如,赋值语句改变变量,而print语句改变屏幕显示的外观。
1.6 获取用户输入
提供变量的值使用input函数,例如:
>>> x = input("x: ")##括号中打印特定字符串以提示用户输入的信息。
x: 34
>>> y = input("y: ")
y: 42
>>> print(int(x) * int(y))
1428
1.7 函数
函数犹如小型程序,可以用来执行特定的操作,例如乘方操作除了使用表达式”**”外,亦可以使用函数pow来实现:
>>> pow(2, 3)
8
像这样使用函数称为调用函数:你向他提供实参,而它返回一个值。鉴于函数调用返回一个值,因此它们也是表达式。
另常用函数如abs计算绝对值,round将浮点数圆整为与之最接近的整数:
>>> abs(-10)
10
>>> 2 // 3
0
>>> round(2 / 3)
1
1.8 模块
可将模块视为扩展,通过将其导入可以扩展Python功能。要导入特殊模块,可以使用特殊命令import。我们使用import导入模块,再以module.function的方式使用模块中的函数。
>>> import math
>>> math.floor(32.9)##floor返回小于或等于给定数的最小整数,相当于int(32.9)
32
>>> math.ceil(32.3)##ceil返回大于或等于给定数的最小整数
33
如果确定不会从不同模块导入多个同名函数,并且不想在每次调用函数时都制定模块名,在这种情况下,可以使用命令import的如下变种:
>>> from math import sqrt##通过使用命令import的变种from module import funtion,可在调用函数时不制定模块前缀。
>>> sqrt(9)
3.0
另外,可以使用变量来引用函数(以及其他大部分Python元素)。执行赋值语句foo = math.sqrt后,就可使用foo来计算平方根。例如,foo(4)的结果为2.0。
cmath和复数
如果坚持将值域限定为实数,并使用其近似的浮点数实现,就无法计算复数的平方根。复数的平方根为序数,而由实部和虚部组成的数为复数。Python标准库中提供了一个专门用于处理复数的模块。
>>>import cmath
>>>cmath.sqrt(-1)##注意到这里没有使用from...import...。如果使用了这种import命令,将无法使用常规函数。类似这样的名称冲突很隐蔽,因此除非必须使用from版的import命令,否则应坚持使用常规版import命令。
1j
Python本身提供了对复数的支持(即使不使用import cmath也可以计算复数),但是Python没有专门表示虚数的类型,而将虚数视为实部为零的复数。
1.9 保存并执行程序
新建一个拓展名为.py的文件,编写代码后保存运行。
1.9.1 从命令提示符运行Python脚本
可以在终端中键入python filename.py来运行Python代码。
1.9.2 让脚本像普通程序一样
在Windows中,为了看清Python代码文件的运行结果,可以在代码末尾添加如下代码行:
input("press <enter>")
即可在看清代码运行结果后按回车键关闭窗口。
1.9.3 注释
即在代码中以#开头解释代码行,#后到行尾的所有内容都将被忽略。
1.10 字符串
字符串用途众多,但主要用途是表示一段文本。
1.10.1 单引号字符串以及对引号转义
>>> "Hello world!"
'Hello world!'
>>> 'Hello world!'
'Hello world!'
在打印字符串时,单双引号并没有差别。但是,当引号是字符串的一部分时,对单双引号的使用便有了特定要求,或者可以对字符串中的引号进行转义。例如:
>>> "Let's go!"##字符串中有单引号,故两端只能使用双引号。
"Let's go!"
>>> '"Hello,world!" she said'##字符串中有双引号,故两端只能使用单引号。
'"Hello,world!" she said'
##或者可以对字符串中的引号进行转义。
>>> 'Let\'s go!'
"Let's go!"
>>> "\"Hello,world!\" she said"
'"Hello,world!" she said'
##如果不喜欢用反斜杠,可以通过使用长字符串和原始字符串来避免使用\
1.10.2 拼接字符串
- 可以同时依次输入两个字符串来使两字符串拼接。
>>> "Let's say " '"Hello, world!"' 'Let\'s say "Hello, world!"' >>> x = "Hello, " >>> y = "world!" >>> x y SyntaxError: invalid syntax
- 可以(通过变量)替代字符串,通过相加来使两字符串拼接。
>>> "Hello, " + "world!" 'Hello world!' >>> x = "Hello, " >>> y = "world!" >>> x + y 'Hello, world!"
1.10.3 字符串表示 str 和 repr
Python在打印的所有字符串都有引号括起,但是在使用 print 函数时,字符串将没有引号括起,如果再加上表示换行符的编码\n,差别将更加明显。
>>> "Hello,\nworld!"
'Hello,\nworld!'
>>> print("Hello,\nworld!")
Hello,
world!
通过两种不同的机制将值转换成了字符串。你可以通过使用函数str和repr直接使用这两种机制。使用str能以合理的方式将值转换成用户能够看懂的字符串。例如,尽可能将特殊字符编码转换为相应的字符。然而,使用repr时,通常会获得值的合法Python表达式表示。
>>> print(repr("Hello,\nworld!"))
'Hello,\nworld!'
>>> print(str("Hello,\nworld!"))
Hello,
world!
1.10.4 长字符串、原始字符串和字节
1.长字符串
要表示很长的字符串(跨越多行的字符串),可使用三引号(而不是普通引号)或三个双引号。这让解释器能够识别表示字符串开始和结束位置的引号,因此字符串本身可包含单引号和双引号,无需使用反斜杠进行转义。
常规字符串也可横跨多行。只要在行尾加上反斜杠,反斜杠和换行符将被转义,即被忽略。这种处理手法也适用于表达式和语句。
2.原始字符串
- 原始字符串不以特殊方式处理反斜杠,因此在有些情况下很有用。在常规字符串中,反斜杠扮演着特殊角色:它对字符进行转义,让你能够在字符串中包含原本无法包含的字符。
- 在大量使用反斜杠转义字符的场合,可以使用原始字符(用前缀r表示),因为它们不会对反斜杠做特殊处理,而是让字符串包含的每个字符都保持原样。如:
>>> print(r'C:\Program Files\fnord\foo\bar\baz\frozz\bazz') C:\Program Files\fnord\foo\bar\baz\frozz\bazz
- 注意:
##(1)引号需要像通常那样进行转义,但这意味着用于执行转义的反斜杠也将包含在最终的字符串中; >>> print(r'Let\'s go!') Let\'s go!'#(本行后一个'多余) ##(2)原始字符串不能以单个反斜杠结尾,除非对其进行转义,如果指定以反斜杠结尾的原始字符串,基本技巧是将反斜杠单独作为一个字符串: >>> print(r'C:\Program Files\fnord\foo\bar' '\\') C:\Program Files\fnord\foo\bar\ ##注意:在制定原始字符串时,可使用单引号或双引号将其括起,还可使用三引号将其括起。
3.Unicode、bytes和bytearray
- Python字符串使用Unicode编码来表示文本。大致而言,每个Unicode字符都用一个码点(code point)表示,而码点是Unicode标准给每个字符制定的数字。指定Unicode字符的通用机制为:使用16或32位的十六进制字面量(分别加上前缀\u或\U)或者使用字符的Unicode名称(\N{name})。
- Python bytes字面量只支持ASCII标准中的128个字符,而余下的128个值必须用转义序列来表示。Unicode与ASCII在字母表规模不同。
- Python还提供了bytearray,它是bytes的可变版。
1.11 小结
- 算法:从本质上说,编写计算机程序就是使用计算机能够理解的语言描述一种算法。这种对机器友好的描述被称为程序,主要由表达式和语句组成。
- 表达式:表达式为程序的一部分,结果为一个值。简单表达式是使用运算符和函数将字面值组合起来得到的。通过组合简单的表达式,可创建复杂的表达式。表达式还可能包含变量。
- 变量:变量是表示值的名称。通过赋值,可将新值赋给变量。赋值是一种语句。
- 函数:类似数学函数,它们可以接受参数,并返回结果。
- 模块:模块是扩展,可通过导入它们来扩展Python的功能。
- 程序:编写、保存和运行Python程序。
- 字符串:字符串是用Unicode码点表示的。