Python3.x基础

来源:互联网 发布:台湾电视直播软件apk 编辑:程序博客网 时间:2024/05/29 19:36

一.  基础语法

1.  Python是一门解释型语言,因此无需编译和链接。

2. 编码:默认情况下,Python3源码文件以UTF-8编码,所有字符串都是unicode字符串。也可以为源码文件指定不同的编码。

3.  标识符:第一个字符必须是字面表中字母或下划线;标识符的其它部分有字母、数字和下划线组成;标识符对大小写敏感。在Python3中,非-ASCII标识符也是允许的。

4. 保留字:即关键字,我们不能把它们用作任何标识符名称。Python的标准库提供了一个keyword模块,可以输出当前版本的所有关键字,如下图:


5.  注释:Python中单行注释以#开头,多行注释可以用多个#号。也可以使用’’’  ‘’’的格式在三引号之间书写较长的注释。

6. 行与缩进:使用缩进表示代码块,不需要使用大括号{}。缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。

7.  多行语句:Python通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠(\)来实现多行语句。在[]、{}或()中的多行语句,不需要使用反斜杠。

8. 数据类型:Python中数有四种类型:整数、长整数、浮点数和复数。

9. 字符串:Python中单引号和双引号使用完全相同;使用三引号(‘’’或”””)可以指定一个多行字符串;转义符’\’;Python允许处理unicode字符串,加前缀u或U;字符串是不可变的;按字面意义级联字符串,如”this “ “is “ “string”会被自动转换为”this is string”。

10. 空行:函数之间或类的方法之间用空行分割,表示一段新的代码的开始。类和函数入口之间也有一行空行分割,以突出函数入口的开始。空行与代码缩进不同,空行并不是Python语法的一部分。书写时不插入空行,Python解释器运行也不会出错。但是空行的作用在于分割两段不同功能或含义的代码,便于日后代码的维护或重构。

11. 同一行显示多条语句:Python可以在同一行中使用多条语句,语句之间使用分号(;)分割。

12. 多个语句构成代码组:缩进相同的一组语句构成一个代码块,我们称之为代码组。

13. print输出:print默认输出是换行的,如果要实现不换行需要在变量末尾加上end=””

14. import与from …import

在Python中用import或者from … import来导入相应的模块。

将整个模块(somemodule)导入,格式为:import somemodule

从某个模块导入某个函数,格式为:from somemodule import somefunction

从某个模块导入多个函数,格式为:from somemodule import fun1,fun2,fun3

将某个模块中的全部函数导入,格式为:from somemodule import *

出于性能考虑,每个模块在每个解释器会话中只导入一遍。因此,如果你修改了你的模块,需要重启解释器;或者,如果你就是想交互式的测试这么一个模块,可以用imp.reload()重新加载。

15.  命令行参数:在使用脚步形式执行Python时,可以接收命令行输入的参数。

16. help函数:调用Python的help函数可以打印输出指定函数的文档字符串,如help(max)

二.  基本数据类型

1. Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

2. 标准数据类型:Python3中有六个标准的数据类型:Number(数学)、String(字符串)、List(列表)、Tuple(元组)、Sets(集合)、Dictionary(字典)。

(1)、Number:Python3支持int、float、bool、complex(复数)。在Python3里,只有一种整数类型int,表示为长整型,没有Python2中的Long。

内置的type函数可以用来查询变量所指的对象类型。此外还可以用isinstance来判断。

在Python2中是没有布尔型的,它用数字0表示False,用1表示True.到Python3中,把True和False定义成关键字了,但它们的值还是1和0,它们可以和数字相加。

可以通过使用del语句删除单个或多个对象。

Python可以同时为多个变量赋值。一个变量可以通过赋值指向不同类型的对象。数值的除法(/)总是返回一个浮点数,要获取整数使用//操作符。在混合计算时,Python会把整型转换成为浮点数。

Python还支持复数,复数由实数部分和虚数部分构成,可以用a+bj,或者complex(a,b)表示,复数的实部a和虚部b都是浮点型。

(2)、String:Python中的字符串用单引号(‘)或双引号(“)括起来,同时使用反斜杠(\)转义特殊字符。

