Python每日一题:变量交换
时间:2022-07-23
本文章向大家介绍Python每日一题:变量交换,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
题目:Python 中交换两个变量的值是怎么实现的?为什么可以这样实现?
答案要点:
- 第一个问题,在 Python 中交换两个变量的值,只需要简单一个句话即可:
a,b = b,a
- 重点在于为什么可以这样交换。在 《流畅的Python》一书第8章中对这个问题做了详细的解释,它解释的关键点在于:变量是标注,而不是盒子。怎么区分标注和盒子呢?如果是标注,那么一个值可以有多个标注,这些标注都代表了同一个值,修改一个会影响另外一个。而如果是盒子,代表的是独立的个体,相互之间是不受影响的。这有点类似我们在 JAVA 里说的引用对象。
- 正因为变量是标识,所以当我们在 Python 中定义 a = 10 的时候,实际上会开辟两块内存,一个用来存放 10,一个用来存放变量 a ,而存放变量 a 的地址所对应的值就是 10 这个地址的地址值。和 JAVA 中的引用对象是类似的。所以当我们执行 a,b = b,a 时,其实是在交互 a 和 b 的地址值
- 还有一个比较关键的,假设有一个类 People() ,对于 p = People() 正确的描述应该是把变量分配给对象,反过来说 有问题的,因为执行顺序是先执行 People() 再进行的赋值。示例如下:
class People(object):
def __init__(self):
print('enter init')
p1 = People()
p2 = People() * 10
"""
输出结果:
enter init
enter init
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-7-32e88bb718e7> in <module>()
4
5 p1 = People()
----> 6 p2 = People() * 10
TypeError: unsupported operand type(s) for *: 'People' and 'int'
从结果可以看出是先进行实例化对象,再进行赋值的
"""
愿关注我们的人都能找到
属于自己的皮球
- 初探小程序之运营及未来方向
- 微信小程序深夜开放NFC等连接能力,未来可直接刷公交?
- Silverlight:获取ContentTemplate中的命名控件
- silverlight向wcf传递大于8192字节(8k)的字符串
- vim使用笔记
- "RDLC报表"速成指南
- Silverlight:双向绑定综合应用-自动更新集合汇总字段
- Silverlight:双向绑定综合应用-多集合的依赖绑定
- python sorted排序用法详解
- Silverlight:MouseDragElementBehavior无法应用于ListBox的变相解决办法
- Silverlight:xap包(或本地缓存)下载版本更新的解决思路
- Web开发感悟:数据绑定是一种技术,更是一门艺术
- 我国域名注册保有量位居世界第二,顶级域名55个
- Silverlight:纠结的快捷键问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Nginx keepalived一主一从高可用,手把手带你一步一步配置!
- Android实现自动轮询的RecycleView
- Android自定义钟表特效
- Android MediaPlayer 音频倍速播放 调整播放速度问题
- Android 简单实现倒计时功能
- Android Canvas自定义实现时钟效果
- 虚拟机kali安装vmtools
- Android动画学习笔记之补间动画
- [- Flutter 数据&状态篇 -] setState
- flutter 自定义websocket路由的实现
- Flutter开发之路由与导航的实现
- Android BSearchEdit 搜索结果选择框的实例代码
- 使用AccessibilityService实现微信自动切换账号功能
- Android评分RationBar控件使用详解
- Flutter里面错误捕获的正确方法