【循环引用及格式化输出】

垃圾回收机制

当一个值在内存中直接引用跟间接引用的量为0时,(即这个值没有任何入口可以找到它)那么这个值就会被清空回收♻️,释放内存空间;

列表在内存中的存储方式

在这里插入图片描述
1)引用计数的两种方式

x = "eat"
student_info = {"name": "paipai","age": 10,"like": x
}
student_list = ['paipai', 10, x]
print(id(student_info["like"]))
print(id(x))
print(id(student_list[2]))

执行结果
在这里插入图片描述

循环引用

1)内存泄露
当循环引用的列表中,直接引用的关系被解除了,那么存在内存中的数据是没有办法被取到的,但由于他们之间互相引用,引用计数不为0,此时是无法被当成垃圾清理走的,在这种时候就会造成内存泄露。为了解决这种情况,python解释器设置了标记清除机制,来解决循环引用产生的这种致命问题;

堆区与栈区

在定义变量时,变量名与变量值都是需要存储的,分别对应内存中的两块区域:堆区与栈区。
变量名与值的内存地址的关联关系存放于栈区
变量的具体值存放于堆区,内存管理回收的则是堆区的内容
在内存中定义2个变量 x=10 y = 20,在堆区和栈区存放的关系如下:
在这里插入图片描述
当用y重新给x赋值时,其实是把x原先存在在栈区中对应堆区存放值的地址链接改为y对应的值,如下图所示
在这里插入图片描述
🤔️ 复杂的情况
如果出现列表之间互相引用呢,
x=10
L1 = [x,L2]
L2 =[20,30]
在这里插入图片描述
🏁循环引用
当出现循环引用时,变量的值不在被任何变量名关联,但是值的引用计数并不会为0,就会出现应该被回收但是不能被回收的情况。
举个🌰

# 定义l1变量
l1 = [xxx,l2]
l2 = [yyy.l1]
执行清除引用变量操作
del l1
del l2

当发生上述这样的情况时,在堆区和栈区会发生什么样的变化呢???👁下图示
当执行del操作时,会吧l1跟l2在栈区中对应堆区地址的指向关系给删除~,相当于把根给铲了
在这里插入图片描述
del摘掉直接引用

与用户直接交互

1)input接收用户输入,在python3中,input会将用户输入的所有内容都存成字符串类型
在这里插入图片描述
2)格式化输出(%,str.format f’String’)
%格式化输出,值按照位置与%s一一对应,少一个不行,多一个也不行
在这里插入图片描述
🙅🏻‍♀️如果想要在格式化输出的过程中输出%,是不能直接在后面跟个%或者是在前面加个转义/字符的,否则会一直报错。
在这里插入图片描述

解决方式
以字典形式传值,打破位置限制
在这里插入图片描述%s与%d的区别是什么
在这里插入图片描述

str.format
# 1、str.format按照位置传值(按列表传值)
res='my name is {} my age is {}'.format('paipai',18)
print("res的执行结果为: "+res)
# 存在多次引用时(根据传入的值在列表中的位置进行引用)
res2='my name is {0}{0}{0}{1} my age is {1}{1}'.format("paipai",18)
print("res2的执行结果为: "+res2)
# 2、打破位置的限制,根据字典的key:value进行传值
# 需要注意,正常的字典格式是{'key':'value'},但是在str.format中正确书写格式是 key=value,并且key是不用打引号的
res3='my name is {name},my age is {age}'.format(age=18,name='paipai')
print("res3的执行结果为: "+res3)

执行结果:
在这里插入图片描述
补充:使用str.format也可以使用这样的方式,打印出来的可读性更强

res="""
name:{}
age:{}
sex:{}
""".format('paipai',18,'boy')
print(res)

执行结果
在这里插入图片描述
了解

