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:
- Il sottoinsieme dei programmi Pythonic potrebbe essere vuoto. Non abbiamo trovato alcun programma che possa soddisfare i nostri assiomi in Motivo .
- Potrebbe accadere che questo insieme di assiomi risulterebbe ambiguo (incoerente o incompleto). Quindi il nostro assunto originario sull'esistenza di programmi Pythonic sarebbe sbagliato.
- 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"?