Python 什么';打印和返回之间的实际差异是多少

Python 什么';打印和返回之间的实际差异是多少,python,python-3.x,Python,Python 3.x,这是我的密码。我想从python dict中获取每个键的值。因此,当我在函数中使用print时,它工作正常,但当我在函数中使用return时,它只返回任何一个值,而不是全部值。那么,如何使用return()获取所有值呢 如果您从其他地方调用该函数,比如从另一个函数调用,或者仅从终端调用,则return语句将允许您将返回值存储在变量中。Print只是将Print函数中给出的输入显示到您调用tech函数的终端如果您从其他地方调用函数,如从另一个函数或仅从终端调用函数,则return语句将允许您将返回

这是我的密码。我想从python dict中获取每个键的值。因此,当我在函数中使用
print
时,它工作正常,但当我在函数中使用
return
时,它只返回任何一个值,而不是全部值。那么,如何使用
return()
获取所有值呢


如果您从其他地方调用该函数,比如从另一个函数调用,或者仅从终端调用,则return语句将允许您将返回值存储在变量中。Print只是将Print函数中给出的输入显示到您调用tech函数的终端

如果您从其他地方调用函数,如从另一个函数或仅从终端调用函数,则return语句将允许您将返回值存储在变量中。Print(打印)只是将打印功能中给出的输入显示到您调用技术功能的终端,因为当到达时,
return
语句将终止该功能。要获得您想要的行为,只需将其重写为

def tech(arg):
  return arg.values():

因为当到达时,
return
语句将终止函数。要获得您想要的行为,只需将其重写为

def tech(arg):
  return arg.values():

return
终止(结束)它所在的函数,无论从何处调用它,都会收到它返回的值

因此,在代码中:循环开始,它点击
return
语句,因此它结束函数(并结束循环),只返回它所在的第一个元素。然后调用函数的
print
语句将只打印一个元素,就是它

另一方面,如果将
返回
替换为
打印
,则函数不会过早终止,因此循环将遍历所有值并打印它们



在某种程度上,您的想法是将函数转换为迭代器。尝试用
yield
替换
return
,看看会发生什么,然后阅读python文档中的迭代器和
yield

return
终止(结束)它所在的函数,无论从何处调用它,都会收到它返回的值

因此,在代码中:循环开始,它点击
return
语句,因此它结束函数(并结束循环),只返回它所在的第一个元素。然后调用函数的
print
语句将只打印一个元素,就是它

另一方面,如果将
返回
替换为
打印
,则函数不会过早终止,因此循环将遍历所有值并打印它们



在某种程度上,您的想法是将函数转换为迭代器。尝试用
yield
替换
return
,看看会发生什么,然后阅读python文档中的迭代器和
yield

您的代码由两个主要块组成: 1.定义函数“tech” 2.打印调用函数“tech”的结果

在函数tech中有一个“for te in arg.values()”循环。循环使用第一个值初始化,循环遇到“return”语句,该语句强制从函数“tech”返回当前值。循环被中止


print函数接收函数tech的结果并打印它(仅包含第一个参数)

您的代码由两个主要块组成: 1.定义函数“tech” 2.打印调用函数“tech”的结果

在函数tech中有一个“for te in arg.values()”循环。循环使用第一个值初始化,循环遇到“return”语句,该语句强制从函数“tech”返回当前值。循环被中止

print函数接收函数tech的结果并打印它(仅包含第一个参数)

返回
是一个语句;句法结构。它将控件和可选值返回给函数的调用方。换句话说,它终止一个函数。这就是为什么
tech
只返回一个项目的原因;在for循环的第一次迭代之后,您立即将控制和
te
的值返回到调用
tech
的位置

打印
另一方面是一种功能。它只需将其参数打印到1标准输出。在本例中,您循环遍历
arg.values()
中的所有值,并通过
print
打印它们。完成后,函数隐式返回
None
并结束

您似乎想要的是一个生成器。生成器基本上是一个可以返回多个值的函数。您可以使用
yield
关键字执行此操作:

>>> def gen():
    for n in [1, 2, 3]:
        yield n


>>> # gen returns a generator object. We can call this objects

>>> # __next__ method via next() to retrieve the next value from it.
>>> gen_obj = gen()
>>> next(gen_obj)
1
>>> next(gen_obj)
2
>>> next(gen_obj)
3
>>> next(gen_obj)
Traceback (most recent call last):
  File "<pyshell#25>", line 1, in <module>
    next(gen_obj)
StopIteration
>>> 
编辑:由于您似乎正在使用Python 3.3或更高版本,因此可以使用“从语法中产生”命令。这将允许您将生成器转换为平面列表:

def tech(arg):
    for te in arg.values():
        yield from te

print(list(tech({'Andrew Chalkley': ['jQuery Basics', 'Node.js Basics'],
  'Kenneth Love': ['Python Basics', 'Python Collections']})))

1从技术上讲,
print
也可以在给定正确关键字参数的情况下写入其他位置。但我避免提及这一点,因为这会分散我的注意力。

return
是一个语句;句法结构。它将控件和可选值返回给函数的调用方。换句话说,它终止一个函数。这就是为什么
tech
只返回一个项目的原因;在for循环的第一次迭代之后,您立即将控制和
te
的值返回到调用
tech
的位置

打印
另一方面是一种功能。它只需将其参数打印到1标准输出。在本例中,您循环遍历
arg.values()
中的所有值,并通过
print
打印它们。完成后,函数隐式返回
None
并结束

你看起来怎么样
def tech(arg):
    for te in arg.values():
        yield from te

print(list(tech({'Andrew Chalkley': ['jQuery Basics', 'Node.js Basics'],
  'Kenneth Love': ['Python Basics', 'Python Collections']})))