关于python多重赋值的小问题


Posted in Python onApril 17, 2019

前言

今天无意中发现在python中的一个多重赋值的小问题,自己一开始是比较简单化的理解了这个多重赋值操作的概念,所以导致在一道实现斐波那契数列的代码中,发现了自己的问题,顺便记录下吧,当作是学习总结。

首先是python的多重赋值操作,先用一个直观的代码来看:

a,b = 0,1

上述就是一个最简单的多重赋值操作,这个赋值操作的作用是将赋值操作 = 右侧的对象逐一赋给左侧的对象,所以这个操作结果是a对象的值为0,b对象的值为1,这点很好理解。

然鹅,如果是下列的代码呢?

# Fibonacci series:
a, b = 0, 1
while b < 10:
 print b
 a, b = b, a + b

显然,运行结果是正确的:

1
1
2
3
5
8

那么如果将代码改成这样呢?

#Fibonacci series:
a = 0
b = 1
while b < 10:
 print b
 a = b
 b = a + b

运行结果是:

1
2
4
8

显然不正确。。。。

其实问题在于多重赋值操作是一个等号右边表达式会在赋值操作进行之前被完全解析的过程。也就是说,对于

a, b = 0, 1

变量a和b是同时获得新的值0和1。而对于

a, b = b, a + b

说明等号右边的表达式在赋值之前首先被完全解析。右侧表达式是从左到右计算的。在赋值完成之前,a+b的操作是已经完成了表达式的计算结果了的,所以,如果将 a,b = b, a+b 等同于 a = b,b = a+b 是完全不正确的。

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
Python中使用装饰器和元编程实现结构体类实例
Jan 28 Python
python3使用PyMysql连接mysql数据库实例
Feb 07 Python
python定时关机小脚本
Jun 20 Python
python lxml中etree的简单应用
May 10 Python
使用python telnetlib批量备份交换机配置的方法
Jul 25 Python
python输入错误后删除的方法
Oct 12 Python
Python 实现取多维数组第n维的前几位
Nov 26 Python
Python面向对象封装操作案例详解
Dec 31 Python
tensorflow使用freeze_graph.py将ckpt转为pb文件的方法
Apr 22 Python
Python实现socket库网络通信套接字
Jun 04 Python
Python3.10的一些新特性原理分析
Sep 15 Python
Python实现位图分割的效果
Nov 20 Python
详解python3安装pillow后报错没有pillow模块以及没有PIL模块问题解决
Apr 17 #Python
一步步教你用python的scrapy编写一个爬虫
Apr 17 #Python
Python中如何导入类示例详解
Apr 17 #Python
Linux上使用Python统计每天的键盘输入次数
Apr 17 #Python
python3转换code128条形码的方法
Apr 17 #Python
Python爬虫——爬取豆瓣电影Top250代码实例
Apr 17 #Python
Python2与Python3的区别实例总结
Apr 17 #Python
You might like
PHP基本语法总结
2014/09/06 PHP
WAMP环境中扩展oracle函数库(oci)
2015/06/26 PHP
ASP.NET中基于JQUERY的高性能的TreeView补充
2011/02/23 Javascript
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
javascript中的delete使用详解
2013/04/11 Javascript
在js中判断checkboxlist(.net控件客户端id)是否有选中
2013/04/11 Javascript
node.js WEB开发中图片验证码的实现方法
2014/06/03 Javascript
jQuery循环动画与获取组件尺寸的方法
2015/02/02 Javascript
AngularJS 中的指令实践开发指南(一)
2016/03/20 Javascript
利用Angularjs和bootstrap实现购物车功能
2016/08/31 Javascript
js实现文字截断功能
2016/09/14 Javascript
浅谈JavaScript事件绑定的常用方法及其优缺点分析
2016/11/01 Javascript
基于Three.js插件制作360度全景图
2016/11/29 Javascript
Angular4项目中添加i18n国际化插件ngx-translate的步骤详解
2017/07/02 Javascript
node通过express搭建自己的服务器
2017/09/30 Javascript
vue实现学生录入系统之添加删除功能
2018/07/11 Javascript
Angular4 Select选择改变事件的方法
2018/10/09 Javascript
Vue.js的复用组件开发流程完整记录
2018/11/29 Javascript
js/jquery遍历对象和数组的方法分析【forEach,map与each方法】
2019/02/27 jQuery
详细讲解如何创建, 发布自己的 Vue UI 组件库
2019/05/29 Javascript
js获取对象,数组所有属性键值(key)和对应值(value)的方法示例
2019/06/19 Javascript
请求时token过期自动刷新token操作
2020/09/11 Javascript
python基于mysql实现的简单队列以及跨进程锁实例详解
2014/07/07 Python
如何通过python画loss曲线的方法
2019/06/26 Python
pandas DataFrame的修改方法(值、列、索引)
2019/08/02 Python
用Pelican搭建一个极简静态博客系统过程解析
2019/08/22 Python
linux面试题参考答案(8)
2015/08/11 面试题
书法培训心得体会
2014/01/05 职场文书
《挑山工》的教学反思
2014/02/16 职场文书
2014年班主任自我评价范文
2014/04/23 职场文书
2015年推广普通话演讲稿
2015/03/20 职场文书
校园广播站开场白
2015/06/01 职场文书
基层党建工作简报
2015/07/21 职场文书
《称赞》教学反思
2016/02/17 职场文书
详解Vue中$props、$attrs和$listeners的使用方法
2022/02/18 Vue.js
详解Flutter和Dart取消Future的三种方法
2022/04/07 Java/Android