Python中Function(函数)和methon(方法)
首先来看他们的定义,
函数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的说法时,你应该了解他们的差异。
- >>> class MyClass:
- i = 12345
- def f(self):
- return "hello world"
- >>> x = MyClass()
- >>> x.f.__class__
- <class 'method'>
- >>> MyClass.f.__class__
- <class 'function'>
从上面的例子可以看出,一个是method object,一个是function object。
此外,Python里面还有staticmethod和classmethod的概念,他们和普通的method又有些区别。
->classmethod将类作为第一个隐含的参数
->而staticmethod没有任何隐含的参数,有点类似于Java里的static
- >>> class MyClass:
- i = 12345
- @staticmethod
- def f(self):
- return "hello world"
- def add(x, y):
- return x+y
- @classmethod
- def foo(cls):
- print(cls)
- >>> MyClass.f.__class__
- <class 'function'>
- >>> MyClass.add.__class__
- <class 'function'>
- >>> MyClass.foo.__class__
- <class 'method'>
- >>> x = MyClass()
- >>> x.f.__class__
- <class 'function'>
- >>> x.add.__class__
- <class 'method'>
- >>> x.foo.__class__
- <class 'method'>
- >>> x.foo()
- <class '__main__.MyClass'>
当然,在很多语言里,这两者的区别没那么明显。
下面先来看看被选为最佳答案的回复(来自 Andrew Edgecombe ):
函数是一段代码,通过名字来进行调用。它能将一些数据(参数)传递进去进行处理,然后返回一些数据(返回值),也可以没有返回值。
所有传递给函数的数据都是显式传递的。
方法也是一段代码,也通过名字来进行调用,但它跟一个对象相关联。方法和函数大致上是相同的,但有两个主要的不同之处:
- 方法中的数据是隐式传递的;
- 方法可以操作类内部的数据(请记住,对象是类的实例化–类定义了一个数据类型,而对象是该数据类型的一个实例化)
以上只是简略的解释,忽略了作用域之类的问题。
Raffi Khatchadourian 对 Andrew Edgecombe 答案的补充:
对于 1),你应当再加上“ 方法在 C++ 中是被称为成员函数”。因此,在 C++ 中的“方法”和“函数”的区别,就是“成员函数”和“函数”的区别。此外,诸如 Java 一类的编程语言只有“方法”。所以这时候就是“静态方法”和“方法”直接的区别。
对于2),你应当补上方法可以操作已在类中声明的私有实例(成员)数据。其他代码都可以访问公共实例数据。
Aaron 的回答:
方法和对象相关;
函数和对象无关。
Java中只有方法,C中只有函数,而C++里取决于是否在类中。
Python中Function(函数)和methon(方法)相关推荐
- Python中range函数的使用方法
Python中range函数的使用方法 更新时间:2022年05月30日 11:38:15 作者:Python编程学习圈 这篇文章主要介绍了Python中range函数的使用方法,文章基于Pyth ...
- 技术图文:举例详解Python中 split() 函数的使用方法
背景 这篇文章主要介绍Python中的split()函数的使用方法,split()函数通常用于将字符串切片并转换为列表,需要的朋友可以参考一下. 技术分析 Python中有split()和os.pat ...
- python中sum函数的使用方法及实例_sum函数的使用方法及实例
在我很重要的人.QQ相册上看到的英文. BRO有以下两种意思: 1.BRO是brother的简称,意思是兄弟,哥们.是口语中的简称.类似的还有"sister"姐妹的简称为" ...
- Python中range()函数的使用方法
range()函数可以产生一系列的数字.当需要叠加一些数字时,可以用到range()函数. 1 基本语法 range()函数的基本语法如下所示. range(start, stop) 其中,start ...
- python中function函数的用法_Python中Function(函数)和methon(方法)
在Python中,对这两个东西有明确的规定: 函数function -- A series of statements which returns some value toa caller. It ...
- Python中Function(函数)和method(方法)
在Python中,对这两个东西有明确的规定: 函数function -- A series of statements which returns some value to a caller. It ...
- python中if函数的使用方法_(for i in range) (else) (if)使用方法
条件语句 Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块. 可以通过下图来简单了解条件语句的执行过程: [图片上传失败...(image-ef7ddf- ...
- python中find函数的使用方法_Python教程-String 字符串使用教程
Python 语言中的String 在Python中,String代指以下特点: 代表Unicode字符的字节数组 用单引号或双引号引起来 无限长度 Python 中 String 字符串定义方式 $ ...
- Python中lambda函数的使用方法
在进行编程时,一般我们会给一个函数或者变量起一个名字,该名称是用于引用或寻址函数变量.但是有一个低调的函数,你不需要赋予它名字,因此该函数也叫匿名函数.该函数就是Python中的Lambda函数,下面 ...
最新文章
- JavaScript面向对象怎样删除标签页?
- ViSP安装之Windows系统基于VS2019编译器编译获得VISP动态库
- [Android学习系列8]数据库ormlite笔记
- BFS最短路打印路径
- 安卓手机如何投屏到电视上_手机如何投屏到电视机上?
- [原创] 在线音乐API的研究 (Part 2.1)
- WMI使用的WIN32_类库名
- java中reject方法作用_Java BindingResult.rejectValue方法代碼示例
- WCF学习之旅—实现支持REST客户端应用(二十四)
- Java VS Go,微服务究竟谁更快?
- 移动端实现标题文字的截断
- DnsFookup:一款功能强大的DNS重绑定工具
- Oracle数据库常用sql语句
- JAVA拓展新的数据库,SqlFaker:轻量级、易拓展的Java数据库智能填充开源库
- 生活中与现实中的字体应用体验俯拾皆是...
- 洛达AirPods鉴别检测工具AB153x_UT,支持1562a 1562f
- 搜索结果排列html模板,搜索结果页优化-城市模板
- 华为Mate系列主要参数
- cmake交叉编译mbedtls,open62541笔记
- 【最全最详细】publiccms使用教程
热门文章
- 微软BI 之SSIS 系列 - MVP 们也不解的 Scrip Task 脚本任务中的一个 Bug
- 《三基色组成方式》转
- 设计高效sql一般经验谈
- nokia : Booklet 3G
- 风云点评:Flash 与 Silverlight 终极大比拼
- 《C程序设计语言》(第二版)要点总结
- RxSwift之深入解析场景特征序列的使用和底层实现
- iOS之多线程的使用和优缺点比较
- 1023:Hello,World!的大小
- 执行后rosrun 显示找不到包 [rospack] Error: package ‘pluming_param_server‘ not found