2012-02-29 41 views
7

I yould muốn có máy phát điện để trì hoãn các máy phát điện khác, ví dụ:máy phát điện thích hợp với máy phát điện phụ

def gx(): 
    for i in [1, 2, 3]: 
     yield i 

def gy(): 
    for i in [11, 12, 13]: 
     yield i 

def gz(): 
    """this should defer to gx and gy to 
     generate [1, 2, 3, 11, 12, 13]""" 
    for i in gx(): yield i 
    for i in gy(): yield i 

Vòng lặp rõ ràng trong gz() là cách duy nhất để làm điều này, hoặc có lựa chọn thay thế tốt hơn?

+1

Bạn có cần giải quyết một vấn đề thực sự hoặc bạn chỉ muốn biết liệu có một tính năng cụ thể cho điều đó trong Python không? –

Trả lời

17

Trong hiện phát hành Python các phiên bản, một vòng lặp rõ ràng là cách duy nhất để gọi các máy phát điện phụ. (. Tôi đoán ví dụ của bạn chỉ là, tốt, một ví dụ - không phải là vấn đề chính xác mà bạn muốn giải quyết)

Python 3.3 sẽ thêm cú pháp đặc biệt yield from cho mục đích này:

def gz(): 
    """this should defer to gx and gy to 
     generate [1, 2, 3, 11, 12, 13]""" 
    yield from gx() 
    yield from gy() 

Xem PEP 380 cho biết thêm chi tiết.

+1

+1 để giải thích về các tính năng mới sắp xuất hiện trong 3.3 –

+2

Tại sao bỏ phiếu xuống? Cảm giác ruột của tôi là đây là câu trả lời mà OP thực sự là sau đó, đánh giá từ tiêu đề của câu hỏi. –

11

Sử dụng itertools.chain:

import itertools 

gz = itertools.chain(gx(), gy()) 

Trong tài liệu của chain họ mô tả nó bằng cách thực hiện:

def chain(*iterables): 
    for it in iterables: 
     for element in it: 
      yield element 

Bạn có thể vẽ cảm hứng từ này là tốt :)

+0

+1, nhưng tôi nghĩ mã cho mỗi mã trông đẹp hơn. :-) –

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