[英]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.