这是我的代码。我想从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']}))
答案 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的结果并打印它(仅包含第一个参数)