2014-04-07 7 views
-2

我有兩個不同的功能,如:如何把變量從不同`高清()`函數到另一個 - 蟒蛇

def messageWindow(): 
    # all the necessary operations 
    feature_matrix_db = zip(B_mean , G_mean , R_mean, cont_list , ene_list , homo_list , cor_list, dis_list) 
    return feature_matrix_db 

def open(): 
    #all the necessary operations 
    feature_matrix_ip = zip(B_mean1 , G_mean1 , R_mean1, cont_list1 , ene_list1 , homo_list1 , cor_list1 , dis_list1) 
    return feature_matrix_ip 

def result(): 
    COLUMNS = 12 
    image_count = 0 
    resultlist_key = [] 
    result_list = list() 
    i = 0 
    a_list = list() 
    b_list = list() 
    a_list.append(feature_matrix_ip) 
    while i < 70: 
     b_list.append(feature_matrix_db[i]) 
     dist = distance.euclidean(a_list,b_list[i]) 
     result_list.append(dist) 
     resultlist_key = OrderedDict(sorted(enumerate(result_list),key=lambda x:x[0])).keys() 
     i = i + 1 

    res_lst_srt = {'values': result_list,'keys':resultlist_key} 
    res_lst_srt['values'], res_lst_srt['keys'] = zip(*sorted(zip(res_lst_srt['values'], res_lst_srt['keys']))) 
    key = res_lst_srt['keys'] 

    for i1,val in enumerate(key): 
     if i1 < 4: 
      image_count += 1 
      r, c = divmod(image_count, COLUMNS) 
      im = Image.open(resizelist[val]) 
      tkimage = ImageTk.PhotoImage(resized) 
      myvar = Label(win, image=tkimage) 
      myvar.image = tkimage 
      myvar.grid(row=r, column=c) 

前兩個def()函數將返回feature_matrix_dbfeature_matrix_ip,我想這些結果是導入下一個def()功能結果。它是這樣的錯誤:

im = Image.open(resizelist[val]) 
File "E:\Canopy\System\lib\site-packages\PIL\Image.py", line 1956, in open 
prefix = fp.read(16) 
AttributeError: 'numpy.ndarray' object has no attribute 'read' 

歡迎任何建議。提前致謝!

+1

不要覆蓋內建'open()',否則當你想打開一個文件時你會有一段糟糕的時間。 – msvalkon

+0

@msvalkon好吧我會改變'open()' –

+2

請閱讀關於python中的[functions](https://docs.python.org/2/tutorial/controlflow.html#defining-functions)。你沒有任何這些函數的參數*和*你沒有聲明前兩個函數中的任何變量。你從不在* result()中調用你的任何函數,因此函數永遠不會返回數據。 – msvalkon

回答

1

您可能想了解python中的命名空間和作用域。有一些信息在這裏:https://docs.python.org/2/tutorial/classes.html

例如您messageWindow()功能:

def messageWindow(): 
    # all the necessary operations 
    feature_matrix_db = zip(B_mean , G_mean , R_mean, cont_list , ene_list , homo_list , cor_list, dis_list) 
    return feature_matrix_db 

但是哪裏有B_meanG_meanR_meancont_listene_listhomo_listcor_listdis_list界定?你可以將它們傳遞到messageWindow()作爲參數:

def messageWindow(B_mean , G_mean , R_mean, cont_list , ene_list , homo_list , cor_list, dis_list): 
    # all the necessary operations 
    feature_matrix_db = zip(B_mean , G_mean , R_mean, cont_list , ene_list , homo_list , cor_list, dis_list) 
    return feature_matrix_db 

或函數內分配一些價值給他們,或指定使用global關鍵字功能以外的一些價值給他們。但是,如果沒有說過他們要採取什麼樣的價值觀,你不能只是打電話給他們。

讓我們看的result()的前幾行:

def result(): 
    COLUMNS = 12 
    image_count = 0 
    resultlist_key = [] 
    result_list = list() 
    i = 0 
    a_list = list() 
    b_list = list() 
    a_list.append(feature_matrix_ip) 

再次,在那裏feature_matrix_ip定義?你可以做的是這樣的:

feature_matrix_ip = open() #super bad idea to call your function open() 
a_list.append(feature_matrix_ip) 
+0

在我已經指定的每個函數中聲明並調用B_mean,G_mean,R_mean,cont_list,ene_list,homo_list,cor_list,dis_list。 –

相關問題