根据后缀从函数返回不同的值

时间:2014-10-16 17:04:57

标签: python tuples

类似于一个类,但也应该在一个类中工作。我不确定是否可行,并且不确定要搜索的关键字是否正确,如果已经有答案,请致歉。

例如,我的意思是这样 -

def location():
    x = 5
    y = 0
    z = 0
    return x,y,z

然后输入location()。x,你就得到了数字5.在我看来,使用location().x代替location()[0]要好得多。

编辑:我问这种方式而不是课,因为你可能想把它放在课堂里,比如objectInfo( object ).getLocation().x

3 个答案:

答案 0 :(得分:5)

使用collections.namedtuple

>>> from collections import namedtuple
>>>
>>> XYZ = namedtuple('XYZ', ['x', 'y', 'z'])
>>>
>>> def location():
...     return XYZ(5, 0, 0)
...
>>> location().x
5

使用namedtuple,您仍然可以使用索引[..]

来访问这些值
>>> location()[0]
5

<强>更新

如果您使用Python 3.3+,您还可以使用types.SimpleNamespace

>>> from types import SimpleNamespace
>>> def location():
...     return SimpleNamespace(x=5, y=0, z=0)
...
>>> location().x
5

否则,请使用以下课程(来自上述SimpleNamespace链接):

class SimpleNamespace:
    def __init__(self, **kwargs):
        self.__dict__.update(kwargs)
    def __repr__(self):
        keys = sorted(self.__dict__)
        items = ("{}={!r}".format(k, self.__dict__[k]) for k in keys)
        return "{}({})".format(type(self).__name__, ", ".join(items))
    def __eq__(self, other):
        return self.__dict__ == other.__dict__

答案 1 :(得分:1)

您可以使用"bunch"

>>> class Bunch(object):
...     def __init__(self, **kwargs):
...             self.__dict__.update(kwargs)
... 
>>> def location():
...     return Bunch(x=5, y=0, z=0)
... 
>>> location().x
5
>>> location().y
0
>>> 

答案 2 :(得分:0)

您可以将其作为矩阵

def(x,y,z): X = 1 Y = 7 Z = 10`` 返回A = [x,y,z]

然后你就可以用这种方式拿A [1]换x。 我理解我的意思,这是一种将变量放在一系列

中的方法