为什么这也会返回None

时间:2013-10-10 07:50:59

标签: python

我的列表x是[10,20,30,40,50] 所以x的len是5 所以以下是有道理的:

>>> x=[10,20,30,40,50]
>>> print(list(range(len(x))))
[0, 1, 2, 3, 4]

我已将上述内容放入function并且它似乎已经运行 我在输出中得到的额外None是多少?

def foo(aList):
    listLen = len(aList) 
    for x in list(range(listLen)):
        print(x)

x=[10,20,30,40,50]
print(foo(x))

修改
如果我将上述内容应用于反转列表的任务,它似乎没问题,因此无不会导致问题:

def foo(aList):
    newList = [] 
    listLen = len(aList) 
    for x in list(range(listLen)):
        newList.append(aList[listLen-(x+1)])
    return newList

x=[10,20,30,40,50]
print(foo(x))

4 个答案:

答案 0 :(得分:2)

print将数据发送到标准输出(通常是终端)。 print实际上并没有从函数中“返回”任何内容。为此,您需要return关键字。您的函数是print函数内部的结果并返回None(默认值)。函数外的print语句然后打印返回值None

修复可能是从函数返回列表而不是打印它的元素。然后你可以在功能之外打印它。有点像:

def foo(aList):
    listLen = len(aList) 
    return list(range(listLen))

x=[10,20,30,40,50]
print(foo(x))

答案 1 :(得分:2)

print(foo(x))

这将打印foo()函数的返回值。但是foo()不会返回任何内容,这隐含意味着它的返回值为None。所以你最终打印“无”

也许你只是想要这个:

def foo(aList):
    listLen = len(aList) 
    return list(range(listLen)):

x=[10,20,30,40,50]
print(foo(x))

答案 2 :(得分:2)

您从foo打印返回值,没有显式return语句的函数将返回None。

答案 3 :(得分:1)

print(foo(x))

打印出函数返回的内容。您的函数打印列表并且不返回任何内容。

因此,正在打印的列表是您的功能打印的列表。打印功能打印无。

这个功能可以做你想要的。

def foo(aList):
    newList = [] 
    listLen = len(aList) 
    return range(listLen)

然后

x=[10,20,30,40,50]
print foo(x)

您的函数将返回列表,print语句将打印它。


另一种方法是调用函数而不打印。

def foo(aList):
    listLen = len(aList) 
    for x in list(range(listLen)):
        print(x)

x=[10,20,30,40,50]
foo(x)