可能会出现任何问题,可能会直接在创建的实例上使用类方法吗?:
TmpClass('lol').printx()
参考类示例:
class TmpClass:
def __init__(self, x):
self.x = x
def printx(self):
print self.x
答案 0 :(得分:0)
取决于。
如果您只想使用此对象一次,那就没问题了。 如果您要实例化这么多匿名对象而不是命名对象,那么可能会出现问题,您的程序效率低下并且占用大量内存。
与函数和lambda表达式相同的故事。
答案 1 :(得分:0)
例如,如果您在循环中执行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
。
这只是为了表明,有时候,几乎没有什么性能改进会带来极小的改进。