簡體   English   中英

在 python 中傳入自身數據

[英]passing in self data in python

您能否澄清一下self.add(x)下面的工作方式與self.data.append(x)的工作方式相同嗎? 也就是說, self.add(x)怎么知道 append 到列表中,因為我們沒有明確聲明self.data.add(x) 當我們 state y.addtwice('cat')時,將'cat'添加到'self' ,而不是self.data

class Bag:
    def __init__(self):
        self.data=[]
    def add(self,x):
        self.data.append(x)
        return self.data
    def addtwice(self,x):
        self.add(x)
        self.add(x)
        return self.data

>>> y = Bag()
>>> y.add('dog')
['dog']
>>> y.addtwice('cat')
['dog', 'cat', 'cat']

因為addtwice調用定義在 self 上的方法,並且因為 self.data 是“可變類型”,所以 addtwice 對 add 的調用最終會附加 self.data 的值。 add ,依次調用 self.data.append

在計算機程序中調用 function 時,您可以將過程視為一系列替換,如下所示:

# -> means (substitution for)
# <= means "return"
y = Bag()
y.add('dog') -> 
     y.data.append(x) ->
         #(machine code)
     <= y.data
# at this point, at the command propmt, python will just print what was returned.
y.addtwice('cat')->
     y.add('cat')->
         y.data.append(x) ->
             #(machine code) 
         <= y.data
     #nothing cares about this return
     y.add('cat')->
         y.data.append(x) ->
             #(machine code)
         <= y.data
     #nothing cares about this return either
     <= y.data
# at this point, at the command propmt, python will just print what was returned.

不過,在任何這些情況下, self本身從未真正附加過。 self.data是。

self.add(x)調用實例方法add反過來調用self.data.append(x)

當我們 state y.addtwice('cat') 時,'cat' 被添加到 'self',而不是 self.data

這是不正確的。 cat實際上已添加到self.data中。 為什么你會認為它被添加到self

y.add('dog')Bag.add(y, 'dog')相同。 所以add確實是在做y.data.append('dog') ,習慣上用self這個名字代替。

y.addtwice('cat')Bag.addtwice(y, 'cat')相同。 所以addtwice真的是做y.add('cat')兩次,這和做Bag.add(y, 'cat')兩次是一樣的。 所以addtwice實際上是在做y.data.append('cat')兩次。

每個實例方法中的self只是一個自動添加的變量,指向調用它的實例,在本例中為y

讓我們看看 class 包中的 function add(self, x)

當調用那個function時,其中一個參數是self,也就是object本身,在這種情況下,調用的是add function的同一個Bag實例。

因此,在 function add中,調用self.data.append(x)基本上就是調用 function append 到Bagdata列表中的元素x

同樣的事情 function addtwice 通過調用 function add兩次,將兩個元素添加到 Bag 的data列表中。

這兩個函數都返回data列表。

add(self, x)只是您要調用的 function 。

append是一個內置的 function 向列表中添加一個元素。

所以你添加 function 基本上使用 append 將你想要的元素添加到列表中並返回你命名的列表data

self.addtwice將調用 self.add 兩次,因此將添加元素兩次。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM