Python 中的结构化绑定

Bla*_*urd 4 c++ python

C++17 引入了新的结构化绑定语法:

std::pair<int, int> p = {1, 2};
auto [a, b] = p;
Run Code Online (Sandbox Code Playgroud)

python3中有类似的东西吗?我正在考虑使用“splat”运算符将类变量绑定到一个列表,该列表可以解压并分配给多个变量,如下所示:

class pair:
    def __init__(self, first, second):
        self.first = first
        self.second = second
...

p = pair(1, 2)
a, b = *p
Run Code Online (Sandbox Code Playgroud)

这可能吗?如果是这样,我将如何实现它来为我自己的班级工作?

Python 中的元组可以作为此问题的简单解决方案。但是,内置类型在实现其他类方法时没有提供太大的灵活性。

Qui*_*mby 6

是的,您可以使用__iter__方法,因为迭代器也可以解包:

class pair:
    def __init__(self, first, second):
        self.first = first
        self.second = second
    def __iter__(self):
        # Use tuple's iterator since it is the closest to our use case.
        return iter((self.first, self.second))

p = pair(1, 2)
a, b = p
print(a, b) # Prints 1 2
Run Code Online (Sandbox Code Playgroud)

  • `yield self.first` `yield self.second` 可能是一个不错的选择。 (2认同)