我写了以下代码:
class FigureOut:
def setName(self, name):
fullname = name.split()
self.first_name = fullname[0]
self.last_name = fullname[1]
def getName(self):
return self.first_name, self.last_name
f = FigureOut()
f.setName("Allen Solly")
name = f.getName()
print (name)
我得到了以下输出:
('Allen', 'Solly')
每当python中的函数返回多个值时,它是否总是将多个值转换为包含多个值的列表,然后从函数中返回它?
整个过程是否与显式地将多个值转换为list
,然后返回列表相同,例如在Java语言中,因为在Java语言中,一个函数只能返回一个对象?
发布于 2016-09-06 17:59:13
由于getName
中的返回语句指定了多个元素
def getName(self):
return self.first_name, self.last_name
Python将返回一个容器对象,该对象基本上包含了它们。
在这种情况下,返回逗号分隔的元素集将创建一个元组。只能在容器内部返回多个值。
让我们使用一个更简单的函数来返回多个值:
def foo(a, b):
return a, b
您可以查看使用dis.dis
生成的字节码,这是一种Python字节码的反汇编程序。对于不带任何括号的逗号分隔值,如下所示:
>>> import dis
>>> def foo(a, b):
... return a,b
>>> dis.dis(foo)
2 0 LOAD_FAST 0 (a)
3 LOAD_FAST 1 (b)
6 BUILD_TUPLE 2
9 RETURN_VALUE
正如您所看到的,这些值首先使用LOAD_FAST
加载到内部堆栈上,然后生成一个BUILD_TUPLE
(获取放置在堆栈上的前一个2
元素)。由于逗号的存在,Python知道创建一个元组。
您也可以使用[]
指定另一种返回类型,例如list。在这种情况下,将按照与元组等效的相同语义发出BUILD_LIST
:
>>> def foo_list(a, b):
... return [a, b]
>>> dis.dis(foo_list)
2 0 LOAD_FAST 0 (a)
3 LOAD_FAST 1 (b)
6 BUILD_LIST 2
9 RETURN_VALUE
返回的对象类型实际上取决于括号的存在(对于元组,如果至少有一个逗号,则可以省略()
)。[]
创建列表和{}
集。字典需要key:val
对。
总而言之,返回一个实际的对象。如果对象是容器类型,它可以包含多个值,给人以返回多个结果的印象。通常的方法是直接解包:
>>> first_name, last_name = f.getName()
>>> print (first_name, last_name)
顺便说一句,您的Java方法正在泄漏到Python中:-)
在Python中编写类时,不要使用getters,而要使用properties
。属性是管理属性的惯用方法,有关这些属性的更多信息,请参阅不错的答案here。
发布于 2016-09-06 18:13:06
在这里,它实际上是返回tuple
。
如果在Python 3中执行以下代码:
def get():
a = 3
b = 5
return a,b
number = get()
print(type(number))
print(number)
输出:
<class 'tuple'>
(3, 5)
但是,如果您更改代码行return [a,b]
而不是return a,b
并执行:
def get():
a = 3
b = 5
return [a,b]
number = get()
print(type(number))
print(number)
输出:
<class 'list'>
[3, 5]
它只返回包含多个值的单个对象。
对于返回多个值的return
语句,还有另一种替代方法,使用yield
(要查看详细信息,请参阅此What does the "yield" keyword do in Python?)
示例:
def get():
for i in range(5):
yield i
number = get()
print(type(number))
print(number)
for i in number:
print(i)
输出:
<class 'generator'>
<generator object get at 0x7fbe5a1698b8>
0
1
2
3
4
发布于 2016-09-06 18:00:04
Python函数总是返回唯一的值。逗号运算符是元组的构造函数,因此self.first_name, self.last_name
的计算结果是一个元组,而该元组是函数返回的实际值。
https://stackoverflow.com/questions/39345995
复制相似问题