迭代可能为空的参数列表

时间:2014-06-30 12:24:59

标签: python python-2.7

我有一个接受参数列表*args的函数,每个参数列表都是一个序列。在函数内部,每个序列都被压缩在一起并逐行迭代,每一行作为参数传递给内部函数。

代码如下:

In [30]: def apply_args_at_kwargs(*args, **kwargs):
    ...:     for row in zip(*args):
    ...:         # call some function f(*row, **kwargs)
    ...:         print 'row = ', row
    ...:         

In [31]: apply_args_at_kwargs([1,2,3])
row =  (1,)
row =  (2,)
row =  (3,)

In [32]: apply_args_at_kwargs([1,2,3], ['a','b','c'])
row =  (1, 'a')
row =  (2, 'b')
row =  (3, 'c')

如#31和#32所示,按照我的意愿运行。

我遇到的问题是内部函数可能没有参数但是当我没有向外部函数或空容器传递参数时,for循环中的代码(调用内部函数)被完全跳过。

In [33]: apply_args_at_kwargs()  # loop skipped entirely

In [34]: apply_args_at_kwargs([])  # loop skipped entirely

In [35]: apply_args_at_kwargs([()])  # row should be `()` not `((),)`
row =  ((),)

如果我指定一个嵌套的容器[()],我将在row = ()之后返回一个嵌套的容器。

无论如何都要制作一个能够完成我之后的工作的输入?或者更好的定义函数的方法?

注意:我可能只有一个if not args: f(**kwargs)块,但调用该函数的代码并不是那么简单,我试图尽可能避免重复它

谢谢, 戴夫

1 个答案:

答案 0 :(得分:1)

你的意思是这样的吗?

for row in zip(*args) if args else [()]: