今天学习的主要内容是:

一,小数据池

代码块的概念

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. linux 禁止22端口号

    重启防火墙命令#systemctl restart iptables.service 查看端口号#iptables -L首先修改配置文件 vi /etc/ssh/sshd_config 增加新端口号P ...

  2. highchart 柱状图 分组样例

    var chart = Highcharts.chart('container',{ chart: { type: 'column' }, title: { text: '月平均降雨量' }, sub ...

  3. SharePoint入门——创建一个网站

    1.首先安装SP相关环境,可以百度到具体操作步骤: (以下步骤基于本人环境:本人用的Win10自带的Hyper-V虚拟机.Windows Server2012R2.SQL2014以及SharePoin ...

  4. linux--- sort,uniq,cut,wc命令

    1.sort [-fbMnrtuk] [file or stdin] -f :忽略大小写的差异,例如 A 与 a 视为编码相同: -b :忽略最前面的空格符部分: -M :以月份的名字来排序,例如 J ...

  5. Django框架----中间件

    我们已经会了给视图函数加装饰器来判断是用户是否登录,把没有登录的用户请求跳转到登录页面.我们通过给几个特定视图函数加装饰器实现了这个需求.但是以后添加的视图函数可能也需要加上装饰器,这样是不是稍微有点 ...

  6. 76 道 Oracle Goldengate 面试问题

    基础 12c新特性 性能 Troubleshoot 其它 1. Oracle Goldengate 支持部署到哪些拓扑? GoldenGate supports the following topol ...

  7. mysqldump进行复制数据导出导入时的问题

    在执行数据导入到从库时,若使用mysqldump命令进行数据导出,应当一次性将需要同步的库导出. mysqldump -uroot -p --single-transaction --database ...

  8. Prometheus监控学习笔记之prometheus的federation机制

    0x00 概述 有时候对于一个公司,k8s集群或是所谓的caas只是整个技术体系的一部分,往往这个时候监控系统不仅仅要k8s集群以及k8s中部署的应用,而且要监控传统部署的项目.也就是说整个监控系统不 ...

  9. 深入理解softmax函数

    Softmax回归模型,该模型是logistic回归模型在多分类问题上的推广,在多分类问题中,类标签  可以取两个以上的值.Softmax模型可以用来给不同的对象分配概率.即使在之后,我们训练更加精细 ...

  10. Cannot resolve reference to bean 'sqlSessionFactory' while setting bean

    今天下载公司以前的一个项目,要和现在的项目进行整合,下载一切顺利,但在开发机器上一跑,憋了. 有两种日志,两种报错:一个是cannot resolve reference to bean 'sqlSe ...