首先来看他们的定义,

函数function —— A series of statements which returns some value to a caller. It can also be passed zero or more arguments which may be used in the execution of the body.

方法method —— A function which is defined inside a class body. If called as an attribute of an instance of that class, the method will get the instance object as its first argument (which is usually called self).

首先,从概念上去分。函数可以看成一个数学上的概念,比如说完成加减乘除的函数。它其实有一个内在的约束:就是如果参数相同,对一个函数的每次调用返回的结果应该始终一样。

而方法是要和对象联系起来的。而且它有一个银行的参数:就是它所作用的对象。而这些更多地是在面向对象的语境里来说。

而从Python的定义来看,它将method作为function的一种特例来处理了。但当你在文档里看到instance method object和function object的说法时,你应该了解他们的差异。

[python] view plaincopy
  1. >>> class MyClass:
  2. i = 12345
  3. def f(self):
  4. return "hello world"
  5. >>> x = MyClass()
  6. >>> x.f.__class__
  7. <class 'method'>
  8. >>> MyClass.f.__class__
  9. <class 'function'>

从上面的例子可以看出,一个是method object,一个是function object。

此外,Python里面还有staticmethod和classmethod的概念,他们和普通的method又有些区别。

->classmethod将类作为第一个隐含的参数

->而staticmethod没有任何隐含的参数,有点类似于Java里的static

[python] view plaincopy
  1. >>> class MyClass:
  2. i = 12345
  3. @staticmethod
  4. def f(self):
  5. return "hello world"
  6. def add(x, y):
  7. return x+y
  8. @classmethod
  9. 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'>

当然,在很多语言里,这两者的区别没那么明显。

下面先来看看被选为最佳答案的回复(来自  Andrew Edgecombe ):

函数是一段代码,通过名字来进行调用。它能将一些数据(参数)传递进去进行处理,然后返回一些数据(返回值),也可以没有返回值。

所有传递给函数的数据都是显式传递的。

方法也是一段代码,也通过名字来进行调用,但它跟一个对象相关联。方法和函数大致上是相同的,但有两个主要的不同之处:

  1. 方法中的数据是隐式传递的;
  2. 方法可以操作类内部的数据(请记住,对象是类的实例化–类定义了一个数据类型,而对象是该数据类型的一个实例化)

以上只是简略的解释,忽略了作用域之类的问题。

Raffi Khatchadourian 对 Andrew Edgecombe 答案的补充:

对于 1),你应当再加上“ 方法在 C++ 中是被称为成员函数”。因此,在 C++ 中的“方法”和“函数”的区别,就是“成员函数”和“函数”的区别。此外,诸如 Java 一类的编程语言只有“方法”。所以这时候就是“静态方法”和“方法”直接的区别。

对于2),你应当补上方法可以操作已在类中声明的私有实例(成员)数据。其他代码都可以访问公共实例数据。

Aaron 的回答:

方法和对象相关;

函数和对象无关。

Java中只有方法,C中只有函数,而C++里取决于是否在类中。

Python中Function(函数)和methon(方法)相关推荐

  1. Python中range函数的使用方法

    Python中range函数的使用方法 更新时间:2022年05月30日 11:38:15   作者:Python编程学习圈 这篇文章主要介绍了Python中range函数的使用方法,文章基于Pyth ...

  2. 技术图文:举例详解Python中 split() 函数的使用方法

    背景 这篇文章主要介绍Python中的split()函数的使用方法,split()函数通常用于将字符串切片并转换为列表,需要的朋友可以参考一下. 技术分析 Python中有split()和os.pat ...

  3. python中sum函数的使用方法及实例_sum函数的使用方法及实例

    在我很重要的人.QQ相册上看到的英文. BRO有以下两种意思: 1.BRO是brother的简称,意思是兄弟,哥们.是口语中的简称.类似的还有"sister"姐妹的简称为" ...

  4. Python中range()函数的使用方法

    range()函数可以产生一系列的数字.当需要叠加一些数字时,可以用到range()函数. 1 基本语法 range()函数的基本语法如下所示. range(start, stop) 其中,start ...

  5. python中function函数的用法_Python中Function(函数)和methon(方法)

    在Python中,对这两个东西有明确的规定: 函数function -- A series of statements which returns some value toa caller. It ...

  6. Python中Function(函数)和method(方法)

    在Python中,对这两个东西有明确的规定: 函数function -- A series of statements which returns some value to a caller. It ...

  7. python中if函数的使用方法_(for i in range) (else) (if)使用方法

    条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: [图片上传失败...(image-ef7ddf- ...

  8. python中find函数的使用方法_Python教程-String 字符串使用教程

    Python 语言中的String 在Python中,String代指以下特点: 代表Unicode字符的字节数组 用单引号或双引号引起来 无限长度 Python 中 String 字符串定义方式 $ ...

  9. Python中lambda函数的使用方法

    在进行编程时,一般我们会给一个函数或者变量起一个名字,该名称是用于引用或寻址函数变量.但是有一个低调的函数,你不需要赋予它名字,因此该函数也叫匿名函数.该函数就是Python中的Lambda函数,下面 ...

最新文章

  1. JavaScript面向对象怎样删除标签页?
  2. ViSP安装之Windows系统基于VS2019编译器编译获得VISP动态库
  3. [Android学习系列8]数据库ormlite笔记
  4. BFS最短路打印路径
  5. 安卓手机如何投屏到电视上_手机如何投屏到电视机上?
  6. [原创] 在线音乐API的研究 (Part 2.1)
  7. WMI使用的WIN32_类库名
  8. java中reject方法作用_Java BindingResult.rejectValue方法代碼示例
  9. WCF学习之旅—实现支持REST客户端应用(二十四)
  10. Java VS Go,微服务究竟谁更快?
  11. 移动端实现标题文字的截断
  12. DnsFookup:一款功能强大的DNS重绑定工具
  13. Oracle数据库常用sql语句
  14. JAVA拓展新的数据库,SqlFaker:轻量级、易拓展的Java数据库智能填充开源库
  15. 生活中与现实中的字体应用体验俯拾皆是...
  16. 洛达AirPods鉴别检测工具AB153x_UT,支持1562a 1562f
  17. 搜索结果排列html模板,搜索结果页优化-城市模板
  18. 华为Mate系列主要参数
  19. cmake交叉编译mbedtls,open62541笔记
  20. 【最全最详细】publiccms使用教程

热门文章

  1. 微软BI 之SSIS 系列 - MVP 们也不解的 Scrip Task 脚本任务中的一个 Bug
  2. 《三基色组成方式》转
  3. 设计高效sql一般经验谈
  4. nokia : Booklet 3G
  5. 风云点评:Flash 与 Silverlight 终极大比拼
  6. 《C程序设计语言》(第二版)要点总结
  7. RxSwift之深入解析场景特征序列的使用和底层实现
  8. iOS之多线程的使用和优缺点比较
  9. 1023:Hello,World!的大小
  10. 执行后rosrun 显示找不到包 [rospack] Error: package ‘pluming_param_server‘ not found