字符串的截取的语法格式如下:变量[头下标:尾下标],索引值以0为开始值,-1为从末尾的开始位置。加号(+)是字符串的连接符,星号(*)表示复制当前字符串,紧跟的数字为复制的次数。

Python使用反斜杠(\)转义特殊字符,如果你不想让反斜杠发生转义,可以在字符串前面添加一个r表示原始字符串。另外,反斜杠(\)可以作为续行符,表示下一行是上一行的延续。也可以使用”””…”””或者’’’…’’’跨越多行。Python没有单独的字符类型,一个字符就是长度为1的字符串。与C字符串不同的是,Python字符串不能被改变,向一个索引位置赋值会导致错误。

Python中的字符串有两种索引方式,从左往右以0开始,从右往左以-1开始。

(3)、List:列表可以完成大多数集合类的数据结构实现。列表中元素的类型可以不相同,它支持数字,字符串甚至可以包含列表(嵌套)。列表是写在方括号([])之间、用逗号分隔开的元素列表。和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。

列表截取的语法格式如下:变量[头下标:尾下标],索引值以0为开始值,-1为从未尾的开始位置。加号(+)是列表连接运算符,星号(*)是重复操作。

与Python字符串不一样的是,列表中的元素是可以改变的。List内置了很多方法,例如append()、pop()等等。

(4)、Tuple:与列表类似,不用之处在于元组的元素不能修改。元组写在小括号(())里,元素之间用逗号隔开。元组中的元素类型也可以不相同。元组也可以使用+操作符进行拼接。

元组与字符串类似,可以被索引且下标索引从0开始后,-1为从末尾开始的位置。也可以被截取。

虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。构造包含0个或1个元素的元组比较特殊,所以有一些额外的语法规则。

一般来说,函数的返回值一般为一个,而函数返回多个值的时候,是以元组的方式返回。

Python中的函数还可以接收可变长参数,比如以”*”开头的参数名,会将所有的参数收集到一个元组上。

string、list和tuple都属于sequence(序列)。

(5)、Set:是一个无序不重复元素的序列。基本功能是进行成员关系测试和删除重复元素。可以使用大括号{}或者set()函数创建集合,注意:创建一个空集合必须有set()而不是{},因为{}是用来创建一个空字典。

(6)、Dictionary:列表是有序的对象结合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。字典是一种映射类型,字典用”{}”标识,它是一个无序的键:值对集合。键必须使用不可变类型。在同一个字典中,键必须是唯一的。创建空字典使用{}。

构造函数dict()可以直接从键值对序列中构建字典。字典类型也有一些内置的函数,例如clear()、keys()、values()等。

Python中的字典是使用了一个称为散列表的算法,其特点就是:不管字典中有多少项,in操作符花费的时间都差不多。如果把一个字典对象作为for的迭代对象,那么这个操作将会遍历字典的键。

3.  数据类型转换:如下图


三.  解释器:

1. 交互式编程:可以在命令提示符中输入”Python”命令来启动Python解释器。

2. 脚本式编程:通过命令执行脚本,如:$ python  hello.py

3. 调用解释器时,脚本名和附加参数传入一个名为sys.argv的字符串列表。你能够获取这个列表通过执行import sys,列表的长度大于等于1;没有给定脚本和参数时,它至少也有一个元素:sys.argv[0],此时为空字符串。

四.  注释:

1.  Python中的注释有单行注释和多行注释。Python中单行注释以#开头。多行注释用三个单引号’’’或者三个双引号”””将注释括起来。

五.  运算符:

1. Python语言支持以下类型的运算符:算术运算符、比较(关系)运算符、赋值运算符、逻辑运算符、位运算符、成员运算符、身份运算符、运算符优先级。

2. 算术运算符:+(加)、-(减)、*(乘)、/(除)、%(取模)、**(幂)、//(取整除)

3. 比较运算符:==(等于)、!=(不等于)、>(大于)、<(小于)、>=(大于等于)、<=(小于等于)。

4. 赋值运算符:=、+=、-=、*=、/=、%=、**=、//=。

5. 位运算符:把数字看作二进制来进行计算:&(位与)、|(位或)、^(位异或)、~(位取反)、<<(左移)、>>(右移)。

