Функция return в python

Всем привет! У меня есть код, который бежит по диапазону строк, при этом выкидывая None. Если не использовать return и def, то все работает отлично, но я не могу забрать полученные значения из функции в дальнейший код. Пример:

for i in range(19, 24):
    model_name = (sheet.cell(row=i, column=2).value)
    if model_name != None:
        print(model_name)

Вывод:

Значение 1 
Значение 2 
...

Решил попробовать использовать def + return, но при этом получается, что забирается только первое значение из range. Пример:

def MD():
    for i in range(19, 24):
        model_name = (sheet.cell(row=i, column=2).value)
        if model_name != None:
            return model_name

model_name = MD()
print(model_name)

Вывод:

Значение 1 

Вопрос: Как сделать так, чтобы я смог вытащить все значения из функции в "глобальный" код, т.е. за ее пределы? Спасибо всем заранее!

P.S. Так же необходимо отсеивать None


Ответы (2 шт):

Автор решения: nomnoms12

Возвращайте список.

Пример:

def md():
    result = []

    for i in range(19, 24):
        model_name = sheet.cell(row=i, column=2).value
        if model_name is not None:
            result.append(model_name)
    return result

→ Ссылка
Автор решения: CrazyElf

Можно обойтись и без промежуточного списка, если использовать оператор yield, с помощью которого можно вернуть из функции сколько угодно значений (включая бесконечное количество значений):

def get_models():
    for i in range(19, 24):
        model_name = (sheet.cell(row=i, column=2).value)
        if model_name is None:
            yield model_name

for model_name in get_models():
    print(model_name)
→ Ссылка