Python,更快地使用类属性,还是函数中的变量?

Gin*_*ger 2 python numpy

在Python中,理论上,哪种方法应该更快test1test2(假设相同的值x).我试过用%timeit但看到的差别很小.

import numpy as np

class Tester():

    def __init__(self):
        self.x = np.arange(100000)

    def test1(self):
        return np.sum(self.x * self.x )

    def test2(self,x):
        return np.sum(x*x)
Run Code Online (Sandbox Code Playgroud)

Tim*_*ers 7

在Python的任何实现中,时间将由两个向量的乘法压倒性地占主导地位,每个向量具有100,000个元素.与此相比,其他一切都是噪音.如果你真的对测量其他开销很感兴趣,那么使矢量小得多.

在CPython中,test2()很可能会更快一些.它有一个"额外"参数,但是参数是以"C速度"解压缩的,所以这并不重要.通过LOAD_FAST操作码访问参数的方式与局部变量相同,操作码是一种简单的array[index]访问方式.

test1()每个实例中,self.x都会在字典中查找字符串"x" self.__dict__.这比索引数组访问慢.但与冗长的乘法所花费的时间相比,它基本上没什么.