【发布时间】:2013-02-16 07:32:16
【问题描述】:
在 Python 中,我可以构建一个类似于字符串但在内部迭代字符串序列的变量吗?
例如
def function_a():
for i in xrange(100000000):
yield str(i)
这将遍历一个字符串列表,并且它会有效地完成它 - 一次只在内存中保留一个字符串。但我想要的是这样的:
''.join([s for s in function_a()])
但我敢打赌,这只是做天真的事情,并遍历整个集合并将它们全部连接成内存中的一个大字符串。另一个问题是我想要一个变量,我不想让用户接触到实际执行联接的丑陋工作。所以也许用户会做这样的事情:
magic_str = get_long_but_memory_efficient_str()
然后使用它来有效地打印到屏幕上(并随时释放内存):
print magic_str
或者我的 real 用途是 HTTP 流到服务器:
request = urllib2.Request(url, magic_str)
显然存在这种类似的东西。查看下面的代码,以有效地将文件流式传输到服务器 (from this question)。
f = open('somelargefile.zip','rb')
mmapped_file_as_string = mmap.mmap(f.fileno(), 0, access=mmap.ACCESS_READ)
request = urllib2.Request(url, mmapped_file_as_string)
request.add_header("Content-Type", "application/zip")
response = urllib2.urlopen(request)
但我的情况不同,因为我正在构建要流式传输到服务器的字符串。
【问题讨论】: