Python 3 教程html
http://www.runoob.com/python3/python3-tutorial.htmlpython
- Python的3.0版本,常被称为Python 3000,或简称Py3k。相对于Python的早期版本,这是一个较大的升级。为了避免带入过多的累赘,Python 3.0在设计的时候没有考虑向下兼容。Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。
- Python 是一种解释型语言: 这意味着开发过程当中没有了编译这个环节。相似于PHP和Perl语言。
- Python 是交互式语言: 这意味着,您能够在一个Python提示符,直接互动执行写你的程序。
- $ chmod +x test.py # 脚本文件添加可执行权限
- 在 Python 中,全部标识符能够包括英文、数字以及下划线(_),但不能以数字开头。
- 如下划线开头的标识符是有特殊意义的。以单下划线开头 _foo 的表明不能直接访问的类属性,需经过类提供的接口进行访问,不能用 from xxx import * 而导入;
- 以双下划线开头的 __foo 表明类的私有成员;
- 以双下划线开头和结尾的 __foo__ 表明 Python 里特殊方法专用的标识,如 __init__() 表明类的构造函数。
- Python 能够同一行显示多条语句,方法是用分号 ; 分开。
- 学习 Python 与其余语言最大的区别就是,Python 的代码块不使用大括号 {} 来控制类,函数以及其余逻辑判断。python 最具特点的就是用缩进来写模块。
- Python语句中通常以新行做为为语句的结束符。可是咱们可使用斜杠( \)将一行的语句分为多行显示。语句中包含 [], {} 或 () 括号就不须要使用多行链接符。
- Python 的标准库提供了一个 keyword 模块,能够输出当前版本的全部关键字
- python中单行注释采用 # 开头。注释能够在语句或表达式行末。python 中多行注释使用三个单引号(''')或三个双引号(""")。
- print 默认输出是换行的,若是要实现不换行须要在变量末尾加上 end="":
- 缩进相同的一组语句构成一个代码块,咱们称之代码组。像if、while、def和class这样的复合语句,首行以关键字开始,以冒号( : )结束,该行以后的一行或多行代码构成代码组。咱们将首行及后面的代码组称为一个子句(clause)
- Python 中的变量赋值不须要类型声明。每一个变量在内存中建立,都包括变量的标识,名称和数据这些信息。每一个变量在使用前都必须赋值,变量赋值之后该变量才会被建立。
- Python容许你同时为多个变量赋值。您也能够为多个对象指定多个变量。
- Python有五个标准的数据类型:Numbers(数字),String(字符串),List(列表),Tuple(元组),Dictionary(字典)
- 他们是不可改变的数据类型,这意味着改变数字数据类型会分配一个新的对象。当你指定一个值时,Number对象就会被建立。您能够经过使用del语句删除单个或多个对象的引用。
- Python支持四种不一样的数字类型:int(有符号整型),long(长整型[也能够表明八进制和十六进制]),float(浮点型),complex(复数)
- python的字串列表有2种取值顺序:从左到右索引默认0开始的,最大范围是字符串长度少1;从右到左索引默认-1开始的,最大范围是字符串开头
- 若是你要实现从字符串中获取一段子字符串的话,可使用变量 [头下标:尾下标],就能够截取相应的字符串,其中下标是从 0 开始算起,能够是正数或负数,下标能够为空表示取到头或尾。
- 当使用以冒号分隔的字符串,python返回一个新的对象,结果包含了以这对偏移标识的连续的内容,左边的开始是包含了下边界。而取到的最大范围不包括上边界。
- 加号(+)是字符串链接运算符,星号(*)是重复操做。
- List(列表) 是 Python 中使用最频繁的数据类型。列表能够完成大多数集合类的数据结构实现。它支持字符,数字,字符串甚至能够包含列表(即嵌套)。列表用 [ ] 标识,是 python 最通用的复合数据类型。
- 元组是另外一个数据类型,相似于List(列表)。元组用"()"标识。内部元素用逗号隔开。可是元组不能二次赋值,至关于只读列表。
- 字典(dictionary)是除列表之外python之中最灵活的内置数据结构类型。列表是有序的对象结合,字典是无序的对象集合。二者之间的区别在于:字典当中的元素是经过键来存取的,而不是经过偏移存取。字典用"{ }"标识。字典由索引(key)和它对应的值value组成。
- 有时候,咱们须要对数据内置的类型进行转换,数据类型的转换,你只须要将数据类型做为函数名便可。
- ** 幂 - 返回x的y次幂
- // 取整除 - 返回商的整数部分
- 注意:Python2.x 里,整数除整数,只能得出整数。若是要获得小数部分,把其中一个数改为浮点数便可。Python3.x里,则都获得小数部分。
- **= 幂赋值运算符 c **= a 等效于 c = c ** a
- //= 取整除赋值运算符 c //= a 等效于 c = c // a
- and x and y 布尔"与" - 若是 x 为 False,x and y 返回 False,不然它返回 y 的计算值。E.g. (a and b) 返回 20。
- or x or y 布尔"或" - 若是 x 是非 0,它返回 x 的值,不然它返回 y 的计算值。 E.g. (a or b) 返回 10。
- in 若是在指定的序列中找到值返回 True,不然返回 False。 x 在 y 序列中 , 若是 x 在 y 序列中返回 True。
- not in 若是在指定的序列中没有找到值返回 True,不然返回 False。 x 不在 y 序列中 , 若是 x 不在 y 序列中返回 True。
- 身份运算符用于比较两个对象的存储单元。注: id() 函数用于获取对象内存地址。
- is 是判断两个标识符是否是引用自一个对象 x is y, 相似 id(x) == id(y) , 若是引用的是同一个对象则返回 True,不然返回 False
- is not 是判断两个标识符是否是引用自不一样对象 x is not y , 相似 id(a) != id(b)。若是引用的不是同一个对象则返回结果 True,不然返回 False。
- is 与 == 区别:is 用于判断两个变量引用对象是否为同一个, == 用于判断引用变量的值是否相等。
- Python Number 数据类型用于存储数值。数据类型是不容许改变的,这就意味着若是改变 Number 数据类型的值,将从新分配内存空间。
- 您也可使用del语句删除一些 Number 对象引用。
- 您能够经过使用del语句删除单个或多个对象
- Python 支持三种不一样的数值类型:整型(Int),浮点型(floating point real values),复数(complex numbers)
- Python3整型是没有限制大小的,能够看成Long类型使用,因此Python3没有Python2的Long类型。
- ceil 函数返回数字的上入整数。它不能直接访问,须要import math模块,经过静态对象调用该方法。
- floor函数返回数字的下舍整数。
- max函数返回给定参数的最大值,参数能够为序列。min函数则返回最小值。
- choice函数返回一个列表,元组或字符串的随机项。须要import random。
- randrange函数返回指定递增基数集合中的一个随机数,基数缺省值为1。
- random函数返回随机的一个实数,它在[0, 1)范围内。
- shuffle函数将序列的全部元素随机排序。
- uniform函数将随机生成下一个实数,它在[x, y)范围内。
- Python不支持单字符类型,单字符也在Python也是做为一个字符串使用。Python访问子字符串,可使用方括号来截取字符串。
- 反斜杠(\)转义字符在行尾时,为续行符。
- 在 Python 中,字符串格式化使用与 C 中 sprintf 函数同样的语法。
- python三引号容许一个字符串跨多行,字符串中能够包含换行符、制表符以及其余特殊字符。
- 三引号让程序员从引号和特殊字符串的泥潭里面解脱出来,自始至终保持一小块字符串的格式是所谓的WYSIWYG(所见即所得)格式的。一个典型的用例是,当你须要一块HTML或者SQL时,这时用字符串组合,特殊字符串转义将会很是的繁琐。
- 引号前小写的"u"表示这里建立的是一个 Unicode 字符串。若是你想加入一个特殊字符,可使用 Python 的 Unicode-Escape 编码。
- Python capitalize()将字符串的第一个字母变成大写,其余字母变小写。对于 8 位字节编码须要根据本地环境。
- Python center() 返回一个原字符串居中,并使用空格填充至长度 width 的新字符串。默认填充字符为空格。
- Python count() 方法用于统计字符串里某个字符出现的次数。可选参数为在字符串搜索的开始与结束位置。
- Python3 中没有 decode 方法,但咱们可使用 bytes 对象的 decode() 方法来解码给定的 bytes 对象,这个 bytes 对象能够由 str.encode() 来编码返回。
- Python encode() 方法以 encoding 指定的编码格式编码字符串。errors参数能够指定不一样的错误处理方案。
- Python endswith() 方法用于判断字符串是否以指定后缀结尾,若是以指定后缀结尾返回True,不然返回False。可选参数"start"与"end"为检索字符串的开始与结束位置。
- Python expandtabs() 方法把字符串中的 tab 符号('\t')转为空格,tab 符号('\t')默认的空格数是 8。
- Python find() 方法检测字符串中是否包含子字符串 str ,若是指定 beg(开始) 和 end(结束) 范围,则检查是否包含在指定范围内,若是包含子字符串返回开始的索引值,不然返回-1。
- Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它加强了字符串格式化的功能。基本语法是经过 {} 和 : 来代替之前的 % 。format 函数能够接受不限个参数,位置能够不按顺序。
- Python index() 方法检测字符串中是否包含子字符串 str ,该方法与 python find()方法同样,只不过若是str不在 string中会报一个异常。
- Python isalnum() 方法检测字符串是否由字母和数字组成。
- Python isalpha() 方法检测字符串是否只由字母组成。
- Python isdecimal() 方法检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。注意:定义一个十进制字符串,只须要在字符串前添加 'u' 前缀便可。
- Python isdigit() 方法检测字符串是否只由数字组成。
- Python islower() 方法检测字符串是否由小写字母组成。
- Python isnumeric() 方法检测字符串是否只由数字组成。这种方法是只针对unicode对象。
- Python isspace() 方法检测字符串是否只由空格组成。
- Python istitle() 方法检测字符串中全部的单词拼写首字母是否为大写,且其余字母为小写。
- Python isupper() 方法检测字符串中全部的字母是否都为大写。
- Python join() 方法用于将序列中的元素以指定的字符链接生成一个新的字符串。
- Python len() 方法返回对象(字符、列表、元组等)长度或项目个数。
- Python ljust() 方法返回一个原字符串左对齐,并使用空格填充至指定长度的新字符串。若是指定的长度小于原字符串的长度则返回原字符串。
- Python lower() 方法转换字符串中全部大写字符为小写。
- Python lstrip() 方法用于截掉字符串左边的空格或指定字符。
- maketrans() 方法用于建立字符映射的转换表,对于接受两个参数的最简单的调用方式,第一个参数是字符串,表示须要转换的字符,第二个参数也是字符串表示转换的目标。两个字符串的长度必须相同,为一一对应的关系。注:Python3.4已经没有string.maketrans()了,取而代之的是内建函数: bytearray.maketrans()、bytes.maketrans()、str.maketrans()
- Python max() 方法返回字符串中最大的字母。
- Python min() 方法返回字符串中最小的字母。
- partition() 方法用来根据指定的分隔符将字符串进行分割。若是字符串包含指定的分隔符,则返回一个3元的元组,第一个为分隔符左边的子串,第二个为分隔符自己,第三个为分隔符右边的子串。
- Python replace() 方法把字符串中的 old(旧字符串) 替换成 new(新字符串),若是指定第三个参数max,则替换不超过 max 次。
- Python rfind() 返回字符串最后一次出现的位置(从右向左查询),若是没有匹配项则返回-1。
- Python rindex() 返回子字符串 str 在字符串中最后出现的位置,若是没有匹配的字符串会报异常,你能够指定可选参数[beg:end]设置查找的区间。
- Python rjust() 返回一个原字符串右对齐,并使用空格填充至长度 width 的新字符串。若是指定的长度小于字符串的长度则返回原字符串。
- rpartition相似于 partition()函数,不过是从右边开始查找
- Python rstrip() 删除 string 字符串末尾的指定字符(默认为空格).
- Python split()经过指定分隔符对字符串进行切片,若是参数num 有指定值,则仅分隔 num 个子字符串
- Python splitlines() 按照行('\r', '\r\n', \n')分隔,返回一个包含各行做为元素的列表,若是参数 keepends 为 False,不包含换行符,若是为 True,则保留换行符。
- Python startswith() 方法用于检查字符串是不是以指定子字符串开头,若是是则返回 True,不然返回 False。若是参数 beg 和 end 指定值,则在指定范围内检查。
- Python strip() 方法用于移除字符串头尾指定的字符(默认为空格)。
- Python swapcase() 方法用于对字符串的大小写字母进行转换。
- Python title() 方法返回"标题化"的字符串,就是说全部单词都是以大写开始,其他字母均为小写(见 istitle())。
- Python translate() 方法根据参数table给出的表(包含 256 个字符)转换字符串的字符, 要过滤掉的字符放到 del 参数中。
- Python upper() 方法将字符串中的小写字母转为大写字母。
- Python zfill() 方法返回指定长度的字符串,原字符串右对齐,前面填充0。
- Python isdecimal() 方法检查字符串是否只包含十进制字符。这种方法只存在于unicode对象。
- 序列是Python中最基本的数据结构。序列中的每一个元素都分配一个数字 - 它的位置,或索引,第一个索引是0,第二个索引是1,依此类推。
- Python有6个序列的内置类型,但最多见的是列表和元组。
- 序列均可以进行的操做包括索引,切片,加,乘,检查成员。
- 此外,Python已经内置肯定序列的长度以及肯定最大和最小的元素的方法。
- Python 的元组与列表相似,不一样之处在于元组的元素不能修改。
- 元组使用小括号,列表使用方括号。
- 元组建立很简单,只须要在括号中添加元素,并使用逗号隔开便可。
- 元组中只包含一个元素时,须要在元素后面添加逗号,不然括号会被看成运算符使用
- 元组中的元素值是不容许修改的,但咱们能够对元组进行链接组合
- 元组中的元素值是不容许删除的,但咱们可使用del语句来删除整个元组
- tuple(seq)函数将列表转换为元组。
- 字典是另外一种可变容器模型,且可存储任意类型对象。字典的每一个键值(key=>value)对用冒号(:)分割,每一个对之间用逗号(,)分割,整个字典包括在花括号({})中
- 键必须是惟一的,但值则没必要。值能够取任何数据类型,但键必须是不可变的,如字符串,数字或元组。
- 不容许同一个键出现两次。建立时若是同一个键被赋值两次,后一个值会被记住
- 键必须不可变,因此能够用数字,字符串或元组充当,而用列表就不行
- str(dict)函数输出字典,以可打印的字符串表示。
- type(variable)函数返回输入的变量类型,若是变量是字典就返回字典类型。
- 直接赋值:其实就是对象的引用(别名)。
- 浅拷贝(copy):拷贝父对象,不会拷贝对象的内部的子对象。
- 深拷贝(deepcopy): copy 模块的 deepcopy 方法,彻底拷贝了父对象及其子对象。
- 复合赋值:右边的表达式会在赋值变更以前执行。右边表达式的执行顺序是从左往右的。
- 关键字end能够用于将结果输出到同一行,或者在输出的末尾添加不一样的字符
- 其中"判断条件"成立时(非零),则执行后面的语句,而执行内容能够多行,以缩进来区分表示同一范围。
- 因为 python 并不支持 switch 语句,因此多个条件判断,只能用 elif 来实现
- 你也能够在同一行的位置上使用if条件判断语句
- 判断条件能够是任何表达式,任何非零、或非空(null)的值均为true。
- 若是你须要遍历数字序列,可使用内置range()函数。它会生成数列;你也可使用range指定区间的值;也可使range以指定数字开始并指定不一样的增量(甚至能够是负数,有时这也叫作'步长');您能够结合range()和len()函数以遍历一个序列的索引;还可使用range()函数来建立一个列表
- while … else 在循环条件为 false 时执行 else 语句块
- 另一种执行循环的遍历方式是经过索引
- 在 python 中,for … else 表示这样的意思,for 中的语句和普通的没有区别,else 中的语句会在循环正常执行完(即 for 不是经过 break 跳出而中断的)的状况下执行,while … else 也是同样。
- Python pass是空语句,是为了保持程序结构的完整性。pass 不作任何事情,通常用作占位语句。
- 迭代是Python最强大的功能之一,是访问集合元素的一种方式。迭代器是一个能够记住遍历的位置的对象。迭代器对象从集合的第一个元素开始访问,直到全部的元素被访问完结束。迭代器只能往前不会后退。迭代器有两个基本的方法:iter() 和 next()。字符串,列表或元组对象均可用于建立迭代器
- 在 Python 中,使用了 yield 的函数被称为生成器(generator)。跟普通函数不一样的是,生成器是一个返回迭代器的函数,只能用于迭代操做,更简单点理解生成器就是一个迭代器。在调用生成器运行的过程当中,每次遇到 yield 时函数会暂停并保存当前全部的运行信息,返回yield的值。并在下一次执行 next()方法时从当前位置继续运行。
- 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。函数的第一行语句能够选择性地使用文档字符串—用于存放函数说明。return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return至关于返回 None。
- 在 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 函数的参数传递:python 中一切都是对象,严格意义咱们不能说值传递仍是引用传递,咱们应该说传不可变对象和传可变对象。如下是调用函数时可以使用的正式参数类型:必需参数/关键字参数/默认参数/不定长参
- 不可变类型:相似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象自己。好比在 fun(a)内部修改 a 的值,只是修改另外一个复制的对象,不会影响 a 自己。
- 可变类型:相似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响
- 必需参数须以正确的顺序传入函数。调用时的数量必须和声明时的同样。
- 使用关键字参数容许函数调用时参数的顺序与声明时不一致,由于 Python 解释器可以用参数名匹配参数值。
- 你可能须要一个函数能处理比当初声明时更多的参数。这些参数叫作不定长参数,和上述2种参数不一样,声明时不会命名。加了星号(*)的变量名会存放全部未命名的变量参数。若是在函数调用时没有指定参数,它就是一个空元组。咱们也能够不向函数传递未命名的变量。
- python 使用 lambda 来建立匿名函数。所谓匿名,意即再也不使用 def 语句这样标准的形式定义一个函数。
- lambda 只是一个表达式,函数体比 def 简单不少。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda 函数拥有本身的命名空间,且不能访问本身参数列表以外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增长运行效率。
- Python的做用域一共有4种,分别是:以 L –> E –> G –>B 的规则查找,即:在局部找不到,便会去局部外的局部找(例如闭包),再找不到就会去全局找,再者去内建中找。Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的做用域,其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的做用域的,也就是说这这些语句内定义的变量,外部也能够访问
- L (Local) 局部做用域
- E (Enclosing) 闭包函数外的函数中
- G (Global) 全局做用域
- B (Built-in) 内建做用域
- 当内部做用域想修改外部做用域的变量时,就要用到global和nonlocal关键字了。
- 若是要修改嵌套做用域(enclosing 做用域,外层非全局做用域)中的变量则须要 nonlocal 关键字了
- Python中列表是可变的,这是它区别于字符串和元组的最重要的特色,一句话归纳即:列表能够修改,而字符串和元组不能。
- 列表是最经常使用的Python数据类型,它能够做为一个方括号内的逗号分隔值出现。
- 列表的数据项不须要具备相同的类型
- 建立一个列表,只要把逗号分隔的不一样的数据项使用方括号括起来便可。
- 你能够对列表的数据项进行修改或更新,你也可使用append()方法来添加列表项
- 可使用 del 语句来删除列表的的元素
- 列表对 + 和 * 的操做符与字符串类似。+ 号用于组合列表,* 号用于重复列表。
- 使用嵌套列表即在列表里建立其它列表
- list() 方法用于将元组转换为列表。注:元组与列表是很是相似的,区别在于元组的元素值不能修改,元组是放在括号中,列表是放于方括号中。
- extend() 函数用于在列表末尾一次性追加另外一个序列中的多个值(用新列表扩展原来的列表)。
- clear() 函数用于清空列表,相似于 del a[:]。
- copy() 函数返回列表的浅复制,相似于 a[:]。
- list.insert(i, x)在指定位置插入一个元素。第一个参数是准备插入到其前面的那个元素的索引,例如 a.insert(0, x) 会插入到整个列表以前,而 a.insert(len(a), x) 至关于 a.append(x) 。
- list.index(x)返回列表中第一个值为 x 的元素的索引。若是没有匹配的元素就会返回一个错误。
- list.count(x) 返回 x 在列表中出现的次数。
- list.copy() 返回列表的浅复制,等于a[:]。
- 列表方法使得列表能够很方便的做为一个堆栈来使用,堆栈做为特定的数据结构,最早进入的元素最后一个被释放(后进先出)。用 append() 方法能够把一个元素添加到堆栈顶。用不指定索引的 pop() 方法能够把一个元素从堆栈顶释放出来。
- 也能够把列表当作队列用,只是在队列里第一加入的元素,第一个取出来;可是拿列表用做这样的目的效率不高。在列表的最后添加或者弹出元素速度快,然而在列表里插入或者从头部弹出速度却不快(由于全部其余的元素都得一个一个地移动)。
- 列表推导式提供了从序列建立列表的简单途径。一般应用程序将一些操做应用于某个序列的每一个元素,用其得到的结果做为生成新列表的元素,或者根据肯定的断定条件建立子序列。
- 每一个列表推导式都在 for 以后跟一个表达式,而后有零到多个 for 或 if 子句。返回结果是一个根据表达从其后的 for 和 if 上下文环境中生成出来的列表。若是但愿表达式推导出一个元组,就必须使用括号。
- 使用 del 语句能够从一个列表中依索引而不是值来删除一个元素。这与使用 pop() 返回一个值不一样。能够用 del 语句从列表中删除一个切割,或清空整个列表(咱们之前介绍的方法是给该切割赋一个空列表)。
- 元组在输出时老是有括号的,以便于正确表达嵌套结构。在输入时可能有或没有括号, 不过括号一般是必须的(若是元组是更大的表达式的一部分)
- 集合是一个无序不重复元素的集。基本功能包括关系测试和消除重复元素。能够用大括号({})建立集合。注意:若是要建立一个空集合,你必须用 set() 而不是 {} ;后者建立一个空的字典。
- 序列是以连续的整数为索引,与此不一样的是,字典以关键字为索引,关键字能够是任意不可变类型,一般用字符串或数值。理解字典的最佳方式是把它看作无序的键=>值对集合。在同一个字典以内,关键字必须是互不相同。
- 一对大括号建立一个空的字典:{}。
- 构造函数 dict() 直接从键值对元组列表中构建字典。若是有固定的模式,列表推导式指定特定的键值对。此外,字典推导能够用来建立任意键和值的表达式词典。若是关键字只是简单的字符串,使用关键字参数指定键值对有时候更方便。
- 在字典中遍历时,关键字和对应的值可使用 items() 方法同时解读出来。
- 在序列中遍历时,索引位置和对应值可使用 enumerate() 函数同时获得。
- 同时遍历两个或更多的序列,可使用 zip() 组合。
- 要反向遍历一个序列,首先指定这个序列,而后调用 reversed() 函数。
- 要按顺序遍历一个序列,使用 sorted() 函数返回一个已排序的序列,并不修改原值。
- Python 提供了一个办法,把这些定义存放在文件中,为一些脚本或者交互式的解释器实例使用,这个文件被称为模块。模块是一个包含全部你定义的函数和变量的文件,其后缀名是.py。模块能够被别的程序引入,以使用该模块中的函数等功能。这也是使用 python 标准库的方法。
- 想使用 Python 源文件,只需在另外一个源文件里执行 import 语句。当解释器遇到 import 语句,若是模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的全部目录的列表。如想要导入模块 support,须要把命令放在脚本的顶端。一个模块只会被导入一次,无论你执行了多少次import。这样能够防止导入模块被一遍又一遍地执行。
- Python的搜索路径是由一系列目录名组成的,Python解释器就依次从这些目录中去寻找所引入的模块。这看起来很像环境变量,事实上,也能够经过定义环境变量的方式来肯定搜索路径。搜索路径是在Python编译或安装的时候肯定的,安装新的库应该也会修改。搜索路径被存储在sys模块中的path变量。sys.path 输出是一个列表,其中第一项是空串'',表明当前目录(如果从一个脚本中打印出来的话,能够更清楚地看出是哪一个目录),亦即咱们执行python解释器的目录(对于脚本的话就是运行的脚本所在的目录)。所以若像我同样在当前目录下存在与要引入模块同名的文件,就会把要引入的模块屏蔽掉。了解了搜索路径的概念,就能够在脚本中修改sys.path来引入一些不在搜索路径中的模块。
- 在 python 用 import 或者 from...import 来导入相应的模块。
- 将整个模块(somemodule)导入,格式为: import somemodule
- 从某个模块中导入某个函数,格式为: from somemodule import somefunction
- 从某个模块中导入多个函数,格式为: from somemodule import firstfunc, secondfunc, thirdfunc
- 将某个模块中的所有函数导入,格式为: from somemodule import *
- 模块除了方法定义,还能够包括可执行的代码。这些代码通常用来初始化这个模块。这些代码只有在第一次被导入时才会被执行。每一个模块有各自独立的符号表,在模块内部为全部的函数看成全局符号表来使用。因此,模块的做者能够放心大胆的在模块内部使用这些全局变量,而不用担忧把其余用户的全局变量搞花。
- 一个模块被另外一个程序第一次引入时,其主程序将运行。若是咱们想在模块被引入时,模块中的某一程序块不执行,咱们能够用__name__属性来使该程序块仅在该模块自身运行时执行。
- 内置的函数 dir() 能够找到模块内定义的全部名称。若是没有给定参数,那么 dir() 函数会罗列出当前定义的全部名称。
- 包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。好比一个模块的名称是 A.B, 那么他表示一个包 A中的子模块 B 。就好像使用模块的时候,你不用担忧不一样模块之间的全局变量相互影响同样,采用点模块名称这种形式也不用担忧不一样库之间的模块重名的状况。
- 在导入一个包的时候,Python 会根据 sys.path 中的目录来寻找这个包中包含的子目录。目录只有包含一个叫作 __init__.py 的文件才会被认做是一个包,主要是为了不一些滥俗的名字(好比叫作 string)不当心的影响搜索路径中的有效模块。最简单的状况,放一个空的 :file:__init__.py就能够了。固然这个文件中也能够包含一些初始化代码或者为(将在后面介绍的) __all__变量赋值。
- 用户能够每次只导入一个包里面的特定模块
- 注意当使用from package import item这种形式的时候,对应的item既能够是包里面的子模块(子包),或者包里面定义的其余名称,好比函数,类或者变量。import语法会首先把item看成一个包定义的名称,若是没找到,再试图按照一个模块去导入。若是还没找到,恭喜,一个:exc:ImportError 异常被抛出了。反之,若是使用形如import item.subitem.subsubitem这种导入形式,除了最后一项,都必须是包,而最后一项则能够是模块或者是包,可是不能够是类,函数或者变量的名字。
- 若是咱们使用 from sound.effects import *,Python 会进入文件系统,找到这个包里面全部的子模块,一个一个的把它们都导入进来。可是很不幸,这个方法在 Windows平台上工做的就不是很是好,由于Windows是一个大小写不区分的系统。在这类平台上,没有人敢担保一个叫作 ECHO.py 的文件导入为模块 echo 仍是 Echo 甚至 ECHO。
- 为了解决这个问题,只能烦劳包做者提供一个精确的包的索引了。导入语句遵循以下规则:若是包定义文件 __init__.py 存在一个叫作 __all__ 的列表变量,那么在使用 from package import * 的时候就把这个列表中的全部名字做为包内容导入。做为包的做者,可别忘了在更新包以后保证 __all__ 也更新了啊。
- Python两种输出值的方式: 表达式语句和 print() 函数。第三种方式是使用文件对象的 write() 方法,标准输出文件能够用 sys.stdout 引用。若是你但愿输出的形式更加多样,可使用 str.format() 函数来格式化输出值。若是你但愿将输出的值转成字符串,可使用 repr() 或 str() 函数来实现。
- str():函数返回一个用户易读的表达形式。repr():产生一个解释器易读的表达形式。
- 字符串对象的 rjust() 方法, 能够将字符串靠右, 并在左边填充空格。还有相似的方法, 如 ljust() 和 center()。 这些方法并不会写任何东西, 它们仅仅返回新的字符串。另外一个方法 zfill(), 它会在数字的左边填充 0。
- str.format() 的基本使用以下:% 操做符也能够实现字符串格式化。它将左边的参数做为相似 sprintf() 式的格式化字符串, 而将右边的代入, 而后返回格式化后的字符串。由于 str.format() 比较新的函数, 大多数的 Python 代码仍然使用 % 操做符。可是由于这种旧式的格式化最终会从该语言中移除, 应该更多的使用 str.format()。Python提供了 input() 置函数从标准输入读入一行文本,默认的标准输入是键盘。input 能够接收一个Python表达式做为输入,并将运算结果返回。
- 括号及其里面的字符 (称做格式化字段) 将会被 format() 中的参数替换。在括号中的数字用于指向传入对象在 format() 中的位置。
- 若是在 format() 中使用了关键字参数, 那么它们的值会指向使用该名字的参数。位置及关键字参数能够任意的结合。
- '!a' (使用 ascii()), '!s' (使用 str()) 和 '!r' (使用 repr()) 能够用于在格式化某个值以前对其进行转化。
- 可选项 ':' 和格式标识符能够跟着字段名。 这就容许对值进行更好的格式化。在 ':' 后传入一个整数, 能够保证该域至少有这么多的宽度。 用于美化表格时颇有用。
- 若是你有一个很长的格式化字符串, 而你不想将它们分开, 那么在格式化时经过变量名而非位置会是很好的事情。最简单的就是传入一个字典, 而后使用方括号 '[]' 来访问键值,也能够经过在 table 变量前使用 '**' 来实现相同的功能。
- open() 将会返回一个 file 对象,基本语法格式以下:open(filename, mode)。为了读取一个文件的内容,调用 f.read(size), 这将读取必定数目的数据, 而后做为字符串或字节对象返回。size 是一个可选的数字类型的参数。当 size 被忽略了或者为负, 那么该文件的全部内容都将被读取而且返回。f.readline() 会从文件中读取单独的一行。换行符为 '\n'。f.readline() 若是返回一个空字符串, 说明已经已经读取到最后一行。
- filename:filename 变量是一个包含了你要访问的文件名称的字符串值。
- mode:mode决定了打开文件的模式:只读,写入,追加等。全部可取值见以下的彻底列表。这个参数是非强制的,默认文件访问模式为只读(r)。
- f.readlines() 将返回该文件中包含的全部行。若是设置可选参数 sizehint, 则读取指定长度的字节, 而且将这些字节按行分割。另外一种方式是迭代一个文件对象而后读取每行。
- f.write(string) 将 string 写入到文件中, 而后返回写入的字符数。若是要写入一些不是字符串的东西, 那么将须要先进行转换。
- f.tell() 返回文件对象当前所处的位置, 它是从文件开头开始算起的字节数。
- 若是要改变文件当前的位置, 可使用 f.seek(offset, from_what) 函数。from_what 值为默认为0,即文件开头。from_what 的值, 若是是 0 表示开头, 若是是 1 表示当前位置, 2 表示文件的结尾,例如:当你处理完一个文件后, 调用 f.close() 来关闭文件并释放系统的资源,若是尝试再调用该文件,则会抛出异常。
- seek(x,0) : 从起始位置即文件首行首字符开始移动 x 个字符
- seek(x,1) : 表示从当前位置日后移动x个字符
- seek(-x,2):表示从文件的结尾往前移动x个字符
- python的pickle模块实现了基本的数据序列和反序列化。经过pickle模块的序列化操做咱们可以将程序中运行的对象信息保存到文件中去,永久存储。经过pickle模块的反序列化操做,咱们可以从文件中建立上一次程序保存的对象。
- 基本接口:
- pickle.dump(obj, file, [,protocol])
- 有了 pickle 这个对象, 就能对 file 以读取的形式打开:file 对象使用 open 函数来建立,下表列出了 file 对象经常使用的函数:file.close() / file.flush() / file.fileno() / file.isatty() / file.next() / file.read([size]) / file.readline([size]) / file.readlines([sizeint]) / file.seek(offset[, whence]) / file.tell() / file.truncate([size]) / file.write(str) / file.writelines(sequence)
- os 模块提供了很是丰富的方法用来处理文件和目录。经常使用的方法以下表所示:
- os.access(path, mode) 检验权限模式
- os.chdir(path) 改变当前工做目录
- os.chflags(path, flags) 设置路径的标记为数字标记。
- os.chmod(path, mode) 更改权限
- os.chown(path, uid, gid) 更改文件全部者
- os.chroot(path) 改变当前进程的根目录
- os.close(fd) 关闭文件描述符 fd
- os.closerange(fd_low, fd_high) 关闭全部文件描述符,从 fd_low (包含) 到 fd_high (不包含), 错误会忽略
- os.dup(fd) 复制文件描述符 fd
- os.dup2(fd, fd2) 将一个文件描述符 fd 复制到另外一个 fd2
- os.fchdir(fd) 经过文件描述符改变当前工做目录
- os.fchmod(fd, mode) 改变一个文件的访问权限,该文件由参数fd指定,参数mode是Unix下的文件访问权限。
- os.fchown(fd, uid, gid) 修改一个文件的全部权,这个函数修改一个文件的用户ID和用户组ID,该文件由文件描述符fd指定。
- os.fdatasync(fd) 强制将文件写入磁盘,该文件由文件描述符fd指定,可是不强制更新文件的状态信息。
- os.fdopen(fd[, mode[, bufsize]]) 经过文件描述符 fd 建立一个文件对象,并返回这个文件对象
- os.fpathconf(fd, name) 返回一个打开的文件的系统配置信息。name为检索的系统配置的值,它也许是一个定义系统值的字符串,这些名字在不少标准中指定(POSIX.1, Unix 95, Unix 98, 和其它)。
- os.fstat(fd) 返回文件描述符fd的状态,像stat()。
- os.fstatvfs(fd) 返回包含文件描述符fd的文件的文件系统的信息,像 statvfs()
- os.fsync(fd) 强制将文件描述符为fd的文件写入硬盘。
- os.ftruncate(fd, length) 裁剪文件描述符fd对应的文件, 因此它最大不能超过文件大小。
- os.getcwd() 返回当前工做目录
- os.getcwdu() 返回一个当前工做目录的Unicode对象
- os.isatty(fd) 若是文件描述符fd是打开的,同时与tty(-like)设备相连,则返回true, 不然False。
- os.lchflags(path, flags) 设置路径的标记为数字标记,相似 chflags(),可是没有软连接
- os.lchmod(path, mode) 修改链接文件权限
- os.lchown(path, uid, gid) 更改文件全部者,相似 chown,可是不追踪连接。
- os.link(src, dst) 建立硬连接,名为参数 dst,指向参数 src
- os.listdir(path) 返回path指定的文件夹包含的文件或文件夹的名字的列表。
- os.lseek(fd, pos, how) 设置文件描述符 fd当前位置为pos, how方式修改: SEEK_SET 或者 0 设置从文件开始的计算的pos; SEEK_CUR或者 1 则从当前位置计算; os.SEEK_END或者2则从文件尾部开始. 在unix,Windows中有效
- os.lstat(path) 像stat(),可是没有软连接
- os.major(device) 从原始的设备号中提取设备major号码 (使用stat中的st_dev或者st_rdev field)。
- os.makedev(major, minor) 以major和minor设备号组成一个原始设备号
- os.makedirs(path[, mode]) 递归文件夹建立函数。像mkdir(), 但建立的全部intermediate-level文件夹须要包含子文件夹。
- os.minor(device) 从原始的设备号中提取设备minor号码 (使用stat中的st_dev或者st_rdev field )。
- os.mkdir(path[, mode]) 以数字mode的mode建立一个名为path的文件夹.默认的 mode 是 0777 (八进制)。
- os.mkfifo(path[, mode]) 建立命名管道,mode 为数字,默认为 0666 (八进制)
- os.mknod(filename[, mode=0600, device]) 建立一个名为filename文件系统节点(文件,设备特别文件或者命名pipe)。
- os.open(file, flags[, mode]) 打开一个文件,而且设置须要的打开选项,mode参数是可选的
- os.openpty() 打开一个新的伪终端对。返回 pty 和 tty的文件描述符。
- os.pathconf(path, name) 返回相关文件的系统配置信息。
- os.pipe() 建立一个管道. 返回一对文件描述符(r, w) 分别为读和写
- os.popen(command[, mode[, bufsize]]) 从一个 command 打开一个管道
- os.read(fd, n) 从文件描述符 fd 中读取最多 n 个字节,返回包含读取字节的字符串,文件描述符 fd对应文件已达到结尾, 返回一个空字符串。
- os.readlink(path) 返回软连接所指向的文件
- os.remove(path) 删除路径为path的文件。若是path 是一个文件夹,将抛出OSError; 查看下面的rmdir()删除一个 directory。
- os.removedirs(path) 递归删除目录。
- os.rename(src, dst) 重命名文件或目录,从 src 到 dst
- os.renames(old, new) 递归地对目录进行改名,也能够对文件进行改名。
- os.rmdir(path) 删除path指定的空目录,若是目录非空,则抛出一个OSError异常。
- os.stat(path) 获取path指定的路径的信息,功能等同于C API中的stat()系统调用。
- os.stat_float_times([newvalue]) 决定stat_result是否以float对象显示时间戳
- os.statvfs(path) 获取指定路径的文件系通通计信息
- os.symlink(src, dst) 建立一个软连接
- os.tcgetpgrp(fd) 返回与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组
- os.tcsetpgrp(fd, pg) 设置与终端fd(一个由os.open()返回的打开的文件描述符)关联的进程组为pg。
- os.ttyname(fd) 返回一个字符串,它表示与文件描述符fd 关联的终端设备。若是fd 没有与终端设备关联,则引起一个异常。
- os.unlink(path) 删除文件路径
- os.utime(path, times) 返回指定的path文件的访问和修改的时间。
- os.walk(top[, topdown=True[, onerror=None[, followlinks=False]]]) 输出在文件夹中的文件名经过在树中游走,向上或者向下。
- os.write(fd, str) 写入字符串到文件描述符 fd中. 返回实际写入的字符串长度
- Python有两种错误很容易辨认:语法错误和异常。Python 的语法错误或者称之为解析错。即使Python程序的语法是正确的,在运行它的时候,也有可能发生错误。运行期检测到的错误被称为异常。大多数的异常都不会被程序处理,都以错误信息的形式展示在这里。
- 一个 try 语句可能包含多个except子句,分别来处理不一样的特定的异常。最多只有一个分支会被执行。处理程序将只针对对应的try子句中的异常进行处理,而不是其余的 try 的处理程序中的异常。一个except子句能够同时处理多个异常,这些异常将被放在一个括号里成为一个元组。最后一个except子句能够忽略异常的名称,它将被看成通配符使用。你可使用这种方法打印一个错误信息,而后再次把异常抛出。
- try except 语句还有一个可选的else子句,若是使用这个子句,那么必须放在全部的except子句以后。这个子句将在try子句没有发生任何异常的时候执行。使用 else 子句比把全部的语句都放在 try 子句里面要好,这样能够避免一些意想不到的、而except又没有捕获的异常。异常处理并不只仅处理那些直接发生在try子句中的异常,并且还能处理子句中调用的函数(甚至间接调用的函数)里抛出的异常。
- Python 使用 raise 语句抛出一个指定的异常。raise 惟一的一个参数指定了要被抛出的异常。它必须是一个异常的实例或者是异常的类(也就是 Exception 的子类)。若是你只想知道这是否抛出了一个异常,并不想去处理它,那么一个简单的 raise 语句就能够再次把它抛出。
- 你能够经过建立一个新的exception类来拥有本身的异常。异常应该继承自 Exception 类,或者直接继承,或者间接继承。当建立一个模块有可能抛出多种不一样的异常时,一种一般的作法是为这个包创建一个基础异常类,而后基于这个基础类为不一样的错误状况建立不一样的子类。大多数的异常的名字都以"Error"结尾,就跟标准的异常命名同样。
- try 语句还有另一个可选的子句,它定义了不管在任何状况下都会执行的清理行为。无论 try 子句里面有没有发生异常,finally 子句都会执行。若是一个异常在 try 子句里(或者在 except 和 else 子句里)被抛出,而又没有任何的 except 把它截住,那么这个异常会在 finally 子句执行后再次被抛出。
- 一些对象定义了标准的清理行为,不管系统是否成功的使用了它,一旦不须要它了,那么这个标准的清理行为就会执行。关键词 with 语句就能够保证诸如文件之类的对象在使用完以后必定会正确的执行他的清理方法。