我写了以下代码:
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 中只能从函数返回一个对象?
原文由 User_Targaryen 发布,翻译遵循 CC BY-SA 4.0 许可协议
由于
getName
中的返回语句指定 _了多个元素_:Python 将返回一个基本上包含它们的容器对象。
在这种情况下,返回一组以 逗号分隔 的元素会创建 _一个元组_。 只能在容器内返回 多个值。
让我们使用一个返回多个值的更简单的函数:
您可以查看使用
dis.dis
生成的字节码,它是 Python 字节码的反汇编程序。对于没有任何括号的逗号分隔值,它看起来像这样:正如您所看到的,这些值首先加载到内部堆栈上
LOAD_FAST
然后是BUILD_TUPLE
(抓住前面的2
生成的元素放在堆栈上) .由于存在逗号,Python 知道创建一个元组。您也可以使用
[]
指定另一个返回类型,例如列表。对于这种情况,aBUILD_LIST
将按照与元组等效的相同语义发布:返回的对象类型实际上取决于括号的存在(对于元组
()
如果至少有一个逗号,则可以省略)。[]
创建列表和{}
集合。字典需要key:val
对。总而言之, _返回一个实际对象_。如果该对象是容器类型,它可以包含多个值,给人以返回多个结果的印象。通常的方法是直接解压它们:
除了这一切,您的 Java 方式正在泄漏到 Python 中 :-)
在 Python 中编写类时不要使用 getter,使用
properties
。属性是管理属性的惯用方式,有关这些的更多信息,请在 此处 查看一个很好的答案。