今天学习的主要内容是:

一,小数据池

代码块的概念

python程序是由代码块构成的,一个代码块的文本作为python程序执行的单元.

代码块:一个模块,一个函数,一个类,甚至每一个command命令都是一个代码块.一个文件也是一个代码块,eval()和exec()执行的时候也是一个代码块

二,is 和 ==的区别

1.id()

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

s='alex'
print(id(s)) #

2.is 和 ==的区别

==是判断左右两端的值是否相等.是不是一致.

is是判断左右两端内容的内存地址是否一致.如果一致返回True,那可以确定这两个变量使用的是同一个对象

我们可以这样认为.如果内存地址相同. 那么值一定相等.如果只想等,则不一定是同一个对象

小数据池.一种数据缓存机制,也被称为驻留机制.各大编程语言中都有类似的东西.在网上搜索常量池,小数据池指的是同一个内容.

小数据池只针对:整数,字符串,布尔值.其他的数据类型不存在驻留机制

在python中对-5到256之间的整数会被驻留在内存中. 将⼀定规的字符串缓存.   在使⽤的时候, 内存中只会创建⼀个该数据的对象. 保存在小数据池中.

当使用的时候直接从小数据池中获取对象的内存引用. 而不需要创建⼀个新的数据. 这样会节省更多的内存区域.

优点: 能够提⾼⼀些字符串, 整数的处理速度. 省略的创建对象的过程.

缺点: 在'池'中创建或者插入新的内容会花费更多的时间.

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

对于字符串:

1. 如果字符串的长度是0或者1, 都会默认进行缓存

2. 字符串长度大于1, 但是字符串中只包含字母, 数字, 下划线时才会缓存

3. 用到乘法的字符串. ①. 乘数为1, 仅包含数字, 字⺟母, 下划线时会被缓存. 如果包含其他字符, 而长度<=1 也会被驻存,

②. 乘数大于1 . 仅包含数字, 字母, 下划线这个时候会被缓存. 但字符串串长度不能大于20

4. 指定驻留. 我们可以通过sys模块中的intern()函数来指定要驻留的内容.

小数据池和最开始代码块有什么关系?

同样的一段代码在命令行窗口和在py文件中.出现的效果是完全不一样的.

a = 1000
b = 1000
print(a is b) 注意.在py文件中.得到的结果是True,但是在command中就不是了

在代码块内的缓存机制是不一样的. 在执行同⼀个代码块的初始化对象的命令时, 会检查是否其值是否已经存在, 如果存在, 会将其重用.

换句话说: 执行同一个代码块时, 遇到初始化对象的命令时,他会将初始化的这个变量与值存储在一个字典中, 在遇到新的变量时, 会先

在字典中查询记录, 如果有同样的记录那么它会重复使用这个字典中的之前的这个值. 所以在 你给出的例子中, 文件执行时(同一个代码块)

会把a, b两个变量指向同⼀个对象.

如果是不同的代码块, 他就会看这个两个变量是否是满足小数据池的数据, 如果是满足小数据池的数据则会指向同一个地址. 所以: a, b的赋值语

句分别被当作两个代码块执行, 但是他们不满足小数据池的数据所以会得到两个不同的对象, 因而is判断返回False.

在pycharm中如果只是单纯的创建变量,都是有缓存的,但是加上运算符就不一定了

二.编码的补充

1.python中默认使用的是ASCII码.所以不支持中文.如果需要在python中更改编码.需要在文件的开始编写:

#-*- encoding:utf-8-*-

2.python3中:内存中使用的是Unicode码.

回顾 :

1.ASCII码:最早的编码.里面有英文大小写字母,数字,一些特殊字符.没有中文,8个01代码,1byte

2.GBK:中文国标码,里面包含了ASCII编码和中文常用编码.16bit,2byte

3.Unicode:万国码,里面包含了全世界所有国家文字的编码.32bit,4byte,包含了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(字符集)来完成

b'xxxxx' 这种格式的数据是bytes类型的数据

s = "alex"
print(s.encode("utf-8")) #将字符串编码成utf-8
print(s.encode("GBK")) #将字符串编码成GBK
结果:
b'alex'
b'alex' s ="中"
print(s.encode("UTF-8")) #中文编码成UTF-8
print(s.encode("GBK")) #中文编码成GBK
结果:
b'\xe4\xb8\xad'
b'\xd6\xd0'

记住: 英文编码之后的结果和源字符串⼀致.  中文编码之后的结果根据编码的不同. 编码结果也不同. 我们能看到一个中文的UTF-8编码是3个字节.

一个GBK的中文编码是2个字节. 编码之后的类型就是bytes类型.  在网络传输和存储的时候我们python是保存和存储的bytes类型. 那么在对方接收的时候.

也是接收的bytes类型的数据. 我们可以使用decode()来进行解码操作. 把bytes类型的数据还原回我们熟悉的字符串:

s = "我叫李嘉诚" print(s.encode("utf-8"))
# b'\xe6\x88\x91\xe5\x8f\xab\xe6\x9d\x8e\xe5\x98\x89\xe8\xaf\x9a'
print(b'\xe6\x88\x91\xe5\x8f\xab\xe6\x9d\x8e\xe5\x98\x89\xe8\xaf\x9a'.decod e("utf-8")) # 解码

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

# 编码: 存储和传输。 encode()
# 解码: 接受数据的时候。decode()

s = "我是文字"
bs = s.encode("GBK") # 我们这样可以获取到GBK的⽂文字
# 把GBK转换成UTF-8
# 首先要把GBK转换成unicode. 也就是需要解码
s = bs.decode("GBK") # 解码
# 然后需要进⾏行行重新编码成UTF-8
bss = s.encode("UTF-8")
# 重新编码 print(bss)

python学习 day06打卡的更多相关文章

  1. python学习 day013打卡 内置函数

    本节主要内容: 内置函数: 内置函数就是python给你提供的.拿来直接用的函数,比如print,input等等.截止到python版本3.6.2 python一共提供了68个内置函数.他们就是pyt ...

  2. python学习 day09打卡 初识函数

    本节内容: 1.什么是函数 2.函数定义,函数名,函数体及函数的调用 3.函数的返回值 4.函数的参数 一.什么是函数 函数:对代码块和功能的封装和定义 定义一个事情或者功能.等到需要的时候直接去用, ...

  3. Python学习 day04打卡

    今天学习的主要内容: 一,列表 1,列表的介绍 列表是python的基础数据类型之一,其他编程语音也有类似的数据类型.例如:JS 中的数组Java中的数组等等. 它是以[]括起来,每个元素用',隔开而 ...

  4. Python学习 day03打卡

    今天学习的主要内容: ppython的基本数据类型: 1. python基本数据类型回顾 2.int---数字类型 4.str---字符串类型 一.python基本数据类型 1. int==>整 ...

  5. python学习 day018打卡 反射

    本节主要内容: 1.isinstance,type,issubclass 2.区分函数和方法 3.反射(重点) 一.isinstance,type,issubclass issubclass():判断 ...

  6. python学习 day017打卡 类与类之间的关系

    本节主要的内容: 1.依赖关系 2.关联关系,组合关系,聚合关系 3.继承关系,self到底是什么? 4.类中的特殊成员 一.类与类之间的依赖关系 在面向对象的世界中,类与类中存在以下关系: 1.依赖 ...

  7. python学习 day016打卡 面向对象--成员

    本节主要内容: 1.类的成员 2.类的成员-变量 3.类的成员-方法 4.类的成员-属性 5.私有 一.类的成员: 能在类中写的内容就是类的成员. class 类名: #方法 def __init__ ...

  8. python学习 day15打卡 初识面向对象

    本节主要内容: 1.面向对象和面向过程 2.面向对象如何编写 3.面向对象和面向过程的对比 4.面向对象的三大特征 一.面向对象和面向过程(重点理解) 1.面向过程:一切以事物的流程为核心.核心是&q ...

  9. python学习 day014打卡 内置函数二&递归函数

    本节主要内容: 1.lambda匿名函数 2.sorted() 3.filter() 4.map() 5.递归函数 6.二分法 一.lambda匿名函数 为了解决一些简单的需求而设计的一句话函数 # ...

随机推荐

  1. 数据集成工具Kettle、Sqoop、DataX的比较

    数据集成工具很多,下面是几个使用比较多的开源工具. 1.阿里开源软件:DataX         DataX 是一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL.Oracle等).H ...

  2. 复习loadRunner参数化

    参数化: 为什么要用参数化? 如果是单一数据,那么会纯测试缓存. 如果是参数化,基本上大部分数据不会被缓存命中. 极端情况:所有的数据都不会被缓存命中,或者少量命中. 在loadrunner中,所有的 ...

  3. Bluetooth_FTP_SPEC: 蓝牙FTP介绍

    FTP(Bluetooth File Transfer Profile) defines howfolders and files on a server device can be browsed ...

  4. JustOj 1386: 众数的数量

    题目链接:http://oj.jxust.edu.cn/problem.php?id=1386 题目描述 qwn和Q伟N最近沉迷于Battle of Balls,天天翘课玩游戏.因为Q伟N太坑了,所以 ...

  5. springboot打war包需要注意事项

    1. pom文件 1.1 添加servlet-api依赖: <!-- 添加servlet-api的依赖--> <dependency> <groupId>org.a ...

  6. Linux 安装 mysql 数据库

    1. 克隆虚拟机 2. 上传安装文件 1.上传文件 2.解压文件 tar -xvf 文件 3. 安装数据库 安装顺序: .debuginfo .shared .client .server 1. rp ...

  7. No module named scrapy 成功安装scrapy,却无法import的解决方法

    今天本来准备写一个Python的爬虫,然而使用pip安装了Scrapy之后,却无论如何也无法import,显示的结果总是ImportError: No module named Scrapy.网上查阅 ...

  8. php 使用fileupload上传多张图片,压缩包

    test.php <!DOCTYPE html> <html lang="en"> <head> <meta charset=" ...

  9. linux centos6.8搭建 jdk 环境

    1. 上官网下载jdk1.8的包 http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html ...

  10. The POM for XXX is invalid, transitive dependencies (if any) will not be available解决方案

    今天,某个开发的环境在编译的时候提示警告The POM for XXX is invalid, transitive dependencies (if any) will not be availab ...