在《关于Python链式赋值的赋值顺序问题》的评论中,博友“码哥yoo_____”提醒,上面博文内容的说法还是有问题,正取的说法应该是:

a=b=c=d

赋值处理过程如下:

temp = d

a = temp

b=temp

c=temp

老猿进行了验证,发现确实如期所说。具体证明方法如下:

  1. class example:
  2. def __init__(self,name):
  3. self.name = name
  4. self.val = 0
  5. self.visitCount = 0
  6. def getValue(self):
  7. self.visitCount += 1
  8. print("getValue exuted:",self.__repr__())
  9. return self.val
  10. def setValue(self,val):
  11. self.val = val
  12. print("setValue exuted:",self.__repr__())
  13. def __repr__(self):
  14. return f"objectName = {self.name},val = {self.val},visitCount={self.visitCount}"
  15. value = property(getValue, setValue,None)
  16. a = example("a")
  17. b = example("b")
  18. c=example("c")
  19. d = example("d")
  20. d.value = 10
  21. a.value=b.value=c.value=d.value
执行截图:



可以看到执行链式赋值语句:a.value=b.value=c.value=d.value 时,先从d对象取值出来后,再也没有从其他对象取值,然后依次执行a、b、c的赋值。

没想到一个小小的链式赋值出了2次错,在此再次感谢两位热心的博友。

上述证明方法用到了《第7.23节 Python使用property函数定义属性简化属性访问的代码实现》和《第7.24节 Python案例详解:使用property函数定义属性简化属性访问代码实现》介绍的知识。不了解相关知识的请参考上述两文。

跟老猿学Python、学5G!

Python链式赋值执行顺序及执行方式的证明的更多相关文章

  1. 关于Python链式赋值的赋值顺序问题

    在<第4.7节 Python特色的序列解包.链式赋值.链式比较>一文中,老猿这样介绍的: 链式赋值是用一行语句将多个变量赋值为同一个值,语法如下: 变量1=变量2=变量n=赋值表达式 该语 ...

  2. Python 笔试集(1):关于 Python 链式赋值的坑

    前言 Python 的链式赋值是一种简易型批量赋值语句,一行代码即可为多个变量同时进行赋值. 例如: x = y = z = 1 链式赋值是一种非常优雅的赋值方式,简单.高效且实用.但同时它也是一个危 ...

  3. Python特色的序列解包、链式赋值、链式比较

    一.序列解包 序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中. 一般情况下要解包的序列包含的元素个数必须与你在等 ...

  4. 第4.7节 Python特色的序列解包、链式赋值、链式比较

    一.序列解包 序列解包(或可迭代对象解包):解包就是从序列中取出其中的元素的过程,将一个序列(或任何可迭代对象)解包,并将得到的值存储到一系列变量中. 一般情况下要解包的序列包含的元素个数必须与你在等 ...

  5. C++在单继承、多继承、虚继承时,构造函数、复制构造函数、赋值操作符、析构函数的执行顺序和执行内容

    一.本文目的与说明 1. 本文目的:理清在各种继承时,构造函数.复制构造函数.赋值操作符.析构函数的执行顺序和执行内容. 2. 说明:虽然复制构造函数属于构造函数的一种,有共同的地方,但是也具有一定的 ...

  6. python学习(二十一) Python 中的链式赋值

    Python的链式赋值如下:

  7. pyhton链式赋值在可变类型/不可变类型上的区别以及其本质

    关于链式赋值的一些注意点: a=[]b=[]x=y=[]print(a==b) #Trueprint(x==y) #Trueprint(a is b) #Falseprint(x is y) #Tru ...

  8. DataFrame 链式赋值

    在运行以下Python代码时,Pandas抛出SettingWithCopyWarning警告: row_data = df_pred.loc[key] row_data['col'] = new_v ...

  9. 由反转链表想到python链式交换变量

    这两天在刷题,看到链表的反转,在翻解体思路时看到有位同学写出循环中一句搞定三个变量的交换时觉得挺6的,一般用的时候都是两个变量交换(a,b=b,a),这种三个变量的交换还真不敢随便用,而且这三个变量都 ...

随机推荐

  1. R语言删除不规范的值(或NA)

    在使用R语言处理表格时(xlsx, csv),有时里面含有缺失值,或者不规范的数值,比如下图有许多的问号"?",为了便于处理数据,这些都应该整行地删掉. 为了删掉那些包含" ...

  2. 【译】关于Rust模块的清晰解释

    原文链接: http://www.sheshbabu.com/posts/rust-module-system/ 原文标题: Clear explanation of Rust's module sy ...

  3. div 内元素的垂直居中

    小主今天偷点懒利用上班时间整理一下 div 内元素的居中(不论垂直还是水平通用)问题的解决方法: 本文的中心是利用 css 中的 display属性:通常的方便的是使用 Flex/Grid 属性,今天 ...

  4. 深入浅出 webpack 之基础配置篇

    前言 前端工程化经历过很多优秀的工具,例如 Grunt.Gulp.webpack.rollup 等等,每种工具都有自己适用的场景,而现今应用最为广泛的当属 webpack 打包了,因此学习好 webp ...

  5. CSS3之线性渐变(linear gradients)

    线性渐变(linear gradients)沿着一根轴线改变颜色,从起点到终点颜色进行顺序渐变. 语法: background:linear-gradient(direction,color-stop ...

  6. vue-count-to(简单好用的一个数字滚动插件)

    vue-count-to是一个无依赖,轻量级的vue组件,可覆盖easingFn. 1. 你可以设置两个属性startVal和endVal,它会自动判断计数或倒计时.支持vue-ssr.vue-cou ...

  7. ostringstream、istringstream、stringstream(转)

    看一下C++风格的串流控制,C++引入了ostringstream.istringstream.stringstream这三个类,要使用他们创建对象就必须包含sstream.h头文件. istring ...

  8. 13Linux之磁盘管理

    13Linux之磁盘管理 目录 13Linux之磁盘管理 13 磁盘管理 13.1 两种分区格式 13.1.1 磁盘命名 13.1.2 mbr 13.1.3 gpt 13.2 制作文件系统并且挂载 1 ...

  9. IDEA常用插件汇总

    actiBPM idea的Activiti插件,不知道Activiti的可以百度下,用到了再来安装这个插件. Alibaba Java Coding Guidelines Alibaba开发的Java ...

  10. wireshark分析nmap和metasploit内置的syn扫描

    syn扫描 syn扫描,根据三次握手,向端口发送syn包,如果对方回应SYN/ACK,则证明端口开放 首先是nmap 速度很快,0.67秒完成,看下wireshark的抓取 一次发送了大量的syn包 ...