Literal er et projekt for at skabe en måde at generere Python kode med Python kode. & Nbsp; I stedet for at Strenglitteraler af Python kode, du bruger literal.py objekter, der husker de operationer, gjort for dem, og historien om operationer er den resulterende Python program.
Dette er blot et eksperiment, som jeg ønskede at spille med; Det er nytten ikke er bevist, og mere end sandsynligt vil blive smidt væk som en mislykket eksperiment. Så brug med omhu og forsigtighed.
Hurtig oversigt
import bogstavelig
@ Literal.py
def unpack_octet (x, nyttelast, offset, unpack_from):
& Nbsp; x <<= unpack_from ('B', nyttelast, offset)
& Nbsp; offset + = 1
print (unpack_octet ())
Giver:
x = unpack_from ('B', nyttelast, offset)
offset + = 1
Eller et andet eksempel bruges til at skabe argument udpakkere for AMQP protokol:
def udpakning (metode):
& Nbsp; @ literal.py
& Nbsp; def krop (p, nyttelast, offset, unpack_from, argtuple, ssize):
& nbsp; Fields = method.fields
& Nbsp; navne = p.tuple (* self.field_names)
& Nbsp; thi jeg, fset i optælle (felter):
& Nbsp; hvis len (fset) == 1:
& Nbsp; for feltet i fset:
& Nbsp; name = p.var (field.name)
& Nbsp; hvis field.format == '*':
& Nbsp; # Dette er en streng nyttelast,
& Nbsp; # behøver ikke at pakke ud
& Nbsp; navn <<= nyttelast [offset: offset + ssize]
& Nbsp; offset + = ssize
& Nbsp; andet:
& Nbsp; # Et enkelt felt til at pakke
& Nbsp; navn <<= unpack_from (struct_format (field.format)
& Nbsp; nyttelast, offset) [0]
& Nbsp; offset + = field.size
& Nbsp; andet:
& Nbsp; # En liste over felt at pakke
& Nbsp; disse = p.tuple (* fset.names)
& Nbsp; disse <<= unpack_from (struct_format (fset.format)
& Nbsp; nyttelast, offset)
& Nbsp; offset + = sum (f.size for f i fset)
& Nbsp; returnere navne
. & Nbsp; tilbagevenden krop () as_fun (lambda nyttelast, offset: 1,
& Nbsp; method.name)
Vil få følgende kode for AMQP metode basic_deliver:
def levere (nyttelast, offset):
& Nbsp; ssize = unpack_from ('B', nyttelast, offset) [0]
& Nbsp; offset + = 1
& Nbsp; consumer_tag = nyttelast [offset: offset + ssize]
& Nbsp; offset + = ssize
& Nbsp; delivery_tag, tilbageleveret, ssize = unpack_from (»QBB«, nyttelast, offset)
& Nbsp; offset + = 10
& Nbsp; udveksling = nyttelast [offset: offset + ssize]
& Nbsp; offset + = ssize
& Nbsp; ssize = unpack_from ('B', nyttelast, offset) [0]
& Nbsp; offset + = 1
& Nbsp; routing_key = nyttelast [offset: offset + ssize]
& Nbsp; offset + = ssize
& Nbsp; afkast (consumer_tag, delivery_tag, tilbageleveret,
& Nbsp; udveksling, routing_key)
Mere dokumentation til at komme.
Installation
Du kan installere bogstavelig enten via Python Package Index (PyPI) eller fra kilden.
Sådan installeres ved hjælp pip:
pip installere bogstavelig
Sådan installeres ved hjælp easy_install:
& Nbsp; easy_install bogstavelig
Hvis du har hentet en kilde tar-arkiv kan du installere den ved at gøre følgende:
& Nbsp; python setup.py build
# Python setup.py installere # som root
Bug tracker
Hvis du har forslag, fejlrapporter eller irritationsmomenter bedes du rapportere dem til vores problem tracker på http://github.com/ask/literal.py/issues/
Bidrag
Udvikling af literal.py sker på Github: http://github.com/ask/literal.py
Du er stærkt tilskyndes til at deltage i udviklingen. . Hvis du ikke kan lide Github (eller anden grund) er du velkommen til at sende regelmæssige patches
Krav :
- Python
Kommentarer ikke fundet