Хорошо. Поэтому я думаю, что вызывает ваше замешательство в том, что функция ничего не возвращает (нет?). Посмотрите на измененную часть ниже, я добавил только оператор return.
def getAnnualSnow(allData):
annualSnow = []
year = allData[0]['year']
totalSnow = 0
for monthData in allData:
if year <= 2012:
if monthData['year'] == year:
totalSnow = totalSnow + monthData['snow']
else:
totalAnnSnow = {'year':year, 'totalsnow':round(totalSnow,1)}
#print(totalAnnSnow)
annualSnow.append(totalAnnSnow)
year = year + 1
totalSnow = 0
else:
return annualSnow
# return annualSnow here!!
return annualSnow
Вещь в зависимости от того, что вы хотите сделать, вы могли бы разворачиваться повсюду. Вы коротко замыкаетесь, возвращая yearSnow, когда year >2012
, но в противном случае вы не возвращаете никаких значений из этой функции. И поскольку вы ничего не печатаете, вы ничего не видите.
Try делает:
x = getAnnualSnow(allData)
print x
type(x)
Учитывая ваш фрагмент кода, похоже, результат должен быть None
(но у меня нет данных, чтобы доказать, что).
EDIT
Имея более внимательно посмотрел на фрагменте кода, это похоже на проблему
year = allData[0]['year']
То, что вы, вероятно, хотите сделать это
year = monthData['year']
просто, прежде чем делать if year <= 2012
сравнение , Потому что, поскольку он стоит, вы всегда сравниваете с годом первой записи до 2012 года, поэтому независимо от того, возвращает ли ваш фрагмент значение, зависит от этого факта. Он никогда не попадет в «главную» часть else
, если он когда-либо попал в «главную» if
. (звучит свернуто, как я читал снова. Надеюсь, это ясно)
, потому что может быть ваша другая часть не выполнена. –
Не могли бы вы вкратце объяснить, что такое данные во всехData? Трудно понять это только из кода. – Tim
скорее ваша другая часть * * выполняется * - это данные, одинаковые для обоих вызовов? – zEro