函数中的可变循环数(python)

Posted

技术标签:

【中文标题】函数中的可变循环数(python)【英文标题】:Variable number of loops in function (python) 【发布时间】:2018-09-16 06:47:50 【问题描述】:

这是我想做的一个例子:

d1 = 'a':1,'b':2,'c':3
d2 = 'aa':11,'bb':22,'cc':33
d3 = 'aaa':111,'bbb':222,'ccc':333

def nLoop(*args):

    n = len(args)

    if n == 1:
        for k0,v0 in args[0].iteritems():
            print k0, v0

    if n == 2:
        for k0,v0 in args[0].iteritems():
            for k1,v1 in args[1].iteritems():
                print k0, v0, k1, v1

    if n == 3:
        for k0,v0 in args[0].iteritems():
            for k1,v1 in args[1].iteritems():
                for k2,v2 in args[2].iteritems():
                    print k0, v0, k1, v1, k2, v2

nLoop(d1,d2,d3)

我的问题是:有没有一些方法可以在没有 if 条件的情况下做到这一点?也许使用装饰器?

【问题讨论】:

这里不是关于传递给函数的参数数量,而是关于添加嵌套循环的方式 您可以查看模块itertools。您还应该能够编写一个返回生成器的函数,获取此类生成器的列表并遍历它们。 【参考方案1】:

您可以将变量参数列表传递给itertools.product(使用生成器将字典转换为它们的项目),然后打印展平结果(因为product 返回元组的元组):

from __future__ import print_function
import itertools

d1 = 'a':1,'b':2,'c':3
d2 = 'aa':11,'bb':22,'cc':33
d3 = 'aaa':111,'bbb':222,'ccc':333


def nLoop(*args):
    for t in itertools.product(*(a.items() for a in args)):
        print(*(x for a in t for x in a))

nLoop(d1,d2,d3)

这个新的nLoop 函数的输出与您的相同(如果不考虑顺序,因为字典顺序可能会在运行之间发生变化)

请注意,这是一个兼容 Python 3 的解决方案,但也适用于 Python 2。

【讨论】:

你能帮忙吗。我的代码和那个有点不同 如果我的代码没有帮助,也许你可以提出一个参考这个问题的问题,并解释什么对你不起作用? 我已达到问题限制

以上是关于函数中的可变循环数(python)的主要内容,如果未能解决你的问题,请参考以下文章

python函数中的传入数的前缀*和**的区别

python函数中的传入数的前缀*和**的区别

python自学笔记

python中元祖,列表,集合,字典的区别

Python函数中的可变参数

python可变參数调用函数问题