关于python多重赋值的小问题
前言
今天无意中发现在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实现同时给多个变量赋值的方法.分享给大家供大家参考.具体分析如下: python中可以同时给多个变量赋值,下面列举了三种方法 # Assign values directly a, b = 0, 1 assert a == 0 assert b == 1 # Assign values from a list (r,g,b) = ["Red","Green","Blue"] assert r == "Red&q
-
Python赋值语句后逗号的作用分析
本文实例讲述了Python赋值语句后逗号的作用.分享给大家供大家参考.具体分析如下: IDLE 2.6.2 >>> a = 1 >>> b = 2, >>> print type(a) <type 'int'> >>> print type(b) <type 'tuple'> >>> c = [] >>> d = [], >>> print type(c)
-
跟老齐学Python之赋值,简单也不简单
变量命名 在<初识永远强大的函数>一文中,有一节专门讨论"取名字的学问",就是有关变量名称的问题,本温故而知新的原则,这里要复习: 名称格式:(下划线或者字母)+(任意数目的字母,数字或下划线) 注意: 1.区分大小写 2.禁止使用保留字 3.遵守通常习惯 •以单一下划线开头的变量名(_X)不会被from module import *语句导入的. •前后有下划线的变量名(X)是系统定义的变量名,对解释器有特殊意义. •以两个下划线开头,但结尾没有两个下划线的变
-
python dict 字典 以及 赋值 引用的一些实例(详解)
最近在做一个很大的数据库方面的东东,要用到根据数值来查找,于是想到了python中的字典,平时没用过dict这个东东 用的最多的还是 list 和 tuple (网上查 用法一大堆) 看了一下创建字典的方法: 方法1: dict = {'name': 'earth', 'port': 80} 方法2: fdict = dict((['x', 1], ['y', 2])) 方法3: ddict = {}.fromkeys(('x', 'y'), -1) 都实验了一下这些方法,发现不好用,做不出来自
-
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解
对Python中列表和数组的赋值,浅拷贝和深拷贝的实例讲解 列表赋值: >>> a = [1, 2, 3] >>> b = a >>> print b [1, 2, 3] >>> a[0] = 0 >>> print b [0, 2, 3] 解释:[1, 2, 3]被视作一个对象,a,b均为这个对象的引用,因此,改变a[0],b也随之改变 如果希望b不改变,可以用到切片 >>> b = a[:] &
-
Python中的赋值、浅拷贝、深拷贝介绍
和很多语言一样,Python中也分为简单赋值.浅拷贝.深拷贝这几种"拷贝"方式. 在学习过程中,一开始对浅拷贝理解很模糊.不过经过一系列的实验后,我发现对这三者的概念有了进一步的了解. 一.赋值 赋值算是这三种操作中最常见的了,我们通过一些例子来分析下赋值操作: str例 复制代码 代码如下: >>> a = 'hello' >>> b = 'hello' >>> c = a >>> [id(x) for x in
-
深入理解Python中变量赋值的问题
前言 在Python中变量名规则与其他大多数高级语言一样,都是受C语言影响的,另外变量名是大小写敏感的. Python是动态类型语言,也就是说不需要预先声明变量类型,变量的类型和值在赋值那一刻被初始化,下面详细介绍了Python的变量赋值问题,一起来学习学习吧. 我们先看一下如下代码: c = {} def foo(): f = dict(zip(list("abcd"), [1, 2 ,3 ,4])) c.update(f) if __name__ == "__main__
-
python实现给数组按片赋值的方法
本文实例讲述了python实现给数组按片赋值的方法.分享给大家供大家参考.具体如下: 这段代码可以直接给数组的第5-7个元素赋值 inventory = ["sword", "armor", "shield", "healing potion"] inventory[4:6] = ["orb of future telling"] print inventory 运行结果如下: ['sword', 'arm
-
python赋值操作方法分享
一.序列赋值: x,y,z = 1,2,3 我们可以看作:x = 1,y = 2,z = 3 二.链接赋值: x = y = 1print id(x)print id(y) 大家可以看下,2个执行的结果是一样的.说明变量x和y都是存储了整数对象1的引用地址. 三.增量赋值. 比如x = x + 1 我们可以改成x+=1 掌握上面的3点,相信你对赋值操作有一个很好的了解了.
-
Python的多维空数组赋值方法
Python里面的list.tuple默认都是一维的. 创建二维数组或者多维数组也是比较简单. 可以这样: list1 = [1,2,] list1.append([3,4,]) 可以这样: list2 = [1,2,[3,4,],] 还可以这样: list3 = [1,2] list3.insert(2, [3,4]) 比较特殊的情况是: list0 = [] list0.append([]) 然后想给二维数组list0的第一个元素赋值.直接写list0[0][0]是会被编译器报错的. 那怎么
随机推荐
- PHP把空格、换行符、中文逗号等替换成英文逗号的正则表达式
- 解决grails服务端口冲突的办法(grails修改端口号)
- 很棒的一组js图片轮播特效
- 基于PHP导出Excel的小经验 完美解决乱码问题
- 基于python爬虫数据处理(详解)
- mysql 常用数据库语句 小练习
- MariaDB(MySQL)创建、删除、选择及数据类型使用详解
- php树型类实例
- Vue 2.0的数据依赖实现原理代码简析
- JS for循环中i++ 和 ++i的区别介绍
- ajax读取properties资源文件数据的方法
- win下调用putty执行命令脚本分享
- python练习程序批量修改文件名
- Android 中 Tweened animation的实例详解
- jQuery学习笔记之jQuery中的$
- Linux下apache支持PHP配置文件的方法
- android中Glide实现加载图片保存至本地并加载回调监听
- Java经典用法总结(二)
- c#生成验证码程序
- 浅析Android手机卫士接收短信指令执行相应操作