首先,从概念上去分。函数能够当作一个数学上的概念,好比说完成加减乘除的函数。它其实有一个内在的约束:就是若是参数相同,对一个函数的每次调用返回的结果应该始终同样。
而方法是要和对象联系起来的。并且它有一个银行的参数:就是它所做用的对象。而这些更多地是在面向对象的语境里来讲。python
而从Python的定义来看,它将method做为function的一种特例来处理了。但当你在文档里看到instance method object和function object的说法时,你应该了解他们的差别函数
01.>>> class MyClass: 02. i = 12345 03. def f(self): 04. return "hello world" 05.>>> x = MyClass() 06.>>> x.f.__class__ 07.<class 'method'> 08.>>> MyClass.f.__class__ 09.<class 'function'>
从上面的例子能够看出,一个是method object,一个是function object。 code
此外,Python里面还有staticmethod和classmethod的概念,他们和普通的method又有些区别。对象
->classmethod将类做为第一个隐含的参数文档
->而staticmethod没有任何隐含的参数,有点相似于Java里的static数学
01.>>> class MyClass: 02. i = 12345 03. @staticmethod 04. def f(self): 05. return "hello world" 06. def add(x, y): 07. return x+y 08. @classmethod 09. def foo(cls): 10. print(cls) 11.>>> MyClass.f.__class__ 12.<class 'function'> 13.>>> MyClass.add.__class__ 14.<class 'function'> 15.>>> MyClass.foo.__class__ 16.<class 'method'> 17.>>> x = MyClass() 18.>>> x.f.__class__ 19.<class 'function'> 20.>>> x.add.__class__ 21.<class 'method'> 22.>>> x.foo.__class__ 23.<class 'method'> 24.>>> x.foo() 25.<class '__main__.MyClass'>