Sowas kommt raus, wenn man nicht schlafen kann. ;P

Code-Stücke können hier veröffentlicht werden.
Antworten
Benutzeravatar
snafu
User
Beiträge: 6744
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Eine Art universelle Mapping-Funktion. ^^

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']
funkheld
User
Beiträge: 258
Registriert: Sonntag 31. Oktober 2010, 09:26

Na ,ich würde ein deiner Stelle lieber weiterschlafen.... :D bevor man so etwas in die unfreie Welt setzt... :K
Antworten