python 同时有方法和函数这两个概念?

2015-07-25 21:18:18 +08:00
 zhuer

今天再看python的官方文档,有一些地方说“。。。defines the following functions”然后有一些地方说“The following methods”。

3279 次点击
所在节点    Python
12 条回复
iwdmb
2015-07-25 21:21:00 +08:00
定義在 Class 裡面的叫作 method(方法)

直接定義在程式碼裡的叫作 function(函數)
dacapoday
2015-07-25 21:22:46 +08:00
含有self参数的函数就是方法,我瞎掰的
FrankFang128
2015-07-25 21:24:00 +08:00
方法是 OOP 的概念,函数是一般概念
laoyuan
2015-07-25 22:04:05 +08:00
sorted(list) 和 list.sort( ) 什么区别?
sorted(list) 创建了一个新的对象,list.sort( ) 仅仅是修改list 所指向的数据对象
举个栗子:
l = [3, 2, 1]
def f(l):
l.sort()
f(l)
print l
jimzhong
2015-07-25 22:07:03 +08:00
有区别的,对于类是method,method也是一种函数把
echo1937
2015-07-25 22:13:51 +08:00
python2:
class中定义的def称为method,形参中有self的为绑定方法,无self的为未绑定方法;class之外定义的def称为function

python3:
取消了未绑定方法,统一归入function
publicID001
2015-07-25 22:47:17 +08:00
@echo1937 bound method 和 unbound method 的区别并不在 self 参数上面,self 只是一个名字而已,用来代表被传入方法的实例(事实上你把所有的 self 全改成 this 代码也一样能运行)
对于某个特定的类的实例方法(比如 Foo.bar),Foo.bar 是 unbound method,foo.bar 是 bound method
publicID001
2015-07-25 22:54:43 +08:00
@echo1937 当然 Python 3 确实是取消了 unbound method 这个设定
MetroWind
2015-07-26 02:04:22 +08:00
就是个名字的规定而已,面向对象的习惯叫法。其实都是函数。
kamushin
2015-07-26 03:39:57 +08:00
区别在于,实例会把自己传入方法。
introom
2015-07-26 08:56:31 +08:00
我就以Python3为例子好了。

首先呢,是有Method和Function的区别,他们的类型都不一样。function就是function,method就是method。

其次呢,function可以通过descriptor protcol得到method,method呢也可以从__func__得到原本的function。 (记忆这样告诉我,现在没空翻CPython源代码确认)

Python的一大精髓就是descriptor protocol,理解清楚这个了,这个问题的答案自然就揭晓了。

Let the C code speak. ;)
0zero0
2015-07-26 15:16:16 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/208322

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX