扩展调用语法:传递参数

时间:2010-08-02 14:15:36

标签: python

我有一个看起来像这样的函数:

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 个答案:

答案 0 :(得分: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之前移除**,该函数将会使用字典。

如果您只是不想为参数指定名称,请使用* args而不是** kwargs作为gnibbler建议。

答案 1 :(得分:1)

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

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