我试图通过一个生成n个for循环的递归函数来计算调用的总次数,但是该变量似乎永远不会改变其值。
a=0
def recursivelooping(times,volumes):
if times==0:
a+=1
else:
for i in range(volumes):
return recursivelooping(times-1,i)
结果应该更像下面的变量a
,但我总是得到零。
def multiforloop(volumes):
a=0
for i in range(volumes):
for j in range(i):
for k in range(j):
a+=1
print(a)
答案 0 :(得分:0)
如果我理解正确的话,可能是最短的解决方案:
text_file = open('test-file.txt', 'r+')
read_the_file = text_file.read()
text_file.close()
text_file = open('test-file.txt', 'a+')
new_string = 'Smack Alpha learns python'
if new_string not in read_the_file:
text_file.write(new_string + '\n')
text_file.close()
这将同时打印def recursivelooping():
a = 0
def f(times, volumes):
nonlocal a
if volumes == 0:
return a
# Inner loop
for t in range(times):
for j in range(volumes):
a+=1
# Outer loop
return f(times, volumes-1)
return f
def multiforloop(times, volumes):
a=0
for i in range(volumes+1):
for t in range(times):
for j in range(i):
a+=1
return a
print(recursivelooping()(1, 10))
print(multiforloop(1, 10))
(如n *(n + 1)/ 2)。闭包只是一个功能(这里是55
)和一个环境(某些上下文将名称映射到变量,这里是f
)所伴随的功能。这意味着a
可以从a
内部进行访问,就好像它是一个局部变量一样,但它并不完全是一个局部变量,它是一个free variable
当您编写f
时,通常的行为是查找名为a += 1
的局部变量,而这里a
是一个自由变量,这就是为什么我们需要添加{{1 }}关键字来指定。