是否常规地说调用函数并调用方法?

时间:2016-11-10 13:31:35

标签: python function python-3.x oop methods

我正在阅读思考Python:如何像计算机科学家一样思考。作者使用方法“调用”,使用函数“调用”

这是一个惯例吗?如果是这样,为什么要做出这种区分呢?为什么函数被称为被称为,但是方法被称为被调用

2 个答案:

答案 0 :(得分:2)

不是真的,也许更容易让新读者做出明确的区分,以便理解他们的调用略有不同。至少我怀疑作者可能为每个人选择了不同的措辞。

似乎没有一个约定在Python语言的参考手册中规定了这一点。当我对函数的调用是隐式而不是显式时,我看起来他们正在做的是选择调用

例如,在the Standard Type Hierarchy的Callables部分中,您会看到:

  

[..]当实例方法对象调用时,调用基础函数(__func__),将类实例(__self__)插入前面参数列表。 [...]

(强调我的)显式调用

再往下Basic Customization,特别是for __new__,您可以看到:

  

调用创建类cls. __new__()的新实例是一种静态方法[...]

(强调我的)显式调用

稍后只有几句话,您会看到如何使用调用,因为__new__隐式调用__init__

  

如果__new__()未返回cls的实例,则新实例的__init__()方法将不会调用

(强调我的)隐含地称为

所以不,似乎没有使用任何约定,至少是语言的创造者。简单比复杂更好,我想: - )。

答案 1 :(得分:1)

一个很好的来源是the Python documentation。通过“类”一节中的简单文本搜索,可以在“调用方法”中多次使用“call”这个词,并且仅使用“invoke”这个词一次。

根据我的经验,情况也是如此:我经常听到“call”用于引用方法和函数,而我很少听到“调用”。但是,我认为这主要是个人偏好和/或背景问题(设置非正式?,学术?等)。

您还会看到places in the documentation,其中“invoke”一词用于参考功能:

  

void Py_FatalError (const char * message)

     

打印致命错误消息   并杀死这个过程。不执行清理。 此功能应该   只有当检测到一个会成功的条件时才被调用   继续使用Python解释器很危险;例如,当   对象管理似乎已损坏。在Unix上,标准C   库函数abort()被调用,它将尝试生成一个   核心档案。

来自here

  

void Py_DECREF (PyObject * o)

     

减少对象o的引用计数。该对象不能为NULL;如果你不确定它不是NULL,   使用Py_XDECREF()。如果引用计数达到零,则为对象的   调用类型的释放函数(不能为NULL)

虽然这两个引用都来自Python C API,但这可能很重要。

总结一下:

我认为在函数或方法的上下文中使用“invoke”或“call”是安全的,而不会像noob或showoff那样听起来。

请注意我只说Python ,以及我根据自己的经验所知。我不能说这些术语在其他语言中的区别。