在函数内部运行函数时返回问题

时间:2019-05-04 16:20:09

标签: python function return-value

我正在函数内部运行一个函数,但无法获取返回的正确值。

a = ['123', '132', '231', '213', '312', '321']
u = a[0]
a.remove(u)

def sp(x,y):
  b = len(x.copy())
  for i in range (0,len(x)):
    if y[-2:] == x[i][0:2]:
      y = y + x[i][2]
      x.remove(x[i])
      break
  if b > len(x):
    sp(x,y)
  else:
    print(y)
    return y

使用sp(a,u)

print(y)给我我想要的东西,但返回y却没有。我知道y也是函数的原始输入,因此它只是返回原始输入,但是我不知道如何编写不同的代码,所以我得到的返回结果与print(y)相同。

3 个答案:

答案 0 :(得分:1)

您的递归函数似乎有点错误 尝试更改此内容:

if b > len(x):
    sp(x,y)

对此

if b > len(x):
    y = sp(x,y)

答案 1 :(得分:0)

我尝试给出一些一般性答案。

1。递归

您的函数是递归函数。这意味着您可以在内部调用相同的函数。一个简单的示例是教师功能。在递归函数中,您总是需要一个条件来停止递归。

def faculty(num):
    if num <= 1:
        return 1
    else:
        return faculty(num-1) * num 

2。打印与退货

我认为您在理解printreturn语句之间的区别时遇到问题。

打印:您将一些文本打印到控制台,以便用户可以看到。对于PC,此信息完全不相关。此功能之外,它无法使用打印到控制台的信息。

返回:这是调用函数时返回的值。

我认为这个小例子可以帮助您

def get_something():
    number = 5
    return number 

x = get_something()
print(x)  # In the console: 5

def print_something():
    number = 5
    print(number)    # in the console: 5

v = print_something()
print(v)  # in the console: None
# because the function didn't return anything (or to be precise: retured implicitly None)

3。为您提供解决方案

如果您仔细研究递归的工作原理。例如,在https://medium.freecodecamp.org/how-recursion-works-explained-with-flowcharts-and-a-video-de61f40cb7f9,您会注意到,您需要在代码中更改以下内容。正如评论中已经提到的那样:

return sp(x,y)

答案 2 :(得分:0)

这样吧:

def sp(x,y):
  b = len(x.copy())
  if b > len(x):
    for i in range (0,len(x)):
      if y[-2:] == x[i][0:2]:
        y = y + x[i][2]
        x.remove(x[i])
        break
    return y    #returns the calculated y 
  else:
    return y    #returns original y

 print(sp(x, y))