奔跑的赵云 发表于 2020-11-19 21:58:22

第23讲动动手第一小题:写一个函数get_digits(n),将参数n分解出每个位的数字并按...

result = []                请问大佬 这里的result不是个全局变量嘛 每次调用函数,result不是应该被清零了吗??
def gg(n):
   
    if n > 0:
      
      result.insert(0,n%10)
      return gg(n//10)
   
gg(12345)
print(result)

昨非 发表于 2020-11-19 22:02:10

result = []            
def gg(n):
   
    if n > 0:
      
      result.insert(0,n%10)
      return gg(n//10)
   
gg(12345)
print(result)

这里result是全局变量没错,但每次递归调用之后插入一位数,存在列表里,直到所有位数字都被存入
一旦清零,就得不到结果了

昨非 发表于 2020-11-19 22:05:04

本帖最后由 昨非 于 2020-11-19 22:09 编辑

result = []            
def gg(n):
    if n > 0:
      result.insert(0,n%10)#将参数的最后一位插入result列表的第一个位置(前插法)
      return gg(n//10)#参数地板除10,相当于去掉最后一位
   
gg(12345)
print(result)


还有你有一点误区:
请问大佬 这里的result不是个全局变量嘛 每次调用函数,result不是应该被清零了吗??

局部变量(在函数内部)才会在每次调用函数时清零,全局是不受影响的,因为第一行result = []   只执行一次,
后面的都是函数自己在调用自己(只会给result插入元素,不会再执行第一行了)

奔跑的赵云 发表于 2020-11-19 22:07:25

昨非 发表于 2020-11-19 22:02
这里result是全局变量没错,但每次递归调用之后插入一位数,存在列表里,直到所有位数字都被存入
一旦 ...

在列表这个容器里,就不会被清0,是这个意思吗??

昨非 发表于 2020-11-19 22:10:29

奔跑的赵云 发表于 2020-11-19 22:07
在列表这个容器里,就不会被清0,是这个意思吗??

因为第一行代码只执行一次啊,仔细看3楼回复内容

昨非 发表于 2020-11-19 22:24:26

还没解决吗?

奔跑的赵云 发表于 2020-11-19 22:45:13

昨非 发表于 2020-11-19 22:10
因为第一行代码只执行一次啊,仔细看3楼回复内容

感谢大佬
页: [1]
查看完整版本: 第23讲动动手第一小题:写一个函数get_digits(n),将参数n分解出每个位的数字并按...