Python-slotargumenttype

Fa via App Store Les dette innlegget i var app!

Skriv inn gjengede parametere automatisk i Python.

Jeg driver for det meste pythonskript fra kommandolinjen i rorledninger, og sa er argumentene mine alltid strenge som ma v re gjengitt av typen til riktig type. Jeg lager mange sma skript hver dag og skriver inn hver parameter for hvert skript tar mer tid enn det skal.

Er det en kanonisk mate a automatisk skrive kaste parametere for en funksjon?

Jeg har utviklet en dekorator til a gjore det jeg vil ha hvis det ikke er en bedre mate. Dekoratoren er autocasten fxn nedenfor. Den dekorerte fxn er fxn2 i eksemplet. Merk at i slutten av kodeblokken passerte jeg 1 og 2 som strenger, og hvis du kjorer skriptet, vil det automatisk legge til dem. Er dette en god mate a gjore dette pa?

EDIT: For alle som kommer hit og onsker den oppdaterte og konsise arbeidsversjonen, ga her:

Og her er ogsa en rask arbeidsversjon basert pa ovenfor:

Hvis du vil automatisk konvertere verdier:

Du kan justere boolify for a godta andre boolske verdier hvis du vil.

Du kan bare bruke vanlig eval til a skrive inn streng hvis du stoler pa kilden:

Men hvis du ikke stoler pa kilden, kan du bruke literal_eval fra ast-modulen.

Rediger: Som Ned Batchelder kommentar vil den ikke akseptere ikke-noterte strenger, sa jeg la til en losning, ogsa et eksempel pa autocaste decorator med sokeord argumenter.

Jeg kan tenke deg at du kan lage et typesignatursystem med en funksjonskunstner, akkurat som du har, bare en som tar argumenter. For eksempel:

En slik dekorator kan bygges ganske enkelt. Noe som dette (EDIT – works!):

Og akkurat slik kan du na imbue funksjoner med type signaturer!

I utgangspunktet er dette en type eksplisitt versjon av @ utdemirs metode.

Hvis du analyserer argumenter fra kommandolinjen, bor du bruke argparse-modulen (hvis du bruker Python 2.7).

Hvert argument kan ha en forventet type, sa a vite hva du skal gjore med det, bor v re relativt grei. Du kan selv definere dine egne typer.

. ganske ofte bor kommandolinjestrengen i stedet tolkes som en annen type, som en float eller int. Typegjengivelsen for sokeordet add_argument () tillater at alle nodvendige typekontroll og typeomregninger skal utfores. Vanlige innebygde typer og funksjoner kan brukes direkte som verdien av typen argument:

Det er noen problemer i koden din.

Dette vil alltid sjekke for True fordi du tester mot strengene ‘True’ og ‘False’.

Det er ikke en automatisk tvang av typer i python. Dine argumenter nar du mottar via * args og ** Kwargs, kan v re noe. Forst vil se etter liste over verdier (hver av dem kan v re hvilken som helst datatype, primitiv og kompleks) og andre vil se etter en kartlegging (med gyldig kartlegging mulig). Sa hvis du skriver en dekorator, vil du ende opp med en god liste over feil sjekker.

Normalt, hvis du onsker a sende inn str, akkurat nar funksjonen er pakalt, skriv inn den til streng via (str) og send den.

Jeg vet at jeg kom sent pa dette spillet, men hva med eval?