2014-04-07 2 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

파이썬에서 [functions] (https://docs.python.org/2/tutorial/controlflow.html#defining-functions)에 대해 읽어 보시기 바랍니다. 이 함수들에 아무런 인수도 없다. *와 * 처음 두 함수 안에있는 변수를 선언하지 않는다. 'result()'안에 함수를 호출하지 않으므로 함수는 절대로 데이터를 반환하지 않습니다. – msvalkon

답변

1

아마도 당신은 파이썬에서 네임 스페이스와 스코핑에 대해 읽고 싶을 것입니다. 당신의 messageWindow() 기능은 예를 들어 https://docs.python.org/2/tutorial/classes.html

: 거기에 몇 가지 정보는 여기

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_mean, G_mean는, R_mean는, cont_list는, ene_list는, homo_listcor_listdis_list이 정의?

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 키워드를 사용하여 함수의 외부 그들에게 어떤 값을 할당 : 당신은 인수로 messageWindow()에게 전달할 수 있습니다. 그러나 당신은 그들이 어떤 가치관을 가지고 있는지 말하지 않고도 전화 할 수 있습니다. 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'는 각각의 함수에서 선언되고 호출됩니다. –

관련 문제