python基础学习——函数和方法的区别与联系

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

函数

  函数是封装了一些独立的功能,可以直接调用,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博主的文章

posted @ 2018-09-29 14:31  nimo97  阅读(254)  评论(0编辑  收藏  举报