|

楼主 |
发表于 2020-4-2 09:59:10
|
显示全部楼层
一开始没讲明白我的问题,有点误会,想把12345转换为列表,然后返回,代码如下:
def aaa(x):
list1=[]
if x>0:
aaa(x//10)
list1.append(x%10)
aaa(12345)
print(list1)
这段代码将list1=[]放在函数里,最后的结果就只有一个[5],而把它放在定义函数的外面就会正常执行,所以想问问为什么现在的代码运行时,每次列表都会被重置
把上面的代码换一种角度看,把每一次递归的内容都展开,变成下面的样子,只是为了看着方便,当然下面的内容已经不是正常的代码了:
def aaa(12345):
list1=[]
if 12345>0:
list1=[] #aaa(1234)
if x>0:
list1=[] #aaa(123)
if x>0:
list1=[] #aaa(12)
if x>0:
list1=[] #aaa(1)
if x>0:
aaa(0)
list1.append(1%10)
list1.append(12%10)
list1.append(123%10)
list1.append(1234%10)
list1.append(12345%10)
aaa(12345)
print(list1)
黑体加粗部分aaa(1)可以看做是递归最后一层,aaa(1)运行完之后得到list1=[1],此时python会把list1=[1]作为一个常量代入aaa(12)中,完整的执行一遍aaa(12),而不是直接向下执行外层的list1.append(12%10),这是递归的计算规则吗? |
|