6. 逻辑运算符:and(布尔”与”)、or(布尔”或”)、not(布尔”非”)。

7. 成员运算符:in(如果在指定的序列中找到值返回True,否则返回False)、not in(如果在指定的序列中没有找到值返回True,否则返回False)。

8. 身份运算符:用于比较两个对象的存储单元:is(判断两个标识符是不是引用自一个对象)、is not(判断两个标识符是不是引用自不同对象)。

is与==区别:is用于判断两个变量引用对象是否为同一个,==用于判断引用变量的值是否相等。

9. 运算符优先级如下图:


六.  数字(Number)

1. 数字数据类型用于存储数值。可以通过使用del语句删除单个或多个对象的引用。

2. Python支持三种不同的数值类型:

整型(int):Python3整型没有限制大小的,可以当作Long类型使用,所以Python3没有Python2的Long类型。

浮点型(float):由整数部分与小数部分组成,浮点型也可以使用科学计数法表示。

复数(complex):复数由实数部分和虚数部分构成,可以用a+bj或者complex(a,b)表示。复数的实部a和虚部b都是浮点型。

可以使用十六进制和八进制来代表整数。

3. 数字类型转换:只需要将数据类型作为函数名即可。

4. 数字运算:Python解释器可以作为一个简单的计算器,可以在解释器里输入一个表达式,它将输出表达式的值。表达式的语法很直白:+、-、*和/和其它语言(如C)里一样。

在不同的机器上浮点运算的结果可能会不一样。

在整数除法中,除法(/)总是返回一个浮点数,如果只想得到整数的结果,丢弃可能的分数部分,可以使用运算符//。

Python可以使用**操作来进行幂运算。

变量在使用前必须先”定义”(即赋予变量一个值),否则会出现错误。

5.  数学函数如下表:


6. 随机数函数如下表:


7. 三角函数如下表:


8.  数学常量:pi(圆周率)、e(自然常数)。

七.  字符串

1. 可以使用引号(‘或”)来创建字符串。

2. 访问字符串中的值:Python不支持单字符类型,单字符在Python也是作为一个字符串使用。Python访问子字符串,可以使用方括号来截取字符串。

3. 字符串更新:可以对已存在的字符串进行修改,并赋值给另一变量。

4. 转义字符:需要在字符中使用特殊字符时,Python用反斜杠(\)转义字符。

5. 字符串运算符:+(字符串连接)、*(重复输出字符串)、[](通过索引获取字符串中字符)、[:](截取字符串中的一部分)、in(成员运算符,如果字符串中包含给定的字符返回True)、not in(成员运算符,如果字符串中不包含给定的字符返回True)、r/R(原始字符串,所有的字符串都是按照字面的意思来使用,没有转义特殊或不能打印的字符。原始字符串除在字符串的第一个引号前加上字面”r”(可以打小写)以外,与普通字符串有着几乎完全相同的语法)、%(格式字符串)。

6. 字符串格式化:Python支持格式化字符串的输出。尽管这样可能会用到非常复杂的表达式,但最基本的用法是将一个值插入到一个有字符串格式符%s的字符串中。

在Python中,字符串格式化使用与C 中sprintf函数一样的语法。

7. 三引号:Python三引号允许一个字符串跨多行,字符串中可以包含换行符、制表符以及其它特殊字符。

8. Unicode字符串:在Python2中,普通字符串是以8位ASCII码进行存储的,而Unicode字符串则存储为16位unicode字符串,这样能够表示更多的字符串。使用的语法是在字符串前面加上前缀u。

在Python3中,所有的字符串都是Unicode字符串。

9. 字符串内建函数:capitalize、center、count、encode、find、isalpha、isdigit、islower、isnumeric、isspace、istitle、isupper、join、len、lower、max、min、replace、rfind、rindex、split、title、upper等。

八.  列表

1. 序列是Python中最基本的数据结构。序列中的每个元素都分配一个数字----它的位置或索引,第一个索引是0,第二个索引是1,依次类推。

Python有6个序列的内置类型。序列都可以进行的操作包括索引、切片、加、乘、检查成员。此外,Python已经内置确定序列的长度以及确定最大和最小的元素的方法。

