如何在Python中使用return语句返回值? [重复]

问题描述 投票:0回答:3

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

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()
python return
3个回答
5
投票

函数is返回值;你只是没有用它做任何事情。如果需要,您可以打印它:

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
也可能是一个可行的选择,例如完全无效的输入;但话说回来,在这种情况下,例外会更好。


2
投票

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

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

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

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

0
投票

其他人已经提到您没有存储返回值,但我还要补充一点,您最后没有默认的“基本情况”。在此代码中:

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
块中。这就没有任何歧义的余地,并且检查返回值是一件令人头疼的事情。

© www.soinside.com 2019 - 2024. All rights reserved.