以下是综合多家说法的个人理解总结,仅为做到理解它们的区别与联系,不保证严谨。

函数

函数是封装了一些独立的功能,可以直接调用,python内置了许多函数,同时可以自建函数来使用。

独立的函数是函数(像 python3 里print()),类里封装的一些可被直接使用或是被类直接调用的都可以叫做函数(如os.path.join(path, paths))。

方法

方法是对象可调用的函数。

联系

方法是与对象紧密相连的函数。通常像下面这样调用:

object.method(arguments)

所以,函数在面向不同角色的时候只是发生了身份的转变,这对实现它的功能并没什么影响。

用 python 内置函数验证:

In [6]: from types import FunctionType, MethodType
In [7]: class Foo(object):
...: def func(self):
...: pass
In [8]: obj = Foo()
In [9]: obj.func()
In [11]: Foo.func(123)
In [12]: print(isinstance(obj.func,MethodType))
True
In [13]: print(isinstance(Foo.func,FunctionType))
True

或者用下面的方法验证

In [21]: type(obj.func)

Out[21]: method

In [22]: type(Foo.func)

Out[22]: function

上面的例子很清晰的反映了函数与方法的区别与联系。

补充一个概念,方便自己温故。

关键字

关键字是python内置的,具有特殊意义的标识符,自定义标识符命名时不可与之重复。可通过以下代码查看python内置的关键字内容

import keyword
In [16]: print(keyword.kwlist)
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except',
'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return',
'try', 'while', 'with', 'yield']
PS:

验证函数和方法举例的时候,我使用类调用内置方法(这里把类作为函数的对象,所以我称它为内置方法),当未提供参数时,出现如下报错:

In [10]: Foo.func()

---------------------------------------------------------------------------

TypeError Traceback (most recent call last)

in ()

----> 1 Foo.func()

TypeError: func() missing 1 required positional argument: 'self'

这里可引出“静态方法”、“类方法”的概念,我在下一博文中总结了自己的理解。