2. 列表是最常用的Python数据类型,它可以作为一个方括号的逗号分隔值出现。列表的数据项不需要具有相同的类型。创建一个列表,只要把逗号分隔的不同数据项使用方括号括起来即可。与字符串的索引一样,列表索引从0开始。列表可以进行截取、组合等。

3. 访问列表中的值:使用下标索引来访问列表中的值,同样你也可以使用方括号的形式截取字符。

4. 更新列表:可以对列表的数据项进行修改或更新,也可以使用append()方法来添加列表项。

5. 删除列表元素:可以使用del语句来删除列表的元素。

6. 列表脚本操作符:列表对+和*的操作符与字符串相似。+号用于组合列表,*号用于重复列表。

7. 列表截取和拼接:列表截取与字符串操作类似。列表还支持拼接操作。

8. 嵌套列表:即在列表里创建其它列表。

九.  元组

1. Python的元组与列表类似,不同之处在于元组的元素不能修改。元组使用小括号,列表使用方括号。元组创建很简单,只需要在括号中添加元素,并使用逗号隔开即可。元组中只包含一个元素时,需要在元素后面添加逗号,否则括号会被当作运算符使用。元组与字符串类似,下标索引从0开始,可以进行截取、组合等。

2. 访问元组:元组可以使用下标索引来访问元组中的值。

3. 修改元组:元组中的元素值是不允许修改的,但可以对元组进行连接组合。

4. 删除元组:元组中的元素值是不允许删除的,但可以使用del语句来删除整个元组。

5. 元组运算符:与字符串一样,元组之间可以使用+号和*号进行运算。

6. 元组索引、截取:因为元组也是一个序列,所以可以访问元组中的指定位置的元素,有可以截取索引中的一段元素。

7. 元组内置函数:len、min、max、tuple(seq)(将列表转换为元组)

十.  字典

1.字典是另一种可变容器模型,且可存储任意类型对象。字典的每个键值(key=>value)对用冒号(:)分割,整个字典包括在花括号({})中。键必须是唯一的,但值则不必。值可以取任何数据类型,但键必须是不可变的,如字符串、数字或元组。

2.访问字典里的值:把相应的键放入方括弧。如果用字典里没有的键访问数据,会输出错误。

3.修改字典:向字典添加新内容的方法是增加新的键/值对,修改或删除已有键/值对。

4.删除字典元素:能删除单一的元素也能清空字典。

5.字典键的特性:字典值可以没有限制地取任何Python对象,既可以是标准的对象,也可以是用户定义的,但键不行。

不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住。

键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行。

6.字典内置函数&方法:len、str、type等

十一.  条件控制

1.Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。

2.if语句:Python中用elif代替了else if,所以if语句的关键字为if …elif … else:

(1)、每个条件后面要使用冒号(:),表示接下来是满足条件后要执行的语句块。

(2)、使用缩进来划分语句块,相同缩进数的语句在一起组成一个语句块。

(3)、在Python中没有switch … case语句。

3.if嵌套:在嵌套if语句中,可以把if …elif … else 结构放在另外一个if … elif … else结构中。

十二. 循环语句

1.Python中的循环语句有for和while.

2.while循环:同样需要注意冒号和缩进。另外,在Python中没有do … while循环。

我们可以通过设置表达式永远不为false来实现无限循环。可以使用Ctrl+C来退出当前的无限循环.

在while … else中,在条件语句为false时执行else的语句块。

类似if语句的语法,如果while循环体中只有一条语句,可以将该语句与while写在同一行中。

3. for语句:Python for循环可以遍历任何序列的项目,如一个列表或者一个字符串。

break语句用于跳出当前循环体。

4.range()函数:如果需要遍历数字序列,可以使用内置range()函数,它会生成数列。也可以使用range指定区间的值。也可以使range以指定数字开始并指定不同的增量(甚至可以是负数,有时这也叫做”步长”)。可以结合range()和len()函数以遍历一个序列的索引。还可以使用range()函数来创建一个列表。

5.break语句可以跳出for和while的循环体。如果你从for或while循环中终止,任何对应的循环else块将不执行。

continue语句被用来告诉Python跳过当前循环块中的剩余语句,然后继续进行下一轮循环。

