2

我有一个函数,我需要根据某些变量调用一定数量的参数,如下所示:

self.model = Gtk.ListStore(str for i in len(dictionary))

当然这不起作用,因为str for i in len(dictionary)结果是一个列表:[str, str, str, str]

虽然我总是可以为每个替代方案写 4 行和一堆 if 语句,但必须有更好的方法来做到这一点。

4

3 回答 3

4

也许您可以使用 * 语法?

self.model = Gtk.ListStore(*[str for i in len(dictionary)])

* 解包列表并将每个元素作为单独的参数传递给函数。

于 2013-09-29T19:24:16.977 回答
2

如果您正在调用的函数使用*args,那么您可以使用我认为所谓的 splat 运算符 - *

例子:

def f(*arbitrary_amount_of_arguments):
    for i in arbitrary_amount_of_arguments:
        print(i)

>>> f("a", "b", "c")
a
b
c
>>> f(*[1, 2, 3, 4, 5, 6, 7])
1
2
3
4
5
6
7

或者在您的具体示例中:

self.model = Gtk.ListStore(*(str for i in range(len(dictionary))))

我还想问一下你是否想str为 i in range(len(dictionary)) 传递内置字符串类。

编辑:self.model = Gtk.ListStore(*(str for _ in enumerate(dictionary)))或者 self.model = Gtk.ListStore(*[[str] * len(dictionary))可能比我之前的建议更好,因为它们更 Pythonic。

于 2013-09-29T19:25:39.173 回答
2

要重复相同的值 x 次,只需将其乘以一个 int:

Gtk.ListStore(*[str]*len(dictionary))

对于任意生成器,在生成器前加一个星号来解压它:

Gtk.ListStore(*(x for bar in spam))

请注意,不需要临时列表。

于 2013-09-29T19:27:16.820 回答