【发布时间】:2016-07-10 18:04:51
【问题描述】:
这两个完全在性能上是等价的(即生成的代码是否完全等价):
class A(object):
const = 'abc'
def lengthy_op(self):
const = self.const
for i in xrange(AVOGADRO):
# do something which involves reading const
和:
const = 'abc'
class A(object):
def lengthy_op(self):
global const
for i in xrange(AVOGADRO):
# do something which involves reading const
【问题讨论】:
-
如果您以只读方式使用变量,则不需要全局关键字。我希望点访问会稍微慢一些,但对这些问题的回答总是“衡量它”。无论如何,它不太可能成为性能瓶颈。
-
@Rogalski:我知道这不是必需的 - 我的问题是它是否在本地范围内内联全局(使其与另一个等效)。点访问执行一次,全局查找也执行一次-我的问题是它们之后是否等效-在两种情况下都只使用名称“const”的循环中。这将由可以生成字节码的人立即回答,而不是通过测量,它应该是确定的 - 除非我错过了什么......
-
我希望全局访问会更慢,因为变量名首先在本地范围的符号表中搜索,并且只有在没有找到任何内容后才在全局中搜索
-
实际上,
global说明符虽然对正确性来说是不必要的,但可能会提高性能,因为它会绕过本地范围内的任何检查。 -
@TomKarzes:正是我的意思——现在如果我们可以删除那个“可能”......
标签: python performance python-2.7 global globals