循环语句可以有else子句,它在穷尽列表(以for循环)或条件变为false(以while循环)导致循环终止时被执行,但循环被break终止时不执行。

6.pass语句:Python pass是空语句,是为了保持程序结构的完整性。pass不做任何事情,一般用做占位语句。

十三. 迭代器与生成器

1.迭代器:迭代是Python最强大的功能之一,是访问集合元素的一种方式。迭代器是一个可以记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。迭代器有两个基本的方法:iter()和next()。字符串,列表或元组对象都可用于创建迭代器。

2.生成器:在Python中,使用了yield的函数被称为生成器(generator)。跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。在调用生成器运行的过程中,每次遇到yield时函数会暂停并保存当前所有的运行信息,返回yield的值。并在下一次执行next()方法时从当前位置继续运行。

十四. 函数

1.函数是组织好的,可重复使用的,用来实现单一、或相关联功能的代码段。函数能提高应用的模块性、和代码的重复利用率。Python提供了许多内建函数,比如print()。但也可以自己创建函数,这被叫做用户自定义函数。

2.定义一个由自己想要功能的函数规则:

(1)、函数代码块以def关键词开头,后接函数标识符名称和圆括号()。

(2)、任何传入参数和自变量必须放在圆括号中,圆括号可以用于定义参数。

(3)、函数的第一行语句可以选择性地使用文档字符串用于存放函数说明。

(4)、函数内容以冒号起始,并且缩进。

