一、代码块

一个模块(模块就是py文件),一个函数,一个类,一个文件都是一个代码块,一个整体是一个代码块。

交互模式的每一行都是一个代码块(交互模式:命令提示符),相当于每行都在不同的文件

二、id

id就是对象的内存地址

相当于内存里空间的门牌号,每个id都是唯一的,找到内存地址就是对象,id相同就是指向同一个对象

在内存中id是唯一的,如果两个变量指向的id相同,就证明它们在内储存中是同一个

三、is

is 是判断两个变量的id是否相同

== 是判断两个变量的值是否相等

如果is是True,==一定是True;如果==是True,两个变量的id不一定相同

四、小数据池(缓存机制,驻留机制)

小数据池的作用的数据类型:整型、字符串、布尔值

python对内存做的一个优化:将-5~256的整数,以及一些规则的字符串,提前在内存中创建了池(容器),容器里固定存储了这些数

优点:

① 节省内存(不用每次创建变量都开辟内存空间)

② 提高性能与效率(减少运行时间)

缺点:在‘池’中创建或插入字符串,整数时,会花费更多的时间。

int:那么大家都知道对于整数来说,小数据池的范围是-5~256 ,如果多个变量都是指向同一个(在这个范围内的)数字,他们在内存中指向的都是一个内存地址。

str:字符串要从下面这几个大方向讨论:

1,字符串的长度为0或者1,默认都采用了驻留机制(小数据池)。

2,字符串的长度>1,且只含有大小写字母,数字,下划线时,才会默认驻留。

3,用乘法得到的字符串,分两种情况。

  3.1 乘数为1时:

仅含大小写字母,数字,下划线,默认驻留。

含其他字符,长度<=1,默认驻留。

含其他字符,长度>1,默认驻留。

  3.2 乘数>=2时:

仅含大小写字母,数字,下划线,总长度<=20,默认驻留。

五、代码块与小数据池

代码块内的缓存机制,和代码块与代码块之间的缓存机制不同!

python在同一个代码块中的变量,初始化对象的命令时,它会将变量与值的对应关系放到一个字典中。

如果下面的代码在遇到初始化对象的命令,它会先从字典中寻找,若存在相同的值,它会复用,指向的都是同一个内存地址。

对于同一个代码块的变量复用的问题,只能针对于数字,字符串,bool值,而对于其他数据类型是不成立的。

# 同一个代码块下,数字,字符串,bool值的复用成立。
a1 = 1000
a2 = 1000
print(id(a1),id(a2)) # 2419837390800 2419837390800 s1 = 'alexsb@'
s2 = 'alexsb@' print(id(s1),id(s2)) # 2278732245624 2278732245624 f1 = True
f2 = True
print(id(f1),id(f2)) # 1672093872 1672093872 # 同一个代码块下,元祖,列表,字典的复用不成立。
tu1 = (1,2,3)
tu2 = (1,2,3)
print(id(tu1),id(tu2)) # 2278732278088 2278732279312 l1 = [1, 2, 3]
l2 = [1, 2, 3]
print(id(l1),id(l2)) # 2278733685000 2278733685192 dic1 = {'name':'taibai'}
dic2 = {'name':'taibai'}
print(id(dic1),id(dic2)) # 2278728382728 2278728382856

python对于不同的代码块:初始化对象的命令时,它会从小数据池中寻找。

 六、编码

① 编码之间不能互相识别

② 网络传输、文件存储以二进制方式,必须是以非unicode的编码方式执行

大环境Python3 版本

str:内存(内部)的编码方式为unicode

bytes:python的基础数据类型之一,和str相当于双胞胎,str的所有方法,bytes类型都适用

str和bytes的表现形式:

s1 = 'aaa'
b1 = b'aaa'
print(s1,type(s1))
print(b1,type(b1)) # 结果
aaa <class 'str'>
b'aaa' <class 'bytes'>

str与bytes的区别:

①英文字母

    str的形式: s1 = 'aaa'

str的内部编码形式:unicode

  bytes的表现形式: b1 = b'aaa'

bytes的内部编码形式:非unicode(自定义编码格式)

②中文

bytes不能存储中文,会报错

所以要进行文件存储和网络传输,必须将str转换为bytes(str ---> bytes ---> 文件存储与网络传输)

bytes的使用方式:

如果想将一部分内容(字符串)写入文件,或者通过网络socket传输,这部分的内容(字符串)必须转化成bytes类型才可以进行。

平常写代码使用str即可。

str转换成bytes (str ---> bytes )

由于bytes不能存储中文,以非unicode编码的十六进制存储

s1 = '哈哈'
b1 = s1.encode('utf-8') # 指定转换的编码
print(b1,type(b1)) # 结果
b'\xe5\x93\x88\xe5\x93\x88' <class 'bytes'>

bytes转换成str (bytes ---> str)

b2 = b'\xe5\x93\x88\xe5\x93\x88'
s2 = b2.decode('utf-8') # bytes的编码,解码为str
print(s2,type(s2)) # 结果
哈哈 <class 'str'>

https://www.cnblogs.com/jin-xin/articles/9439483.html

