python - Python 中的解释器优化

标签 python string optimization

假设我在 x 中有一个字符串,Python 解释器是否足够聪明,知道:string.replace(x, x) 应该转换为 NOP?

我怎样才能找到它?是否有任何引用资料表明解释器能够根据句法分析动态执行哪种类型的优化?

最佳答案

不,Python 不能对 NOP 做出假设;它无法在编译时知道对象 string 是什么类型,也无法在程序运行期间保持该类型。

在编译时应用了一些优化,主要是在 peephole optimiser 中.这会执行以下操作:

  • 将成员资格测试中使用的 listset 文字替换为不可变的等价物;这仅在未分配文字对象时有效,仅用于比较;例如:

    if foo in ['spam', 'ham', 'eggs']:
    

    替换为

    if foo in ('spam', 'ham', 'eggs'):
    
  • 用结果代替简单的计算:

    one_week = 7 * 24 * 60 * 60
    

    替换为

    one_week = 604800
    

    序列也会发生这种情况; 'neener' * 3 替换为该乘法的结果,前提是生成的序列保持在 21 个元素以下。

这些优化之所以成为可能,是因为它涉及不可变的字面值;完全受解释器控制的常量值,可以依赖它们在执行过程中不会切换类型。

关于python - Python 中的解释器优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25248595/

相关文章:

python - 如何在没有提示 (">>>"和 "..."的情况下复制/粘贴到/从 Python 控制台导致 SynthaxError

Java:格式化数字错误?

c++ - MSVC 2013 : crash at addpd xmm6, xmmword ptr [rax+rbx*8]

Python - scapy 数据包大小差异

Python:正则表达式 re.compile(r'^[-\w]+$') 如何搜索?或者,正则表达式在这种情况下如何工作?

python - 如何使用 Keras 创建多输入一输出 LSTM 模型?

Javascript,字符串格式 : I need the first 4 letters of a string, 小写,省略空格,删除符号

string - 用于查找包含所有查询词的最小子串的高效数据结构

optimization - 使用 "if let"解包堆栈对象(例如结构)

mysql - 优化缓慢的 MySQL 查询