Python中print调用列表处理自定义函数为何输出None?
问题原因
核心原因有两点:
- 你定义的
rev_sort函数没有写return返回语句。Python中所有没有显式声明返回值的函数,默认返回值都是None。 - 你在函数内部调用的
thelist.sort()和thelist.reverse()都是列表的原地操作方法:它们只会直接修改原列表本身的内容,不会返回修改后的新列表,这两个方法的执行返回值同样是None。
你之前先单独调用rev_sort(thelist)、再打印thelist能得到正确结果,本质是打印了被函数原地修改过的原列表对象;而写print(rev_sort(thelist))时,print接收的参数是函数的返回值,也就是默认的None,自然输出就是None。
修正方案
你可以二选一调整代码:
- 保持函数原地修改的逻辑,分开调用函数和打印列表:
def rev_sort(thelist): ''' Reverses and then sorts the list entered ''' thelist.sort() thelist.reverse() def main(): thelist = ["fun", "is", "programming"] rev_sort(thelist) print(thelist) main()
- 给函数增加返回值,将处理后的列表返回,就可以直接在print语句中调用函数:
def rev_sort(thelist): ''' Reverses and then sorts the list entered ''' thelist.sort() thelist.reverse() return thelist def main(): thelist = ["fun", "is", "programming"] print(rev_sort(thelist)) main()
补充注意:不要和内置方法
sorted()、reversed()混淆,这两个方法不会修改原对象,会返回处理后生成的新对象,和列表自带的sort()、reverse()原地操作逻辑完全不同。
内容的提问来源于stack exchange,提问作者Geeniee
相关产品推荐
相关产品推荐

