问题描述
无论如何在python中使用阴影以便此代码不会永远循环?
class Node(object):
def __init__(self,value,next=None):
self.value = value
self.next = next
def list2LinkedListFoldrImp(nums):
ret = lambda x:x
for num in nums:
ret = lambda rs: ret(Node(num,rs)) # RecursionError: maximum recursion depth exceeded
return ret(None)
print(list2LinkedListFoldrImp([5,4,1]))
解决方法
该问题突出了一个事实,即只能在 Python 中捕获函数调用中的参数,这大概是因为环境仅在那里创建,否则会发生变异。由于这种混合作用域,我们不能只在任何地方捕获变量。
class Node(object):
def __init__(self,value,next=None):
self.value = value
self.next = next
# simple and correct (sans recursion)
def list2LinkedListFoldrImp(nums):
ret = lambda x:x
for num in nums:
ret = lambda rs,num=num,ret=ret: ret(Node(num,rs))
return ret(None)
print('ok foldr',list2LinkedListFoldrImp([5,4,1]))