传递带有破折号的关键字参数

14 投票
2 回答
7956 浏览
提问于 2025-04-18 09:08

我有一个使用关键字参数的函数:

def f1(**kw):
    for key,val in kw.iteritems():
        print "key=%s val=%s" % (key,val)

f1(Attr1 = "Val1", Attr2 = "Val2")  # works fine.

f1(Attr1-SubAttr = "Val1", Attr2 = "Val2")  # complains about keyword being an expression.

f1("Attr1-SubAttr" = "Val1", Attr2 = "Val2")  # doesn't work either.

我该怎么传递带有连字符的关键字呢?我无法控制这些关键字,因为我是从一个旧的数据库中解析出来的。

2 个回答

0

要让上面的代码在 Python 3 中正常运行,把 iteritems() 替换成 items() 就可以了。

34

关键字参数必须有效的Python标识符;这些标识符不能包含-,因为这个符号是用来表示减法的。

你可以使用**kwargs这种变量关键字参数语法来传入任意字符串:

f1(**{"Attr1-SubAttr": "Val1", "Attr2": "Val2"})

撰写回答