ch1161741637 发表于 2021-8-19 20:20:04

请问这两个程序有什么区别,看了一下午,实在找不出来。

第一个:
lists = []
def get_digits(n):

    if n>0:
      get_digits(n // 10)
      lists.append(n % 10)
      return lists
    else:
      return lists
   
print(get_digits(12345))

第二个:
lists = []
def get_digits(n):

    if n>0:
      get_digits(n // 10)
      
      return lists.append(n % 10)
    else:
      return lists
   
print(get_digits(12345))

ch1161741637 发表于 2021-8-19 20:20:51

这是关于递归的知识

wangka 发表于 2021-8-19 20:25:29

就是写在一起,但顺序会变

逃兵 发表于 2021-8-19 20:26:18

      lists.append(n % 10)

列表方法是作用于列表本身的,会返回None

所以这里不能写

      return lists.append(n % 10)

而要写
      lists.append(n % 10)
      return lists

ch1161741637 发表于 2021-8-19 21:33:13

本帖最后由 ch1161741637 于 2021-8-19 21:34 编辑

逃兵 发表于 2021-8-19 20:26
lists.append(n % 10)

列表方法是作用于列表本身的,会返回None


我把每次的迭代都打印出来了,前四次迭代都正常【1,2,3,4】,但最后一次输出列表为什么是none,能解释的再详细点吗?万分感谢

大马强 发表于 2021-8-19 22:18:05

本帖最后由 大马强 于 2021-8-19 22:37 编辑

ch1161741637 发表于 2021-8-19 21:33
我把每次的迭代都打印出来了,前四次迭代都正常【1,2,3,4】,但最后一次输出列表为什么是none,能解释 ...
这就涉及到了函数的返回值问题
这时候你肯定再想,我这个get_digits 不是有返回值lists.append(n % 10)吗?
但你再想一想 列表函数append的返回值是啥?
答案如同楼上大佬都说的,列表的append方法是没有任何返回的
你可以尝试这段代码
print(lists.append(1))
结果是 none
这就证明了 列表的append无返回值
所以你外面的print接受了个空气,就打印了none

ch1161741637 发表于 2021-8-21 15:27:28

大马强 发表于 2021-8-19 22:18
这就涉及到了函数的返回值问题
这时候你肯定再想,我这个get_digits 不是有返回值lists.append(n % 10) ...

明白了,append操作的确无返回值,所以return当然没有东西,谢谢哈

大马强 发表于 2021-8-21 16:56:09

ch1161741637 发表于 2021-8-21 15:27
明白了,append操作的确无返回值,所以return当然没有东西,谢谢哈

{:10_297:}不客气
页: [1]
查看完整版本: 请问这两个程序有什么区别,看了一下午,实在找不出来。