以下是综合多家说法的个人理解总结,仅为做到理解它们的区别与联系,不保证严谨。
函数
函数是封装了一些独立的功能,可以直接调用,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)
<ipython-input-10-9c47b1c912d3> in <module>()
----> 1 Foo.func()
TypeError: func() missing 1 required positional argument: 'self'
这里可引出“静态方法”、“类方法”的概念,我在下一博文中总结了自己的理解。
本文参考了HYESC博主的文章