# format新增
print('{x}=========='.format(x='开始执行'))
#1、补充占位字符,
print('{x:=<10}'.format(x='开始执行'))  # 如果format输入的字符小于10,则在后面填充=,直到输出的字符串刚好为10个,format输入的字符靠左显示
print('{x:=>10}'.format(x='开始执行'))  # format输入的字符靠右显示,且如果输入的字符小于10,则自动补充=,直到输出的字符串刚好为10个
print('{x:=^10}'.format(x='开始执行'))  # format输入发字符居中显示,且如果输入发字符小于10则自动补充=,直到输出的字符串刚好为10个
# 2、对输入的结果进行四舍五入
print('{pai:.3f}'.format(pai=3.1415926))

执行结果
在这里插入图片描述

f’string’
x=input('you name:')
y=input('you age is: ')
res=f'我的名字是{x} 我的年龄是{y}'
print(res)

执行结果
在这里插入图片描述
升级
输出一个{ }

x='paipai'
y=18
res=f'name:{{{x}}},year:{y}'
print(res)

在这里插入图片描述

字符串转换成表达式运算

# 字符串转换成表达式运算
data='10+3'
res=f'{data}'
print(res)
#要将字符串转化为表达式进行运算
res2=f'{10+3}'
print(res2)
print(res2)
#f'{xxx}'普通字符串中的内容当一个功能运行
f'{print("aaaa")}'

运行结果
在这里插入图片描述

基本运算符

算术运算符

# 基本运算符
# 1、算术运算符
print(10+3.1)
print(10+3)
print(10/3)# 结果带小数
print(10//3)# 结果只保留整数部分
print(10 % 3)# 取模(取余数)
print(10**3)# 乘法运算

执行结果
在这里插入图片描述

比较运算符

# 2、比较运算符: >  >= <  <=  ==  !=
print(10>3)
print(10==10)
print(10>=10)
print(10>=9)
print(10<3)

执行结果
在这里插入图片描述

#  == 判断左右两个值是否相等
name=input('your name:')
print(name == 'paipai')
print('my really name is: '+ name)

执行结果
在这里插入图片描述

3)赋值运算符

# 赋值运算符
# = 代表变量的赋值
age = 18
# 执行年龄自动+1
age = age + 1
age += 1
print(age)
# 上述两个表达式都是同一个意思,同理可得
age *= 3
age /= 5
# age %= 3
# age **= 3  ##两个星号表示平方
print(age)

执行截图
在这里插入图片描述
3.3 链式赋值

x = 10
y = x
z = y
#上述操作可以直接使用链式赋值来解决
z = x = y #链式赋值
print(x,y,z)
print(id(x),id(y),id(z))

执行结果截图
在这里插入图片描述
3.4 交插赋值

# 交叉赋值
m = 20
n = 10
z = 30
print(m, n, z)
(n, m, z) = (m, z, n)
print(m, n, z)

执行截图
在这里插入图片描述

3.4 解压赋值

# 解压赋值
salaries = [4, 10, 16.5, 12]
# 普通的方式
# year0=salaries[0]
# year1=salaries[1]
# year2=salaries[2]
# year3=salaries[3]
# 优化后的方式
year0, year1, year2, year3 = salaries
print(year0, year1, year2, year3)

执行截图
在这里插入图片描述
重点注意
执行解压赋值时,变量名比列表多一个值或者是少一个值都是不可以的,会出现匹配不上的情况导致报错。
在这里插入图片描述
引入,帮助我们取2头的值,但是无法取中间*

# 在进行解压赋值时,如何通过操作只取首尾的值?
# 定义一个列表
salaries = [4, 10, 16.5, 12, 18]
# 只取前几个的值,比如取前3个
x, y, z, *_ = salaries
print(x, y, z, _)
# 只取后几个的值,比如取后2个
*_,a,b=salaries
print(a,b)

执行结果
在这里插入图片描述

解压字典(默认解压出字典的key)

# 解压字典
# 1、定义一个字典
student_info = {'name': 'paipai','age': 18,'like': 'eat'
}
x, y, z = student_info
print(x,y,z)

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/59763.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

从0开始学习Linux——文本编辑器

