python怎么抓取延迟加载出来的数据_如何延迟加载数据结构(python)

我有一些构建数据结构的方法(例如,从一些文件内容中):def loadfile(FILE):

return # some data structure created from the contents of FILE

所以我可以像puppies = loadfile("puppies.csv") # wait for loadfile to work

kitties = loadfile("kitties.csv") # wait some more

print len(puppies)

print puppies[32]

在上面的示例中,我浪费了大量时间来实际读取kitties.csv,并创建一个从未使用过的数据结构。我想避免这种浪费,而不需要在我想做某事的时候经常检查if not kitties。我希望能做到puppies = lazyload("puppies.csv") # instant

kitties = lazyload("kitties.csv") # instant

print len(puppies) # wait for loadfile

print puppies[32]

所以如果我不想对kitties做任何事情,loadfile("kitties.csv")永远不会被调用。

有什么标准方法可以做到这一点吗?

经过一段时间的尝试,我提出了下面的解决方案,它看起来工作正常,而且非常简短。有其他选择吗?我应该记住使用这种方法有什么缺点吗?class lazyload:

def __init__(self,FILE):

self.FILE = FILE

self.F = None

def __getattr__(self,name):

if not self.F:

print "loading %s" % self.FILE

self.F = loadfile(self.FILE)

return object.__getattribute__(self.F, name)

更妙的是,如果这样做奏效:class lazyload:

def __init__(self,FILE):

self.FILE = FILE

def __getattr__(self,name):

self = loadfile(self.FILE) # this never gets called again

# since self is no longer a

# lazyload instance

return object.__getattribute__(self, name)

但这不起作用,因为self是本地的。实际上,每次你做任何事情,它都会给loadfile打电话。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值