在 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
或者我对它的真正用途是将 HTTP 流式传输到服务器:
request = urllib2.Request(url, magic_str)
显然存在这样的事情。查看下面的代码以有效地将文件流式传输到服务器(来自这个问题)。
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)
但是我的情况不同,因为我正在构建要流式传输到服务器的字符串。