扩展调用语法:传递参数

1 投票
2 回答
744 浏览
提问于 2025-04-16 02:11

我有一个函数,长得像这样:

def getColumn(self, name, type, **args):

现在我想要一个函数

def getColumns(self, columns)

可以接收一个包含元组的元组,其中每个条目代表要传给getColumn的参数。不过,我希望不需要使用命名参数来指定名称和类型。

所以我希望不需要像这样使用:

def getColumns(self, columns):
    columns = [self.getColumn(**data) for data in columns]

column_data = ( {'name' : 'myName', 'type' : 'myType', 'other' : 'myOther'},
    {'name' : 'myName2', 'type' : 'myType2', 'other' : 'myOther2'})

我该如何去掉 'name':'type': 呢?

2 个回答

1
def getColumns(self, columns):
    columns = [self.getColumn(*data) for data in columns]

column_data = (('myName', 'myType', 'myOther'), 
               ('myName2', 'myType2', 'myOther2'))

当然可以!请把你想要翻译的内容发给我,我会帮你把它变得更容易理解。

2

像这样吗?

column_data = (('myName', 'myType', {'other': 'myOther'}),
               ('myName2', 'myType2', {'other2': 'myOther2'}))

def getColumn(self,name,type,**rest):
    pass

def getColumns(self,columns):
    return [self.getColumn(name, type, **rest) for name, type, rest in columns]

你不需要解包 - 如果你在两个地方都把 rest 前面的 ** 去掉,这个函数就会接受一个字典。

如果你只是想不给参数起名字,可以像 gnibbler 建议的那样用 *args 来代替 **kwargs。

撰写回答