微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

变量作为函数绑定

如何解决变量作为函数绑定

无论如何在python中使用阴影以便此代码不会永远循环?

这里,ret一个变量而不仅仅是一个绑定,导致无限递归

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]))

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。