我正在编写一个递归函数来编写树的子类别。我不想使用全局var,在recurse方法上写入文件的最佳方法是什么?
def recurse(i):
Xmlfile = file("index.html", "w")
if i < 5:
Xmlfile.write(str(i))
recurse(i+1)
return(None)
def main():
Xmlfile = file("index.html", "w")
Xmlfile.write("I")
recurse(3)
Xmlfile.write("O")
预期的输出应该是这样的:I 3 4 5 O,但我只是得到了我。
答案 0 :(得分:7)
将其作为参数传递。您执行此操作的方式将在每次迭代时重新打开并截断文件。
def recurse(f, i):
if i < 5:
f.write(str(i))
recurse(f, i+1)
def main():
with open("index.html", "w") as xmlfile:
xmlfile.write("I")
recurse(xmlfile, 3)
xmlfile.write("O")
请注意,我已使用推荐的file()
替换了open()
,并添加了上下文管理器以确保文件已关闭。
答案 1 :(得分:1)
尝试将文件传递给该函数。在函数中创建文件时,每次调用函数时都会创建一个新文件。如果你把它改成这样的话就行了:
n=6
def recurse(i, Xmlfile):
if i < n:
Xmlfile.write(str(i))
recurse(i+1, Xmlfile)
return(None)
def main():
Xmlfile = file("index.html", "w")
Xmlfile.write("I")
recurse(3, Xmlfile)
Xmlfile.write("O")
答案 2 :(得分:0)
正如TigerhawkT3和Manali所述,您应该将<script src="https://www.gstatic.com/firebasejs/3.5.1/firebase.js"> </script>
firebase.initializeApp(config);
const messaging = firebase.messaging();
messaging.onMessage(function(payload){
console.log('onMessage',payload);
});
传递给该函数。
稍微更改一下:
Xmlfile
def recurse(i, Xmlfile, deepness = 0, times = -1):
if times == -1:
times = i
if deepness < times:
Xmlfile.write(str(i))
recurse(i+1, Xmlfile, deepness+1, times)
def main():
Xmlfile = file("index.html", "w")
Xmlfile.write("I")
recurse(3, Xmlfile)
Xmlfile.write("O")
和deepness
合作消除了静态重复次数的需要(如times
中所述)。现在,您可以按照递归( n ,Xmlfile)进行多次递归。