往期目录&#xff1a; 1、从0开始学习Linux——Linux简介&安装 2、从0开始学习Linux——搭建属于自己的Linux系统 我们通过前面教程的学习已经了解了什么是Linux&#xff0c;并且我们也定制安装了属于我们自己的一个Linux系统。从这个章节开始我们将开始学习如何去操作Linu…

“北斗三号”如何赋能工业物联网

北斗三号是我国独立自主研发的第三代卫星导航系统&#xff0c;是北斗卫星导航系统的重要组成部分。北斗三号系统具有全球覆盖能力&#xff0c;除了提供基本的定位、导航、授时服务外&#xff0c;还提供高精度和短报文通信服务等。针对产业物联网应用&#xff0c;北斗三号也发挥…

相关衍生 pika+mongo

衍生相关 pikamongo 很多平台不提供完整的数据展示, 翻页只能翻几页,不过提供相关推荐等方法可获取更多的数据; 使用 rabbitmq 是因为数据量可能有几十上百万, 且能持久化 mongo对于数据并不实时的更新到查询里 def main():# mongodb# client MongoClient(localhost, 27017)cl…

Odoo | 免费开源ERP:汽车及零配件行业信息化解决方案

文 / 开源智造 Odoo亚太金牌服务 概述 围绕汽车行业产业链上下游企业的整体业务主线&#xff0c;提供面向汽车主机厂整车个性化制造解决方案&#xff0c;产业链上下游一体化协同解决方案&#xff0c;数字化精益制造解决方案、全价值链质量管理解决方案&#xff0c;数字化运营解…

【Linux】【守护进程】总结整理

守护进程&#xff08;Daemon&#xff09;是运行在后台的进程&#xff0c;通常没有与之关联的控制终端。守护进程在启动后会脱离控制终端&#xff0c;并继续在后台运行&#xff0c;即使用户退出登录或者终端关闭也不会影响它们的运行。守护进程常用于提供网络服务、定期执行任务…

vue中html如何转成pdf下载,pdf转base64,忽略某个元素渲染在pdf中,方法封装

