समस्या को साइड-चरण क्यों नहीं?
def square(vals):
return [v*v for v in vals]
संपादित करें: पहली समस्या, के रूप में कई लोगों ने बताया है, कि तुम शॉर्ट-सर्किट रहे हैं अपने for
पाश है। लूप के बाद आना चाहिए, इसमें नहीं।
अगली समस्या list.append
का उपयोग है - आपको इसे कॉल करने की आवश्यकता है, इसे निर्दिष्ट नहीं करें, यानी result.append(y*y)
। result.append = y*y
इसके बजाय विधि को एक संख्यात्मक मान के साथ ओवरराइट करता है, संभवतः अगली बार जब आप इसे कॉल करने का प्रयास करते हैं तो एक त्रुटि फेंक देते हैं।
एक बार जब आप यह है कि ठीक है, तो आप एक और कम स्पष्ट त्रुटि मिलेगा होती है, तो आप बार-बार अपने फ़ंक्शन को कॉल करें:
print(square([1,2,3]) # => [1, 4, 9]
print(square([1,2,3]) # => [1, 4, 9, 1, 4, 9]
क्योंकि आप एक डिफ़ॉल्ट के रूप में एक अस्थायी मद (एक सूची), यह सब आगे उपयोग के पारित डिफ़ॉल्ट आइटम बिंदु पर एक ही मूल सूची पर वापस आती है।
इसके बजाय,
def square(vals, result=None):
if result is None:
result = []
result.extend(v*v for v in vals)
return result
स्रोत
2016-01-31 23:05:44
1. परिवर्तनीय डिफ़ॉल्ट तर्क न बनाएं। 2. आप केवल एक बार 'वापसी' कर सकते हैं। – jonrsharpe
फिर मैं आउटपुट के रूप में एक सरणी कैसे वापस कर सकता हूं। क्या आप मुझे कोई विचार दे सकते हैं? धन्यवाद –
लूप के लिए वापसी को बाहर लाएं। –