Понимание списка в Python выходах Нет для оценки строки функции - PullRequest
1 голос
/ 30 апреля 2020

Попытка передать список в Python через функцию, которую я определил, однако, когда я запускаю код, я получаю 'None' в качестве вывода.

Для воспроизводимости я буду использовать простой пример в который я хочу сделать все слова в верхнем регистре строки.

def upcase(x):
    print(x.upper())

upcase("word")

Это, конечно, дает:

WORD

Но теперь, если я попытаюсь применить свою функцию ко всей строке, как в следующем:

randoms = ['chicken', 'window', 'carpet', 'lampshade', 'crosswalk']

randoms_upcased = [upcase(x) for x in randoms]
print(randoms)
print(randoms_upcased)

Я получаю:

CHICKEN
WINDOW
CARPET
LAMPSHADE
CROSSWALK
['chicken', 'window', 'carpet', 'lampshade', 'crosswalk']
[None, None, None, None, None]

В то время как результат, который я желаю, таков:

['chicken', 'window', 'carpet', 'lampshade', 'crosswalk']
['CHICKEN', 'WINDOW', 'CARPET', 'LAMPSHADE', 'CROSSWALK']

Возможно ли это? Любая помощь с благодарностью получена.

Ответы [ 4 ]

6 голосов
/ 30 апреля 2020

Ваша функция upcase печатает результат, но ничего не возвращает. Поскольку вы не указываете возвращаемое значение, по умолчанию возвращается None. Вы хотите добавить явное возвращение:

def upcase(x):
    x = x.upper()
    print(x)
    return x
2 голосов
/ 30 апреля 2020

Я думаю, это потому, что функция upcase (s) создана для того, чтобы просто печатать строку s в верхнем регистре, но она ничего не возвращает. Это должно работать, если вы возвращаете строку верхнего регистра из функции.

1 голос
/ 30 апреля 2020

Сначала сохраните результат в другом списке (z), затем верните (z) в функцию:

def upcase(x):
    z = ([y.upper() for y in x])
    return z
l1 = ['chicken', 'window', 'carpet', 'lampshade', 'crosswalk']
upcase(l1)

вывод:

['CHICKEN', 'WINDOW', 'CARPET', 'LAMPSHADE', 'CROSSWALK']
1 голос
/ 30 апреля 2020

Вам нужно вернуть строку, которую вы печатаете.

Это должно работать:

def upcase(x):
    return (x.upper())
...