for function with function in function programming style python

时间:2017-07-08 07:18:57

标签: python for-loop functional-programming

如何将Python中的以下程序更改为功能样式?

from itertools import permutations
for p in permutations(range(1, int(input()) + 1)):
    print(*p, sep='')

我知道地图,但是

map(lambda p: print(*p, sep=''), permutations(range(1, int(input()) + 1)))

不会产生预期的输出。

我想知道是否有可能在没有'重新定义'for循环的情况下这样做。

1 个答案:

答案 0 :(得分:1)

map不应用于副作用功能。 print函数正在返回None,因此您正在构建一个列表(或python3中的生成器),该列表将包含与您正在迭代的集合中的项目一样多的Nones,完全无用。 您可以使用while循环:

def printFrom(col):
    i = iter(col)
    while True:
        try:
            print(next(i))
        except StopIteration:
            break

作为功能样式,您可以使用recursion

def printFrom(col):
    it = iter(col)
    def printit(i):
        try:
            print(next(i))
            printit(i)
        except StopIteration:
            return
    printit(it)

或者只是这个:

print(" ".join(map(lambda x: " ".join(map(str, x)),permutations(range(1, 10)))))

最后一个解决方案的想法是,您只需一次调用即可在打印之前构建实际的最终字符串。