什么是打印和返回之间的实际差异

时间:2017-07-14 22:19:39

标签: python python-3.x

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

def tech(arg):
    for te in arg.values():
        return(te)
print(tech({'Andrew Chalkley': ['jQuery Basics', 'Node.js Basics'],
  'Kenneth Love': ['Python Basics', 'Python Collections']}))

5 个答案:

答案 0 :(得分:2)

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

另一方面,

print 功能 。它将简单地将其参数打印到 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
>>> 

为了完整起见,以下是在示例代码中使用yield的方法:

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

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

编辑:由于您似乎使用的是Python 3.3或更高版本,因此您可以使用语法中的yield。这样您就可以将生成器转换为平面列表:

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也可以在给定正确的关键字参数的情况下写入其他地方。但我避免提及这一点,因为这会分散我的注意力。

答案 1 :(得分:1)

如果从其他地方调用该函数,如同另一个函数或仅从终端调用该函数,则返回语句将允许您将返回值存储在变量中。打印只是将打印功能中给出的输入显示到您调用技术功能的终端

答案 2 :(得分:1)

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

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

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

您的代码包含两个主要块: 1.定义一个函数'tech' 2.打印调用函数'tech'

的结果

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

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