如果不将实例分配给变量,实例化python类是否可以?

时间:2016-01-25 11:45:56

标签: python class

可能会出现任何问题,可能会直接在创建的实例上使用类方法吗?:

    TmpClass('lol').printx()

参考类示例:

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

        def printx(self):
            print self.x

2 个答案:

答案 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

这只是为了表明,有时候,几乎没有什么性能改进会带来极小的改进。