栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python中的链式比较实际上如何工作?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python中的链式比较实际上如何工作?

您可以简单地让Python告诉您

dis
模块产生了什么字节码:

>>> import dis>>> def f(): return 1 < input("Value:") < 10... >>> dis.dis(f)  10 LOAD_ConST    1 (1)   3 LOAD_GLOBAL   0 (input)   6 LOAD_ConST    2 ('Value:')   9 CALL_FUNCTION 1  12 DUP_TOP    13 ROT_THREE  14 COMPARE_OP    0 (<)  17 JUMP_IF_FALSE_OR_POP    27  20 LOAD_ConST    3 (10)  23 COMPARE_OP    0 (<)  26 RETURN_VALUE     >>   27 ROT_TWO    28 POP_TOP    29 RETURN_VALUE

Python使用堆栈;该

CALL_FUNCTION
字节码堆(上用途项目
input
的全球和
'Value:'
字符串)调用函数用一个参数,更换堆栈函数调用的结果在这两个项目。在函数调用之前,常量
1
已加载到堆栈中。

因此,在

input
被调用时,堆栈看起来像:

input_result1

DUP_TOP
复制最高值,然后旋转最高的三个堆栈值以得出:

1input_resultinput_result

COMPARE_OP
用来测试前两项
<
,并用结果替换前两项。

如果结果是字节码跳转到27,

False
JUMP_IF_FALSE_OR_POP
字节码将
False
顶部的剩余部分旋转到顶部,
input_result
用a清除该字节
POP_TOP
,然后返回剩余的
False
顶部值作为结果。

True
但是,如果结果是该值,则该
JUMP_IF_FALSE_OR_POP
字节码会从堆栈中弹出该值,并将其放置
10
在顶部,我们得到:

10    input_result

然后进行另一个比较并返回。

综上所述,基本上,Python会这样做:

stack_1 = stack_2 = input('Value:')if 1 < stack_1:    result = Falseelse:    result = stack_2 < 10

stack_*
值再次清除。

然后,堆栈保存 未命名的中间结果 以进行比较



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/574736.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号