python2和3的区别&字符编码格式&上下文管理&is和==的区别

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比较两个条件:

  • 内容相同
  • 内存中地址相同
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值