如何在python中使用return语句返回值?

时间:2014-04-28 00:20:25

标签: python return

我正在编写一个返回火车价格的程序。当我运行该函数时,没有任何东西返回。

def transit(zone, ticket):
    fareLst = ['23', '11.5', '34.5']

    if zone < 2 and ticket == 'adult':
        return fareLst[0]

    elif zone < 2 and ticket == 'child':
        return fareLst[1]

    elif zone > 4 and ticket == 'adult':
         return -1


def main():
    transit(1, 'adult')   # the function is not returning the fareLst = 23


main()

3 个答案:

答案 0 :(得分:5)

函数 返回值;你只是没有做任何事情。如果您愿意,可以打印:

def main():
    print transit(1, 'adult')

return与在屏幕上打印内容不同;返回值像这样使用,例如:

smth = transit(1, 'adult')

您不希望所有返回的内容自动打印出来。


另外,另一方面,你应该使用适当的浮点值来存储浮点数据,而不是字符串:

fareLst = [23.0, 11.5, 34.5]

另请注意,如果您致电transit(5, 'child'),则不会返回任何内容/ None ...因此您可能希望在if-elif区块结束时执行此操作:

else:
    return -1

而不是:

elif zone > 4 and ticket == 'adult':
     return -1

...虽然None也可能是一个可行的选择,例如输入完全无效;但话又说回来,在这种情况下,例外会更好。

答案 1 :(得分:2)

如果您只想打印出结果,请执行以下操作:

def main():
    print transit(1,'adult')

或者如果您想要存储变量并在以后打印它,请执行以下操作:

def main():
    result = transit(1,'adult')
    #do something
    print result

答案 2 :(得分:0)

其他人已经提到你没有存储返回值,但我还要补充一点,你没有默认&#34;基本情况&#34;在末尾。在这段代码中:

def transit(zone, ticket):
    fareLst = ['23', '11.5', '34.5']

    if zone < 2 and ticket == 'adult':
        return fareLst[0]

    elif zone < 2 and ticket == 'child':
        return fareLst[1]

    elif zone > 4 and ticket == 'adult':
         return -1

如果zone等于2,3或4怎么办?如果zone为4但ticket是小孩,该怎么办?所有这些都会落到最后,函数的默认返回值是None。这可能不是你想要的。如果没有,请添加return 20之类的内容或任何合理的默认机票价格。

另外,像上面的最后一例一样,它不是Pythonic返回的哨兵值。如果参数不好,更Pythonic的方法是引发ValueError,然后将调用代码包装在try/except块中。这没有留下任何歧义的余地,检查返回值是一个痛苦的问题。