如果听起来太棒了,我们很抱歉。但这是我们人生第一次遇到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)])
}
}

答案 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中它是一个语句分隔符。