在Java中,我们只将静态方法的一个副本存储到内存中,我们可以一遍又一遍地调用它。这是为了节省性能和节省空间。
以前,有人在工作中声称Python中的静态函数与Java中的静态函数不同,is this correct
?
有人还声称每次我们调用Python静态方法时,Python Interpreter仍然需要花时间先实例化一个对象。 Is this correct
?
class A(object):
@staticmethod
def static_1():
print 'i am static'
答案 0 :(得分:1)
访问Python静态方法不涉及创建新对象。 Python只返回原始的函数对象。
(访问非静态方法确实涉及创建一个新的方法对象,但这很便宜。特别是,它只将对函数的引用和对self
的引用捆绑在一起;它不涉及复制功能。)
答案 1 :(得分:0)
java静态方法的Python方法是@classmethod。
答案 2 :(得分:0)
Python语言与特定Python实现之间存在差异。
此外,几乎所有语言都只在内存中存储每个方法的一个方法副本。这适用于所有静态,类和常规方法。你提到的节省来自于不需要将指针传递给自己的'用Python或者这个'在Java中。一个较少的参数传递可以为从最内部长时间运行的循环中调用的方法节省大量资金。
至于存储方法本身。像PyPi这样的实现经常执行JIT以将方法编译成机器代码。他们会根据方法执行方式的更新统计信息继续重新编译。我相信类似的行为发生在Java中。