Python:使用经过修改的语法访问n维列表中的元素

Python:使用经过修改的语法访问n维列表中的元素,python,list,python-3.x,syntax,indexing,Python,List,Python 3.x,Syntax,Indexing,询问之后,我扩展了已接受的答案,使其适用于二维列表: class List(list): def __call__(self, i): def call(j): return self[i][j] return call class List(list): def __call__(self, i): def call2(j): def call3(k):

询问之后,我扩展了已接受的答案,使其适用于二维列表:

class List(list):
    def __call__(self, i):
        def call(j):
            return self[i][j]
        return call
class List(list):
    def __call__(self, i):
        def call2(j):
            def call3(k):
                return self[i][j][k]
            return call3
        return call2
和三维列表:

class List(list):
    def __call__(self, i):
        def call(j):
            return self[i][j]
        return call
class List(list):
    def __call__(self, i):
        def call2(j):
            def call3(k):
                return self[i][j][k]
            return call3
        return call2

但是如何为n维列表实现此类呢?

如果索引值本身是一个:

这确保了可以用
[…]
索引语法处理的任何内容现在也可以用
(…)
调用语法处理

我免除了弦;这些也是序列,但您可能不想将其扩展到这些值

演示:


如果索引值本身是一个:

这确保了可以用
[…]
索引语法处理的任何内容现在也可以用
(…)
调用语法处理

我免除了弦;这些也是序列,但您可能不想将其扩展到这些值

演示:


从上一个表达式返回对象后应用调用。您无法预先知道是否将调用返回值。例如,您可以使用“将
列表(2)
结果存储在某处”,然后决定稍后调用它,或者根本不调用它。从上一个表达式返回对象后,将应用调用。您无法预先知道是否将调用返回值。例如,您可以将
列表(2)
结果存储在某个地方,然后决定稍后调用它,或者根本不调用。这将把字符串转换为
列表
s,这可能是预期的行为,也可能不是预期的行为。@SvenMarnach:刚刚得出了相同的结论,已经更新。@SvenMarnach:我正在测试代码,发现我忘记了
基串
已被删除:-P@eryksun:还有
range()
。这一切都归结为一个选择,即您希望调用语法应用于什么。现在,在索引列表时,我将始终使用此方法。这样,任何阅读我的代码的人都将非常清楚地了解正在发生的事情。这可能会使Malbolge程序员更容易阅读我的代码:这会将字符串转换为
List
s,这可能是预期的行为,也可能不是预期的行为。@SvenMarnach:刚刚得出相同的结论,已经更新。@SvenMarnach:我在测试代码时发现我忘记了
basestring
-P@eryksun:还有
range()
。这一切都归结为一个选择,即您希望调用语法应用于什么。现在,在索引列表时,我将始终使用此方法。这样,任何阅读我的代码的人都将非常清楚地了解正在发生的事情。这可能会让Malbolge程序员更容易阅读我的代码: