Python:我的函数在完成我想要的之后返回“None”

时间:2013-10-01 00:13:54

标签: python

这是我的程序

def reverse(letters):
    backwards = ""
    i = len(letters) - 1
    while i >= 0:
        backwards = backwards + letters[i]
        i = i - 1
    print (backwards)

print (reverse("hello"))

它有效,打印出“olleh”但之后,它在新行上打印“无”。我问这是为什么。 显然程序是反转一个单词,代码工作,没有函数它不打印任何,所以我不知道为什么它在函数中。这是在另一个更大的程序中使用,所以我需要它作为一个函数,因为它是为了学校,我不允许简单地使用.reverse()函数。所以我真的需要修复这些代码而不是大的修改,如果可能的话。

6 个答案:

答案 0 :(得分:4)

默认情况下,

函数返回None,因此您应return backwards显式

另外,您可以使用pythonic方式来解决问题:

letters[::-1]

答案 1 :(得分:3)

您可以使用return语句退出返回值的函数。如果函数在没有到达return语句的情况下到达末尾,则默认情况下它将返回None

def add1(x):
   return x+1

def returnsNone():
   pass

print(add1(2))
print(returnsNone())

答案 2 :(得分:1)

每个函数都在Python中返回某些。如果您没有显式返回值,Python会让您的函数返回None

您的函数实际上并没有返回任何内容,因为print会打印到stdout,而return实际上会返回一个值。他们可能在REPL中,但它们完全不同。

为了解决您的问题,请返回一个值:

return backwards

答案 3 :(得分:1)

尝试:

 reverse(hello) 

事实上

print reverse(hello) 

您正在打印反向的返回值。并且返回值为None。

让我给你几点一般建议:

代码中的

reverse()是一个带副作用(打印)的函数。你应该避免 当你不需要副作用时,可以考虑使用reverse()返回单词而不是打印它:

def reverse(letters):
    backwards = ""
    i = len(letters) - 1
    while i >= 0:
        backwards = backwards + letters[i]
        i = i - 1
    return backwards
print (reverse("hello"))

此外

i = len(letters) - 1
    while i >= 0:
        backwards = backwards + letters[i]
        i = i - 1

并不容易保留,如果你在循环中添加功能,减量i = i-1将远离它应该“概念上”的地方。你应该更喜欢与支票一起减少:

for i in xrange(len(letters)-1,-1,-1): 
    backwards = backwards + letters[i] 

当我懒惰的时候我会写

myString = myString + fewChars

所以我可以理解你很懒。但是添加几个查询不会修改myString但会创建一个新的。如果您反复添加多个字符,很少有效的方法是逐个添加。考虑使用join()。 例如

letters = 'word'
lettersList = [letters[i] for i in xrange(len(letters)-1,-1,-1)]
myReversed ''.join(lettersList)

确定我同意不可读,甚至可能不会更快,但对于较大的字符串,它比newString = oldString + oneChar方法更好。

那就是更多的pythonic方法

letters[::-1] 

已经被比我更快的人建议通常效果更好,很容易被python程序员阅读。

答案 4 :(得分:0)

如果你考虑它就有意义了。你的reverse没有返回任何内容 - 只是打印出它的结果。但是当你写print (reverse("hello"))时,你实际上正在打印reverse返回的内容。由于它不会返回任何内容,因此会打印None

答案 5 :(得分:0)

如前所述。如果python函数没有遇到return语句,则默认情况下会打印None。如下所示进行一些小改动可以解决这个问题:

def reverse(letters):
    backwards = ""
    i = len(letters) - 1
    while i >= 0:
        backwards = backwards + letters[i]
    i = i - 1
    return(backwards)  # instead of print(backwards)

print(reverse("hello"))