1. id 和 ==

  • idid是一个内置的函数,可以查看变量存放的内存地址(实际上不是真正的物理地址,这里暂时这样理解),用于判断是变量否属指向了同一块内存地址
  • ==:== 可以用于判断两个变量的值是否相等,这个在之前的例子中也有用过

下面来看几个例子,以及具体的使用方法:

In [1]: a = 'abc'

In [2]: b = 'abc'

In [3]: a == b
Out[3]: True In [4]: a is b
Out[4]: True In [5]: c = 100 In [6]: d = 100 In [7]: c == d
Out[7]: True In [8]: c is d
Out[8]: True In [9]:

通过上面的例子可以总结出:字符串和数字在之前有定义过的话,后续再用到这个变量时,不会再分配内存,而是直接把新的变量直接指向之前定义过的值,因此使用is判断时结果都为True,这种机制被称作为缓存机制。但是这里也有比较坑的一点,我们再来看下面的例子:

In [9]: c = 1000

In [10]: d = 1000

In [11]: c is d
Out[11]: False In [12]:

同样是数字,但是100和1000的结果却不一样,这个要根据下面的一个知识点来看。

2. 小数据池

通过上面的例子可以看出,100和1000的值在经过相同的运算之后得到不同的结果,那么我们可以这样认为:如果内存地址一样,那么对应的值一定是相等的,但是反过来值一样的话内存地址不一定一样;我们先在来看几个例子:

In [15]: a = -5   

In [16]: b = -5   

In [17]: a is b
Out[17]: True In [18]: c = -6 In [19]: d = -6 In [20]: c is d
Out[20]: False In [21]: c = 300 In [22]: d = 300 In [23]: c is d
Out[23]: False In [24]:

这种现象是因为小数据池的存在。小数据池(非官方解释):是一种缓存机制,也被称为驻留机制,其他语言中也有类似的机制,他会把数据存储起来方便下次赋值时使用,以避免多个内存存放相同值的元素。

小数据池对数据的处理方法:

  • 小数据池只针对数字、字符串和布尔值有效
  • 数字的处理:在python中对-5到256之间的整数会被驻留在内存中. 将⼀定规则的字符串缓存;
  • 对字符串的处理:如果字符串的⻓度是0或者1, 都会默认进⾏缓存;字符串⻓度⼤于1, 但是字符串中只包含字⺟, 数字, 下划线时才会缓存

使用小数据池的优缺点:

  • 优点: 能够提⾼⼀些字符串, 整数的处理速度. 省略的创建对象的过程.
  • 缺点: 在'池'中创建或者插入新的内容会花费更多的时间.

3. 编码和解码

编码回顾:

  • ASCII:是最早的一种编码,是其他编码的基础,占用8bit,1byte
  • GBK:中文国标码,16bit,2byte
  • Unicode:万国码,包含了全世界各国的语言,32bit,4byte
  • UTF-8:可变的Unicode,是Unicode的一种实现
    • 英文:8bit,1byte
    • 欧洲文字:16bit, 2byte
    • 中文:24bit,3byte

在网络传输和文件存储中,经常需要在各种编码之间转换,最常用的如UTF-8和Unicode等。

Unicode的表现形式:即python程序存储在内存中的字符串

byte表现的形式:

  • 英文:b'i like python',除了前面加b之外跟普通字符串一样
  • 中文:b'\xe4\xb8\xad'

字符编码之间的转换使用encode和decode操作:

In [24]: a = 'i like python'

In [25]: b = '我喜欢python'

In [26]: a.encode('utf-8')
Out[26]: b'i like python' In [27]: b.encode('utf-8') # 编码成utf-8字符
Out[27]: b'\xe6\x88\x91\xe5\x96\x9c\xe6\xac\xa2python' In [28]: c = b'\xe6\x88\x91\xe5\x96\x9c\xe6\xac\xa2python' In [29]: c.decode('utf-8') # 以utf-8的编码来解码
Out[29]: '我喜欢python' In [30]: b
Out[30]: '我喜欢python' In [31]: b.encode('GBK')
Out[31]: b'\xce\xd2\xcf\xb2\xbb\xb6python' In [32]: e = b'\xce\xd2\xcf\xb2\xbb\xb6python' In [33]: e.decode('GBK').encode('utf-8') # 把GBK编码转换成UTF-8编码
Out[33]: b'\xe6\x88\x91\xe5\x96\x9c\xe6\xac\xa2python' In [34]: f = e.decode('GBK').encode('utf-8') In [35]: f.decode('utf-8')
Out[35]: '我喜欢python' In [36]:

