06.Python再谈编码

?. is和==的区别

1. id()

通过id()我们可以查看到?个变量表?的值在内存中的地址.

?数据池(常量池): 把我们使?过的值存储在?数据池中.供其他的变量使?.

?数据池给数字和字符串使?, 其他数据类型不存在.

对于数字: -5~256是会被加到?数据池中的. 每次使?都是同?个对象.

对于字符串:

1. 如果是纯?字信息和下划线. 那么这个对象会被添加到?数据池

2. 如果是带有特殊字符的. 那么不会被添加到?数据池. 每次都是新的

3. 如果是单?字?*n的情况. ‘a‘*20, 在20个单位内是可以的. 超过20个单位就不会添加

到?数据池中

注意(?般情况下): 在py?件中. 如果你只是单纯的定义?个字符串. 那么?般情况下都是会

被添加到?数据池中的. 我们可以这样认为: 在使?字符串的时候, python会帮我们把字符串

进?缓存, 在下次使?的时候直接指向这个字符串即可. 可以节省很多内存.

这个问题千万不要纠结. 因为官?没有给出?个完美的结论和定论.所以只能是??摸索.

以下内容摘?官?中关于id()的描述

说了这么多. 这个id()和is有什么关系呢. 注意. is比较的就是id()计算出来的结果. 由于id是帮我

们查看某数据(对象) 的内存地址. 那么is比较的就是数据(对象)的内存地址.

最终我们通过is可以查看两个变量使?的是否是同?个对象.

== 双等表?的是判断是否相等, 注意. 这个双等比较的是具体的值.?不是内存地址

总结:

is 比较的是地址

== 比较的是值

?. 编码的补充

1. python2中默认使?的是ASCII码. 所以不?持中?. 如果需要在Python2中更改编码.

需要在?件的开始编写:

2. python3中: 内存中使?的是unicode码.

编码回顾:

1. ASCII : 最早的编码. ??有英??写字?, ?写字?, 数字, ?些特殊字符. 没有中?,

8个01代码, 8个bit, 1个byte

2. GBK: 中?国标码, ??包含了ASCII编码和中?常?编码. 16个bit, 2个byte

3. UNICODE: 万国码, ??包含了全世界所有国家?字的编码. 32个bit, 4个byte, 包含了

ASCII

4. UTF-8: 可变?度的万国码. 是unicode的?种实现. 最?字符占8位

1.英?: 8bit 1byte

2.欧洲?字:16bit 2byte

3.中?:24bit 3byte

综上, 除了ASCII码以外, 其他信息不能直接转换.

在python3的内存中. 在程序运?阶段. 使?的是unicode编码. 因为unicode是万国码. 什么内

容都可以进?显?. 那么在数据传输和存储的时候由于unicode比较浪费空间和资源. 需要把

unicode转存成UTF-8或者GBK进?存储. 怎么转换呢. 在python中可以把?字信息进?编码.

编码之后的内容就可以进?传输了. 编码之后的数据是bytes类型的数据.其实啊. 还是原来的

数据只是经过编码之后表现形式发?了改变?已.

bytes的表现形式:

1. 英? b‘alex‘ 英?的表现形式和字符串没什么两样

2. 中? b‘\xe4\xb8\xad‘ 这是?个汉字的UTF-8的bytes表现形式

字符串在传输时转化成bytes=> encode(字符集)来完成

记住: 英?编码之后的结果和源字符串?致. 中?编码之后的结果根据编码的不同. 编码结果

也不同. 我们能看到. ?个中?的UTF-8编码是3个字节. ?个GBK的中?编码是2个字节.

编码之后的类型就是bytes类型. 在?络传输和存储的时候我们python是保存和存储的bytes

类型. 那么在对?接收的时候. 也是接收的bytes类型的数据. 我们可以使?decode()来进?解

码操作. 把bytes类型的数据还原回我们熟悉的字符串:

编码和解码的时候都需要制定编码格式.

原文地址:https://www.cnblogs.com/xuweng/p/12169282.html

时间: 2024-10-08 17:13:08

06.Python再谈编码的相关文章

万恶之源-再谈编码

万恶之源-再谈编码 本节主要内容: ?小数据池 is和==的区别 3. 编码的问题 ?一. ?小数据池 在说?小数据池之前. 我们先看?一个概念念. 什什么是代码块: 根据提示我们从官?方?文档找到了了这样的说法: A Python program is constructed from code blocks. A block is a piece of Python program text that is executed as a unit. The following are bloc

再谈编码---小数据池(概念)

