Fornire una definizione più formale del termine "pythonic" rispetto a PEP8?

6

Per me come programmatore di python che ha una definizione formale per il termine "pythonic" sarebbe molto più importante e meno soggettivo rispetto a chiedere più retorica (non formale) domande . Ciò potrebbe portare a una migliore comunicazione mediante argomentazione meno soggettiva (come discusso in qui ) .

PEP8 di Guido è assunto come punto di partenza nonostante alcuni dogmatismi religiosi (ad esempio PEP20 è più assiomatico, più corto e più semplice, ma non ha codice). Avere identificato minimalismo , leggibilità (comprensione umana) e inequivocità (codice esplicito) è in realtà la stessa cosa che parafrasare PEP20. Ma è possibile riscrivere zen di python in python? Ovviamente la stampa ('Beautiful is better than brutto') non cattura python in python ;-) Qualche idea su questo?

In definitiva vorrei avvicinarmi a un'interpretazione più logica o matematica della questione. Argomento nella forma del codice che risponde al motivo per cui la famiglia di frammenti A è pythonic rispetto alla famiglia di frammenti B è accettabile.

EDIT Se possibile, cerca di ridurre la risposta al seguente schema. Prendiamo in considerazione tutti i possibili testi del programma sintatticamente corretti generati da qualche procedura ( ad es. ). Si noti che consideriamo solo i programmi scritti in python (che è un linguaggio formale con relativa grammatica). Inoltre, essere sintatticamente corretti non significa la correttezza semantica (i programmi possono essere bacati o senza uno scopo ovvio). Inoltre osserviamo (assumiamo) che l'ultima famiglia POmega di tutti i programmi sintatticamente corretti in python deve contenere un sottoinsieme di programmi che sono chiamati Pythonic . Ora, per discutere su cosa significhi essere pitonici, useremo un metodo formale - un altro linguaggio chiamato Reason che sarebbe meno ambiguo (coerente, completo) del linguaggio naturale. Definiremo una mappatura da programmi in Omega in Motivo . Tale mappatura chiameremo interpretazione. Creeremo anche più mappature in modo simile (ad es. in ) per tutti i singoli simboli in Python e le loro combinazioni (dichiarazioni). Ora, se discutessimo delle immagini di tali mappature, lo faremo sotto forma di dimostrazioni nella lingua Reason . La domanda sarebbe se esistesse effettivamente un sottoinsieme Pythonic possiamo risalire da aximos in Reason costruito / riformulato da "Zen of python" o da altri gruppi motivanti di concetti? Di fatto, l'intero nucleo deduttivo del linguaggio Reason verrebbe creato da "Zen" o PEP8. Dovremo dimostrare che ogni programma di Pythonic consisterà solo in dichiarazioni per immagini di cui Reason può essere mostrato per soddisfare gli assiomi iniziali del linguaggio del modello. Risultati diversi sono plausibili:

  1. Il sottoinsieme dei programmi Pythonic potrebbe essere vuoto. Non abbiamo trovato alcun programma che possa soddisfare i nostri assiomi in Motivo .
  2. Potrebbe accadere che questo insieme di assiomi risulterebbe ambiguo (incoerente o incompleto). Quindi il nostro assunto originario sull'esistenza di programmi Pythonic sarebbe sbagliato.
  3. In alternativa, lo "Zen" assiomatico potrebbe essere abbastanza semplice e così ben scelto che l'insieme Pythonic non è vuoto. Ora la domanda è che tale insieme (coerente, completo) sia di valore pratico, cioè possiamo dire che tale insieme di assiomi è davvero una definizione formale di "pythonic"?

Questa è una bozza di come si può provare ad avvicinarsi alla risposta alla domanda in modo formale. Gradirei raccomandazioni su un approccio più elegante per la soluzione del problema (tutto tranne che ignorarlo). Ma alla fine è importante per me vedere come assomiglia ad un tale insieme di assiomi. Quindi permetterà in modo preciso (quantitativo) di chiedere e provare a spiegare domande come perché i programmi hanno qualità "pitoniche" una volta scritte secondo i seguenti "dogmi" di pitone?

