`

Python 食谱--1.2: 不使用临时变量来交换值

阅读更多

问题

你想去交换一些变量的值,但是你不想使用临时变量。

解决
python的自动元组打包和解包可以做到这点:

a, b, c = b, c, a

a, b, c = b, c, a 
 


讨论
许多程序语言让你使用临时中间变量去交换变量的值。

temp = a
a = b
b = c
c = temp
 


但是python让你使用tuple的打包和解包来直接赋值

a, b, c = b, c, a 
 



在一个赋值中,python要求等号右边是一个表达式。 这里我们所写的b, c, a的确是表达式。要明确的是,它是一个元组, 有三个元素的不可变的序列。元组经常用圆括号括起来, 象(b, c, a)。 但是在这里除了逗号是有一些其他的意思以外(在一个函数调用中),圆括号不是必须的。通过打包元组的每一项,用逗号来建立一个元组.

在赋值语句的等号的左边,你可以正常的使用单个的对象。 这个对象能够是简单的一个标示符号(也就是众所周知的变量), 一个索引(例如alist[i] 和 adict['freep']), 一个属性的引用(如anobject.someattribute)等等。然而,python也让你在赋值语句的左边,使用几个用逗号分开的对象(变量,索引等等)。 那样的一个多赋值也被称为解包赋值。 当有两个或者更多的逗号分隔开的对象在一个赋值语句的左边, 右边的值必须是一个序列,而且它的数目要和左边逗号分隔的对象一样多。序列的每一项都被从左到右依次赋给相对应的目标值。


在这个配方中(译注:书的名字叫python食谱,所以每一节都称为一个配方:)),
我们有三个逗号分隔的目标对象在左边,所以我们需要右边有三个元素的序列,他们是有三个元素的被打包的元组。第一个目标(变量)得到第一个元素的值(它使用变量b的值), 第二个目标(b)得到第二个元素的值(它使用变量c的值), 并且第三个即最后一个目标(c)得到第三即最后一个元素(使用变量a的值)。 实际结果是一个在变量之间交换的值(你可以想想这个例子细节等价于一个旋转)


元组使用逗号打包,序列通过放置几个逗号分隔的目标到语句的左边来解包。他们都是有用的,简单的,普遍的机制。通过结合他们,你能简单地,优美地,自然地表达任何一组变量之间的值交换

分享到:
评论

相关推荐

    Python库 | python-ccp-1.2.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:python-ccp-1.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    python-devel-2.7.8-1.2.x86_64.rpm

    python-devel-2.7.8-1.2.x86_64.rpm

    activation.jar commons-email-1.2.jar mail.jar免费下载

    标题中的"activation.jar commons-email-1.2.jar mail.jar免费下载"涉及到的是Java邮件处理相关的库文件,这些在Java开发中用于实现电子邮件的发送和处理。让我们逐一解析这三个jar文件: 1. **activation.jar**:...

    pandas-stubs-1.2.0.43.tar.gz

    总的来说,Pandas-stubs-1.2.0.43提供了Pandas库的类型注解,为开发者带来了更安全、高效的编程体验。理解并善用这些类型注解,能有效提升数据分析项目的质量和效率,让代码更加健壮,减少错误的发生。

    Python库 | Simba-UW-tf-1.2.3.4.tar.gz

    《Python库Simba-UW-tf-1.2.3.4详解》 在Python的世界里,库扮演着至关重要的角色,它们为开发者提供了丰富的功能和便利,大大提高了开发效率。今天我们要探讨的是名为"Simba-UW-tf"的一个特定版本——1.2.3.4的库...

    Python库 | django-endless-pagination-vue-1.2.tar.gz

    《Python库深度解析:django-endless-pagination-vue-1.2》 在现代Web开发中,数据分页是不可或缺的功能,特别是在处理大量数据时。`django-endless-pagination-vue-1.2` 是一个集成Python的Django框架与前端Vue.js...

    python-jsonpatch-1.2-4.el7.noarch.rpm

    官方离线安装包,亲测可用。使用rpm -ivh [rpm完整包名] 进行安装

    Python库 | DelightedPython-0.0.1.2.tar.gz

    虽然我们没有具体的文件列表来详细了解DelightedPython-0.0.1.2的内部结构,但通常一个Python库会包含以下组件:`setup.py`(安装脚本)、`README`(介绍文件)、`LICENSE`(授权文件)、`requirements.txt`(依赖项...

    Python库 | jenkins-yml-1.2.tar.gz

    总结来说,`jenkins-yml-1.2.tar.gz`是一个与Jenkins相关的Python库,它可能包含了用于配置和控制Jenkins作业的YAML文件以及Python代码。通过这个库,开发者能够更加便捷地在Python环境中管理和操作Jenkins,提升CI/...

    python2-docker-2.4.2-1.2.el7.noarch.rpm

    官方离线安装包,测试可用。使用rpm -ivh [rpm完整包名] 进行安装

    Python库 | crack-engine-CraXell-0.0.1.2.tar.gz

    标题中的“Python库 | crack-engine-CraXell-0.0.1.2.tar.gz”表明这是一个基于Python的库,名为CraXell,版本号为0.0.1.2,它被压缩成一个tar.gz文件。在IT行业中,Python库是开发者用来扩展Python功能的工具集合,...

    python2-multilib-1.2-2.el7.centos.noarch.rpm

    官方离线安装包,亲测可用

    ctower-env-1.2-RELEASE.tar.gz

    在Linux环境下,我们通常使用“tar -zxvf ctower-env-1.2-RELEASE.tar.gz”命令来解压这个文件。解压后,会得到一个名为“ctower-env-1.2”的目录,其中包含ctower-env的所有组成部分。 安装过程中,我们需要注意...

    pandas-stubs-1.2.0.9.tar.gz

    总的来说,Pandas-stubs-1.2.0.9是Pandas库的静态类型定义,它为Python开发者提供了一种更严谨、更高效的编程方式,通过利用类型注解,可以在开发早期发现潜在的类型错误,提升代码质量,降低维护成本。对于大型项目...

    Python库 | astropy-helpers-1.2rc1.tar.gz

    《Python库深度解析:astropy-helpers-1.2rc1》 在Python的世界里,库扮演着至关重要的角色,它们极大地扩展了Python的功能,使得开发者可以高效地处理各种复杂任务。今天我们要深入探讨的是一份名为“astropy-...

    PyPI 官网下载 | pysha-0.0.1.2-py3-none-any.whl

    4. 使用`pip`(Python的包管理器)来安装这个库,命令通常是`pip install pysha-0.0.1.2-py3-none-any.whl`。 5. 安装完成后,你可以在Python脚本中通过`import pysha`来使用它提供的功能。 **Python库的管理和版本...

    Python库 | metdig-0.1.1.2-py3-none-any.whl

    python库。 资源全名:metdig-0.1.1.2-py3-none-any.whl

    Python库 | FoLiA-tools-1.2.0.51.tar.gz

    《Python库FoLiA-tools-1.2.0.51深度解析》 在Python的世界里,库扮演着至关重要的角色,它们为开发者提供了丰富的功能,简化了代码编写过程,提高了开发效率。今天我们将深入探讨的是一份名为“FoLiA-tools-1.2....

    python-paho-mqtt-1.2-1.el7.noarch.rpm

    官方离线安装包,亲测可用

    Python库 | seldon-deploy-sdk-1.4.1.2.tar.gz

    资源分类:Python库 所属语言:Python 资源全名:seldon-deploy-sdk-1.4.1.2.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

Global site tag (gtag.js) - Google Analytics