值不变的递归lambda?

Mat*_*sis 0 python lambda

为什么下面的lambda递归只打印1?它应该从''值减1并打印该值.

def p(t):
    print(t)
    while t:
        print(t)
z = lambda x:1 if x == 0 else z(x-1)
p(z(100))
Run Code Online (Sandbox Code Playgroud)

Bre*_*arn 6

当你打电话时p(z(100)),你z(100)作为参数传递.这意味着zp开始之前运行完成. z它所有的复制都是"默默地"(因为它本身不会打印任何东西)并且所有p看到的都是在1最后返回的.

如果要打印每个递归,则需要在递归函数中包含打印.