Как получить значение из рекурсивного вызова с использованием запроса к данным

Поскольку, как вы сказали, статические поля не связаны с экземпляром.

Возможность доступа к статическим полям из ссылки экземпляра (как вы это делаете) является просто синтаксическим сахаром и не имеет дополнительных имея в виду. Ваш код компилируется в

main.getNull(); 
Main.value
1
задан Haraldur Pálsson 5 March 2019 в 16:58
поделиться

1 ответ

Пожалуйста, добавьте пример данных к своему вопросу.

В вашем коде:

    if retVal.empty:
        dayEc = dayEc-1
        checkExchangerate(yearEc,monthEc,dayEc,currCode)
    else:
        return min(retVal)

Если retVal пуст, он будет рекурсивно вызывать себя. Но когда он выходит из рекурсии, он ничего не делает с возвращаемым значением, поэтому он возвращает None.

Чтобы это исправить, вы должны return значение, возвращаемое из рекурсии:

    if retVal.empty:
        dayEc = dayEc-1
        return checkExchangerate(yearEc,monthEc,dayEc,currCode)
    else:
        return min(retVal)

Также вы можете заменить:

        dayEc = dayEc-1
        return checkExchangerate(yearEc,monthEc,dayEc,currCode)

на

[113 ]

Однако вместо рекурсии я рекомендую использовать цикл:

def checkExchangerate(yearEc,monthEc,dayEc,currCode):
    currCodes = {...}
    retVal = False
    while not retVal or retVal.empty:
        retVal = exch_rate[currCodes[currCode]][exch_rate['DAGS']==dt(yearEc,monthEc,dayEc)]
        dayEc -= 1
        print(retVal)
    return min(retVal)

Это может вызвать бесконечный цикл (так же, как ваш код может вызвать бесконечную рекурсию), поэтому вот версия с циклом for: [ 1117]

def checkExchangerate(yearEc,monthEc,dayEc,currCode):
    currCodes = {...}
    retVal = False
    for day in range(dayEc, dayEc-20, -1):
        retVal = exch_rate[currCodes[currCode]][exch_rate['DAGS']==dt(yearEc,monthEc,day)]
        if not retVal.empty:
           break;
        print(retVal)
    if retVal.empty:
        return some_error_code
    else:
        return min(retVal)

Вы можете изменить 20 на другое число. Или используйте range(dayEc, 1, -1) - как я подозреваю, этот день никогда не должен быть меньше 1

0
ответ дан Granny Aching 5 March 2019 в 16:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: