当我有返回值时,Python不返回任何值

时间:2020-01-24 06:55:41

标签: python

我正在对递归进行复习,并制作了一个像这样的python文件:

#!/usr/bin/python
import sys

if (len(sys.argv)!=3):
    raise ValueError('Please provide two dimensions.')
else:
    pass

def plotLand(a,b):
    if(a==b):
        print(a)
        return a
    if(a<b):
        c=b%a
        b = c if(c!=0) else a
    else:
        c = a%b
        a = c if (c!=0) else b
    plotLand(a,b)
result = plotLand(int(sys.argv[1]),int(sys.argv[2]))
print(result)

我添加了print(a)只是为了检查我的函数是否返回值。我以这种方式在Linux终端中调用此文件:

python algorithms.py 1680 64

这是我的输出:

80
None

我的递归函数内部的print函数正在打印值,但是我没有得到函数的返回值。如前所述,原始功能没有打印功能。

2 个答案:

答案 0 :(得分:3)

递归函数的工作方式与非递归函数完全相同–如果您不写return和值,则返回None,并且仅在a == b时返回任何值。

您需要

return plotLand(a,b)

我还认为您可以将代码缩短为

def plotLand(a,b):
    small, large = sorted((a,b))
    remainder = large % small
    return plotLand(remainder, small) if remainder else a 

答案 1 :(得分:0)

您只返回一种情况。您可以考虑在函数末尾添加默认值