metref

Gebruikt de verklaring om complexe dereferences te vereenvoudigen - enigszins zoals in Pascal of JavaScript
Download nu

metref Rangschikking & Samenvatting

Advertentie

  • Rating:
  • Vergunning:
  • Other/Proprietary Li...
  • Prijs:
  • FREE
  • Naam uitgever:
  • Jonathan Eunice
  • Uitgever website:
  • http://bitbucket.org/jeunice/

metref Tags


metref Beschrijving

Withref is een Python-module die Python's maakt met een verklaring in staat om complexe derferences te vereenvoudigen. Dit is wat ik in eerste instantie naïef dacht dat de verklaring was, vergelijkbaar met de verklaring van half-onthouden Pascal.Het typische Python-gebruik is een complexere bewaker over de invoer- en exitpunten voor het gebruik van een object. Zie b.v. Dit EFFBOT-artikel. Maar metref maakt dit eenvoudiger "Geef me gewoon het Derfeerced-object, alsjeblieft" gebruik case-work ook.usage van Withref Import Ref van EasyDict Import EasyDict # EasyDict gebruikt alleen voor demonstratiedoeleinden. Handige manier om # te maken Dict-vermeldingen toegankelijk als dot-deferenable eigenschappen. A = easydict ({'B': {'C': {'C1': 1}, 'D': 44.1}}) met REF (ABC) als C: c.c1 = 99 Print A A_IDEAL = EasyDict ({ 'B': {'C': {C ': {' C1 ': 99},' D ': 44.1}}) Assert A == A_IDEAL HET WERKT MET ARRAY-STEY-referenties ook, natuurlijk: met ref (a ) Zoals CC: C = 99 Assert A == A_IDEAL, maar pas op over-derferencing! Hoewel dit correct werkt :: Met REF (ABCC1) als C1: Print C1 Assert C1 == 99 Dit doet niet: met Ref (ABCC1) als C1: C1 = 12345 Assert C1 == 12345 Assert ABCC1 == 99 # Met zware hartelijke Pascal wordt Ref niet ingebouwd in de juiste taal. En in tegenstelling tot Perl is Python minder enthousiast om lvalues te leveren voor elke vermelding van een variabele of waarde. Dientengevolge kan `` Ref`` "de * waarde * van de volledig uitgesproken` `C1`", maar niet de toewijsbare * lvalue *. Als Pascal's `` met`, `" Ref` "verwijdert n- 1 lagen van de omsluitstructuur voor waarden, maar alleen N-2 voor opdracht. Toch kan dit in complexe meerlaagse structuren een leuke vereenvoudiging zijn :: Met ref (app.config.server.wsgi) als Wsgi: Wsgi.logger = Sommige_Logger Wsgi.Debug_level = 4 Wsgi.port = 8080 Debatbaar verslaat :: app.config.server.wsgi.logger = some_logger app.config.server.wsgi.debug_level = 4 app.config.server.wsgi.port = 8080voor eenvoud en helderheid. Ik zie veel configuratiecode die constant hetzelfde lang herhaalt Multi-level dereferenties. Die stijl is repetitief (droog) en neigt naar linkerregelsblokken, die zowel het begrip van het programma belemmeren. Het gebruik van de met de verklaring is een nette manier om te vereenvoudigen en tegelijkertijd een beetje extra visuele structuur toe te voegen. En terwijl opdracht ("Lvalue productie") niet altijd mogelijk is, zijn er nog steeds enkele interessante trucs mogelijk met een eenvoudige prijs-productie: met REF ("Dit is een string" ) als t: print TalternativeThile Yadda.yadda.yadda referencing is al te vaak, een kan een meer proximate variabele opdracht :: WSGI = app.config.server.wsgi WSGI .logger = some_logger wsgi.debug_level = 4 Wsgi.port = 8080 Dit ontbreekt de meer ingesprongen structuur van de metref-aanpak, maar is nog steeds veel de voorkeur aan wat u vaak in het veld vindt.See Alsothe met Hacks-module, waaronder vele andere leuke hacks (Multi-line lambdas, nieuwe loopingstructuren, enz.) - Vereist ook de byteplay-module die actief introspecteert en Munges Python Bytecode ("Gevaar, zal Robinson! Gevaar!"), en is niet bijgewerkt om verder te werken dan Python 2.6 . -Matige toekomstige extensies "Withacks" shows, met behulp van intros Perenie We zouden de LVALUE van het roepobject kunnen bepalen, zelfs in de rand-zaak waar het een bladknooppunt is van de omsluitstructuur. Dit zou geen bytecode-veranderingen vereisen en moet compatibel zijn met moderne versies van Python (bijv. 2.7.x en 3.x). Of die truc eenvoudig kan worden gedaan, draaglijk, rotsvast, betrouwbaar, en transparant genoeg om te voldoen aan degenen die Code de modules die de neiging hebben om dit soort derferencing-vereenvoudiging nodig te hebben - dwz Complexe modules die vaak worden gebruikt in productie-instellingen, waarin ze het begrijpelijkerwijs aftrekken om eventuele mogelijke fouten of een prestatie-impedantie te introduceren - dat is de belangrijkste open vraag. Installatie PIP-installatie met REEF om de test- en demonstratiecode te gebruiken, zoals hier, zoals hier wordt weergegeven :: PIP Installeer EasyDict (u moet deze mogelijk voorvoegen met "sudo" om de installatie te autoriseren.) De homepage van het product


metref Gerelateerde software

xworkflows

Een bibliotheek implementeren van workflows (of state-machines) voor Python-projecten ...

80

Downloaden