当前位置: 首页 > 知识库问答 >
问题:

相同代码的Python不同性能[重复]

段干瑞
2023-03-14

我偶然发现了一些毫无意义的东西。我有这个Python代码,它做2个简单的for循环,只是测量执行时间。然而,我发现从一个函数调用完全相同的代码需要一半的时间。有人能解释一下为什么吗?

print "no function"

start_time = time.time()
for i in range(10000):
    for j in range(10000):
        z = i*j
print z
print("--- %s seconds ---" % (time.time() - start_time))

# VS

def Function():
    start_time = time.time()
    for i in range(10000):
        for j in range(10000):
            z = i*j
    print z
    print("--- %s seconds ---" % (time.time() - start_time))

print "Function Call"
Function()

这里是输出:

no function
99980001
--- 8.89359378815 seconds ---
Function Call
99980001
--- 4.64798092842 seconds ---

共有1个答案

谢叶五
2023-03-14

从PythonInSuper网站,我们可以读到这个:

在函数中,访问局部变量比访问全局变量、内置变量和属性查找更快。因此,有时在内部循环中本地化变量访问是值得的。例如,random.shuffle()的代码使用random=self.random行本地化访问。这样就避免了洗牌循环重复查找self.random。在环路之外,增益很小,几乎不值得。

 类似资料:
  • https://leetcode.com/problems/find-all-numbers-dispapered-in-an-array/discuss/93007/simple-java-in-place-sort-solution 你能查一下上面的链接吗? 我看不懂密码 然后,第一个只是简单地使用我们可以检查是不是值。 第二个, 它最终也是一样的东西,只是为了证明索引值=index+1。 但

  • 我试图将paralleStream与自定义的ForkJoin池一起使用,该任务执行网络调用。当我使用以下样式时 如果使用parallelStream,那么ForkJoinPool.Common是否以某种方式参与其中?下面是模拟上述两种样式的整个程序

  • 问题内容: 当与MySQL数据库连接时,我有几种方法可以做同样的事情,保存或加载不同类型的参数。目前,我对每种类型都有不同的方法。如何合并这些方法,以便它们支持不同的类型? 下面是两个非常相似但使用不同类型的方法的示例: 请注意,在该示例中,类型均为数字。在类型完全不同的情况下(例如int和String),如何避免使用近乎重复的方法? 问题答案: 您可以在此处应用 策略 模式。 …

  • 我编写了以下代码,在我的计算机上运行良好,但在其他计算机上返回null。你能帮我解决这个问题吗。 这些是我的计算机输出的一部分: ['i'、'have'、'one'、'generalized'、'rule'、'where'、'in'、'shellscript'、'i'、'check'、'for'、'all'、'need'、……idea'] 其他计算机结果: [('', '', '', ''), (

  • 问题内容: 我注意到,在没有源代码编码声明的情况下,Python 2解释器假定源代码使用 脚本 和 标准输入 以ASCII编码: 并使用 模块 和 命令 标志在ISO-8859-1中进行了编码: 它在哪里记录? 与此相反,Python 3始终假定源代码是用UTF-8编码的,因此可以在四种情况下打印。 注意。 –我在控制台编码设置为UTF-8的macOS 10.13和Ubuntu Linux 17.