python学习笔记:第6天 小数据池和编码转换的更多相关文章

  1. 《Python》 代码块、小数据池和编码转换

    一.代码块 Python程序是由代码块构造的.块是一个python程序的文本,他是作为一个单元执行的. 什么是代码块:一个py文件,一个函数,一个文件,一个类都是一个代码块. 作为交互方式输入的每一行 ...

  2. Python 入门之代码块、小数据池 与 深浅拷贝

    Python 入门之代码块.小数据池 与 深浅拷贝 1.代码块 (1)一个py文件,一个函数,一个模块,终端中的每一行都是代码块 (代码块是防止我们频繁的开空间降低效率设计的,当我们定一个变量需要开辟 ...

  3. python 浅谈小数据池和编码

    ⼀. ⼩数据池 在说⼩数据池之前. 我们先看⼀个概念. 什么是代码块: 根据提示我们从官⽅⽂档找到了这样的说法: A Python program is constructed from code b ...

  4. python:id与小数据池与编码

    一.id与小数据池 id:查的是内存地址 a = 100 b = 100 print(a == b)#比较的数值 print(a is b)#比较的是id print(id(a),id(b))#id相 ...

  5. python基础4(小数据池,编码,深浅拷贝)

    1.==与is == 比较值是否相等 is比较内存地址是否相同 2.小数据池 为了节省内存,当数据在一个范围里的时候,两个值相同的变量指向的是小数据池里的同一个地址 数字范围:-5 ~ 256 num ...

  6. 06_python_小数据池/ is == /编码

    一.小数据池 1.代码块 python程序是由代码块构成的.一个代码块的文本作为python程序执行的单元.代码块: 一个模块, 一个函数, 一个类, 甚至每一个command命令都是一个代码块. 一 ...

  7. day06 小数据池和编码

    一. 上次课内容回顾字典:由{}括起来. 每个元素用逗号隔开, key:value的形式存储数据key: 不可变的. 可哈希的.增删改查:1. 增加: 直接用新key来赋值. dict[key] = ...

  8. 6,id 小数据池,编码and解码。

    asscii :8位(数字,英文,特殊字符)表示一个字符. A:0000 0001 unicode :(万国码)初期:16位,两个字节,表示两个字符. A:0000 0001 0000 0001 中: ...

  9. Python学习笔记_Python向Excel写入数据

    实验环境 1.OS:Win 10 64位 2.Python 3.7 3.如果没有安装xlwt库,则安装:pip install xlwt 下面是从网上找到的一段代码,网上这段代码,看首行注释行,是在L ...

随机推荐

  1. leetcode-valid number ZZ

    http://blog.csdn.net/kenden23/article/details/18696083 本题是十分麻烦的题目,情况是非常多,网上也很多方法,其中最有效,优雅的方法是有限状态自动机 ...

  2. js中直接调用函数和new函数的区别

    如果函数返回值为常规意义上的值类型(Number.String.Boolean)时,new函数将会返回一个该函数的实例对象,而如果函数返回一个引用类型(Object.Array.Function),则 ...

  3. jquery之---$.each详细

    jQuery.each()函数用于遍历指定的对象和数组,并以对象的每个属性(或数组的每个成员)作为上下文来遍历执行指定的函数. 语法 静态函数$.each()的语法如下:$.each( object, ...

  4. oracle踩过的坑

    #默认库配置 url: jdbc:oracle:thin:@ip:1521:smis(SID名) driver: oracle.jdbc.driver.OracleDriver username: x ...

  5. [由于远程方关闭传输流,身份验证失败]一次处理支付接口bug记录

    因公司系统升级,出现突然有些银行卡不能支付的情况,最开始排查发现是第三方平台接口返回有问题: 返回如下: 从11月7日下午开始一直联系第三方,第三方开始排查,一直说是数据格式有问题. 修改格式以后问题 ...

  6. 设置 jsp 表格相邻两行的颜色不一样

    转载网址:https://zhidao.baidu.com/question/134905332.html?fr=iks&word=for+%28var+i%3D0%3Bi%3CTable.r ...

  7. What Are Threads?

    https://developer.apple.com/library/content/documentation/Cocoa/Conceptual/Multithreading/AboutThrea ...

  8. UVa 10003 - Cutting Sticks(区间DP)

    链接: https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  9. BZOJ3143:[HNOI2013]游走(高斯消元)

    Description 一个无向连通图,顶点从1编号到N,边从1编号到M. 小Z在该图上进行随机游走,初始时小Z在1号顶点,每一步小Z以相等的概率随机选 择当前顶点的某条边,沿着这条边走到下一个顶点, ...

  10. Dos操作基础

    dos命令大全 使用技巧 dos命令不区分大小写,比如C盘的Program Files,在dos命令中完全可以用"program files"代替,加上英文引号是因为名称的中间有空 ...