考虑我有这样的场景:
我的最终目标是执行以下操作(如果图像不清晰,则为in_words):
1)运行linux" diff"在Master_File和Slave_1文件之间执行命令,将其另存为Diff_1
2)运行linux" diff" Master_File和Slave_2文件之间的命令,保存为Diff_2
3)运行linux" diff"在Master_File和Slave_3文件之间执行命令,将其另存为Diff_3
4)运行linux" diff" diff_1和diff_2文件之间的命令,将其保存为Semi-Final-Diff
5)运行linux" diff"在Semi-Final-Diff和diff_3文件之间命令并将其保存为Final_Diff
我试图通过使用' reduce'来实现这一目标。来自functools,但面临问题。
我们说我创造了所有最初的差异......
from functools import reduce
total_diffs = ['1','2','3']
def diff_major(a,b):
out = run_os_command('diff -s '+str(a)+'_'+str(b)+' >diff_'+str(a)+str(b)+'.log')
def diff_to_diff(total_diffs):
d = []
for i in total_diffs:
d.append('diff_'+str(i)+'.log')
print d
reduce(diff_major, d)
我得到了输出:
['diff_1.log', 'diff_2.log', 'diff_3.log']
Diffing diff_1.log and diff_2.log
Diffing None and diff_3.log
为什么它会在第二个差异中爆发并将名称更改为NONE?另外,我怎样才能做到这一点?
答案 0 :(得分:1)
diff_major
返回None
,因为它没有return
声明。
reduce
通过获取提供的iterable中的前2项(在此实例中为1
和2
),并使用2个参数将它们作为输入提供给提供的函数。它使用此函数的返回值作为下一次迭代的第一个输入;然后它接受iterable中的下一个项目,在本例中为3
,并将其作为第二个输入提供。这将重复,直到iterable耗尽,此时它将从提供的函数返回最终返回值。