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的说法时,你应该了解他们的差异。

[python]  view plain  copy
  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 plain  copy
  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++里取决于是否在类中


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值