首先,從概念上去分。函數能夠當作一個數學上的概念,好比說完成加減乘除的函數。它其實有一個內在的約束:就是若是參數相同,對一個函數的每次調用返回的結果應該始終同樣。
而方法是要和對象聯繫起來的。並且它有一個銀行的參數:就是它所做用的對象。而這些更多地是在面向對象的語境裏來講。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'>