为什么换行打破python代码

时间:2017-05-22 18:30:55

标签: javascript python

  

如果听起来太棒了,我们很抱歉。但这是我们人生第一次遇到Python。

我们有got a python function这样:

def m(n,k,c=0):x,y=n;return c if n==k else 7*(c>6)or min(m((x+a,y+b),k,c+1)for a,b in[(1,2),(1,-2),(-1,2),(-1,-2),(2,1),(2,-1),(-2,1),(-2,-1)])

这样被称为:

print m((1,2), (5,6))

为了理解它,我们试图添加这样的换行符:

def m(n,k,c=0):x,y=n;return c
 if n==k else 7*(c>6) or min(m((x+a,y+b),k,c+1)for a,b in[(1,2),(1,-2),(-1,2),(-1,-2),(2,1),(2,-1),(-2,1),(-2,-1)])

我们不明白为什么只是简单的新行打破代码

一旦我们理解了这一点,我们可能会将此程序转换为javascript:



function m(n, k, c = 0) {
  x,
  y = n;
  return c
  if (n == k) {

  } else {
    7 * (c > 6) or Math.min(m((x + a, y + b), k, c + 1) for a, b in [(1, 2), (1, -2), (-1, 2), (-1, -2), (2, 1), (2, -1), (-2, 1), (-2, -1)])
  }
}




2 个答案:

答案 0 :(得分:3)

定义函数时,函数定义必须全部在同一行(如原始示例中所示),或者标题def m(n,k,c=0):必须在它自己的行上,其余的语句必须在下一行。你不能混合搭配。

def m(n, k, c=0):
  x, y = n
  return c if n==k else \
         7 * (c > 6) or min(m((x + a, y + b), k, c + 1)
                            for a,b in [(1,2), (1,-2), (-1,2), (-1,-2),
                                        (2,1), (2,-1), (-2,1), (-2,-1)])

m((1,2), 3)
#7

答案 1 :(得分:2)

return c if n==k else ...的部分是Python中的三元条件运算符(类似于JS中的? :运算符)。例如,请参阅Does Python have a ternary conditional operator?。你不能在那里放一个换行符,因为在Python中它是一个语句分隔符。