一、简介
1.Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。Python语言是少有的一种可以称得上即简单又功能强大的编程语言,它注重的是如何解决问题而不是编程语言的语法和结构。
2.Python其特点:简单易学、免费开源、可移植性强(跨平台)、可扩展性强(你的一段关键代码运行得更快或者希望某些算法不公开,可以在你的Python程序中的某个部(你的一段关键代码、或者高效模块或者希望某些不公开的算法)程序用C或C++编写)、可嵌入性强(你可以把Python嵌入你的C/C++程序)、它是一种面向对象的高级解释性编程语言。含有丰富的库(Python标准库可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等)。
二、基本概念
1.一个字面意义上的常量的例子是如同5、1.23、9.25e-3这样的数,或者如同'This is a string'、"It's a string!"这样的字符串。它们被称作字面意义上的,因为它们具备 字面 的意义——你按照它们的字面意义使用它们的值。数2总是代表它自己,而不会是别的什么东西——它是一个常量,因为不能改变它的值。因此,所有这些都被称为字面意义上的常量。并且在Python中没有专门的char数据类型。
2.数:在Python中有4种类型的数——整数、长整数、浮点数和复数。
3.字符串:
a.单引号‘’,例如:‘abcdef’
b.双引号“”,例如:“asddfg”。它的作用与单引号相同,'abc' == "abc"
c.三引号'''或""",可以表示一个多行的字符串,也可以在三引号中自由的使用单引号和双引号,
例如:'''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."
'''
d.转义符:'What\'s your name?' == “What's your name?”。要在双引号字符串中使用双引号本身的时候,也可以借助于转义符。且可以用转义符\\来指示反斜杠本身。还有一个用法:在一个字符串中,行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行。
e.自然字符串:如果你想要指示某些不需要如转义符那样的特别处理的字符串,那么你需要指定一个自然字符串。自然字符串通过给字符串加上前缀r或R来指定。例如r"Newlines are indicated by \n"。
f.Unicode字符串:只需要在字符串前加上前缀u或U。例如:u"This is a Unicode string."。在处理文本文件的时候一般都使用Unicode字符串,特别是当你知道这个文件含有用非英语的语言写的文本。
g.字符串是不可变的,即:一旦创造了一个字符串,就不能再改变它。
h.按字面意义级连字符串
i.如果把两个字符串按字面意义相邻放着,它们会被Python自动级连。例如:'What\'s' 'your name?'会被自动转为"What's your name?"。
4.变量:意义和C、C++中的变量相同,作为被操作的数据的载体。在python中使用变量时只需要给它们赋一个值。不需要像C、C++一样提前声明或定义数据类型。
5.标识符命名规则:
a.标识符的第一个字符必须是字母表中的字母(大写或小写)或者是下划线。
b.标识符名称的其他部分可以由字母(大写或小写)、下划线或数字0-9组成。
c.在python中标识符名称是对大小写敏感的。
6.逻辑行与物理行:物理行是在编写程序时在编辑器中所看见的行。逻辑行是Python 看见 的单个语句。想要在一个物理行中使用多于一个逻辑行,那么你需要使用分号来特别地标明这种用法。分号表示一个逻辑行语句的结束。
7.缩进:在python语句中缩进是非常重要的,在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。错误的缩进会引发程序错误。
三、运算符和表达式
1.一个简单的表达式例子如2 + 3,一个表达式可以分解为运算符和操作数。
4.运算顺序,可以通过小括号来修改表达式的默认运算顺序
5.结合规律:运算符通常由左向右结合,即具有相同优先级的运算符按照从左向右的顺序计算,一些如赋值运算符那样的运算符是由右向左结合的。
四、控制流
3.while语句,例如:
1.定义方法:函数是重用的程序段,函数通过def关键字定义。def关键字后跟一个函数的 标识符 名称,然后跟一对圆括号。圆括号之中可以包括一些变量名,该行以冒号结尾。接下来是一块语句,它们是函数体。
例如:
3.Gloabl变量:如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是全局的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。
4.默认参数值:以在函数定义的形参名后加上赋值运算符(=)和默认值,从而给形参指定默认参数值。只有在形参表末尾的那些参数可以有默认参数值,即你不能在声明函数形参的时候,先声明有默认值的形参而后声明没有默认值的形参。这是因为赋给形参的值是根据位置而赋值的。
5.关键参数:如果某个函数有许多参数,而只想指定其中的一部分,那么你可以通过命名来为这些参数赋值这被称作关键参数,我们使用名字(关键字)而不是位置(我们前面所一直使用的方法)来给函数指定实参。这样做有两个优势,一,不必担心参数的顺序,使用函数变得更加简单了。二、假设其他参数都有默认值,我们可以只给我们想要的那些参数赋值。
6.return语句:return语句用来从一个函数 返回 即跳出函数。我们也可选从函数 返回一个值。除非你提供你自己的return语句,每个函数都在结尾暗含有return None语句。
注:pass语句在Python中表示一个空的语句块。
7.DocStrings文档字符串,它通常被简称为 docstrings 。DocStrings是一个重要的工具,由于它帮助程序文档更加简单易懂,应该尽量使用它。甚至可以在程序运行的时候,从函数恢复文档字符串!文档字符串的惯例是一个多行字符串,一般情况下它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。可以使用__doc__(注意双下划线)调用printMax函数的文档字符串属性(属于函数的名称)。例如:print printMax.__doc__
1.Python是一种简单易学,功能强大的编程语言,它有高效率的高层数据结构,简单而有效地实现面向对象编程。Python简洁的语法和对动态输入的支持,再加上解释性语言的本质,使得它在大多数平台上的许多领域都是一个理想的脚本语言,特别适用于快速的应用程序开发。Python语言是少有的一种可以称得上即简单又功能强大的编程语言,它注重的是如何解决问题而不是编程语言的语法和结构。
2.Python其特点:简单易学、免费开源、可移植性强(跨平台)、可扩展性强(你的一段关键代码运行得更快或者希望某些算法不公开,可以在你的Python程序中的某个部(你的一段关键代码、或者高效模块或者希望某些不公开的算法)程序用C或C++编写)、可嵌入性强(你可以把Python嵌入你的C/C++程序)、它是一种面向对象的高级解释性编程语言。含有丰富的库(Python标准库可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。除了标准库以外,还有许多其他高质量的库,如wxPython、Twisted和Python图像库等等)。
二、基本概念
1.一个字面意义上的常量的例子是如同5、1.23、9.25e-3这样的数,或者如同'This is a string'、"It's a string!"这样的字符串。它们被称作字面意义上的,因为它们具备 字面 的意义——你按照它们的字面意义使用它们的值。数2总是代表它自己,而不会是别的什么东西——它是一个常量,因为不能改变它的值。因此,所有这些都被称为字面意义上的常量。并且在Python中没有专门的char数据类型。
2.数:在Python中有4种类型的数——整数、长整数、浮点数和复数。
3.字符串:
a.单引号‘’,例如:‘abcdef’
b.双引号“”,例如:“asddfg”。它的作用与单引号相同,'abc' == "abc"
c.三引号'''或""",可以表示一个多行的字符串,也可以在三引号中自由的使用单引号和双引号,
例如:'''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."
'''
d.转义符:'What\'s your name?' == “What's your name?”。要在双引号字符串中使用双引号本身的时候,也可以借助于转义符。且可以用转义符\\来指示反斜杠本身。还有一个用法:在一个字符串中,行末的单独一个反斜杠表示字符串在下一行继续,而不是开始一个新的行。
e.自然字符串:如果你想要指示某些不需要如转义符那样的特别处理的字符串,那么你需要指定一个自然字符串。自然字符串通过给字符串加上前缀r或R来指定。例如r"Newlines are indicated by \n"。
f.Unicode字符串:只需要在字符串前加上前缀u或U。例如:u"This is a Unicode string."。在处理文本文件的时候一般都使用Unicode字符串,特别是当你知道这个文件含有用非英语的语言写的文本。
g.字符串是不可变的,即:一旦创造了一个字符串,就不能再改变它。
h.按字面意义级连字符串
i.如果把两个字符串按字面意义相邻放着,它们会被Python自动级连。例如:'What\'s' 'your name?'会被自动转为"What's your name?"。
4.变量:意义和C、C++中的变量相同,作为被操作的数据的载体。在python中使用变量时只需要给它们赋一个值。不需要像C、C++一样提前声明或定义数据类型。
5.标识符命名规则:
a.标识符的第一个字符必须是字母表中的字母(大写或小写)或者是下划线。
b.标识符名称的其他部分可以由字母(大写或小写)、下划线或数字0-9组成。
c.在python中标识符名称是对大小写敏感的。
6.逻辑行与物理行:物理行是在编写程序时在编辑器中所看见的行。逻辑行是Python 看见 的单个语句。想要在一个物理行中使用多于一个逻辑行,那么你需要使用分号来特别地标明这种用法。分号表示一个逻辑行语句的结束。
7.缩进:在python语句中缩进是非常重要的,在逻辑行首的空白(空格和制表符)用来决定逻辑行的缩进层次,从而用来决定语句的分组。同一层次的语句必须有相同的缩进。每一组这样的语句称为一个块。错误的缩进会引发程序错误。
三、运算符和表达式
1.一个简单的表达式例子如2 + 3,一个表达式可以分解为运算符和操作数。
2.运算符与它们的用法
运算符 | 名称 | 说明 | 例子 |
+ | 加 | 两个对象相加 | 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。短路计算在这里也适用。 |
3.运算符优先级
运算符 | 描述 |
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,...' | 字符串转换 |
4.运算顺序,可以通过小括号来修改表达式的默认运算顺序
5.结合规律:运算符通常由左向右结合,即具有相同优先级的运算符按照从左向右的顺序计算,一些如赋值运算符那样的运算符是由右向左结合的。
四、控制流
1.if语句,例如:
number = 23
guess = int(raw_input('Enter an integer : '))
if guess == number:
print 'Congratulations, you guessed it.' # New block starts here
print "(but you do not win any prizes!)" # New block ends here
elif guess < number:
print 'No, it is a little higher than that' # Another block
# You can do whatever you want in a block ...
else:
print 'No, it is a little lower than that'
# you must have guess > number to reach here
print 'Done'
# This last statement is always executed, after the if statement is executed
注:第2行内建的raw_input函数提供一个字符串,这个字符串被打印在屏幕上,然后等待用户的输入。一旦我们输入一些东西,然后按回车键之后,函数返回输入。对于raw_input函数来说是一个字符串。我们通过int把这个字符串转换为整数,并把它存储在变量guess中。在if语句结尾处包含一个冒号标识该Python语句下面跟着一个语句块。该片段中的elif从句,它事实上把两个相关联的if else-if else语句合并为一个if-elif-else语句。这使得程序更加简单,并且减少了所需的缩进数量。elif和else从句都必须在逻辑行结尾处有一个冒号,下面跟着一个相应的语句块(当然还包括正确的缩进)。也可以在一个if块中使用另外一个if语句,等等——这被称为嵌套的if语句。elif和else部分是可选的。并且在Python中没有switch语句。你可以使用if..elif..else语句来完成同样的工作(在某些场合,使用字典会更加快捷)。
2.for语句,例如:
for i in range(1, 5):
print i
else:
print 'The for loop is over'
注:range返回一个序列的数。这个序列从第一个数开始到第二个数为止。例如,range(1,5)给出序列[1, 2, 3, 4]。默认地,range的步长为1。如果我们为range提供第三个数,那么它将成为步长。例如,range(1,5,2)给出[1,3],range 向上 延伸到第二个数,即它不包含第二个数。for i in range(1,5)等价于for i in [1, 2, 3, 4],这就如同把序列中的每个数(或对象)赋值给i,一次一个,然后以每个i的值执行这个程序块。else部分是可选的。如果包含else,它总是在for循环结束后执行一次,除非遇到break语句。for..in循环对于任何序列都适用。这里我们使用的是一个由内建range函数生成的数的列表,但是广义说来我们可以使用任何种类的由任何对象组成的序列。
3.while语句,例如:
number = 23
running = True
while running:
guess = int(raw_input('Enter an integer : '))
if guess == number:
print 'Congratulations, you guessed it.'
running = False # this causes the while loop to stop
elif guess < number:
print 'No, it is a little higher than that'
else:
print 'No, it is a little lower than that'
else:
print 'The while loop is over.'
# Do anything else you want to do here
print 'Done'
注:其中的while块并不是必须的。
4.break语句:作用是强制跳出(终止)循环。例如:
while True:
s = raw_input('Enter something : ')
if s == 'quit':
break
print 'Length of the string is', len(s)
print 'Done'
5.continue语句:continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后 继续 进行下一轮循环。例如:
while True:
s = raw_input('Enter something : ')
if s == 'quit':
break
if len(s) < 3:
continue
print 'Input is of sufficient length'
# Do other kinds of processing here...
五、函数
1.定义方法:函数是重用的程序段,函数通过def关键字定义。def关键字后跟一个函数的 标识符 名称,然后跟一对圆括号。圆括号之中可以包括一些变量名,该行以冒号结尾。接下来是一块语句,它们是函数体。
例如:
def printMax(a, b):
if a > b:
print a, 'is maximum'
else:
print b, 'is maximum'
#调用:
printMax(3, 4) # directly give literal values
x = 5
y = 7
printMax(x, y) # give variables as arguments
2.局部变量:当你在函数定义内声明变量的时候,它们与函数外具有相同名称的其他变量没有任何关系,即变量名称对于函数来说是 局部 的。这称为变量的 作用域 。所有变量的作用域是它们被定义的块,从它们的名称被定义的那点开始。
3.Gloabl变量:如果你想要为一个定义在函数外的变量赋值,那么你就得告诉Python这个变量名不是局部的,而是全局的。我们使用global语句完成这一功能。没有global语句,是不可能为定义在函数外的变量赋值的。
4.默认参数值:以在函数定义的形参名后加上赋值运算符(=)和默认值,从而给形参指定默认参数值。只有在形参表末尾的那些参数可以有默认参数值,即你不能在声明函数形参的时候,先声明有默认值的形参而后声明没有默认值的形参。这是因为赋给形参的值是根据位置而赋值的。
5.关键参数:如果某个函数有许多参数,而只想指定其中的一部分,那么你可以通过命名来为这些参数赋值这被称作关键参数,我们使用名字(关键字)而不是位置(我们前面所一直使用的方法)来给函数指定实参。这样做有两个优势,一,不必担心参数的顺序,使用函数变得更加简单了。二、假设其他参数都有默认值,我们可以只给我们想要的那些参数赋值。
6.return语句:return语句用来从一个函数 返回 即跳出函数。我们也可选从函数 返回一个值。除非你提供你自己的return语句,每个函数都在结尾暗含有return None语句。
注:pass语句在Python中表示一个空的语句块。
7.DocStrings文档字符串,它通常被简称为 docstrings 。DocStrings是一个重要的工具,由于它帮助程序文档更加简单易懂,应该尽量使用它。甚至可以在程序运行的时候,从函数恢复文档字符串!文档字符串的惯例是一个多行字符串,一般情况下它的首行以大写字母开始,句号结尾。第二行是空行,从第三行开始是详细的描述。可以使用__doc__(注意双下划线)调用printMax函数的文档字符串属性(属于函数的名称)。例如:print printMax.__doc__