亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

與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 關注
  • 670 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號