【问题标题】:Recursive calls and variable assignment errors [Python]递归调用和变量赋值错误 [Python]
【发布时间】:2017-02-19 08:44:55
【问题描述】:

我只是在测试字符串是否不可变,因为我有点累了 :D 并做了这个

def x(string = "a", y = 0):
    if y == 5:
        return
    else:
        string += "x"
        print(string)
        x(string, y = y + 1)
        print(string)
x()

我只是想知道为什么会这样,但是

def x(string = "a", y = 0):
    if y == 5:
        return
    else:
        string += "x"
        print(string)
        x(string, y += 1)
        print(string)
x()

不起作用(递归调用中y变量赋值的区别)。为什么是语法错误,他们只是在做同样的事情?

【问题讨论】:

  • 语法错误意味着python在其语法中不能接受这个输入。
  • 有很多代码会产生语法错误。尝试用尽可能少的代码产生相同的错误,忘记递归和字符串。
  • 在递归调用x()之后尝试打印y,你会发现它没有改变。您在 x() 函数调用中使用关键字 arg y 而不是分配给 y

标签: python variables recursion variable-assignment


【解决方案1】:

在第一个版本中,您告诉函数您的参数y 采用变量y 的值,+1。如果您的参数被称为z,您将拥有x(string, z=y+1)

如您所见,y+=1 不起作用,您正在尝试修改变量,而不是为函数提供命名参数。但是+=没有返回任何东西,所以语法确实不正确。

【讨论】:

  • 但是 y = y + 1 也不返回任何东西
  • y 在这种情况下是一个参数名称,就像 my_param=y+1,它不是赋值,而是将命名参数传递给函数..
猜你喜欢
  • 2020-11-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-13
  • 2013-06-20
相关资源
最近更新 更多