猿问

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

我正在编写有关Python的Code Academy教程,对方法和函数的定义有些困惑。从教程中:


你已经知道了一些内置的功能,我们使用(或创建)的字符串,例如.upper(),.lower(),str(),和len()。


从C ++来了,我想.upper()和.lower()将调用的方法和len()和str()功能。在本教程中,这些术语似乎可以互换使用。


Python是否以C ++的方式区分方法和函数?


与方法和函数之间的区别不同,我要问的是Python的细节。术语“方法”和“功能”似乎并不总是遵循链接的问题的已接受答案中给出的定义。


慕田峪7331174
浏览 634回答 3
3回答

茅侃侃

甲功能是在Python一个可调用对象,即,可以使用被称为呼叫操作员(尽管其它的目的可以通过实施模拟函数__call__)。例如:>>> def a(): pass>>> a<function a at 0x107063aa0>>>> type(a)<type 'function'>甲方法是一类特殊的功能,一个可被结合或绑定。>>> class A:...&nbsp; &nbsp;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):&nbsp; 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'>

猛跑小猪

在下面的类定义中:class MyClass:&nbsp; &nbsp; """A simple example class"""&nbsp; &nbsp; def f(self):&nbsp; &nbsp; &nbsp; &nbsp; return 'hello world'类别:MyClass函数:f()方法:无(实际上不适用)让我们创建上述类的实例。我们将通过分配class object, i.e. MyClass()给var x&nbsp; x = MyClass()这里,功能:无方法:xf()并且不要忘记,当我们将x分配给MyClass()时,它function object MyClass.f曾经被用来(内部)定义method object x.f
随时随地看视频慕课网APP
我要回答