2013-01-19 27 views
11

Tôi đã cố tạo một từ điển có chuỗi cho mỗi khóa và hàm lambda cho từng giá trị. Tôi không chắc chắn nơi tôi đang đi sai, nhưng tôi nghi ngờ nó là một trong hai nỗ lực của tôi để lưu trữ một lambda trong một từ điển ở nơi đầu tiên, hoặc thực tế là lambda của tôi là sử dụng một nhà điều hành phím tắt.Lưu trữ lambdas trong từ điển

Code:

dict = { 
    'Applied_poison_rating_bonus': 
     (lambda target, magnitude: target.equipmentPoisonRatingBonus += magnitude) 
} 

Các lỗi được nêu ra là SyntaxError: invalid syntax và chỉ ngay tại += tôi. Các nhà điều hành phím tắt có được phép trong lambdas hay tôi thậm chí còn xa đường hơn tôi nghĩ không?

Vì lợi ích của sự tỉnh táo, tôi đã bỏ qua hàng trăm cặp rất giống nhau (Nó không chỉ là một cuốn từ điển nhỏ.)

EDIT:

Có vẻ như vấn đề của tôi là với cố gắng gán bất cứ điều gì trong biểu thức lambda. Howver, vấn đề của tôi để giải quyết là như vậy làm thế nào tôi có thể nhận được một phương pháp mà chỉ biết chìa khóa để từ điển này để có thể thay đổi trường đó được xác định trong mã (bị hỏng) của tôi?

Một số cách gọi hàm eval() có thể trợ giúp không?

EDIT_FINAL:

Phương pháp functools.partial() đã được khuyến khích để phần mở rộng này của câu hỏi, và tôi tin rằng sau khi nghiên cứu nó, tôi sẽ tìm thấy nó đủ để giải quyết vấn đề của tôi.

Trả lời

24

Bạn không thể sử dụng các bài tập trong biểu thức và chỉ lambda chỉ diễn đạt.

Bạn có thể lưu trữ lambdas trong từ điển tốt khác:

dict = {'Applied_poison_rating_bonus' : (lambda target, magnitude: target.equipmentPoisonRatingBonus + magnitude)} 

Trên đây lambda tất nhiên chỉ trả về kết quả, nó sẽ không làm thay đổi target.equimentPoisonRatingBonus tại chỗ.

+0

Thú vị, nhưng bây giờ bất cứ điều gì gọi là lambda của tôi có cần biết để thêm kết quả vào trường cụ thể đó. Bất kỳ cách nào xung quanh đó? – BlackVegetable

+1

@BlackVegetable: Sử dụng một hàm thích hợp thay vào đó, hoặc thêm một phương thức vào lớp 'target'. –

+0

Tôi có khoảng 150 phần tử (tương tự) trong từ điển này. Vì vậy, sử dụng một chức năng thích hợp cho mỗi thất bại mục đích của từ điển này. Hmm ... – BlackVegetable

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