繁体   English   中英

在不将实例分配给变量的情况下实例化python类就可以了吗?

[英]Is it fine to Instantiate python class without assigning instance to a variable?

是否可能会直接在创建的实例上使用类方法发生任何问题?

    TmpClass('lol').printx()

类示例供参考:

    class TmpClass:
        def __init__(self, x):
            self.x = x

        def printx(self):
            print self.x

这取决于。

如果您只想使用此对象一次,那不是问题。 如果您实例化这么多的匿名对象而不是命名对象,则可能会出现问题,以至于您的程序效率低下并消耗大量内存。

就像函数和lambda表达式一样。

例如,如果您像这样在循环中执行MyClass('a').my_method() ,您将给垃圾回收器做很多工作。

这是使用ipython conslole的示例

In [11]: class Asdf(object):
   ....:     def __init__(self, x):
   ....:         self.x = x
   ....:     def printx(self):
   ....:         pass
   ....:     

In [12]: def asdf(x):
   ....:     pass
   ....: 

In [13]: %timeit Asdf(9).printx()
The slowest run took 14.89 times longer than the fastest. This could mean that an intermediate result is being cached 
1000000 loops, best of 3: 272 ns per loop

In [14]: %timeit asdf(9)
10000000 loops, best of 3: 56.9 ns per loop

如您所见,与仅调用函数相比,实例化和清理创建的对象要花费大量时间。 现在,在某些情况下,仅调用函数是不够的/适当的。 但这只是我的2美分,具体涉及性能问题

值得注意的是:我从功能/方法中排除了打印内容。 如果我把照片留在里面,那么结果看起来会很不一样:

对于类实例化,我得到了100000 loops, best of 3: 7.42 µs per loop ,对于函数调用100000 loops, best of 3: 7.4 µs per loop

这只是表明,有时,很少的性能改进会带来可笑的小改进。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM