【发布时间】:2013-11-12 22:01:49
【问题描述】:
想象一下我有一个看起来像这样的函数:
myFunction(arg, arg, kwarg, arg, arg, kwarg, etc...):
其中 arg 是 *arg 而 kwarg 是 *kwarg。在此之前,我的函数看起来像 myFunction(*args):,而我只使用了一长串 *args 并且我会传入一个像这样的大列表
myFunction(*bigList):
bigList 看起来像 = [[1,2,3],[4,5,6],'hello',[1,3,5],[2,4,6],'world',etc...]
但是,现在我需要每三个参数有一个 kwarg。所以,在我看来,列表“看起来”现在是这样的:
newBigList = [[1,2,3],[4,5,6],word='hello',[1,3,5],[2,4,6],word='world',etc...]
因此,有两个问题可以完成这项工作。
1) 我可以在没有函数将其作为实际参数读取的情况下为 kwarg 构造一个包含字符串的列表吗? newBigList 中的 word(s) 可以是字符串吗?
2) 你可以交替使用 kwargs 和 args 吗?我知道 kwargs 通常是用字典完成的。甚至可以交替使用两者吗?
与往常一样,如果有人知道这样做的更好方法,我很乐意改变我的做法。
编辑方法如下。它是一个绘制多边形(或一堆多边形)的 matplotlib 方法:
plot([x1], [y1], color=(RBG tuple), [x2], [y2], color=(RGB tuple), etc...)
[x1] 是第一个多边形的 x 值列表,[y1] 是第一个多边形的 y 值列表,依此类推。
问题是,要为颜色参数使用 RBG 值,我需要包含颜色关键字。更复杂的是,我正在使用 random.random() 模块生成一个随机元组。
所以,我有这个所有多边形的 x 值列表列表、我所有多边形的 y 值列表列表以及随机 RBG 颜色的元组列表。它们看起来像这样:
x = [[1,2,3], [4,5,6], [7,8,9]]
y = [[0,9,8], [7,6,5], [4,3,2]]
colors = [(.45, .645, .875), (.456, .651, .194), (.813, .712, .989)]
因此,要绘制三个多边形。在我可以做关键字之前,我一直在做的是 zip 将它们全部组合成一个元组并像这样使用它。
list_of_tuples = zip(x, y, colors)
denormalized = [x for tup in list_of_tuples for x in tup]
plot.plot(*denormalized)
但是,现在我需要这些关键字。如果需要,我非常乐意提供更多信息。谢谢
【问题讨论】:
-
我不想想象这样的功能。如果您需要将这么多参数传递给函数,我建议您将其功能拆分为更小的函数
-
不幸的是,这不是我自己的功能。它来自 matplotlib 库。我只是想更一般地问这个问题,以防人们想知道......
-
重构你的函数来获取一个类的对象,成员:
a=[1,2,3], b=[4,5,6], word='hello' -
我不明白这个问题。我很确定您所询问的函数签名在 Python 中是非法的。你能举个例子,一个真实的函数和你想用它来调用它的参数吗?
-
这不是有效的python:
SyntaxError: non-keyword arg after keyword arg。请展示一个最小的工作示例,我们可以运行来演示问题。来自 matplotlib 的文档:“*kwargs可用于设置线条属性(任何具有set_*方法的属性)。[省略] 如果您使用一个绘图命令制作多条线条,*kwargs适用于所有这些行”。我相信您假设能够为每一行使用一次color=:这是不可能。多次使用相同的关键字是错误的。
标签: python python-2.7 args keyword-argument