• python程序在函数内执行得更快


    http://www.cnblogs.com/nepaul/archive/2012/07/15/2592179.html

    为什么Python程序在函数内执行得更快?来源StackOverflow

    考虑下面的代码,一个在函数体内,一个是全局的代码。

    函数内的代码执行效率为 1.8s

    1
    2
    3
    4
    def main():
        for i in xrange(10**8):
            pass
    main()

    函数体外的代码执行效率为 4.5s

    1
    2
    for i in xrange(10**8):
        pass

    不用太纠结时间,只是一个示例,我们可以看到效率查得很多。为什么会这样呢?我们使用 dis module 反汇编函数体内的bytecode 代码,使用 compile builtin 反汇编全局bytecode,我们可以看到下面的反汇编(注意我高亮的地方)

    Main函数反汇编
    1
    2
    3
    13 FOR_ITER                 6 (to 22)
    16 STORE_FAST               1 (i)
    19 JUMP_ABSOLUTE           13
    全局代码
    1
    2
    3
    13 FOR_ITER                 6 (to 22)
    16 STORE_NAME               1 (i)
    19 JUMP_ABSOLUTE           13

    我们可以看到,差别就是 STORE_FAST 和 STORE_NAME,前者比后者快很多。所以,在全局代码中,变量i成了一个全局变量,而函数中的i是放在本地变量表中,所以在全局变量表中查找变量就慢很多。如果你在main函数中声明global i 那么效率也就下来了。原因是,本地变量是存在一个数组中(直到),用一个整型常量去访问,而全局变量存在一个dictionary中,查询很慢。

    (注:在C/C++中,这个不是一个问题)

  • 相关阅读:
    Java Logging: Log Levels
    Java Logging: Logger Hierarchy
    Java Logging: Logger
    Java Logging: Basic Usage
    Use final liberally
    Writing Final Classes and Methods
    Java Logging: Overview
    base Tag
    DOM Nodes
    Browser environment
  • 原文地址:https://www.cnblogs.com/lvxiuquan/p/3079546.html
Copyright © 2020-2023  润新知