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

Pet*_*ter 0 python tuples

有点类似于类,但也应该在类中工作.我不确定是否可能,并且不确定要搜索的正确关键字,所以如果已经有答案就道歉.

例如,我的意思是这样的 -

def location():
    x = 5
    y = 0
    z = 0
    return x,y,z
Run Code Online (Sandbox Code Playgroud)

然后输入location().x,你就得到了数字5.使用location().x而不是location()[0]在我看来它会更好.

编辑:我要求的是这种方式而不是类,因为你可能想把它放在一个类中,比如 objectInfo( object ).getLocation().x

fal*_*tru 5

使用collections.namedtuple:

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

使用namedtuple,您仍然可以使用索引访问值[..]:

>>> location()[0]
5
Run Code Online (Sandbox Code Playgroud)

UPDATE

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

>>> from types import SimpleNamespace
>>> def location():
...     return SimpleNamespace(x=5, y=0, z=0)
...
>>> location().x
5
Run Code Online (Sandbox Code Playgroud)

否则,请使用以下类(来自上面的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__
Run Code Online (Sandbox Code Playgroud)

  • @Peter,是的,你应该在使用之前定义它.或者,如果使用Pyhton 3.3+,则可以使用`types.SimpleNamespace`:`from types import SimpleNamespace; ....返回SimpleNamespace(x = 5,y = 0,z = 0)` (2认同)