Почему я не получаю тот же результат? Разве два кода не обозначают одно и то же? - PullRequest
0 голосов
/ 19 июня 2020

Почему я не получаю тот же результат? Разве два кода не обозначают одно и то же?

Версия 1

def fun(arg):
    for i in range(0,arg+1):
        return (f'{i}  :  {i**3}')

print(fun(10))

Версия 2

def fun(arg):
    value = {}
    for i in range(0,arg+1):
        value[i] = i ** 3
    return value

print(fun(10))

Ответы [ 4 ]

1 голос
/ 19 июня 2020

В первом фрагменте вы возвращаетесь из внутри for l oop, преждевременно завершая его и возвращая строку, отформатированную с помощью i = 0.

Во втором фрагменте , вы накапливаете результаты в словаре и возвращаете словарь только после завершения l oop.

0 голосов
/ 19 июня 2020

Итак, проблема в том, что любой l oop заканчивается, когда он находит ключевое слово return, если вы хотите сделать то же самое в одной строке, вам придется использовать понимание dict:

def fun(arg):
    return {i: i**3 for i in range(0, arg+1)}
0 голосов
/ 19 июня 2020

Чтобы узнать, почему это не работает, вам нужно знать тот факт, что return останавливает for l oop или любой тип l oop.

Итак, в вашем первом случае возврат остановится на первой итерации, которая i = 0, и вернет 0: 0.

Во втором случае вы сохраняете свои значения в переменной value и, делая это, когда вы возвращаете значение, вы возвращаете весь набор, который прошел для l oop, который составляет от 0 до 10.

0 голосов
/ 19 июня 2020

Нет, это не одно и то же, в первом коде значение будет возвращено на самой первой итерации.

В то время как во втором коде все значения агрегируются, а затем возвращаются.

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