在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代码(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)
谢谢.