为什么这个额外没有?

时间:2013-05-09 22:56:09

标签: python

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

2 个答案:

答案 0 :(得分:7)

它没有返回。它返回None,因为如果你没有return语句,那就是任何函数返回的内容。

与此同时,它打印出“你还欠:607.5”,因为那是你的印刷声明中的内容。

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

我的猜测是你在IDE或其他交互式会话中运行,该会话打印出每个语句的返回值。所以,你的代码打印“你还欠:607.5”,然后你的交互式翻译打印“无”。

默认的python互动式解释器(如ipythonbpython以及其他许多人)会吞下None次,而不是将其打印出来。无论你使用哪一个,都可能不会这样做。

答案 1 :(得分: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