Python 惰性地提供字符串的值

Python 惰性地提供字符串的值,python,lazy-evaluation,Python,Lazy Evaluation,我有一个python对象,它在概念上允许通过迭代器和getter访问充满字符串的数组。但是,由于计算数组中每个元素的精确值非常昂贵,我正在研究为数组中每个插槽的内容返回一个代理对象,然后在实际需要时动态计算实际值 也就是说,我想写下: bar = foo.get(10) # just returns a proxy baz = bar # increase proxy reference l = [baz] # actually increase proxy reference again. p

我有一个python对象,它在概念上允许通过迭代器和getter访问充满字符串的数组。但是,由于计算数组中每个元素的精确值非常昂贵,我正在研究为数组中每个插槽的内容返回一个代理对象,然后在实际需要时动态计算实际值

也就是说,我想写下:

bar = foo.get(10) # just returns a proxy
baz = bar # increase proxy reference
l = [baz] # actually increase proxy reference again.
print baz # ooh, actually need the value. Calculate it only the fly.
v = '%s' % bar # I need the value here again
if bar is None: # I need the value here again
    print 'x'
if bar: # I need the value here again
    print 'x'
for i in bar: # I need the value here again
    print i
在C++中,我会尝试重载DeleFrimeAc算符…有什么想法吗

我知道,对于每一种情况,我都可以重载特定的python“magic”函数(例如
\uuuu str\uuuu
用于
打印baz
),但我想知道:

  • 这实际上将涵盖所有可能的用例(是否有方法访问不涉及使用python魔术函数的变量的内容)
  • 有一种更通用的方法可以做到这一点

在python中,您将返回一个自定义类型,并重写该方法以在打印时计算字符串表示形式

class MyCustomType(object):
    def __str__(self):
        return "My string is really costly to produce"
根据您的用例,您仍在查看python提供的各种钩子:

  • 自定义类上的属性访问可以通过方法或使用
  • 访问类(列表、元组、字符串)和映射类型类等序列中的单个项可以与连接

您必须根据您的用例来决定需要挂接什么,在这一点上,不可避免地需要进行昂贵的计算。Python可以让您轻松地钩住对象生命周期中的几乎任何一点。

很抱歉,现在很明显,这个问题还不够清楚。“我已经编辑过了。@mathieu:那么你的问题一点也不清楚,你需要继续玩Python了。”。自定义类仍然是一条路要走,magic
\uuuu str\uuu
钩子仍然是提供打印值的方法。因为它是一个自定义类,所以您仍然可以通过指定的API访问实例上的其他数据。