(5)、return [表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回None。

Python定义函数使用def关键字。默认情况下,参数值和参数名称是按函数声明中定义的顺序匹配起来的。

3.参数传递:在Python,类型属于对象,变量是没有类型的。

在Python中,strings、tuples和numbers是不可更改的对象,而list、dict等则是可以修改的对象。

不可变类型:变量赋值a=5后再赋值a=10,这里实际是新生成一个int值对象10,再让a指向它,而5被丢弃,不是改变a的值,相当于新生成了a。

可变类型:变量赋值la=[1,2,3,4]后再赋值la[2]=5则是将list la的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。

Python函数的参数传递:

(1)、不可变类型:类似C++的值传递,如整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在fun(a)内部修改a的值,只是修改另一个复制的对象,不会影响a本身。

(2)、可变类型:类似C++的引用传递,如列表、字典。如fun(la),则是将la真正的传过去,修改后fun外部的la也会受影响。

Python中一切都是对象,严格意义我们不能说值传递还是引用传递,我们应该说传不可变对象和传可变对象。

4.参数:以下是调用函数时可使用的正式参数类型:必需参数、关键字参数、默认参数和不定长参数。

必需参数:以正确的顺序传入函数,调用时的数量必需和声明时的一样。

关键字参数:关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为Python解释器能够用参数名匹配参数值。

默认参数:调用函数时,如果没有传递参数,则会使用默认参数。

不定长参数:加了星号(*)的变量名会存放所有未命名的变量参数。如果在函数调用时没有指定参数,它就是一个空元组。我们也可以不向函数传递未命名的变量。

5.匿名函数:Python使用lambda来创建匿名函数。所谓匿名,意即不再使用def语句这样标准的形式定义一个函数:

(1)、lambda只是一个表达式,函数体比def简单很多。

(2)、lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。

(3)、lambda函数拥有自己的命名空间,且不能访问自有参数列表之外或全局命名空间里的参数。

(4)、虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。

lambda函数的语法只包含一个语句。

6.return语句:return [表达式]语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的return语句返回None.

7.变量作用域:Python中,程序的变量并不是在哪个位置都可以访问的,访问权限决定于这个变量是在哪里赋值的。

变量的作用域决定了在哪一部分程序可以访问哪个特定的变量名称。Python的作用域一共有4种,分别是:L(Local)局部作用域、E(Enclosing)闭包函数外的函数中、G(Global)全局作用域、B(Built-in)内建作用域。以L->E->G->B的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。

Python中只有模块(module)、类(class)以及函数(def、lambda)才会引入新的作用域,其它的代码块(如if/elif/else、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问。

全局变量和局部变量:定义在函数内部的变量拥有一个局部作用域,定义在函数外的拥有全局作用域。局部变量只能在其被声明的函数内部访问,而全局变量可以在整个程序范围内访问。调用函数时,所有在函数内声明的变量名称都将被加入到作用域中。

global和nonlocal关键字:当内部作用域想修改外部作用域的变量时,就要用到global和nonlocal关键字。如果要修改嵌套作用域(enclosing作用域,外层非全局作用域)中的变量则需要nonlocal关键字。

十五. 数据结构

1.列表:Python中列表是可变的,这是它区别于字符串和元组的最重要的特点。以下是Python中列表的方法:


2.将列表当做堆栈使用:列表方法使得列表可以很方便的作为一个堆栈来使用,堆栈作为特定的数据结构,最先进入的元素最后一个被释放(后进先出),通过列表的append和pop方法。

3.列表推导式:列表推导式提供了从序列创建列表的简单途径。通常应用程序将一些操作应用于某个序列的每个元素,用气获得的结果作为生成新列表的元素,或者根据确定的判定条件创建子序列。每个列表推导式都在for之后跟一个表达式,然后有零到多个for或if子句。返回结果是一个根据表达从其后的for和if上下文环境中生成出来的列表。如果希望表达式推导出一个元组,就必须使用括号。

4.嵌套列表解析:Python的列表还可以嵌套。

5.del语句:使用del语句可以从一个列表中依索引而不是值来删除一个元素。这与使用pop()返回一个值不同。可以用del语句从列表中删除一个切割,或清空整个列表。

6.元组和序列:元组由若干逗号分隔的值组成。元组在输出时总是有括号的,以便于正确表达嵌套结构。在输入时可能有或没有括号,不过括号通常是必须的(如果元组是更大的表达式的一部分)。

7.集合:是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。可以用大括号({})创建集合。如果要创建一个空集合,必须用set()而不是{},后者创建一个空的字典。集合也支持推导式。

8.字典:序列是以连续的整数为索引,与此不同的是,字典以关键字为索引,关键字可以是任何不可变类型,通常用字符串或数值。理解字典的最佳方式是把它看做无序的键=>值对的集合。在同一个字典之内,关键字必须是互不相同。一对大括号创建一个空的字典:{}。构造函数dict()直接从键值对元组列表中构建字典。如果有固定的模式,列表推导式指定特定的键值对。此外,字典推导可以用来创建任意键和值的表达式词典。

9.遍历技巧:在字典中遍历时,关键字和对应的值可以使用items()方法同时解读出来。在序列中遍历时,索引位置和对应值可以使用enumerate()函数同时得到。同时遍历两个或更多的序列,可以使用zip()组合。要反向遍历一个序列,首先指定这个序列,然后调用reversed()函数。要按顺序遍历一个序列,使用sorted()函数返回一个已排序的序列,并不修改原值。

十六.  模块

1.  模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py。模块可以被别的程序引入,以使用该模块中的函数等功能。这也是使用Python标准库的方法。

2. import语句:想使用Python源文件,只需在另一个源文件执行import语句。当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表。

一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

Python的搜索路径是由一系列目录名组成的,Python解释器就依次从这些目录中去寻找所引入的模块。这看起来很像环境变量,事实上,也可以通过定义环境变量的方式来确定搜索路径。搜索路径是在Python编译或安装的时候确定的,安装新的库应该也会修改。搜索路径别存储在sys模块中的path变量。

3. from…import语句:Python的from语句让你从模块中导入一个指定的部分到当前命名空间中。

也可以把一个模块的所有内容全都导入到当前的命名空间:from … import *

4. 模块除了方法定义,还可以包括可执行的代码。这些代码一般用来初始化这个模块。这些代码只有在第一次被导入时才会被执行。每个模块有各自独立的符号表,在模块内部为所有的函数当作全局符号表来使用。

5.  __name__属性:每个模块都有一个__name__属性,当其值是”__main__”时,表明该模块自身在运行,否则是被引入。

6. dir()函数:内置的函数dir()可以找到模块内定义的所有名称。以一个字符串列表的形式返回。

7. 标准模块:Python本身带着一些标准的模块库。

8. 包:是一种管理Python模块命名空间的形式,采用”点模块名称”。比如一个模块的名称是A.B,那么它表示一个包A中的子模块B。就好像使用模块的时候,你不用担心不同模块之间的全局变量相互影响一样,采用点模块名称这种形式也不同担心不同库之间的模块重名的情况。

在导入一个包的时候,Python会根据sys.path中的目录来寻找这个包中包含的子目录。目录只有包含一个叫做__init__.py的文件才会被认作是一个包。

用户可以每次只导入一个包里面的特定模块,它必须使用全名去访问。

十七. 输入和输出

1.   Python输出值的方式:表达式语句、print()函数、write()方法;可以使用str.format()函数来格式化输出值;可以使用repr()或str()函数来实现将输出值转成字符串。

2. 读取键盘输入:Python提供了input()函数从标准输入读入一行文本,默认的标准输入是键盘。

3.  读和写文件:open(filename, mode):filename变量是一个包含了你要访问的文件名称的字符串值;mode决定了打开文件的模式:只读、写入、追加等。open()将会返回一个file对象。

f.read():将读取一定数目的数据,然后作为字符串或字节对象返回。

f.write(string):将string写入到文件中,然后返回写入的字符数。

4. pickle模块:Python的pickle模块实现了基本的数据序列和反序列化。通过pickle模块的序列化操作能够将程序中运行的对象信息保存到文件中永久存储。通过pickle模块的反序列操作,能够从文件中创建上一次程序保存的对象。

十八. 文件

1. file对象使用open函数来创建。

十九. os模块

1. os模块提供了非常丰富的方法用来处理文件和目录。

二十. 错误和异常

1. 语法错误

2. 即便Python程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。

异常处理:try语句按照如下方式工作:

(1)、首先,执行try子句(在关键字try和关键字except之间的语句);

(2)、如果没有异常发生,忽略except子句,try子句执行后结束;

(3)、如果在执行try子句的过程中发生异常,那么try子句余下的部分被忽略。如果异常的类型和except之后的名称相符,那么对应的except子句将被执行。最后执行try语句之后的代码;

(4)、如果一个异常没有与任何的except匹配,那么这个异常将会传递给上层的try中。

一个try语句可能包含多个except子句,分别来处理不同的特定的异常。最多只有一个分支会被执行。一个except子句可以同时处理多个异常,这些异常将被放在一个括号里成为一个元组。最后一个except子句可以忽略异常的名称,它被当作通配符使用。你可以使用这种方法打印一个错误信息,然后再次把异常抛出。

try except语句还有一个可选的else子句,如果使用这个子句,那么必须放在所有的except子句之后。这个子句将在try子句没有发生任何异常的时候执行。

异常处理并不仅仅处理那些直接发生在try子句中的异常,而且还能处理子句中调用的函数(甚至间接调用的函数)里抛出的异常。

Python使用raise语句抛出一个指定的异常。

抛出异常:raise唯一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是Exception的子类)。

3. 用户自定义异常:你可以通过创建一个新的exception类来拥有自己的异常。异常应该继承自Exception类,或者直接继承,或者间接继承。

二十一. 面向对象(class)

1. 简介

类(class):用来描述具有相同的属性和方法的对象的集合。它定义了该集合中每个对象所共有的属性和方法。对象是类的实例。

类变量:在整个实例化的对象中是公有的。类变量定义在类中且在函数体之外。类变量通常不作为实例变量使用。

数据成员:类变量或者实例变量用于处理类及其实例对象的相关的数据。

方法重写:如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫做方法的覆盖(override),也称为方法的重写。

实例变量:定义在方法中的变量,只作用于当前实例的类。

继承:即一个派生类(derived class)继承基类(bass class)的字段和方法。继承也允许把一个派生类的对象作为一个基类对象对待。

实例化:创建一个类的实例,类的具体对象。

方法:类中定义的函数。

对象:通过类定义的数据结构实例。对象包括两个数据成员(类变量和实例变量)和方法。

Python中的类提供了面向对象编程的所有基本功能:类的继承机制允许多个基类,派生类可以覆盖基类中的任何方法,方法中可以调用基类中的同名方法。对象可以包含任意数量和类型的数据。

2. 类对象:支持两种操作:属性引用和实例化。属性引用使用和Python中所有的属性引用一样的标准语法:obj.name。类对象创建后,类命名空间中所有的命名都是有效属性名。

很多类都倾向于将对象创建为有初始状态的。因此类可能会定义一个名为__init__()的特殊方法(构造方法)。类定义了__init__()方法的话,类的实例化操作会自动调用__init__()方法。__init__()方法可以有参数,参数通过__init__()传递到类的实例化操作上。

self代表类的实例,而非类。类的方法与普通的函数只有一个特别的区别:它们必须有一个额外的第一个参数名称,按照惯例它的名称是self。self不是Python关键字。

3. 类的方法:在类内部,使用def关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数,self代表的是类的实例。

4. 继承:Python同样支持类的继承。需要注意圆括号中基类的顺序,若是基类中有相同的方法名,而在子类使用时未指定,Python从左至右搜索,即方法在子类中未找到,从左到右查找基类中是否包含方法。

基类必须与派生类定义在一个作用域内。

5. 方法重写:如果你的父类方法的功能不能满足你的需求,你可以在子类重写你父类的方法。

6. 类属性与方法:

类的私有属性:__private_attrs:两个下划线开头,声明该属性为私有,不能在类的外部被使用或直接访问。在类内部的方法中使用时self.__private_attrs。

类的方法:在类的内部,使用def关键字来定义一个方法,与一般函数定义不同,类方法必须包含参数self,且为第一个参数,self代表的是类的实例。self的名字并不是规定死的,也可以使用this,但是最好还是按照约定使用self。

类的私有方法:__private__method:两个下划线开头,声明该方法为私有方法,只能在类的内部调用,不能在类的外部调用:self.__private_methods。

7. 类的专有方法包括如下表:


8. 运算符重载:Python同样支持运算符重载,我们可以对类的专有方法进行重载。

二十二. 标准库

1. os模块:提供了不少与操作系统相关联的函数。

2. glob模块:glob模块提供了一个函数用于从目录通配符搜索中生成文件列表。

3. sys模块:通用工具脚本经常调用命令行参数。这些命令行参数以链表形式存储于sys模块的argv变量。

sys还有stdin、stdout和stderr属性,即使在stdout被重定向时,后者也可以用于显示警告和错误信息。大多脚本的定向终止都使用”sys.exit()”。

4. re模块:为高级字符串处理提供了正则表达式工具。对于复杂的匹配和处理,正则表达式提供了简洁、优化的解决方案。如果只需要简单的功能,应该首先考虑字符串方法,因为它们非常简单、易于阅读和调试。

5. math模块:为浮点运算提供了对底层C函数库的访问。random提供了生成随机数的工具。

6. 访问互联网:有几个模块用于访问互联网以及处理网络通信协议。其中最简单的两个是用于处理从urls接收的数据的urllib.request以及用于发送电子邮件的smtplib.

7. datetime模块:为日期和时间处理同时提供了简单和复杂的方法。支持日期和时间算法的同时,实现的重点放在更有效的处理和格式化输出。该模块还支持时区处理。

8. 数据压缩:以下模块直接支持通用的数据打包和压缩模式:zlib、gzip、bz2、zipfile以及tarfile。

9. 性能度量:Python提高了一个度量工具,如timeit.

10. 测试模块:doctest模块、unitttest模块。

二十三. 多线程

1.  多线程类似于同时执行多个不同程序。Python3线程中常用的两个模块为:_thread和threading(推荐使用)。thread模块已被废弃,用户可以使用threading模块代替。所以,在Python3中不能再使用”threa”模块。为了兼容性,Python3将thread重命名为”_thread”。

2. Python中使用线程有两种方式:函数或者用类来包装线程对象。

Python3通过两个标准库_thread和threading提供对线程的支持。_thread提供了低级别的、原始的线程以及一个简单的锁,它相比于threading模块的功能还是比较有限的。threading模块除了包含_thread模块中的所有方法外,还提供其它方法。

二十四. json

1.  json是一种轻量级的数据交换格式。Python3中可以使用json模块来对json数据进行编解码。

二十五.    内置函数

1.      Python3内置函数如下图:



以上内容主要摘自:runoob.com ,更详细内容可进其网站学习。

刚开始学习Python时,推荐使用Pycharm IDE,可以自动补全、随时检查错误等功能。

测试代码见:https://github.com/fengbingchun/Python_Test