Унаследованная функция возвращает None [duplicate]

Вот еще одно решение: https://github.com/ithkuil/angular-on-server

wiki для получения дополнительной информации

29
задан Aran-Fey 11 April 2018 в 00:01
поделиться

4 ответа

Он возвращает None, потому что, когда вы рекурсивно называете это:

if my_var != "a" and my_var != "b":
    print  "You didn't type \"a\" or \"b\".  Try again."
    print " "
    Dat_Function()

.. вы не возвращаете значение.

Итак, во время рекурсии возвращаемое значение отбрасывается, а затем вы отваливаетесь от конца функции. Падение конца функции означает, что python неявно возвращает None, как это:

>>> def f(x):
...     pass
>>> print(f(20))
None

Итак, вместо того, чтобы просто вызывать Dat Function() в вашем if, вам нужно return это.

47
ответ дан roippi 15 August 2018 в 14:33
поделиться
  • 1
    Не следует ли повторять это утверждение if, если он называется рекурсивно? Я не понимаю, почему это не вернет значение. – Cate 22 July 2013 в 01:35
  • 2
    Неа. См. Мое редактирование. Рекурсия происходит, а затем вы отказываетесь от возвращаемой рекурсии. – roippi 22 July 2013 в 01:38
  • 3
    Поэтому, если вы вызываете функцию из той же функции, возвращаемое значение отбрасывается, но вы возвращаете ту же функцию в этой функции, которую вы действительно просто вызываете в main()? – Cate 22 July 2013 в 01:49
  • 4
    Вы потеряли меня с этим main() битом ... Вы можете терпеть неудачу столько раз, сколько хотите, то, что «успешно», вернет my_var, который будет передан (return ed) через все рекурсивные вызовы вплоть до исходного вызывающего. Который, да, main(). – roippi 22 July 2013 в 01:54
  • 5
    Я думал, что когда вы return Dat_Function(), вы действительно просто вызываете Dat_Function() снова в main(). Dat_Function() теперь возвращает функцию, и main() перешел на вызов. – Cate 22 July 2013 в 01:58

Я думаю, что вы должны использовать в то время как циклы .

, если my_var! = "a" и my_var! = "b": print "Вы не типа \ "a \" или \ "b \". Повторите попытку. " print "" return Dat_Function ()

Учтите, что вы вводите что-то другое, чем «a» и «b», конечно, оно назовет Dat_Function, но затем пропустит следующую часть , Что это:

else: print my_var, "-from Dat_Function" return my_var

И перейдет непосредственно в:

def main (): print Dat_Function (), "-From main ()"

Итак, если вы используете while loop как:

while my_var! = "a" и my_var! = "b": print ('вы не написали a или b') return Dat_Function ()

Таким образом, я думаю, что вы можете обращаться Это.

-1
ответ дан asylturatbek dooranov 15 August 2018 в 14:33
поделиться
def Dat_Function():
    my_var = raw_input("Type \"a\" or \"b\": ")

    if my_var != "a" and my_var != "b":
        print  "You didn't type \"a\" or \"b\".  Try again."
        print " "
        return Dat_Function()
    else:
        print my_var, "-from Dat_Function"
        return my_var


def main():
    print Dat_Function(), "-From main()"

main()
3
ответ дан gonz 15 August 2018 в 14:33
поделиться

Чтобы вернуть значение, отличное от None, вам нужно использовать оператор return.

В вашем случае блок if выполняет только возврат при выполнении одной ветви. Либо переместите return вне блока if / else, либо верните оба параметра.

6
ответ дан Simon 15 August 2018 в 14:33
поделиться
  • 1
    Я попытался вытащить его из блока, но безрезультатно. Вместо того, чтобы возвращать правильное значение, оно возвращает первое неправильное значение. Кроме того, мне не нужен оператор return для if if-инструкции if, потому что я хочу, чтобы функция возвращала только правильное значение. – Cate 22 July 2013 в 01:39
Другие вопросы по тегам:

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