This would not work, you will obtain something like ‘Overflow when unpacking long’ (because params is pointing to un-initialized values that are too long to be translated into int for the print).
I would suggere something like this for a simple access from index:
class MyModule(nn.Module):
    def __init__(self,n):
        super(MyModule, self).__init__()
        _params = [torch.Tensor(3, 3) for i  in range(n) ]
        for i,p in enumerate(_params):
            self.register_buffer('tensor'+str(i), p)
 
    def params(self, i):
        return self.__getattr__('tensor'+str(i))

And if you want the table structure in order to loop, then you can return an iterator with yield:
class MyModule(nn.Module):
    def __init__(self,n):
        super(MyModule, self).__init__()
        self.n = n
        _params = [torch.Tensor(3, 3) for i  in range(n) ]
        for i,p in enumerate(_params):
            self.register_buffer('tensor'+str(i), p)
 
    def params(self):
        for i in range(self.n):
            yield self.__getattr__('tensor'+str(i))