Python 多赋值问题,推论过程与结果

题目来源:邦友问答,因觉得有趣就尝试推论看看 python 多赋值是如何运作的

以下是我推论出来的,不确定是不是正确答案

class Node:def __init__(self):self.parent = Noneif __name__ == __main__:a = Node()a.parent = 20

题目一:

先来看他是如何赋值的,先给他们标上记号好分辨

   (1), (2) =  (3),   (4)a.parent, a = None, a.parent输出结果:a = 20

1. (x) 想法一:

赋予数值的顺序: (1)把 4 给 2 ,(2)把 3 给 1
(1) a = a.parent ,使得 a 等于 20
(2) a.parent = None,若此推论正确则这里应该会有 error
但是由于 a 已经等于 20,不会有参数 parent
程序能正确运行,所以此推论错误

2. (x) 想法二:

顺序: (1)把 3 给 1 ,(2)把 4 给 2
a.parent = None 使得 a.parent 值为 None
然后 a = a.parent,若依照此想法则 a 的答案应该会是 None
但是正确答案是20,此推论错误

3. (x) 想法三:

因为依照基本的 a, b = b, a 能够正确交换顺序
所以应该有暂时储存资料的部分
先把右边的 None, a.parent 放入暂存的资料区
然后顺序: (1)把 4 给 2 ,(2)把 3 给 1
(1)a = a.parent 使得 a = 20
(2) a.parent = None ,因 a 无 parent
正确答案是20,此推论错误,也没使用到暂存资料区

4. (o) 想法四:

一样有个暂存区,把 None, a.parent 存入暂存区
顺序: (1)把 3 给 1 ,(2)把 4 给 2
(1) a.parent = None,此时 a.parent 参数为 None
(2) 使得 a = a.parent
无暂存的时候这里是应该是要错误的,但正确结果是 20
有暂存时候可以看到我们的暂存区 a.parent 的参数正好是 20
所以将暂存区的 a.parent 赋予值给 a,此推论正确

题目二

(1),  (2)   =    (3),   (4)a, a.parent = a.parent, None输出结果:AttributeError: 'int' object has no attribute 'parent'

(o) 想法一:

依照上面第四部成功的结果来推算
把 a.parent, None 存入暂存区
顺序: (1)把 3 给 1 ,(2)把 4 给 2
(1) a = a.parent 使得 a 的值为 20
(2) a.parent = None,因为 a 是 int 所以没有 parent 参数
推论正确

题目三

已经知道两个参数的运作方式,那三个参数是如何运作?
在已知题目一能正常运算出结果,左右再加上一个参数试试

  (1),   (2),   (3)   =  (4),    (5),  (6)a.parent, a, a.parent = None, a.parent, 10

(o) 想法一

这次就先不看结果,看看之前推论是否正确
先把 None, a.parent, 10 放入暂存区
顺序: (1)把 4 给 1 ,(2)把 5 给 2 ,(3)把 6 给 3
(1)a.parent = None,使得 a.parent 为 None
(2)a = a.parent,此时要从暂存区读取资料:a.parent = 20
所以这里的 a 为 20
(3)a.parent = 10,需要把 10 的值给 a.parent
但因为 a 目前为 20 所以他没有参数 parent
来看结果

输出结果:AttributeError: 'int' object has no attribute 'parent'

得出答案,此推论正确

要注意的地方是这里的第二步(2)是从暂存区读取资料,若是从第一步(1)的结果 a.parent = None 来把 a.parent 的值给 a 此时 a 的值为 None 应该输出的是AttributeError: 'NoneType' object has no attribute 'parent'

结果

(1) 开始运算前要先把等式右边的变数都加入到暂存区
(2) 从等式右边由左往右一个一个运算
(3) 若需要参数则从暂存区取得


关于作者: 网站小编

码农网专注IT技术教程资源分享平台,学习资源下载网站,58码农网包含计算机技术、网站程序源码下载、编程技术论坛、互联网资源下载等产品服务,提供原创、优质、完整内容的专业码农交流分享平台。

热门文章