Python 为什么我得不到同样的结果?这两个代码不是表示相同的东西吗?

Python 为什么我得不到同样的结果?这两个代码不是表示相同的东西吗?,python,dictionary,Python,Dictionary,为什么我得不到同样的结果?这两个代码不是表示相同的东西吗 版本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))

为什么我得不到同样的结果?这两个代码不是表示相同的东西吗

版本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))

在第一个代码段中,从for循环内部返回,提前终止它并返回一个i=0格式的字符串


在第二个代码段中,将结果累加到字典中,并仅在循环完成后返回字典。

不,这不是一回事,在第一个代码中,值将在第一次迭代本身返回


在第二段代码中,所有值都被聚合,然后返回。

要知道它为什么不起作用,您需要知道,对于循环或任何类型的循环,返回都会停止

因此,在第一种情况下,返回将在第一次迭代时停止,即i=0,并返回0:0


在第二种情况下,您将值存储到变量值中,通过在返回值时这样做,您将返回for循环经过的整个集合,即0到10。

因此,问题是任何循环在找到return关键字时结束,如果你想在一行上做同样的事情,你必须使用听写理解:

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

你从版本1和版本2得到了什么?为了回答这个问题,我们需要知道它们有什么不同。答案很简单,因为一旦你的函数点击一个返回命令,它就会退出这个函数。版本1告诉您的函数在第一次迭代时退出,而版本2告诉您的函数在收集完所有值后返回。您可以看到版本2返回一个字典,而版本1根本没有字典。你怎么能期望这些代码能提供相同的结果?