literal ay isang proyekto upang lumikha ng isang paraan upang bumuo ng Python code sa Python code. & Nbsp; Sa halip ng pagkakaroon ng string literals ng Python code, ginagamit mo literal.py bagay na Naaalala ng mga pagpapatakbo na ginawa sa kanila, at ang kasaysayan ng mga operasyon ay ang resultang Python programa.
Ito ay lamang ng isang eksperimento na Nais kong upang i-play na may; Ito ay kapaki-pakinabang ay hindi napatunayan, at higit pa kaysa sa malamang na ito ay bumalibag bilang isang Nabigo ang eksperimento. Kaya gamitin may pag-iingat at pag-iingat.
Mabilisang pangkalahatang-ideya
-import literal
@ Literal.py
def unpack_octet (x, kargamento, offset, unpack_from):
& Nbsp; x <<= unpack_from ('B', kargamento, offset)
& Nbsp; offset + 1 =
-print (unpack_octet ())
Nagbibigay:
x = unpack_from ('B', kargamento, offset)
offset + 1 =
O isa pang halimbawa na ginamit upang likhain unpackers argumento para sa AMQP protocol:
def alisan ng laman (pamamaraan):
& Nbsp; @ literal.py
& Nbsp; def katawan (p, kargamento, offset, unpack_from, argtuple, ssize):
& Nbsp; mga patlang = method.fields
& Nbsp; pangalan = p.tuple (* self.field_names)
& Nbsp; para i, fset sa magbilang (patlang):
& Nbsp; kung Len (fset) == 1:
& Nbsp; para sa field sa fset:
& Nbsp; name = p.var (field.name)
& Nbsp; kung field.format == '*':
& Nbsp; # Ito ay isang string kargamento,
& Nbsp; # Hindi mo na kailangang ma-unpack
& Nbsp; pangalang <<= kargamento [offset: offset + ssize]
& Nbsp; offset + = ssize
& Nbsp; iba pa:
& Nbsp; Ang nag-iisang field # upang ma-unpack
& Nbsp; pangalang <<= unpack_from (struct_format (field.format),
& Nbsp; kargamento, offset) [0]
& Nbsp; offset + = field.size
& Nbsp; iba pa:
& Nbsp; # Isang listahan ng mga field upang ma-unpack
& Nbsp; ang mga p.tuple = (* fset.names)
& Nbsp; ang mga <<= unpack_from (struct_format (fset.format),
& Nbsp; kargamento, offset)
& Nbsp; offset + = sum (f.size para sa f fset)
& Nbsp; bumalik mga pangalan
. & Nbsp; return katawan () as_fun (lambda kargamento, offset: 1,
& Nbsp; method.name)
Gusto bumuo ng ang mga sumusunod na code para sa AMQP paraan basic_deliver:
def maghatid ng (kargamento, offset):
& Nbsp; ssize = unpack_from ('B', kargamento, offset) [0]
& Nbsp; offset + 1 =
& Nbsp; consumer_tag = kargamento [offset: offset + ssize]
& Nbsp; offset + = ssize
& Nbsp; delivery_tag, redelivered, ssize = unpack_from ('QBB', kargamento, offset)
& Nbsp; offset + = 10
& Nbsp; exchange = kargamento [offset: offset + ssize]
& Nbsp; offset + = ssize
& Nbsp; ssize = unpack_from ('B', kargamento, offset) [0]
& Nbsp; offset + 1 =
& Nbsp; routing_key = kargamento [offset: offset + ssize]
& Nbsp; offset + = ssize
& Nbsp; return (consumer_tag, delivery_tag, redelivered,
& Nbsp; exchange, routing_key)
Higit pang mga papeles na darating.
Pag-install
Maaari mong i-install literal alinman sa pamamagitan ng Python Package Index (PyPI) o mula sa mapagkukunan.
Upang i-install gamit ang buto ng bungang-kahoy:
buto ng bungang-kahoy-install literal
Upang i-install gamit ang easy_install:
& Nbsp; easy_install literal
Kung iyong na-download ng isang pinagmulan tarball maaari mo itong i-install sa pamamagitan ng paggawa ng sumusunod:
& Nbsp; python setup.py build
# Python setup.py i-install # bilang root
Bug tracker
Kung mayroon kang anumang mga mungkahi, mga ulat ng bug o annoyances mangyaring iulat ito sa aming isyu tracker sa http://github.com/ask/literal.py/issues/
-aambag
Pagpapaunlad ng literal.py ang mangyayari sa Github: http://github.com/ask/literal.py
Lubos na Ikaw ay hinihikayat na makilahok sa pag-unlad. . Kung hindi mo gusto ang Github (para sa ilang kadahilanan) maaari kang magpadala ng mga regular na patch
Mga Kinakailangan :
- Python
Mga Komento hindi natagpuan