一、下载 html2Canvas jspdf npm install jspdf html2canvas二、封装转换下载方法 htmlToPdf.js import html2Canvas from html2canvas import JsPDF from jspdf/*** param {*} reportName 下载时候的标题* param {*} isDownload 是否下载默认为下载&#xff0c;传false不…

火山引擎云服务docker 安装

安装 Docker 登录云服务器。 执行以下命令&#xff0c;添加 yum 源。 yum update -y yum install epel-release -y yum clean all yum list依次执行以下命令&#xff0c;添加Docker CE镜像源。更多操作请参考Docker CE镜像。 # 安装必要的一些系统工具 sudo yum install -y yu…

CSS例子: 横向排列的格子

效果 HTML <view class"content"><view class"item" v-for"item of 5">{{item}}</view></view> CSS .content {height: 100vh;display: flex;flex-direction: row; flex-wrap: wrap;align-content: flex-start;backgro…

智能家居的未来:AI让生活更智能还是更复杂?

内容概要 智能家居的概念源于将各种家居设备连接到互联网&#xff0c;并通过智能技术进行控制和管理。随着人工智能的迅速发展&#xff0c;这一领域也迎来了前所未有的机遇。从早期简单的遥控器到如今可以通过手机应用、语音助手甚至是环境感应进行操作的设备&#xff0c;智能…

ios打包文件上传App Store windows工具

在苹果开发者中心上架IOS APP的时候&#xff0c;在苹果开发者中心不能直接上传打包文件&#xff0c;需要下载mac的xcode这些工具进行上传&#xff0c;但这些工具无法安装在windows或linux电脑上。 这里&#xff0c;我们可以不用xcode这些工具来上传&#xff0c;可以用国内的香…

ArkTS中的组件基础、状态管理、样式处理、class语法以及界面渲染

一、组件基础 1.什么是ArkTS ArkTS是HarmoyOS优选的助力应用开发的语言&#xff0c;ArkTS围绕应用开发在TypeScript&#xff08;简称TS&#xff09;生态基础上做了进一步的扩展&#xff0c;继承了TS所有的特性&#xff0c;是TS的超集。 扩展的能力如下&#xff1a; 基本语法 …

全文检索ElasticSearch到底是什么?

学习ElasticSearch之前&#xff0c;我们先来了解一下搜索 1 搜索是什么 ① 概念&#xff1a;用户输入想要的关键词&#xff0c;返回含有该关键词的所有信息。 ② 场景&#xff1a; ​ 1互联网搜索&#xff1a;谷歌、百度、各种新闻首页&#xff1b; ​ 2 站内搜索&#xff…

大众汽车合肥社招入职笔试测评SHL题库:综合能力、性格问卷、英语口语真题考什么?

大众汽车合肥社招入职笔试测评包括综合能力测试、性格问卷和英语口语测试。以下是各部分的具体内容&#xff1a; 1. **综合能力测试**&#xff1a; - 这部分测试需要46分钟完成&#xff0c;建议准备计算器和纸笔。 - 测试内容涉及问题解决能力、数值计算能力和逻辑推理能力。 -…

Docker-软件容器平台

一、容器 1、什么是容器 容器就是将软件打包成标准化单元&#xff0c;以用于开发、交付和部署 容器镜像是轻量的、可执行的独立软件包 &#xff0c;包含软件运行所需的所有内容&#xff1a;代码、运行时环境、系统工具、系统库和设置。容器化软件适用于基于 Linux 和 Windows…

Spring Boot集成Access DB实现数据导入和解析

1.什么是Access DB&#xff1f; microsoft office access是由微软发布的关联式 数据库管理系统。它结合了 microsoft jet database engine 和 图形用户界面两项特点&#xff0c;是一种关系数据库工具。它在很多地方得到广泛使用&#xff0c;例如小型企业&#xff0c;大公司的部…

WSL开发--利用Git连接远程仓库(详细步骤)

这篇文章主要介绍了如何将本地项目推送到 GitLab 上&#xff0c;并且避免每次提交都需要输入用户名和密码。文中分步讲解了配置 GitLab SSH 密钥以及配置 Git 远程仓库地址的方法。以下是文章的优化和简洁版&#xff1a; 将本地项目推送到 GitLab 并配置 SSH 免密登录 为了方便…

快消零售行业企业员工培训的数字化转型

在快速消费品&#xff08;FMCG&#xff09;行业中&#xff0c;员工培训对于保持企业的竞争力至关重要。随着电子商务的兴起和消费者行为的变化&#xff0c;快消零售行业需要不断适应新的市场趋势。数字化转型为员工培训提供了新的机遇&#xff0c;尤其是在构建在线培训知识库方…

java的体系结构

1. 题记&#xff1a; 其实很早就打算来写java的体系结构这一文章&#xff0c;但是有诸多担忧就一直搁置。其一担心自己水平有限&#xff0c;恐不能讲得太透彻&#xff0c;因为java的体系结构宏大精深。其二不知道怎么去把控文章的难度及深度&#xff0c;因为需要给大部分看&am…

基于STM32的实时时钟(RTC)教学

引言 实时时钟&#xff08;RTC&#xff09;是微控制器中的一种重要功能&#xff0c;能够持续跟踪当前时间和日期。在许多应用中&#xff0c;RTC用于记录时间戳、定时操作等。本文将指导您如何使用STM32开发板实现RTC功能&#xff0c;通过示例代码实现当前时间的读取和显示。 环…

探索开放资源上指令微调语言模型的现状

人工智能咨询培训老师叶梓 转载标明出处 开放模型在经过适当的指令调整后&#xff0c;性能可以与最先进的专有模型相媲美。但目前缺乏全面的评估&#xff0c;使得跨模型比较变得困难。来自Allen Institute for AI和华盛顿大学的研究人员们进行了一项全面的研究&#xff0c;探索…