Python基础Day6的更多相关文章

  1. python基础 Day6

    python Day6 id 可以获得python的内存地址 id的举例子 a=100 print(id(a)) #140712544153072 这里就是该对象的内存地址 is 判断的是比较内存地址 ...

  2. Python基础学习总结(持续更新)

    https://www.cnblogs.com/jin-xin/articles/7459977.html 嗯,学完一天,白天上班,眼睛要瞎了= = DAY1 1,计算机基础. CPU:相当于人的大脑 ...

  3. Python基础 小白[7天]入门笔记

    笔记来源 Day-1 基础知识(注释.输入.输出.循环.数据类型.随机数) #-*- codeing = utf-8 -*- #@Time : 2020/7/11 11:38 #@Author : H ...

  4. python之最强王者(2)——python基础语法

    背景介绍:由于本人一直做java开发,也是从txt开始写hello,world,使用javac命令编译,一直到使用myeclipse,其中的道理和辛酸都懂(请容许我擦干眼角的泪水),所以对于pytho ...

  5. Python开发【第二篇】:Python基础知识

    Python基础知识 一.初识基本数据类型 类型: int(整型) 在32位机器上,整数的位数为32位,取值范围为-2**31-2**31-1,即-2147483648-2147483647 在64位 ...

  6. Python小白的发展之路之Python基础(一)

    Python基础部分1: 1.Python简介 2.Python 2 or 3,两者的主要区别 3.Python解释器 4.安装Python 5.第一个Python程序 Hello World 6.P ...

  7. Python之路3【第一篇】Python基础

    本节内容 Python简介 Python安装 第一个Python程序 编程语言的分类 Python简介 1.Python的由来 python的创始人为吉多·范罗苏姆(Guido van Rossum) ...

  8. 进击的Python【第三章】:Python基础(三)

    Python基础(三) 本章内容 集合的概念与操作 文件的操作 函数的特点与用法 参数与局部变量 return返回值的概念 递归的基本含义 函数式编程介绍 高阶函数的概念 一.集合的概念与操作 集合( ...

  9. 进击的Python【第二章】:Python基础(二)

    Python基础(二) 本章内容 数据类型 数据运算 列表与元组的基本操作 字典的基本操作 字符编码与转码 模块初探 练习:购物车程序 一.数据类型 Python有五个标准的数据类型: Numbers ...

随机推荐

  1. 【k8s 硬盘监控】prometheus grafana

    设置监控哪块盘: https://www.bountysource.com/issues/50160777-disk-space-usage-depcited-in-grafana-correct h ...

  2. 正则表达式入门教程&&经典Javascript正则表达式

    前言 例子: ^.+@.+\\..+$ 这样的代码曾经多次把我自己给吓退过.可能很多人也是被这样的代码给吓跑的吧.继续阅读本文将让你也可以自由应用这样的代码. 正文 教程:正则表达式30分钟入门教程 ...

  3. colaboratory安装指定版本的tensorflow

    查看当前安装的tensorflow版本 !pip show tensorflow 安装指定版本 !pip install tensorflow==2.0 这速度,香不香.

  4. Appium移动自动化测试-----(五)python-client安装与测试

    前提条件 当你点击这一章时,说明你是打算使用 Python 语言编写 appium 自动化测试脚本的. 1.安装 Python 语言 , Python的安装相对相简单得多. 2.Python 编辑器很 ...

  5. [VS] - 手工打开 WCF 客户端调试工具

    操作步骤 1. 在开始菜单中找到 Visual Studio 命令行工具 2. 输入命令 wcftestclient 即可打开 WCF 客户端测试工具 参考资料http://www.cnblogs.c ...

  6. nginx location 路由的几个配置纪要

    1:网上没有查到在线测试 nginx location 规则的网址 在服务器上可以通过 return 返回测试比如  把#号去掉 # location /admin\.php(.*) # { #def ...

  7. lnmp 是不是该吐吐槽

    lnmp 提供提供了便捷 , 并且手也伸的挺长的,它已不仅仅是个服务器环境那么简单 作为服务器继承环境来讲,可能每个人的认知程度不一,总之用了它需要服从它的规则 但从个人感觉上,其埋的坑还是让人不适, ...

  8. SpringBoot之分页插件PageHelper的使用

    在springboot中使用PageHelper插件有两种较为相似的方式,接下来我就将这两种方式进行总结. 方式一:使用原生的PageHelper 1.在pom.xml中引入依赖 <depend ...

  9. Tomcat中不能通过访问自己IP,但可以通过localhost/127.0.0.1访问

    一.问题如下:局域网内,自己机器部署了一个tomcat应用,在本机上可以通过如下方式访问引用.  http://localhost:8080/xxxx http://127.0.0.1:8080/xx ...

  10. c++ 编译 curl 报错 数组‘__curl_rule_01__’的大小为负 解决方法

    背景:在原有的项目GCC编译环境下(arm-linux 32位),增加x86-linux 64位的编译环境,编译curl库的时候发生错误. 其他:编译服务器为64位Centos 编译错误提示 /inc ...