BTW Si può costruire un modello più sofisticato di Reason introducendo un equivalente di "human factor" - uno sviluppatore software dei programmi. Allora la domanda sarebbe: può l'uomo rivendicare formalmente il programma che appartiene al sottogruppo "Pythonic"?

    
posta Yauhen Yakimovich 09.01.2012 - 23:34
fonte

4 risposte

11

Una definizione formale del termine "pythonic" sarebbe in gran parte impossibile.

È impossibile come definizione per "estetico" o "conveniente" o "delizioso".

Non può essere meno soggettivo di quello che è ora.

Perché no?

Perché Python è semplicemente un giudizio estetico basato sulle opinioni di un numero piuttosto ampio di persone. I punti GvR sono rispettati, ma non hanno forza di legge. Molte persone scrivono il codice per il mondo Python e i loro vari input influenzano altri sviluppatori. È un vasto social network di persone che amano (e non amano) il codice che leggono.

Ultimately I would like to get closer to more logical or mathematical interpretation of the matter

Faresti bene a iniziare con lo studio dell'arte, dell'estetica e della filosofia. Quindi, dopo aver imparato l'estetica e la morale, passa all'ontologia in modo da poter codificare ciò che hai imparato sulla verità e la bellezza. Una volta terminato, avrai una definizione formale di Pythonic insieme a definizioni formali di tutti i vari valori soggettivi che conserviamo.

axioms ... built/reformulated from "Zen of python"

È una poesia. Il suo valore è interamente estetico. Quali altre prove occorre che Pythonic sia un giudizio di valore basato sulla profondità dell'esperienza?

    
risposta data 10.01.2012 - 02:06
fonte
5

Il buon codice è un buon codice se una persona lo ritiene "Pythonic" o meno. Se è scalabile, è testato, documentato, facilmente leggibile (non usa hack di strane lingue, ecc.) E segue i principi architettonici del suono (DRY, SOLID, ecc.) E alla fine della giornata, a chi importa?

Poiché lo "zen" è completamente soggettivo per il lettore, non esiste un modo misurabile per definire il codice "Pythonic" senza che si scateni un dibattito religioso. Le migliori pratiche e la standardizzazione (come PEP8) sono un buon inizio per raggiungere la qualità attraverso la coerenza automatizzata, ma non forniscono assolutamente una definizione completa del codice "Pythonic".

    
risposta data 10.01.2012 - 00:24
fonte
0

Per produrre un test per "" pythonicity "" come indicato in questo La citazione di Guido è ovviamente un'impresa non banale, ma il test in sé è molto bello da avere. Ora la procedura corrente è ben nota:

  1. Utilizza strumenti di controllo automatico della qualità come pep8.py o pylint (come indicato da Demian)
  2. Esegui codereview , dove il codice viene testato per la pitonicità mediante revisione basata sull'uomo.
  3. Finalmente puoi chiedere la community o Guido per l'opinione, se la revisione del codice non viene risolta.

Tutto ciò può essere parzialmente automatizzato in una certa misura. Infatti, comunità come i progetti Q & A Stack Exchange stanno facilitando il test del codice per "pythonicity" in questo momento.

C'è un modo migliore per formalizzare un test del genere? Per quanto difficile possa sembrare, un test non supervisionato per la pitonicità sarebbe in grado di formalizzare la "bellezza" del codice rendendo superfluo l'interpretazione umana. Soprattutto includerà pienamente il giudizio umano. Argomenti come questo stanno diventando meno filosofici e molto più pratici se vengono studiati in AI teorici o in computer science simili.

Ora non ti consiglio di rispondere ulteriormente a questa domanda a meno che tu non pensi di avere una soluzione.

    
risposta data 14.01.2012 - 15:20
fonte
-4
funcs = dir(__builtins__)
help funcs[1]

È il mio preferito

    
risposta data 10.01.2012 - 00:15
fonte

Leggi altre domande sui tag