我是靠谱客的博主 落后银耳汤,最近开发中收集的这篇文章主要介绍python水平怎么证明_Python中的“右求值”是如何证明的?,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

使用Python 3:>>> a = []

>>> f = print(

a.append(1), a[:],

a.append(2), a[:],

a.append(3), a[:]

)

None [1] None [1, 2] None [1, 2, 3]

存档:

^{pr2}$

奇怪的是(一开始),这段代码产生了:None [1, 2, 3] None [1, 2, 3] None [1, 2, 3]

然而,dis(f)使这一点更加清楚:>>> dis(f)

1 0 LOAD_NAME 0 (print) #Loads the value of 'print' into memory. Precisely, the value is pushed to the TOS (Top of Stack)

--> 3 LOAD_NAME 1 (a) #Loads the value of object 'a'

6 LOAD_ATTR 2 (append) #Loads the append attribute (in this case method)

9 LOAD_CONST 0 (1) #Loads the constant 1

12 CALL_FUNCTION 1 #a.append(1) is called

15 LOAD_NAME 1 (a) #for print(...,a,...)

18 LOAD_NAME 1 (a) #for the next a.append()

21 LOAD_ATTR 2 (append)

24 LOAD_CONST 1 (2)

27 CALL_FUNCTION 1 #a.append(2)

30 LOAD_NAME 1 (a)

33 LOAD_NAME 1 (a)

36 LOAD_ATTR 2 (append)

39 LOAD_CONST 2 (3)

42 CALL_FUNCTION 1 #a.append(3)

45 LOAD_NAME 1 (a) #loads a to be used thrice by print

48 CALL_FUNCTION 6 #calls print

51 PRINT_EXPR #prints TOS and clears it

52 LOAD_CONST 3 (None) #Loads None

55 RETURN_VALUE #Returns None

dis(f)的输出是我们期望的-L-to-R求值。本质上,这种“差异”是最后一次评估print()的结果。到那时,a的值已更改为[1, 2, 3],同一最终对象将被打印三次。在

如果我们用a替换a[:],我们就得到了预期的结果。在

最后

以上就是落后银耳汤为你收集整理的python水平怎么证明_Python中的“右求值”是如何证明的?的全部内容,希望文章能够帮你解决python水平怎么证明_Python中的“右求值”是如何证明的?所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(37)

评论列表共有 0 条评论

立即
投稿
返回
顶部