如何改变python列表索引的语法?

Sco*_*God 1 python indexing syntax list python-3.x

在提出这个问题之后,它收到了关于你如何做这样的事情的评论:

>>> def a(n):
        print(n)
        return a
>>> b = a(3)(4)(5)
3
4
5
Run Code Online (Sandbox Code Playgroud)

是否可以使用这个或类似的概念来索引列表my_list(n)而不是my_list[n]

Mar*_*ers 5

您必须使用自定义类,并为其提供一种__call__特殊方法以使其可调用.list这里的子类很好用:

class CallableList(list):
    def __call__(self, item):
        return self[item]
Run Code Online (Sandbox Code Playgroud)

您不能使用它来分配索引,但只有项目访问才有效.切片需要您用来创建一个slice()对象:

a = CallableList([1, 2, 3])
a(2)
a(slice(None, 2, None))

nested = CallableList([1, 2, CallableList([4, 5, 6])])
nested(2)(-1)
Run Code Online (Sandbox Code Playgroud)

除此之外,您还必须创建一个自定义Python语法解析器来构建AST,然后从那里编译为字节码.