【问题标题】:Why do Python defined functions perform faster than global scripts outside the scope of "def"? [duplicate]为什么 Python 定义的函数比“def”范围之外的全局脚本执行得更快? [复制]
【发布时间】:2017-02-07 06:02:19
【问题描述】:

好的,所以这个问题的措辞很难说。

但是,我有两个用 Python 3.5.2 编写的脚本:

import time
t0 = time.clock()
def hello():
    a = []
    for i in range(10000000):
        a.append(i)
hello()
t1 = time.clock()
print((t1-t0))

输出:1.0960211284655088

import time
t0 = time.clock()
a = []
for i in range(10000000):
    a.append(i)
t1 = time.clock()
print((t1-t0))

输出:1.432725885821128

第一个脚本在定义的函数中运行得更快,然后被调用;但是,我不知道为什么会这样,我想了解一下,以便学习优化代码。

这是一个仅与 Python 3 的这个特定方面有关的问题。我知道列表推导式和 map() 是执行此特定迭代的更快、更 Python 的方法。

【问题讨论】:

  • 独立于您对优化性能的追求,我觉得将代码放在函数中比放在文件范围内总是更好。这使得将脚本转换为可重用的模块变得更容易,并且也使代码在你开始新工作后更容易被继承你的东西的人理解。就个人而言,我认为即使是主脚本也应该在文件范围内没有代码,除了: if name == 'main': callToEntryFunction()抱歉,无法弄清楚如何在评论中格式化代码。 :-\
  • 我完全同意。但是,对于使用 python 进行快速破解(例如以 jupyter 为例)。如果在 Python 中查看大量数据,将其放入函数中可能会更快(性能方面)。当然,您总是可以只使用 R 或 Julia 哈哈;但那是题外话。

标签: python performance function python-3.x


【解决方案1】:

在我看来。差异是由对变量 a 的搜索引起的。 如果 a 是本地的,该函数会快速找到它并进行追加。 如果 a 是全局的,该函数将首先在本地搜索 a,然后在全局搜索。这就是花费更多时间的原因。

【讨论】:

  • 我有同样的想法,并通过将a = [] 放在全局上下文中并将global a 添加到hello() 的实现中来测试它。没有任何改变。
  • i 也在本地环境中,那又如何?
  • 在 Python 数据结构中,是否有一些关于使用支持它们的不同 C 代码运行的函数与在函数范围之外运行脚本的内容?也许定义什么是“a”的开销?
猜你喜欢
  • 2014-05-26
  • 1970-01-01
  • 2013-03-29
  • 1970-01-01
  • 1970-01-01
  • 2021-08-24
  • 1970-01-01
  • 2012-08-10
  • 1970-01-01
相关资源
最近更新 更多