1.输出>>> print 'hello world' //注意,>>>是你键入Python语句的提示符
2.使用源文件
#!/usr/bin/python
# Filename : helloworld.py
print
'Hello World'
我们能够用echo命令来显示PATH变量,用$给变量名加前缀以向shell表示我们需要这个变量的值。我们看到/home/swaroop/bin
是PATH变量中的目录之一。swaroop是我的系统中使用的用户名。通常,在你的系统中也会有一个相似的目录。你也可以把你选择的目录添加到PATH变量中去——这可以通过运行PATH=$PATH:/home/swaroop/mydir完成,其中“/home/swaroop/mydir
”是我想要添加到PATH变量中的目录。
提示
对于Python来说,程序、脚本或者软件都是指同一个东西。
3.运行help(str)
——这会显示str
类的帮助。str类用于保存你的程序使用的各种文本(字符串)。
你可以获取Python中几乎所有东西的信息。使用help()
去学习更多关于help
本身的东西!
$ env PYTHONDOCS=/usr/share/doc/python-docs-2.3.4/html/ python
Python 2.3.4 (#1, Oct 26 2004, 16:42:40)
[GCC 3.4.2 20041017 (Red Hat 3.4.2-6.fc3)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> help('print')
你应该注意到我特意在“print
”上使用了引号,那样Python就可以理解我是希望获取关于“print”的帮助而不是想要它打印东西。
4.基本概念
4.1 数
在Python中有4种类型的数——整数、长整数、浮点数和复数。
2
是一个整数的例子。- 长整数不过是大一些的整数。
3.23
和52.3E-4
是浮点数的例子。E标记表示10的幂。在这里,52.3E-4
表示52.3 * 10
-4。(-5+4j)
和(2.3-4.6j)
是复数的例子。
字符串是 字符的序列 。字符串基本上就是一组单词。
我几乎可以保证你在每个Python程序中都要用到字符串,所以请特别留心下面这部分的内容。下面告诉你如何在Python中使用 字符串。
- 使用单引号(')
你可以用单引号指示字符串,就如同
'Quote me on this'
这样。所有的空白,即空格和制表符都照原样保留。 - 使用双引号(")
在双引号中的字符串与单引号中的字符串的使用完全相同,例如
"What's your name?"
。 - 使用三引号('''或""")
利用三引号,你可以指示一个多行的字符串。你可以在三引号中自由的使用单引号和双引号。例如:
'''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."
''' - 转义符
假设你想要在一个字符串中包含一个单引号('),那么你该怎么指示这个字符串?例如,这个字符串是
What's your name?
。你肯定不会用'What's your name?'
来指示它,因为Python会弄不明白这个字符串从何处开始,何处结束。所以,你需要指明单引号而不是字符串的结尾。可以通过 转义符 来完成这个任务。你用\'
来指示单引号——注意这个反斜杠。现在你可以把字符串表示为'What\'s your name?'
。另一个表示这个特别的字符串的方法是
"What's your name?"
,即用双引号。类似地,要在双引号字符串中使用双引号本身的时候,也可以借助于转义符。另外,你可以用转义符\\
来指示反斜杠本身。值得注意的一件事是,在一个字符串中,行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行。例如:
"This is the first sentence.\
This is the second sentence."等价于
"This is the first sentence. This is the second sentence."
- 自然字符串
如果你想要指示某些不需要如转义符那样的特别处理的字符串,那么你需要指定一个自然字符串。自然字符串通过给字符串加上前缀
r
或R
来指定。例如r"Newlines are indicated by \n"
。 - Unicode字符串
Unicode是书写国际文本的标准方法。如果你想要用你的母语如北印度语或阿拉伯语写文本,那么你需要有一个支持Unicode的编辑器。类似地,Python允许你处理Unicode文本——你只需要在字符串前加上前缀
u
或U
。例如,u"This is a Unicode string."
。记住,在你处理文本文件的时候使用Unicode字符串,特别是当你知道这个文件含有用非英语的语言写的文本。
- 字符串是不可变的
这意味着一旦你创造了一个字符串,你就不能再改变它了。虽然这看起来像是一件坏事,但实际上它不是。我们将会在后面的程序中看到为什么我们说它不是一个缺点。
- 按字面意义级连字符串
如果你把两个字符串按字面意义相邻放着,他们会被Python自动级连。例如,
'What\'s' 'your name?'
会被自动转为"What's your name?"
。
给C/C++程序员的注释
在Python中没有专门的char
数据类型。确实没有需要有这个类型,我相信你不会为此而烦恼。
给Perl/PHP程序员的注释
记住,单引号和双引号字符串是完全相同的——它们没有在任何方面有不同。
给正则表达式用户的注释
一定要用自然字符串处理正则表达式。否则会需要使用很多的反斜杠。例如,后向引用符可以写成'\\1'
或r'\1'
。
4.3标识符的命名
变量是标识符的例子。 标识符 是用来标识 某样东西 的名字。在命名标识符的时候,你要遵循这些规则:
-
标识符的第一个字符必须是字母表中的字母(大写或小写)或者一个下划线(‘ _ ’)。
-
标识符名称的其他部分可以由字母(大写或小写)、下划线(‘ _ ’)或数字(0-9)组成。
-
标识符名称是对大小写敏感的。例如,
myname
和myName
不是一个标识符。注意前者中的小写n和后者中的大写N。 -
有效 标识符名称的例子有
i
、__my_name
、name_23
和a1b2_c3
。 -
无效 标识符名称的例子有
2things
、this is spaced out
和my-name
。
4.4 对象
记住,Python把在程序中用到的任何东西都称为 对象 。这是从广义上说的。因此我们不会说“某某 东西 ”,我们说“某个 对象 ”。
给面向对象编程用户的注释
就每一个东西包括数、字符串甚至函数都是对象这一点来说,Python是极其完全地面向对象的。
我们将看一下如何使用变量和字面意义上的常量。保存下面这个例子,然后运行程序。
如何编写Python程序
下面是保存和运行Python程序的标准流程。
1. 打开你最喜欢的编辑器。
2. 输入例子中的程序代码。
3. 用注释中给出的文件名把它保存为一个文件。我按照惯例把所有的Python程序都以扩展名.py
保存。
4. 运行解释器命令python program.py或者使用IDLE运行程序。你也可以使用先前介绍的可执行的方法。
# Filename : 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
(源文件:code/var.py)
输出
$ python var.py
5
6
This is a multi-line string.
This is the second line.
它如何工作
下面来说明一下这个程序如何工作。首先我们使用赋值运算符(=
)把一个字面意义上的常数5
赋给变量i
。这一行称为一个语句。语句声明需要做某件事情,在这个地方我们把变量名i
与值5
连接在一起。接下来,我们用print
语句打印i
的值,就是把变量的值打印在屏幕上。
然后我们对i
中存储的值加1
,再把它存回i
。我们打印它时,得到期望的值6
。
类似地,我们把一个字面意义上的字符串赋给变量s
然后打印它。
给C/C++程序员的注释
使用变量时只需要给它们赋一个值。不需要声明或定义数据类型。
4.5逻辑行与物理行
物理行是你在编写程序时所 看见 的。逻辑行是Python 看见 的单个语句。Python假定每个 物理行 对应一个 逻辑行 。
逻辑行的例子如print 'Hello World'
这样的语句——如果它本身就是一行(就像你在编辑器中看到的那样),那么它也是一个物理行。
默认地,Python希望每行都只使用一个语句,这样使得代码更加易读。
如果你想要在一个物理行中使用多于一个逻辑行,那么你需要使用分号(;)来特别地标明这种用法。分号表示一个逻辑行/语句的结束。例如:
i =
5
print
i
与下面这个相同:
i =
5
;
print
i
;
同样也可以写成:
i =
5
;
print
i
;
甚至可以写成:
i =
5
;
print
i
然而,我强烈建议你坚持在每个物理行只写一句逻辑行。仅仅当逻辑行太长的时候,在多于一个物理行写一个逻辑行。这些都是为了尽可能避免使用分号,从而让代码更加易读。事实上,我 从来没有 在Python程序中使用过或看到过分号。
下面是一个在多个物理行中写一个逻辑行的例子。它被称为明确的行连接。
s =
'This is a string. \
This continues the string.'
print
s
它的输出:
This is a string. This continues the string.
类似地,
print
\
i
与如下写法效果相同:
print
i
有时候,有一种暗示的假设,可以使你不需要使用反斜杠。这种情况出现在逻辑行中使用了圆括号、方括号或波形括号的时候。这被称为暗示的行连接。你会在后面介绍如何使用列表的章节中看到这种用法。
4.6缩进
空白在Python中是重要的。事实上行首的空白是重要的。它称为缩进。在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。
这意味着同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。我们将在后面的章节中看到有关块的用处的例子。
你需要记住的一样东西是错误的缩进会引发错误。例如:
i =
5
print
'Value is'
, i
# Error! Notice a single space at the start of the line
print
'I repeat, the value is'
, i
当你运行这个程序的时候,你会得到下面的错误:
File "whitespace.py", line 4
print 'Value is', i # Error! Notice a single space at the start of the line
^
SyntaxError: invalid syntax
注意,在第二行的行首有一个空格。Python指示的这个错误告诉我们程序的语法是无效的,即程序没有正确地编写。它告诉你, 你不能随意地开始新的语句块 (当然除了你一直在使用的主块)。何时你能够使用新块,将会在后面的章节,如控制流中详细介绍。
如何缩进
不要混合使用制表符和空格来缩进,因为这在跨越不同的平台的时候,无法正常工作。我 强烈建议 你在每个缩进层次使用 单个制表符 或 两个或四个空格 。
选择这三种缩进风格之一。更加重要的是,选择一种风格,然后一贯地使用它,即 只 使用这一种风格。
5.运算符与表达式
运算符
我们将简单浏览一下运算符和它们的用法:
-
技巧
-
你可以交互地使用解释器来计算例子中给出的表达式。例如,为了测试表达式
2 + 3
,使用交互式的带提示符的Python解释器:>>> 2 + 3
5
>>> 3 * 5
15
>>>
运算符 | 名称 | 说明 | 例子 |
---|---|---|---|
+ | 加 | 两个对象相加 | 3 + 5得到8。'a' + 'b'得到'ab'。 |
- | 减 | 得到负数或是一个数减去另一个数 | -5.2得到一个负数。50 - 24得到26。 |
* | 乘 | 两个数相乘或是返回一个被重复若干次的字符串 | 2 * 3得到6。'la' * 3得到'lalala'。 |
** | 幂 | 返回x的y次幂 | 3 ** 4得到81(即3 * 3 * 3 * 3) |
/ | 除 | x除以y | 4/3得到1(整数的除法得到整数结果)。4.0/3或4/3.0得到1.3333333333333333 |
// | 取整除 | 返回商的整数部分 | 4 // 3.0得到1.0 |
% | 取模 | 返回除法的余数 | 8%3得到2。-25.5%2.25得到1.5 |
<< | 左移 | 把一个数的比特向左移一定数目(每个数在内存中都表示为比特或二进制数字,即0和1) | 2 << 2得到8。——2按比特表示为10 |
>> | 右移 | 把一个数的比特向右移一定数目 | 11 >> 1得到5。——11按比特表示为1011,向右移动1比特后得到101,即十进制的5。 |
& | 按位与 | 数的按位与 | 5 & 3得到1。 |
| | 按位或 | 数的按位或 | 5 | 3得到7。 |
^ | 按位异或 | 数的按位异或 | 5 ^ 3得到6 |
~ | 按位翻转 | x的按位翻转是-(x+1) | ~5得到6。 |
< | 小于 | 返回x是否小于y。所有比较运算符返回1表示真,返回0表示假。这分别与特殊的变量True和False等价。注意,这些变量名的大写。 | 5 < 3返回0(即False)而3 < 5返回1(即True)。比较可以被任意连接:3 < 5 < 7返回True。 |
> | 大于 | 返回x是否大于y | 5 > 3返回True。如果两个操作数都是数字,它们首先被转换为一个共同的类型。否则,它总是返回False。 |
<= | 小于等于 | 返回x是否小于等于y | x = 3; y = 6; x <= y返回True。 |
>= | 大于等于 | 返回x是否大于等于y | x = 4; y = 3; x >= y返回True。 |
== | 等于 | 比较对象是否相等 | x = 2; y = 2; x == y返回True。x = 'str'; y = 'stR'; x == y返回False。x = 'str'; y = 'str'; x == y返回True。 |
!= | 不等于 | 比较两个对象是否不相等 | x = 2; y = 3; x != y返回True。 |
not | 布尔“非” | 如果x为True,返回False。如果x为False,它返回True。 | x = True; not y返回False。 |
and | 布尔“与” | 如果x为False,x and y返回False,否则它返回y的计算值。 | x = False; y = True; x and y,由于x是False,返回False。在这里,Python不会计算y,因为它知道这个表达式的值肯定是False(因为x是False)。这个现象称为短路计算。 |
or | 布尔“或” | 如果x是True,它返回True,否则它返回y的计算值。 | x = True; y = False; x or y返回True。短路计算在这里也适用。 |
运算符优先级
如果你有一个如2 + 3 * 4
那样的表达式,是先做加法呢,还是先做乘法?我们的中学数学告诉我们应当先做乘法——这意味着乘法运算符的优先级高于加法运算符。
下面这个表给出Python的运算符优先级,从最低的优先级(最松散地结合)到最高的优先级(最紧密地结合)。这意味着在一个表达式中,Python会首先计算表中较下面的运算符,然后在计算列在表上部的运算符。
下面这张表(与Python参考手册中的那个表一模一样)已经顾及了完整的需要。事实上,我建议你使用圆括号来分组运算符和操作数,以便能够明确地指出运算的先后顺序,使程序尽可能地易读。例如,2 + (3 * 4)
显然比2 + 3 * 4
清晰。与此同时,圆括号也应该正确使用,而不应该用得过滥(比如2 + (3 + 4)
)。
运算符 | 描述 |
---|---|
lambda | Lambda表达式 |
or | 布尔“或” |
and | 布尔“与” |
not x | 布尔“非” |
in,not in | 成员测试 |
is,is not | 同一性测试 |
<,<=,>,>=,!=,== | 比较 |
| | 按位或 |
^ | 按位异或 |
& | 按位与 |
<<,>> | 移位 |
+,- | 加法与减法 |
*,/,% | 乘法、除法与取余 |
+x,-x | 正负号 |
~x | 按位翻转 |
** | 指数 |
x.attribute | 属性参考 |
x[index] | 下标 |
x[index:index] | 寻址段 |
f(arguments...) | 函数调用 |
(experession,...) | 绑定或元组显示 |
[expression,...] | 列表显示 |
{key:datum,...} | 字典显示 |
'expression,...' | 字符串转换 |
其中我们还没有接触过的运算符将在后面的章节中介绍。
在表中列在同一行的运算符具有 相同优先级 。例如,+
和-
有相同的优先级。
计算顺序
默认地,运算符优先级表决定了哪个运算符在别的运算符之前计算。然而,如果你想要改变它们的计算顺序,你得使用圆括号。例如,你想要在一个表达式中让加法在乘法之前计算,那么你就得写成类似(2 + 3) * 4
的样子。
结合规律
运算符通常由左向右结合,即具有相同优先级的运算符按照从左向右的顺序计算。例如,2 + 3 + 4
被计算成(2 + 3) + 4
。一些如赋值运算符那样的运算符是由右向左结合的,即a = b = c
被处理为a = (b = c)
。
表达式
使用表达式
#!/usr/bin/python
# Filename: expression.py
length =
5
breadth =
2
area = length * breadth
print
'Area is'
, area
print
'Perimeter is'
,
2
* (length + breadth)
(源文件:code/expression.py)
输出
$ python expression.py
Area is 10
Perimeter is 14
它如何工作
矩形的长度与宽度存储在以它们命名的变量中。我们借助表达式使用它们计算矩形的面积和边长。我们表达式length * breadth
的结果存储在变量area
中,然后用print
语句打印。在另一个打印语句中,我们直接使用表达式2 * (length + breadth)
的值。
另外,注意Python如何打印“漂亮的”输出。尽管我们没有在'Area is'
和变量area
之间指定空格,Python自动在那里放了一个空格,这样我们就可以得到一个清晰漂亮的输出,而程序也变得更加易读(因为我们不需要担心输出之间的空格问题)。这是Python如何使程序员的生活变得更加轻松的一个例子。