gpt4 book ai didi

python - 方法和函数之间的区别,在 Python 中与 C++ 相比

转载 作者:IT老高 更新时间:2023-10-28 20:32:08 30 4
gpt4 key购买 nike

我正在做 Code Academy 的 Python 教程,我对方法和函数的定义有点困惑。来自教程:

You already know about some of the built-in functions we've used on (or to create) strings, such as .upper(), .lower(), str(), and len().

来自 C++,我认为 .upper().lower() 将被称为方法,而 len()str() 函数。在本教程中,这些术语似乎可以互换使用。

Python 是否像 C++ 那样区分方法和函数?

不同于 Difference between a method and a function ,我在问Python的细节。术语“方法”和“功能”似乎并不总是遵循链接问题的公认答案中给出的定义。

最佳答案

需要注意:这个答案似乎已经过时了。查看 this

function 是 Python 中的可调用对象,即可以使用 call 运算符 调用(尽管其他对象可以通过实现 __call__)。例如:

>>> def a(): pass
>>> a
<function a at 0x107063aa0>
>>> type(a)
<type 'function'>

方法是一类特殊的函数,可以绑定(bind)未绑定(bind)

>>> class A:
... def a(self): pass
>>> A.a
<unbound method A.a>
>>> type(A.a)
<type 'instancemethod'>

>>> A().a
<bound method A.a of <__main__.A instance at 0x107070d88>>
>>> type(A().a)
<type 'instancemethod'>

当然,不能调用未绑定(bind)的方法(至少不能直接调用而不传递实例作为参数):

>>> A.a()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: unbound method a() must be called with A instance as first argument (got nothing instead)

在 Python 中,在大多数情况下,您不会注意到绑定(bind)方法、函数或可调用对象(即实现 __call__ 的对象)或类构造函数之间的区别。它们看起来都一样,只是有不同的命名约定。不过,在引擎盖下,这些对象可能看起来大不相同。

这意味着绑定(bind)方法可以用作函数,这是使 Python 如此强大的众多小东西之一

>>> b = A().a
>>> b()

这也意味着即使 len(...)str(...) 之间存在根本区别(后者是类型构造函数) ,在深入挖掘之前您不会注意到差异:

>>> len
<built-in function len>
>>> str
<type 'str'>

关于python - 方法和函数之间的区别,在 Python 中与 C++ 相比,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20981789/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com