2017-05-08 1 views
0

나는 사전을 가지고 놀고 있으며 그들과 더 편하게하려고 노력하고있다. 나는 this post을 만났는데, 그것은 잠재적 인 어플리케이션에 대해 생각하게했다. 앞서 자신을 앞서 가기 전에 기본 예제부터 시작하려고했습니다.<generator object> 대신 실제 출력을 보려면 어떻게해야합니까?

import numpy as np 

times = np.linspace(0,20,21) 
obs = np.linspace(50,100,21) 

def square(x): 
    return x**2 

def cube(x): 
    return x**3 

def root_six(x): 
    return x**(1/6) 

dispatcher = {'sq':square, 'cb':cube, '6th':root_six} 

def gimme(func_dict=dispatcher, values=times): 
    res = [] 
    for func in func_dict: 
     res.append(func(t) for t in values) 
    return res 

gg = np.array(list(gimme())) # I tried various combinations 
print(gg) 

>> [<generator object gimme.<locals>.<genexpr> at 0x101b886d0> 
>> <generator object gimme.<locals>.<genexpr> at 0x108fc1678> 
>> <generator object gimme.<locals>.<genexpr> at 0x108fc1a40>] 

코드가 올바르게 실행되는지 테스트 할 수 있습니까?

답변

3

append 생성기 표현을 사용하지 마십시오. 나는 왜 을 볼 수 없다. 여기을 원한다. 당신이 func_dict의 모든 func에 대한 목록을 가지고하려는 경우

res.append([func(t) for t in values]) 

: 지능형리스트를 사용합니다. 그렇지 않은 경우 extend을 사용하면 은 발전기을 소비합니다.

대괄호를 사용하지 않으면 평가되지 않은 생성자식이 만들어집니다. 만약 당신이 평가했다면 코드에 또 다른 문제점을 발견하게 될 것입니다 : func은 함수의 문자열 이름입니다! for 루프를 변경하여 values 대신 다음과 같이 바꿔야합니다.

for func in func_dict.values(): 
    res.append([func(t) for t in values]) 
관련 문제