Portál AbcLinuxu, 15. července 2025 02:41
Dalsí kousek pythoního kódu, na který jsem pyšný.
Nejsem pyšný na sebe, nejde o nic složitého ani objevného. Jsem pyšný na python, protože jsem zase jednou zjistil že jsem neudělal chybu, když jsem se vybodnul na Javu.
O co jde ? Potřebuji předem neznámou datovou strukturu serializovat do ekvivalentního pythoního kódu. Není to žádná raketová věda, ale čekal jsem spoustu otravování s tím, aby byl výsledek syntakticky košer, aby to pobralo vnořené struktury, aby se to dalo snadno rozšiřovat o nové datové typy. Když jsem se konečně přinutil přestat "psát Céčko v pythonu" a začal "přemýšlet v pythonu", vyplynulo to samo, s jednoduchostí a samozřejmostí, která mi ještě ted bere dech.
# convert data to code import types data2code = { types.DictType: lambda x: "{" + ", ".join(["%s: %s" % (textualize(k), textualize(v)) for k,v in x.items()]) + "}", types.TupleType: lambda x: "(" + ("".join([ textualize(i)+", " for i in x ])) + ")", types.ListType: lambda x: "[" + (", ".join([ textualize(i) for i in x ])) + "]", types.StringType: lambda x: '"%s"' % x, types.UnicodeType: lambda x: '"%s"' % x, types.IntType: lambda x: str(x), types.BooleanType: lambda x: str(x), types.NoneType: lambda x: "None", } # shorthand for converting of given val def textualize(val): return data2code[type(val)](val)
Tiskni
Sdílej:
repr(object)Return a string containing a printable representation of an object. This is the same value yielded by conversions (reverse quotes). It is sometimes useful to be able to access this operation as an ordinary function. For many types, this function makes an attempt to return a string that would yield an object with the same value when passed to eval().
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.