我正在阅读思考Python:如何像计算机科学家一样思考。作者使用方法“调用”,使用函数“调用”。
这是一个惯例吗?如果是这样,为什么要做出这种区分呢?为什么函数被称为被称为,但是方法被称为被调用?
答案 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 ,以及我根据自己的经验所知。我不能说这些术语在其他语言中的区别。