Python: - Вернуть None после оператора else и не использовать else имеют разные эффекты? - PullRequest
0 голосов
/ 19 октября 2018

Итак, я немного поработал с модулем pygal.maps.world, и у меня возник вопрос, касающийся операторов Return none за else и вообще не использовал else.

Например:

from pygal.maps.world import COUNTRIES


def get_country_code(country_name):
  for code, name in COUNTRIES.items():
    if name == country_name:
        return code
    else:
        return None


print(get_country_code('United Arab Emirates'))

Это напечатает Нет, но если я сделаю следующее:

from pygal.maps.world import COUNTRIES


def get_country_code(country_name):
  for code, name in COUNTRIES.items():
    if name == country_name:
        return code

  return None


print(get_country_code('United Arab Emirates'))

Распечатает правильный код страны, может кто-нибудь объяснить, почему?Разве код не должен действовать одинаково независимо от оператора else или нет?

Еще одна вещь, которую я обнаружил, была при запуске первого блока кода и попытке получить код страны Андорры, мне действительно удалось получитьправильный код страны, любая другая страна не работает.Что здесь происходит?

Редактировать: - Спасибо за ответы, знал, что это было довольно очевидно, должен был подумать об этом немного больше.

Ответы [ 3 ]

0 голосов
/ 19 октября 2018

Этот цикл запускается только один раз с условием else.Он проверяет только одно имя в элементах и, если оно не совпадает с именем страны, возвращает None.

def get_country_code(country_name):
  for code, name in COUNTRIES.items():
    if name == country_name:
        return code
    else:
        return None #it returns in the first does not match condition

Однако второй цикл выполняется до конца элементов.Затем он находит название страны и возвращает его

0 голосов
/ 19 октября 2018

Здесь, в приведенном ниже коде, ваш блок else находится внутри цикла for, поэтому, если он не удовлетворяет условию, он переходит к другой части и возвращает «None» и разрывы цикла

  for code, name in COUNTRIES.items():
    if name == country_name:
        return code
    else:
        return None

Но для кода нижеон возвращает «код», если страна найдена, и не прерывается до последнего элемента COUNTRIES

def get_country_code(country_name):
  for code, name in COUNTRIES.items():
    if name == country_name:
        return code

  return None
0 голосов
/ 19 октября 2018

В первом примере вы проверяете для каждого элемента правильное имя.Но если это не так, вы немедленно выходите из функции, заставляя цикл for не проверять другие элементы в массиве.

Во втором примере вы проверяете, имеет ли элемент правильное имя, если это выверните код.Но если ни один из элементов не совпадает, вы возвращаете None.В этом разница.

...