目录
isinstance(object, classinfo)与type(abject)
关于pip-review(分叉pip-tools,用来升级包)
目录只有包含一个叫做 __init__.py 的文件才会被认作是一个包
// 取整除(向下取接近商的整数),但得到的并不一定是整数类型的数,它与分母分子的数据类型有关系。
抛出异常 raise [Exception [, args [, traceback]]]
Tips
-
汉字
Python中默认的编码格式是 ASCII 格式,在没修改编码格式时无法正确打印汉字,在读取中文时会报错。
解决方法为只要在文件开头加入 # -*- coding: UTF-8 -*- 或者 # coding=utf-8。
-
多行语句
Python语句中一般以新行作为语句的结束符,但是我们可以使用斜杠( \)将一行的语句分为多行显示。
total = item_one + \
item_two + \
item_three
冒号后面的执行代码可以在该语句后面不换行继续,也可以在该行后换行后继续。当不换行时,就表示该后的执行语句只能是一条;如果换行,则可以是一行或多行。
-
空行
空行的作用在于分隔两段不同功能或含义的代码,便于日后代码的维护或重构。
记住:空行也是程序代码的一部分。
-
isinstance(object, classinfo)与type(abject)
二者类似,返回对象类型,但前者会认为子类是父类的一种类型,考虑继承关系;后者不考虑。
-
编码方式
1.字符串在Python内部的表示是unicode(统一码、万国码)编码,是各个国家通用编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(encode)成另一种编码。
decode的作用是将其他编码的字符串转换成unicode编码,如str1.decode('gb2312'),表示将gb2312编码的字符串str1转换成unicode编码。
encode的作用是将unicode编码转换成其他编码的字符串,如str2.encode('gb2312'),表示将unicode编码的字符串str2转换成gb2312编码。
2. bytes类型是 Python 3.x版本新增的数据类型,在 Python 2.x 中是不存在的。字符串是以字符为单位进行处理的,bytes类型是以字节为单位处理的。
(bytes 只负责以字节序列的形式(二进制形式)来存储数据,至于这些数据到底表示什么内容(字符串、数字、图片、音频等),完全由程序的解析方式决定。)
bytes 类型的数据非常适合在互联网上传输,可以用于网络通信编程,也可以用来存储图片、音频、视频等二进制格式的文件。
#举个例子:
b = b'' # 创建一个空的bytes
b = byte() # 创建一个空的bytes
b = b'hello' # 直接指定这个hello是bytes类型
b = bytes('string',encoding='编码类型') #利用内置bytes方法,将字符串转换为指定编码的bytes
b = str.encode('编码类型') # 利用字符串的encode方法编码成bytes,默认为utf-8类型
bytes.decode('编码类型'):将bytes对象解码成字符串,默认使用utf-8进行解码。
3.关于爬虫中对url的编码解码:urllib.parse.urlencode编码字典,request.quote编码字符串,二者用request.unquote解码,没有urldecode,改变编码decoding=
-
一些python内置函数
bin() 求二进制 oct()八进制 hex()十六进制 ord(字符)转数 chr(数字)转字符
关于pip
-
pip本体
pip -v pip --version | 显示版本和路径 |
pip install 包名==版本 | 安装具体版本的包 |
pip uninstall 包名 | 卸载包 |
pip --help | 获取帮助 |
pip list | 获取已安装的包名单 |
pip search 包名 | 搜索包 |
pip show 包名 | 显示安装包信息 |
pip list --outdate pip list -o | 列出所有可升级的包(不支持所有) |
pip freeze > 文件路径 | 输出所有在本地已安装的包(但不包括 pip 、wheel 、setuptools 等自带包),若需要输出内容与 pip list 一致,需使用 pip freeze -all |
pip install -r 文件路径 | 一次安装文件内多个包 |
pip cache | pip安装产生的缓存 |
-
关于pip-review(分叉pip-tools,用来升级包)
- pip install pip-review
- pip-review --auto 自动批量升级包
- pip-review --interactive 以交互方式运行,对每个包进行升级
-
关于wheel文件
从网站(https://pypi.org/)上下载完.wheel文件后,pip install 文件路径 安装包
import 与 from......import
-
目录只有包含一个叫做 __init__.py 的文件才会被认作是一个包
-
__name__属性
-
一个模块被另一个程序第一次引入时,其主程序将运行。
-
如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行
-
说明: 每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。
-
说明:__name__ 与 __main__ 底下是双下划线。
-
导入模块
1.用户可以每次只导入一个包里面的特定模块,比如: import sound.effects.echo(import 模块名)
这将会导入子模块:sound.effects.echo。 他必须使用全名去访。
2.还有一种导入子模块的方法是: from sound.effects import echo(from 模块名 import 子模块名)
这同样会导入子模块: echo,并且他不需要那些冗长的前缀,所以他可以这样使用: echo.echofilter(input, output, delay=0.7, atten=4)
3.还有一种变化就是直接导入一个函数或者变量: from sound.effects.echo import echofilter
同样的,这种方法会导入子模块: echo,并且可以直接使用他的 echofilter() 函数: echofilter(input, output, delay=0.7, atten=4)
注意当使用 from package import item 这种形式的时候,对应的 item 既可以是包里面的子模块(子包),或者包里面定义的其他名称,比如函数,类或者变量。
4.import 语法会首先把 item 当作一个包定义的名称,如果没找到,再试图按照一个模块去导入。如果还没找到,抛出一个 :exc:ImportError 异常。反之,如果使用形如 import item.subitem.subsubitem 这种导入形式,除了最后一项,都必须是包,而最后一项则可以是模块或者是包,但是不可以是类,函数或者变量的名字。
5.import 模块名 as 模块别名
这个方法将导入模块起个别名,后面使用时直接用别名,这种方法一般出于两个目的,一是模块名太长,为了后面使用简写,另外就是起个容易记的别名。
Python 标识符
1.以下划线开头的标识符是有特殊意义的。
以单下划线开头 _foo 的代表不能直接访问的类属性,需通过类提供的接口进行访问,不能用 from xxx import * 而导入。
以双下划线开头的 __foo 代表类的私有成员,以双下划线开头和结尾的 __foo__ 代表 Python 里特殊方法专用的标识,如 __init__() 代表类的构造函数。
2.Python 可以同一行显示多条语句,方法是用分号 ; 分开
3.所有 Python 的关键字只包含小写字母
Python算术运算符
-
// 取整除(向下取接近商的整数),但得到的并不一定是整数类型的数,它与分母分子的数据类型有关系。
-
数学函数
abs() | 返回数字的绝对值 |
math.fabs(x) | 返回数字的绝对值 |
math.ceil(x) | 返回数字的上入整数,如math.ceil(4.1) 返回 5 |
math.floor(x) | 返回数字的下舍整数,如math.floor(4.9)返回 4 |
math.exp(x) | 返回e的x次幂(ex),如math.exp(1) 返回2.718281828459045 |
math.floor(x) | 返回数字的下舍整数,如math.floor(4.9)返回 4 |
math.log(x,y) | 如math.log(math.e)返回1.0,math.log(100,10)返回2.0 |
math.log10(x) | 返回以10为基数的x的对数,如math.log10(100)返回 2.0 |
math.modf(x) | 返回x的整数部分与小数部分,两部分的数值符号与x相同,整数部分以浮点型表示。 |
math.pow(x, y) | x**y 运算后的值 |
math.sqrt(x) | 返回数字x的平方根。 |
math.round(x[,n]) | 返回浮点数 x 的四舍五入值,如给出 n 值,则代表舍入到小数点后的位数。 其实准确的说是保留值将保留到离上一位更近的一端。 |
-
随机数函数
random.choice(seq[列表 元组 字符串]) | 从序列的元素中随机挑选一个元素,比如random.choice(range(10)),从0到9中随机挑选一个整数 |
random.randrange ([start,] stop [,step]) | 从指定范围内,按指定基数递增的集合中获取一个随机数,基数默认值为 1 |
random.random() | 随机生成下一个实数,它在[0,1)范围内 |
random.uniform(x, y) | 随机生成下一个实数,它在[x,y]范围内 |
random.randint(x,y) | 随机生成下一个整数,它在[x,y]范围内 |
random.seed([x]) | 改变随机数生成器的种子seed。如果你不了解其原理,你不必特别去设定seed,Python会帮你选择seed |
random.shuffle(lst) | 将序列的所有元素随机排序 |
-
三角函数
math.sin(x) math.cos(x) math.tan(x) math.acos(x) math.asin(x) math.atan(x) | |
math.atan2(y, x) | 返回arctan(y/x) |
hypot(x, y) | 返回欧几里德范数 sqrt(x*x + y*y) |
math.degrees(x) | 将弧度转换为角度 |
math.radians(x) | 将角度转换为弧度 |
-
数学常量
math.pi math.e
Python成员运算符
- in 如果在指定的序列中找到值返回 True,否则返回 False。 x 在 y 序列中 , 如果 x 在 y 序列中返回 True。
- not in 如果在指定的序列中没有找到值返回 True,否则返回 False。 x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。
Python身份运算符
1.身份运算符用于比较两个对象的存储单元
2.is 是判断两个标识符是不是引用自一个对象 x is y, 类似 id(x) == id(y) , 如果引用的是同一个对象则返回 True,否则返回 Falseis not
3.is not 是判断两个标识符是不是引用自不同对象 x is not y , 类似 id(a) != id(b)。如果引用的不是同一个对象则返回结果 True,否则返回 False。
注: id() 函数用于获取对象内存地址。
Python运算符优先级
** | 指数 (最高优先级) |
~ + - | 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@) |
* / % // | 乘,除,求余数和取整除 |
+ - | 加法减法 |
>> << | 右移,左移运算符 |
& | 位 'AND' |
^ | | 位运算符 |
<= < > >= | 比较运算符 |
== != | 等于运算符 |
= %= /= //= -= += *= **= | 赋值运算符 |
is is not | 身份运算符 |
in not in | 成员运算符 |
not and or | 逻辑运算符 |
字符串(String)
- python中单引号和双引号使用完全相同,使用三引号('''或""")可以指定一个多行字符串。
- 反斜杠可以用来转义,即转义符 '\'。使用r可以让反斜杠不发生转义, 如 r"this is a line with \n" 则\n会显示,并不是换行。
- 按字面意义级联字符串,如"this " "is " "string"会被自动转换为this is string。
- Python中的字符串不能改变。
str.isalnum() | 判断所有字符都是数字或者字母 |
str.isalpha() | 判断所有字符都是字母 |
str.isdigit() | 判断所有字符都是数字 |
str.islower() | 判断所有字符都是小写 |
str.isupper() | 判断所有字符都是大写 |
str.istitle() | 判断所有单词都是首字母大写,像标题 |
str.isspace() | 判断所有字符都是空白字符、\t、\n、\r |
str.upper() | 把所有字符中的小写字母转换成大写字母 |
str.lower() | 把所有字符中的大写字母转换成小写字母 |
str.capitalize() | 把第一个字母转化为大写字母,其余小写 |
str.title() | 把每个单词的第一个字母转化为大写,其余小写 |
str.join(seq) | 将序列seq中的元素以指定的字符串str连接成一个新的字符串 |
str.split(sep=None, maxsplit=-1) | 将字符串从seq处切割maxsplit次,以列表的形式返回分割后的元素 |
exec(str) | 执行字符串代码 |
列表(List)
-
list 映射解析实例
>>> li = [1, 9, 8, 4]
>>> li = [elem*2 for elem in li]
>>> li
[2, 18, 16, 8]
-
list 过滤实例
>>> li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]
>>> [elem for elem in li if len(elem) > 1]
['mpilgrim', 'foo']
>>> [elem for elem in li if elem != "b"]
['a', 'mpilgrim', 'foo', 'c', 'd', 'd']
list.clear() | 清空列表 |
list.copy() | 复制列表 注意:list1 = list.copy() |
list.append(obj) | 更新列表,在列表末尾添加新的对象 |
list.remove(obj) | 移除列表中某个值的第一个匹配项 |
list.pop([index=-1]) | 移除列表中的一个元素(默认最后一个元素),并且返回该元素的值 |
list.count(obj) | 统计某个元素在列表中出现的次数 |
list.extend(seq) | 在列表末尾一次性追加另一个序列中的多个值(用新列表扩展原来的列表)seq -- 元素列表,可以是列表、元组、集合、字典,若为字典,则仅会将键(key)作为元素依次添加至原列表的末尾。 |
list.index(obj) | 从列表中找出某个值第一个匹配项的索引位置 |
list.insert(index, obj) | 将对象插入列表 |
list.reverse() | 反向列表中元素 |
list.sort( key=None, reverse=False) | 对原列表进行排序 注意:reverse = True 降序, reverse = False 升序(默认) |
元组(Tuple)
-
删除元组
元组中的元素值是不允许删除的,但我们可以使用del语句来删除整个元组 del tuple
-
修改元组
元组中的元素值是不允许修改的,但我们可以对元组进行连接组合
注意,如果元组只有一个元素,必须在该元素后面加逗号,否则就表示该元素本身的数据类型。
字典(Dict)
注意:
1.不允许同一个键出现两次。创建时如果同一个键被赋值两次,后一个值会被记住
2.键必须不可变,所以可以用数字,字符串或元组充当,而用列表就不行
dict.clear() | 删除字典内所有元素 |
dict.copy() | 返回一个字典的浅复制,父对象进行了深拷贝,不会随被复制字典的修改而修改 注意:引用的对象是浅拷贝,所以随被引用字典的修改而修改。 |
dict.fromkeys(seq[, value]) | 创建一个新字典,以序列seq中元素做字典的键,val为字典所有键对应的初始值 |
dict.get(key, default=None) | 返回指定键的值,如果键不在字典中返回 default 设置的默认值 |
dict.items() | 以列表返回可遍历的(键, 值) 元组数组 |
dict.keys() | 返回一个迭代器,可以使用 list() 来转换为列表 |
dict.setdefault(key, default=None) | 和get()类似, 但如果键不存在于字典中,将会添加键并将值设为default |
dict.update(dict2) | 把字典dict2的键/值对更新到dict里 注意:是直接添加进去而不是删除再添加 |
dict.values() | 返回一个迭代器,可以使用 list() 来转换为列表,列表为字典中的所有值 |
dict.pop(key[,default]) | 删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出.否则,返回default值。 |
dict.popitem() | 随机返回并删除字典中的最后一对键和值。 |
集合(Set)
s.add( x ) | 将元素 x 添加到集合 s 中,如果元素已存在,则不进行任何操作 |
s.update( x ) | 添加元素,且参数可以是列表,元组,字典等,x 可以有多个,用逗号分开 |
s.remove( x ) | 将元素 x 从集合 s 中移除,如果元素不存在,则会发生错误随机删除集合中的一个元素,语法格式如下: |
s.discard( x ) | 移除集合中的元素,且如果元素不存在,不会发生错误 |
s.pop() | 对集合进行无序的排列,然后将这个无序排列集合的左面第一个元素进行删除 |
s.clear() | 移除集合中的所有元素 |
s.copy() | 拷贝一个集合 |
s1.intersection(s2,s3...) | 返回多个集合的交集 注意:返回一个新的集合 |
s1.intersection_update(s2,s3...) | 返回多个集合的交集 注意:在原始的集合上移除不重叠的元素 |
s1.difference(s2) | 返回集合的差集,即返回的集合元素包含在第一个集合中,但不包含在第二个集合(方法的参数)中 注意:返回一个新集合 |
s1.difference_update(s2) | 移除集合中的元素,该元素在指定的集合也存在 注意:直接在原来的集合中移除元素 |
s1.union(s2,s3...) | 返回多个集合的并集 |
s1.symmetric_difference(s2) | 返回两个集合中不重复的元素集合 |
s1.isdisjoint(s2) | 判断两个集合是否包含相同的元素,如果没有返回 True,否则返回 False。 |
s1.issubset(s2) | 判断指定集合是否为该方法参数集合的子集,返回布尔值,如果都包含返回 True,否则返回 False |
s1.issuperset(s2) | 判断该方法的参数集合是否为指定集合的子集,返回布尔值,如果都包含返回 True,否则返回 False |
s.symmetric_difference_update(s1) | 移除当前集合中在另外一个指定集合相同的元素,并将另外一个指定集合中不同的元素插入到当前集合中 |
函数
dir() 将模块内定义的所有函数,以一个字符串列表的形式返回
输入与输出
- str(): 函数返回一个用户易读的表达形式。
- repr(): 产生一个解释器易读的表达形式。
- 字符串对象的 rjust() 方法, 它可以将字符串靠右, 并在左边填充空格。还有类似的方法, 如 ljust() 和 center()。 这些方法并不会写任何东西, 它们仅仅返回新的字符串。另一个方法 zfill(), 它会在数字的左边填充 0
- ({域名 : 对齐方式 符号 占用宽度 . 小数点后保留位数 数据类型 }).format(参数) 左对齐<,右对齐> 保留符号+ 数据类型f,b,d,o,x,#x,#X
文件
#with 的作用就是自动调用close()方法
with open( '/path/to/file', 'r' ) as f:
print( f.read())
f.open(filename,mode, encoding='', errors='ignore')) | mode中 r: 只读模式,1)文件必须存在。2)读指针指向文件开始处 3)调用write()会报错 w: 只写模式, 1)若文件不存在,创建文件。2)文件存在,清空文件。3)写指针指向文件开始处 。4)调用read()会报错 a: 追加模式(只写)1)若文件不存在,创建文件 。2)文件存在,不清空文件,而是在文件的结尾处继续写入 3)写指针直线文件结尾处 4)调用read()会报错
r+: 读写模式, 1)文件必须存在。2)打开可读写文件,读写指针均在文件头 w+: 读写模式 ,1)若文件不存在,创建文件。 2)若文件存在是可读写文件,清空文件。3)读写指针均在文件头 a+:读写模式 , 1)若文件不存在,创建文件。2)文件存在,不清空文件。3)读指针在开始位置,写指针在文件结尾位置
b表示二进制文件 |
f.close() | 关闭文件 |
file.read([size]) | 从文件读取指定的字节数,如果未给定或为负则读取所有。 |
file.readline([size]) | 读取整行,包括 "\n" 字符 |
file.readlines([sizeint]) | 读取所有行并返回列表,若给定sizeint>0,返回总和大约为sizeint字节的行, 实际读取值可能比 sizeint 较大, 因为需要填充缓冲区。 |
file.seek(offset[, whence]) | 移动文件读取指针到指定位置(whence的值 0表示开头,1表示当前位置,2表示结尾) |
file.tell() | 返回文件指针当前位置,它是从文件开头算起的字节数 |
file.write(str) | 将字符串写入文件,返回的是写入的字符长度 |
file.writelines(sequence) | 向文件写入一个序列字符串列表,如果需要换行则要自己加入每行的换行符。 |
file.flush() | 刷新文件内部缓冲,直接把内部缓冲区的数据立刻写入文件, 而不是被动的等待输出缓冲区写入 |
file.fileno() | 返回一个整型的文件描述符(file descriptor FD 整型), 可以用在如os模块的read方法等一些底层操作上。 |
file.isatty() | 如果文件连接到一个终端设备返回 True,否则返回 False |
file.truncate([size]) | 从文件的首行首字符开始截断,截断文件为 size 个字符,无 size 表示从当前位置截断;截断之后后面的所有字符被删除,其中 windows 系统下的换行代表2个字符大小 |
异常
-
异常处理
try: #可能会出现异常的语句 except: #若出现异常,则执行此处语句 else: #若不出现异常,则执行此处语句 finally: #不管异常有没有出现,该处语句始终执行
-
assert(断言)
用于判断一个表达式,在表达式条件为 false 的时候触发异常。
-
抛出异常 raise [Exception [, args [, traceback]]]
-
清理行为
类与对象
两个下划线开头,声明该属性(方法)为私有,不能在类的外部被使用或直接访问(调用)
类的专有方法:
__init__ | 构造函数,在生成对象时调用 |
__del__ | 析构函数,释放对象时使用 |
__repr__ | 打印,转换 |
__setitem__ | 按照索引赋值 |
__getitem__ | 按照索引获取值 |
__len__ | 获得长度 |
__cmp__ | 比较运算 |
__call__ | 函数调用 |
__add__ | 加运算 |
__sub__ | 减运算 |
__mul__ | 乘运算 |
__truediv__ | 除运算 |
__mod__ | 求余运算 |
__pow__ | 乘方 |