2012-08-22 38 views
8

Tôi có một máy phát điện được định nghĩa như thế này:Lỗi Loại: đối tượng 'phát' là không thể được gọi

def lengths(x): 
    for k, v in x.items(): 
     yield v['time_length'] 

Và nó hoạt động, gọi nó với

for i in lengths(x): 
    print i 

sản xuất:

3600 
1200 
3600 
300 

đó là những con số chính xác.

Tuy nhiên, khi tôi gọi nó như vậy:

somefun(lengths(x)) 

nơi somefun() được định nghĩa là:

def somefun(lengths): 
    for length in lengths(): # <--- ERROR HERE 
     if not is_blahblah(length): return False 

tôi nhận được thông báo lỗi này:

TypeError: 'generator' object is not callable 

tôi hiểu lầm gì ?

Trả lời

13

Bạn không cần phải gọi cho trình tạo của mình, xóa các dấu ngoặc đơn ().

Có thể bạn đang nhầm lẫn với thực tế là bạn sử dụng cùng tên cho biến bên trong hàm làm tên của trình tạo; sau đây sẽ làm việc quá:

def somefun(lengen): 
    for length in lengen: 
     if not is_blahblah(length): return False 

Một tham số truyền cho somefun chức năng sau đó được gắn với địa phương lengen biến thay vì lengths, để làm cho nó rõ ràng rằng biến địa phương không phải là điều tương tự như lengths() chức năng bạn được định nghĩa ở nơi khác.

+0

Điều đó đơn giản huh ... :-D –

+0

@AmigableClarkKant, lý do để đặt dấu ngoặc đơn ở vị trí đầu tiên là gì? – unkulunkulu

+0

@unkulunkulu: có thể nhầm lẫn với tên hàm tạo ra trình tạo. –

Các vấn đề liên quan