Code: Alles auswählen
from collections import Callable, Iterable
from functools import partial
from itertools import islice, repeat
def transfer(src, dest=str, maxitems=None, terminator='', chunksize=None):
if isinstance(src, Callable):
if chunksize:
src = partial(src, chunksize)
# XXX: be careful not to pass functions, that never
# reach the "terminator" - you could end up in
# an infinite loop crashing your system :-(
it = iter(src, terminator)
elif not isinstance(src, Iterable) or isinstance(src, basestring):
it = repeat(src)
else:
it = src
return map(dest, islice(it, maxitems))
Code: Alles auswählen
>>> transfer(os.urandom, maxitems=5, chunksize=10)
['\x15=\xd0X\xd1\xad\xb1\xd2\xe6\x00',
'\xd3Q0\xcdA6\xd1\xfd\xe2\xf9',
"\xf6'4\x1fV\xfd\xfcM\xc2^",
'\xdbEm\xc8\xc8\x1e\xf7\xcd\xa7\xe1',
'7\xac\xc3\xbbQC\xe8\x03\xc2\x10']
>>> transfer(open('test.txt').read, maxitems=2, chunksize=4)
['bla\n', 'blup']
>>> transfer(open('test.txt').read, maxitems=23, chunksize=4)
['bla\n', 'blup', 'p\nma', 'uz']
>>> transfer(xrange(7), int, maxitems=5, chunksize=4)
[0, 1, 2, 3, 4]
>>> import string, random
>>> transfer(string.ascii_letters, random.choice, 3)
['r', 'b', 'B']