zoukankan      html  css  js  c++  java
  • 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博主的文章

  • 相关阅读:
    微信开发 之 开启开发模式
    微信公众号开发 之 编辑模式使用
    分析各种Android设备屏幕分辨率与适配
    【面向对象设计模式】 适配器模式 (二)
    重构 之 总结代码的坏味道 Bad Smell (一) 重复代码 过长函数 过大的类 过长参数列 发散式变化 霰弹式修改
    【Android 应用开发】Android资源文件
    java 创建并写入文件
    隐藏 HttpClient 在console的日志
    HOW TO CHANGE THE DEFAULT KEY-VALUE SEPARATOR OF A MAPREDUCE JOB
    java 时间戳转换
  • 原文地址:https://www.cnblogs.com/nimo97/p/9723526.html
Copyright © 2011-2022 走看看