मैं lambdas है कि कुछ भारी गणना करने के लिए एक कैश की तरह के रूप में कार्य की एक सूची है चाहता था और इस पर ध्यान:lambdas अंदर सूची comprehensions
>>> [j() for j in [lambda:i for i in range(10)]]
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
हालांकि
>>> list([lambda:i for i in range(10)])
[<function <lambda> at 0xb6f9d1ec>, <function <lambda> at 0xb6f9d22c>, <function <lambda> at 0xb6f9d26c>, <function <lambda> at 0xb6f9d2ac>, <function <lambda> at 0xb6f9d2ec>, <function <lambda> at 0xb6f9d32c>, <function <lambda> at 0xb6f9d36c>, <function <lambda> at 0xb6f9d3ac>, <function <lambda> at 0xb6f9d3ec>, <function <lambda> at 0xb6f9d42c>]
मतलब है कि lambdas हैं अद्वितीय कार्य लेकिन वे किसी भी तरह से एक ही सूचकांक मूल्य साझा करते हैं।
क्या यह एक बग या सुविधा है? मैं इस समस्या से कैसे बचूं? यह सूची comprehensions तक ही सीमित नहीं है ...
>>> funcs = []
... for i in range(10):
... funcs.append(lambda:i)
... [j() for j in funcs]
[9, 9, 9, 9, 9, 9, 9, 9, 9, 9]
पहला दृष्टिकोण तब तक अच्छा काम नहीं करता जब आप अपना 'लैम्ब्डा' '* args' का समर्थन करना चाहते हैं। दूसरा दृष्टिकोण वहां काम करेगा, लेकिन ... और अधिक काम है :) –
बहुत बुरा मैं दोनों उत्तरों के लिए हरा निशान नहीं दे सकता। मैंने इसे चुना क्योंकि यह वास्तव में पांच साल की तरह कट और पेस्ट करने के लिए सही कोड देता है और मुझे एसओ पर जवाब देने के लिए यह दृष्टिकोण पसंद है। – ubershmekel
हमारे लिए पाइथन में कम से कम अच्छे लोगों के लिए, किसी भी मौके पर आप पहले दृष्टिकोण में किसी एक उदाहरण के लिए 'i' से भिन्न चर का उपयोग कर सकते हैं? – Chowlett