小编Lam*_* Mu的帖子

在Python中使用三元运算符'hack'进行递归

在Python中玩,我发现以下代码按预期工作:

f = lambda S,b : (S if len(S)==b else f(S[1:],b))
Run Code Online (Sandbox Code Playgroud)

从列表S中,它将递归地删除第一个元素,直到S的长度等于b.例如f([1,2,3,4,5,6],3)= [4,5,6].

然而,令我惊讶的是,以下解决方案使用'三元黑客'[a,b] [c]而不是"b if c else a"(又名"c?b:a")不起作用:

g = lambda S,b : (g(S[1:],b),S)[len(S)==b]
Run Code Online (Sandbox Code Playgroud)

这将超过最大递归深度.

为什么这不起作用?

(我知道两者都不是一个很好的编码风格的例子,但现在不是重点.)

python recursion conditional-operator

9
推荐指数
1
解决办法
415
查看次数

python - 相同的指令,不同的结果

有人可以帮我理解下面的Python代码(python 3.2)中发生了什么吗?我在这里真的很无能为力.

import sys
u = sys.stdin.readline()
   # try entering the string "1 2 3" 
r = map(lambda t: int(t.strip()),u.split())
print(sum(r)) # prints 6
print(sum(r)) # prints 0 ?
Run Code Online (Sandbox Code Playgroud)

谢谢.

python python-3.x

7
推荐指数
1
解决办法
154
查看次数