Как вернуть None?

#python #return #nonetype

#python #Возврат #nonetype

Вопрос:

 def where_is_waldo(names):

    if "Waldo" in names:
        return names.index("Waldo")
    else:
        return None
  
 where_is_waldo(["Peter", "Waldo", "John"])
  

возвращает 1, но почему

 where_is_waldo(["Peter", "John"])
  

не вернуть None ? Он просто ничего не возвращает…
Я знаю, что
print(where_is_waldo(["Peter", "John"]))
вернет None , но мне любопытно, как это сделать без print инструкции

Комментарии:

1. Возврат None отображается как возврат nothing с помощью REPL. То, что делает ваша печать, — это печать None , которая отличается от возврата None .

2. @CharlesDuffy да, следует отметить, что это функция, специально разработанная REPL

Ответ №1:

Он возвращает None.

 def where_is_waldo(names):
    if "Waldo" in names:
        return names.index("Waldo")
    else:
        return None
        
listNames = ["Peter", "John"]
index = where_is_waldo(listNames)
if index is None:
    print("Waldo is not present")
else:
    print("Waldo is present at index ", index)
  

Вывод:

 Waldo is not present
  

Обновление: Благодаря предложению Маттиаса о переходе index == None на index is None .

Ответ №2:

Когда вы возвращаетесь None , буквально ничего не отображается из-за реализации __repr__ в None объекте. Таким образом, вы не получите ничего для отображения.

Комментарии:

1. «буквально нет ничего для отображения» нет, не совсем. Это особенность REPL, но print(None) печатает None