Почему бы не устранить проблему в целом?
def square(vals):
return [v*v for v in vals]
Edit: Первая проблема, так как несколько людей указали, что вы короткое замыкание вашего for
цикла. Ваш return
должен прийти после петля, а не в нее.
Следующая проблема заключается в использовании вами 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
1. Не делайте изменчивые аргументы по умолчанию. 2. Вы можете только «вернуть» один раз. – jonrsharpe
Тогда как я могу вернуть массив в качестве вывода. Можете ли вы дать мне какие-либо идеи? Спасибо –
Принесите возврат из цикла for. –