2011-09-18 30 views
8

Tôi vẫn là một newb python, nhưng tôi đang làm việc thông qua Pyneurgen neural network tutorial và tôi không hoàn toàn hiểu cách vòng lặp for được sử dụng để tạo dữ liệu đầu vào hoạt động như thế nào trong trường hợp này:Không hiểu python này Đối với vòng

for position, target in population_gen(population): 
    pos = float(position) 
    all_inputs.append([random.random(), pos * factor]) 
    all_targets.append([target])` 

Vòng lặp lặp đi lặp lại chính xác là gì? Tôi đã không đi qua việc sử dụng dấu phẩy và một chức năng trong vòng lặp trước.

Cảm ơn bạn đã giúp đỡ :)

Trả lời

11

Hàm population_gen trả về danh sách các bộ dữ liệu được tự động giải nén thành các tên biến bằng cú pháp này.

Vì vậy, về cơ bản, bạn đang nhận được một cái gì đó giống như sau khi giá trị trả về từ hàm:

[("pos1", "target1"), ("pos2", "target2"), ] 

Với ví dụ này, trong cho lặp đầu tiên vòng lặp của, các biến "vị trí" và "mục tiêu" sẽ có các giá trị:

position = "pos1" 
target = "target1" 

Trong lần lặp thứ hai:

position = "pos2" 
target = "target2" 
3

Tuple giải nén.

for a, b in [(1, 2), (3, 4)]: 
    print a 
    print b 
    print 'next!' 

Và chức năng chỉ là một hàm.

3

Hàm trả về một chuỗi hoặc phục vụ như một thứ gọi là "máy phát điện:" nó phát ra các phần tử liên tiếp trong một trình tự để người gọi lặp lại. This question liên quan đến từ khóa lợi nhuận có một số thảo luận kỹ lưỡng về cách thức hoạt động của chúng. Đối với dấu phẩy, vì hàm (dường như) trả về một hai tuple, danh sách tên được phân tách bằng dấu phẩy là một cách thuận tiện để đặt tên các phần tử riêng lẻ của bộ tuple mà không phải tự giải nén chúng.

2

Nó được gọi là tuple unpacking. Hàm population_gen (máy phát) tạo ra các bộ dữ liệu chứa chính xác hai phần tử. Trong python, bạn có thể gán một số biến để các bộ như thế này

a, b = (1, 2) 

Vì vậy, trong for vòng lặp này, bạn trực tiếp đưa hai giá trị tuple từ mục lặp hiện tại thành hai biến của bạn positiontarget.

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