2
def hotel_cost(nights):
    return nights * 140

bill = hotel_cost(5)

def add_monthly_interest(balance):
    return balance * (1 + (0.15 / 12))

def make_payment(payment, balance): 
    new_balance2 = balance - payment
    new_balance = add_monthly_interest(new_balance2)
    print "You still owe: " + str(new_balance)

make_payment(100,bill)

为什么会返回

You still owe: 607.5
None

?

4

2 回答 2

7

它不返回那个。它返回None,因为如果您没有 return 语句,任何函数都会返回。

同时,它会打印出“您仍然欠:607.5”,因为这就是您的打印语句中的内容。

(这里的“它”,我假设您指的是函数调用make_payment(100, bill)。)

我的猜测是您在打印出每个语句的返回值的 IDE 或其他交互式会话中运行。因此,您的代码会打印“You still owe: 607.5”,然后您的交互式解释器会打印“None”。

默认的python交互式解释器(如ipythonbpython许多其他解释器)将吞噬None返回而不是打印出来。您使用的任何一个都可能不会那样做。

于 2013-05-09T22:59:54.960 回答
0

@abarnert 帖子的评论中提到了这一点,但我将其放在答案形式中,以便更明显。

您想要的是让您的函数返回字符串,然后解释器将把该字符串吐回给您:

def make_payment(payment, balance): 
    new_balance2 = balance - payment
    new_balance = add_monthly_interest(new_balance2)
    return "You still owe: " + str(new_balance) # <-- Note the return

# Now we change how we call this
print make_payment(100,bill)

# An alternative to the above
message = make_payment(100,bill)
print message

现在,命令行上唯一显示的将是消息。

笔记

正如您之前编写的代码(省略return语句)python 假设您已将函数编写为:

def make_payment(payment, balance): 
    new_balance2 = balance - payment
    new_balance = add_monthly_interest(new_balance2)
    print "You still owe: " + str(new_balance)
    return None # <-- Python added this for you

所有函数都必须返回一个值,并且由于您没有包含return语句,python 为您添加了一个。由于看起来您的交互式 shell 正在将python 函数返回的所有None值打印到屏幕上,因此您在调用函数后看到了。

于 2013-05-09T23:54:08.333 回答