• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    python常量折叠基础知识点讲解

    1、概念

    所谓常量折叠,指的是在编译时就查找并计算常量表达式,而不是在运行时再对其进行计算,从而会使运行时更加精简和快速。

    2、实例

    在 Python 中,我们可以使用反汇编模块(Disassembler)获取 CPython 字节码,从而更好地了解代码执行的过程。

    当使用dis模块反汇编上述常量表达式时,我们会得到以下字节码:

    >>> import dis
    >>> dis.dis("day_sec = 24 * 60 * 60")
        0 LOAD_CONST        0 (86400)
        2 STORE_NAME        0 (day_sec)
        4 LOAD_CONST        1 (None)
        6 RETURN_VALUE

    从字节码中可以看出,它只有一个LOAD_CONST ,以及一个已经计算好的值86400。

    这表明 CPython 解释器在解析和构建抽象语法树期间,会折叠常量表达式 24 * 60 * 60,并将其替换为计算值 86400。

    知识点扩展:

    常量折叠的外部细节

    当初,咱们将重点转移到外部的实现细节,即关注 CPython 在哪里以及如何实现常量折叠。

    所有的 AST 优化(包含常量折叠)都能够在 ast_opt.c 文件中找到。根本的开始函数是 astfold_expr,它会折叠 Python 源码中蕴含的所有表达式。

    这个函数以递归形式遍历 AST,并试着折叠每个常量表达式,如上面的代码片段所示:

    astfold_expr 在折叠某个表达式之前,会尝试折叠其子表达式(操作对象),而后将折叠操作代理给特定的表达式折叠函数。

    特定操作的折叠函数对表达式求值,并返回计算后的常数,而后将其放入 AST 中。

    例如,每当 astfold_expr 遇到二值运算时,它便调用 fold_binop,递归地计算两个子操作对象(表达式) 。

    fold_binop 函数返回计算后的常量值,如上面的代码片段所示:

    fold_binop 函数通过查看以后运算符的品种,而后调用其相应的处理函数来折叠二值运算。例如,如果以后的操作是加法运算,为了计算最终值,它会对其左侧和右侧操作数调用 PyNumber_Add。

    到此这篇关于python常量折叠基础知识点讲解的文章就介绍到这了,更多相关python常量折叠是什么内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • 举例介绍Python中的25个隐藏特性
    • python 字符串的驻留机制及优缺点
    • Python中常用的8种字符串操作方法
    • python学习字符串驻留与常量折叠隐藏特性详解
    上一篇:Django后端按照日期查询的方法教程
    下一篇:Python Selenium异常处理的实例分析
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    python常量折叠基础知识点讲解 python,常量,折叠,基础,知识点,