为了账号安全,请及时绑定邮箱和手机立即绑定

与C ++相比,Python中方法和函数之间的差异

与C ++相比,Python中方法和函数之间的差异

慕田峪7331174 2019-12-18 16:52:01
我正在编写有关Python的Code Academy教程,对方法和函数的定义有些困惑。从教程中:你已经知道了一些内置的功能,我们使用(或创建)的字符串,例如.upper(),.lower(),str(),和len()。从C ++来了,我想.upper()和.lower()将调用的方法和len()和str()功能。在本教程中,这些术语似乎可以互换使用。Python是否以C ++的方式区分方法和函数?与方法和函数之间的区别不同,我要问的是Python的细节。术语“方法”和“功能”似乎并不总是遵循链接的问题的已接受答案中给出的定义。
查看完整描述

3 回答

?
茅侃侃

TA贡献1842条经验 获得超21个赞

甲功能是在Python一个可调用对象,即,可以使用被称为呼叫操作员(尽管其它的目的可以通过实施模拟函数__call__)。例如:


>>> def a(): pass

>>> a

<function a at 0x107063aa0>

>>> type(a)

<type 'function'>

甲方法是一类特殊的功能,一个可被结合或绑定。


>>> 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'>

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


>>> 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中,大多数情况下,您不会注意到绑定方法,函数或可调用对象(即,实现的对象__call__)或类构造函数之间的区别。它们看起来都一样,只是命名约定不同。在引擎盖下,物体看起来可能有很大的不同。


这意味着可以将绑定方法用作函数,这是使Python如此强大的众多小功能之一


>>> b = A().a

>>> b()

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


>>> len

<built-in function len>

>>> str

<type 'str'>


查看完整回答
反对 回复 2019-12-18
?
猛跑小猪

TA贡献1858条经验 获得超8个赞

在下面的类定义中:


class MyClass:

    """A simple example class"""

    def f(self):

        return 'hello world'

类别:MyClass

函数:f()

方法:无(实际上不适用)

让我们创建上述类的实例。我们将通过分配class object, i.e. MyClass()给var x


  x = MyClass()

这里,


功能:无

方法:xf()

并且不要忘记,当我们将x分配给MyClass()时,它function object MyClass.f曾经被用来(内部)定义method object x.f


查看完整回答
反对 回复 2019-12-18
  • 3 回答
  • 0 关注
  • 633 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信