python2和python3的区别:
- Python2默认 编码方式为ASCII, Python3 默认编码方式为UTF-8(是Unicode 的扩展集)
- python2中字符串有str和unicode两种类型, python3 中字符串有str和字节(bytes) 两种类型
- python3中不再支持u中文的语法格式
- str与字节码(bytes): python3中字符串两种类型
- unicode与str : python2中字符串两种类型
python2和python3中编码转换:
- 在python3中字符串默认是unicode所以不需要decode(),直接encode成想要转换的编码如gb2312
- 在python2中默认是ASCII编码,必须先转换成Unicode,Unicode 可以作为各种编码的转换的中转站
顶部的:# -- coding: utf-8 --或者# coding: utf-8目前有三个作用 - 如果代码中有中文注释,就需要此声明。
- 比较高级的编辑器会根据头部声明,将此作为代码文件的格式。
- 程序会通过头部声明,解码初始化 u"人生苦短",这样的unicode对象,(所以头部声明和代码的存储格式要一致)
python2在文件中进行字符编码转换
#!/usr/bin/env python
#-*- coding:utf8 -*-
ss = '北京市'
#1、第一步先将utf8的字符串解码成unicode: str ----> Unicode
#注:因为上面声明了使用utf8所以这里必须制定用utf8格式才能decode解码成Unicode
unicode_type = ss.decode('utf8') # 将utf8的str格式转换成 unicode编码
print type(unicode_type) # type变成:<type 'unicode'>
#2、第二步将unicode转换成gbk
gbk_type = unicode_type.encode('gbk') # 将'unicode' encode编码成gbk格式的str
print gbk_type.decode('gbk') # 只有将gbk格式的str再deode 解码成 unicode才能显示 "北京市"
# print type( gbk_type.decode('gbk') ) # 能正常显示的只有:<type 'unicode'> 格式
python3在文件中进行字符编码转换
import sys
print(sys.getdefaultencoding()) #在python3中打印出默认字符编码: utf-8
s = "你好"
print(s.encode("gbk")) #将Unicode转换为gbk: b'\xc4\xe3\xba\xc3'
print(s.encode("utf-8")) #将Unicode转换为utf-8: b'\xe4\xbd\xa0\xe5\xa5\xbd'
print(s.encode("utf-8").decode("utf-8").encode("gb2312").decode("gb2312"))
# 1. s.encode("utf-8") #将Unicode编码为utf-8
# 2. s.encode("utf-8").decode("utf-8") #将utf-8解码为Unicode在解码时必须指定现在的字符编码“utf-8”
# 3. s.encode("utf-8").decode("utf-8").encode("gb2312") #将Unicode编码为”gb2312”
# 4. s.encode("utf-8").decode("utf-8").encode("gb2312").decode("gb2312") #将gb2312解码为unicode
# 注1:encode("utf-8") encode作用是将Unicode编码编码为指定编码(这里的utf-8是要编码成什么)
# 注2:decode(“utf-8”) decode作用是将其他编码转化为Unicode编码(这里的utf-8是指定现在是什么编码)
字符编码格式
几种常用编码
- ASCII : 不支持中文
- GBK : 是中国的中文字符,其包含了简体中文和繁体中文的字符
- Unicode : 万国编码(Unicode 包含GBK)
1)Unicode 是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码
2)规定虽有的字符和符号最少由 16 位来表示(2个字节),即:2 **16 = 65536
3)这里还有个问题:使用的字节增加了,那么造成的直接影响就是使用的空间就直接翻倍了
- Utf-8 : 可变长码, 是Unicode 的扩展集
1) UTF-8编码:是对Unicode编码的压缩和优化,他不再使用最少使用2个字节,而是将所有的字符和符号进行分类
2)ascii码中的内容用1个字节保存、欧洲的字符用2个字节保存,东亚的字符用3个字节保存…
上下文管理
什么是with语句
- with是一种上下文管理协议,目的在于从流程图中把 try,except 和finally 关键字和资源分配释放相关代码统统去掉,简化try….except….finlally的处理流程。
所以使用with处理的对象必须有enter()和exit()这两个方法 - with通过enter方法初始化(enter方法在语句体执行之前进入运行
- 然后在exit中做善后以及处理异常(exit()方法在语句体执行完毕退出后运行)
with语句使用场景 - with 语句适用于对资源进行访问的场合,确保不管使用过程中是否发生异常都会执行必要的“清理”操作,释放资源
- 比如文件使用后自动关闭、线程中锁的自动获取和释放等
with处理文件操作的实例
with open('/etc/passwd') as f:
for line in f:
print(line)
is和==比较:
== 是比较两个对象的内容是否相等,即两个对象的“值“”是否相等,不管两者在内存中的引用地址是否一样
is 比较的是两个实例对象是不是完全相同,它们是不是同一个对象,占用的内存地址是否相同
即is比较两个条件:
- 内容相同
- 内存中地址相同