1. 小数据池小数据池在说小数据池之前. 我们先看一个概念. 什么是代码块:python程序是由代码块构成的. 一个代码块的文本作为python程序执行的单元.代码块: 一个模块, 一个函数, 一个类, 甚至每一个command命令都是一个代码块. 一个文件也是一个代码块, eval()和exec()执行的时候也是一个代码块 小数据池. 一种数据缓存机制. 也被称为驻留机制. 小数据池只针对: 整数, 字符串串, 布尔值. 其他的数据类型不存在驻留机制 在python中对-5到256之间的整数会

再谈编码

1.is和==的区别 注意(一般情况下): 在py文件中. 如果你只是单纯的定义一个字符串. 那么一般情况下都是会被添加到小数据池中的. 我们可以这 样认为: 在使用字符串的时候, python会帮我们把字符串进行缓存, 在下次使用的时候直接指向这个字符串即可. 可以节省很多内存. is 比较的是地址 == 比较的是值 2.编码的补充 1. 英文   b'alex'  英文的表现形式和字符串没什么两样 2. 中文   b'\xe4\xb8\xad' 这是一个汉字的UTF-8的bytes表现形式

python之路---06 小数据池 编码

二十二.小数据池, id()    进行缓存 1.小数据池针对的是: int, str, bool 2.在py文件中几乎所有的字符串都会缓存.   在cmd命令窗口中几乎都不会缓存   不同的解释器有不同的机制 3.id() 查看变量的内存地址 4. is和==的区别 is 比较的是内存地址 == 比较的是内容 当两个变量指向同一个对象的时候. is是True, ==也是True 5. 优点:快速创建对象,节省内存 缺点:缓存如果过大,影响速度会比较慢 二十三. 再谈编码 回顾: 1. asci

浅谈Python中的编码规则

注:本人用Python3.4作为学习版本,以下学习心得只适用于Python3.4. 之前拜读了金角大王Alex关于编码的解答,收获颇多.特此致谢,以下仅谈一谈作为一个初学者,对编码的理解. 我所了解的编码,大致分为两类:第一类是支持中文的编码集:第二类是支持英文的编码集.至于别国的编码集,暂且不做讨论. 常见编码:ASCII:Unicode:UTF-8:big5,:GB2312:GBK:GB18030 接下来,我对以上编码进行分类: 只支持英文和特殊字符的编码:ASCII ASCII是基于拉丁字

Python文件写入编码问题

今天,用Python写文件,发现中国人真不容易,任何编程问题都需要比老外多学一套应对编码的方法.JSP写完了吗?中文编码问题考虑一下:servlet中的url,转发的文本,都有可能与什么gb2312,isoxxxx,utf-8,unicode,ascii扯上关系.以至于,我们每每遇到运行异常,都会"一朝被蛇咬十年怕井绳"般思考"是不是又是编码导致的". 在python里,编码问题依然是个恶心的问题.之前在VS for Python的IDE环境下,已经饱尝中文编码之苦

python基础之编码问题

python基础之编码问题 本节内容 字符串编码问题由来 字符串编码解决方案 1.字符串编码问题由来 由于字符串编码是从ascii--->unicode--->utf-8(utf-16和utf-32等)演变过来的,再加上类似于中国的gbk编码等,这些编码互相之间并不兼容,所以编写的软件实现跨语言平台运行就会出现字符乱码问题... 须知内容如下: 在python2默认编码是ASCII, python3里默认是utf-8(文件编码默认是utf-8,字符串编码默认是unicode) unicode

【Go语言】【13】再谈GO语言的结构体

本文从如下四个方面再领着大家认识结构体 匿名结构体和匿名成员的结构体 值传递和引用传递 再谈嵌套结构体 面向对象 1.匿名结构体和匿名成员的结构体 如上篇所述,一个结构体需要先声明,再初始化,最后把初始化后的结构体赋值给其它变量,例如: /*声明结构体*/ type employee struct{ name,address string height,weight float64 } /*初始化结构体,并赋给变量emp*/ emp := employee{name:"eagle",

python中的编码与解码

编码与解码 首先,明确一点,计算机中存储的信息都是二进制的 编码/解码本质上是一种映射(对应关系),比如‘a’用ascii编码则是65,计算机中存储的就是00110101,但是显示的时候不能显示00110101,还是要显示'a',但计算机怎么知道00110101是'a'呢,这就需要解码,当选择用ascii解码时,当计算机读到00110101时就到对应的ascii表里一查发现是'a',就显示为'a' 编码:真实字符与二进制串的对应关系,真实字符→二进制串 解码:二进制串与真实字符的对应关系,二进制