簡體   English   中英

使用Main()在函數之間傳遞數據

[英]Passing data between functions, using Main()

我試圖在一個類中將數據從一個函數傳遞到另一個函數並將其打印出來。 我不成功,並不斷出錯。 錯誤底部,以尋求幫助。 提前致謝。

class Stocks(object):
def __init__(self, name):
    self.name = name
    print(name)

def Get_Data(self):
    #self.data2 = data2
    #print(self.name)
    data2 = web.get_data_yahoo(self.name,data_source='yahoo',start=start_date,end=end_date)['Adj Close']
    #print(data2)
    #data2.plot(figsize=(10,5))
    #plt.show()
    return data2

def Main(self, Get_Data):

    x = Stocks(Get_Data())
    print(x)
    #data2.plot(figsize=(10,5))
    #plt.show()

z = Stocks('GE')
z.Get_Data()
z.Main()


error:
TypeError: Main() missing 1 required positional argument: 'Get_Data'
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-162-91f08c3bdb57> in <module>()
     32 z = Stocks('GE')
     33 z.Get_Data()
---> 34 z.Main()
TypeError: Main() missing 1 required positional argument: 'Get_Data'

函數定義包括參數列表,這些參數必須與調用函數時傳遞的參數匹配。

因此,如果將Main定義為采用Get_Data參數, Get_Data每次調用它時,都必須傳遞一個參數作為Get_Data的值。

但是您根本沒有傳遞任何東西,因此沒有傳遞TypeError


由於Main希望Get_Data帶任何參數地調用其Get_Data ,因此它必須是可帶任何參數的可調用對象。 綁定方法z.Get_Data符合要求,因此您可以執行以下操作:

z.Main(z.Get_Data)

但這是一個非常奇怪的設計。


您更有可能不想一開始就添加這樣的參數:

def Main(self):

…因為Main要做的是自己調用Get_Data ,而不是調用方傳入的任意操作:

x = Stocks(self.Get_Data())
print(x)

除了您可能不想在這里構造一個新的Stocks值(以z.Get_Data()的結果作為名稱)之外,您只想使用z.Get_Data()的結果。 所以:

x = self.Get_Data()
print(x)

錯誤非常明顯:您聲明Main具有參數Get_Data (忽略所有類成員隱式擁有/傳遞的self指針)。 當您調用z.Main()您沒有傳遞該參數,因此解釋器要求您填補這一空白。

您可能的意思是:

def Main(self):
    x = Stocks(self.Get_Data())
    print(x)

暫無
暫無

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

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