Python: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
→Turtle Graphics: Irrilevante |
→Sintassi: Spostata sezione |
||
Riga 63:
* PyS60: implementazione per [[Symbian OS]];<ref>[https://sourceforge.net/projects/pys60/ The Python programming language for S60 mobile phones]</ref>
* [[PyPy]]: scritto in Python stesso. Ha tra i principali obiettivi la semplificazione dello sviluppo del linguaggio e la sua ottimizzazione in termini prestazionali<ref>[http://codespeak.net/pypy/dist/pypy/doc/ PyPy] {{webarchive|url=https://web.archive.org/web/20070113051048/http://codespeak.net/pypy/dist/pypy/doc/ |data=13 gennaio 2007 }}</ref>;
== Tipi di dati e strutture ==▼
Essendo Python a [[tipizzazione dinamica]], tutte le variabili sono, in realtà, [[Puntatore (programmazione)|puntatori]] a [[Oggetto (informatica)|oggetto]]. Per esempio, se a una variabile è assegnato un valore numerico intero, subito dopo può essere assegnata una stringa o una lista. Gli oggetti sono invece dotati di tipo.▼
Python prevede un moderato controllo dei tipi al momento dell'esecuzione, ovvero [[runtime]]. I tipi numerici godono di conversione implicita, perciò è possibile, per esempio, moltiplicare un [[numero complesso]] per un intero. Non esiste invece conversione implicita tra numeri e stringhe alfanumeriche, perciò un numero è un argomento non valido per le operazioni su stringhe, a differenza di quanto avviene per esempio in linguaggio [[PHP]].▼
Python dispone di vari modelli/librerie da utilizzare per fornire funzionalità senza dovere scrivere codice, come per esempio il modulo ''turtle graphics''<ref>{{Cita web|url=https://docs.python.org/3.3/library/turtle.html?highlight=turtle|titolo=24.1. turtle — Turtle graphics — Python 3.3.7 documentation|sito=docs.python.org|accesso=2020-05-28}}</ref> (per disegnare), ''copy''<ref>{{Cita web|url=https://docs.python.org/2/library/copy.html|titolo=8.17. copy — Shallow and deep copy operations — Python 2.7.18 documentation|sito=docs.python.org|accesso=2020-05-28}}</ref> (per creare copie di [[Oggetto (informatica)|oggetti]]), ''random''<ref>{{Cita web|url=https://docs.python.org/3/library/random.html|titolo=random — Generate pseudo-random numbers — Python 3.8.3 documentation|sito=docs.python.org|accesso=2020-05-28}}</ref> (per generare numeri casuali), ''sys''<ref>{{Cita web|url=https://docs.python.org/2/library/sys.html|titolo=28.1. sys — System-specific parameters and functions — Python 2.7.18 documentation|sito=docs.python.org|accesso=2020-05-28}}</ref> (per interagire da riga di comandi con l'interprete) e ''time'' (per operare con unità di tempo e date).▼
Python mette a disposizione un gran numero di [[Tipo di dato|tipi base]], essenzialmente numerici e contenitori. Caratteristica distintiva è il supporto nativo, oltre che ai classici tipi quali interi, [[floating point]] (numeri con virgola mobile) e stringhe alfanumeriche, anche a tipi più evoluti quali interi a grandezza arbitraria, numeri complessi, ''liste'', ''insiemi e'' ''dizionari''. Non è invece previsto un tipo specifico per i caratteri.▼
Molti altri tipi sono importabili da librerie standard e nuovi tipi possono essere creati attraverso le ''classi''.▼
=== Tipi numerici ===▼
I tipi [[Numero intero (informatica)|interi]] (<code>int</code>) e [[floating point]] (<code>float</code>) hanno una dimensione dipendente dall'hardware e dall'implementazione dell'interprete, in genere 32 e 64 [[bit]]. Sono previsti, in modo nativo, numeri interi arbitrariamente grandi (<code>long</code>, che diventano l'opzione di default per gli interi a partire da Python 3.0) e numeri complessi (<code>complex</code>).▼
Python prevede tutti i principali operatori logici e aritmetici fra numeri, compreso l'elevamento a potenza. Il tipo booleano (<code>bool</code>) appartiene anch'esso alla categoria dei numeri.▼
Dalla versione 2.4 di Python sono disponibili come libreria<ref>{{Cita web|url=https://docs.python.org/2/library/decimal.html|titolo=9.4. decimal — Decimal fixed point and floating point arithmetic — Python 2.7.18 documentation|sito=docs.python.org|accesso=2020-05-28}}</ref> anche i numeri decimali (<code>decimal</code>), ossia numeri in virgola mobile con precisione illimitata, come quelli disponibili in [[REXX]] o in [[Cobol]], che non soffrono di problemi di arrotondamento e stabilità tipici dei numeri [[floating point]] classici.▼
=== Contenitori ===▼
Python considera in generale come ''contenitori'' gli oggetti che prevedono la possibilità di iterare su un insieme di elementi, perciò utilizzabili all'interno di contesti quali il ciclo <code>for</code> e funzioni quali somma, ricerca e ordinamento. I contenitori in genere permettono di contenere dati di tipo eterogeneo.▼
Per quanto riguarda i contenitori standard propriamente detti, sono classificabili come ''sequenze'', ''insiemi'' e ''dizionari''. I contenitori seguono una filosofia comune e condividono gran parte dei [[Metodo (programmazione)|metodi]].▼
Le ''sequenze'' sono contenitori ordinati, che condividono metodi basati sull'ordinamento, l'indicizzazione intera e la creazione di sottosequenze tramite ''slicing''.▼
Le ''liste'' (<code>list</code>) sono sequenze estendibili, mentre le [[tupla|tuple]] (<code>tuple</code>) sono sequenze immutabili. Anche le [[Stringa (informatica)|stringhe]] alfanumeriche (<code>str</code> e <code>unicode</code>) sono considerate sequenze. A partire da Python 3.0, i tipi <code>str</code> e <code>unicode</code> sono unificati e compare il tipo <code>byte</code>, equivalente grosso modo a una stringa binaria.▼
Sono previste tutte le operazioni classiche sulle stringhe come concatenamento, formattazione, ricerca, sostituzione e così via. Le stringhe in Python sono sequenze immutabili, cosicché qualsiasi operazione che in qualche modo potrebbe alterare una stringa, per esempio la sostituzione di un carattere, restituisce in effetti una nuova stringa, come avviene in Java e in [[C sharp|C#.]]▼
Altri contenitori sono i ''dizionari'' (<code>dict</code>), conosciuti in altri contesti con il nome di [[hash table]] oppure [[array associativo|array associativi]]. Esiste una sintassi per la creazione di dizionari, i cui elementi sono specificati da una coppia di dati separati da due punti ':'. Il primo elemento della coppia rappresenta l'indice, detto "chiave", e il secondo è il suo valore corrispondente. Infatti ogni elemento di un dizionario è detto anche "coppia chiave-valore".▼
Per esempio l'istruzione seguente crea un dizionario identificato come <code>diz</code> composto da due elementi le cui chiavi sono <code>wikipedia</code> e <code>wikiquote</code>'', rispettivamente'' e con associati i valori interi <code>40</code> e <code>60</code>: <syntaxhighlight lang="python">diz = {'wikipedia': 40, 'wikiquote': 60}</syntaxhighlight>▼
Le chiavi in un dizionario sono immutabili, mentre il valore corrispondente a ciascuna chiave è alterabile tramite un'assegnazione. La seguente istruzione modifica il valore corrispondente a "wikipedia", portandolo a 4500: <syntaxhighlight lang="python">diz['wikipedia'] = 4500</syntaxhighlight>▼
A partire dalla versione 2.7 di Python<ref>{{Cita web|url=https://docs.python.org/2.7/library/stdtypes.html|titolo=5. Built-in Types — Python 2.7.18 documentation|sito=docs.python.org|accesso=2020-05-28}}</ref> sono supportati anche gli insiemi (<code>set</code> e <code>frozenset</code>), ovvero insiemi non ordinati di oggetti ''hashable''.▼
=== Organizzazione a oggetti ===▼
Il [[sistema dei tipi]] Python è ben integrato con il sistema delle [[Classe (informatica)|classi]]. Anche se i tipi base non sono formalmente classi, come per esempio in [[C sharp|C#]], una classe può comunque ereditare da essi. In questo modo è possibile estendere stringhe, dizionari e perfino gli interi. È inoltre supportata l'[[ereditarietà multipla]].<ref>{{Cita web|url=https://pythonitalia.github.io/python-abc/Pyllole/85_Inheritance_Multiple.html|titolo=Ereditarietà multipla|sito=Python ABC|lingua=en|accesso=2020-05-28}}</ref>▼
Vengono supportate anche funzionalità estensive di [[Riflessione (informatica)|introspezione]] sui tipi e sulle classi. I tipi e le classi sono a loro volta oggetti che possono essere esplorati e confrontati. Gli [[Attributo (programmazione)|attributi]] sono gestiti in un dizionario.▼
== Sintassi ==
Riga 147 ⟶ 107:
a = b + 10; print("Hello world"); b = 243 - 23;
</syntaxhighlight>
▲== Tipi di dati e strutture ==
▲Essendo Python a [[tipizzazione dinamica]], tutte le variabili sono, in realtà, [[Puntatore (programmazione)|puntatori]] a [[Oggetto (informatica)|oggetto]]. Per esempio, se a una variabile è assegnato un valore numerico intero, subito dopo può essere assegnata una stringa o una lista. Gli oggetti sono invece dotati di tipo.
▲Python prevede un moderato controllo dei tipi al momento dell'esecuzione, ovvero [[runtime]]. I tipi numerici godono di conversione implicita, perciò è possibile, per esempio, moltiplicare un [[numero complesso]] per un intero. Non esiste invece conversione implicita tra numeri e stringhe alfanumeriche, perciò un numero è un argomento non valido per le operazioni su stringhe, a differenza di quanto avviene per esempio in linguaggio [[PHP]].
▲Python dispone di vari modelli/librerie da utilizzare per fornire funzionalità senza dovere scrivere codice, come per esempio il modulo ''turtle graphics''<ref>{{Cita web|url=https://docs.python.org/3.3/library/turtle.html?highlight=turtle|titolo=24.1. turtle — Turtle graphics — Python 3.3.7 documentation|sito=docs.python.org|accesso=2020-05-28}}</ref> (per disegnare), ''copy''<ref>{{Cita web|url=https://docs.python.org/2/library/copy.html|titolo=8.17. copy — Shallow and deep copy operations — Python 2.7.18 documentation|sito=docs.python.org|accesso=2020-05-28}}</ref> (per creare copie di [[Oggetto (informatica)|oggetti]]), ''random''<ref>{{Cita web|url=https://docs.python.org/3/library/random.html|titolo=random — Generate pseudo-random numbers — Python 3.8.3 documentation|sito=docs.python.org|accesso=2020-05-28}}</ref> (per generare numeri casuali), ''sys''<ref>{{Cita web|url=https://docs.python.org/2/library/sys.html|titolo=28.1. sys — System-specific parameters and functions — Python 2.7.18 documentation|sito=docs.python.org|accesso=2020-05-28}}</ref> (per interagire da riga di comandi con l'interprete) e ''time'' (per operare con unità di tempo e date).
▲Python mette a disposizione un gran numero di [[Tipo di dato|tipi base]], essenzialmente numerici e contenitori. Caratteristica distintiva è il supporto nativo, oltre che ai classici tipi quali interi, [[floating point]] (numeri con virgola mobile) e stringhe alfanumeriche, anche a tipi più evoluti quali interi a grandezza arbitraria, numeri complessi, ''liste'', ''insiemi e'' ''dizionari''. Non è invece previsto un tipo specifico per i caratteri.
▲Molti altri tipi sono importabili da librerie standard e nuovi tipi possono essere creati attraverso le ''classi''.
▲=== Tipi numerici ===
▲I tipi [[Numero intero (informatica)|interi]] (<code>int</code>) e [[floating point]] (<code>float</code>) hanno una dimensione dipendente dall'hardware e dall'implementazione dell'interprete, in genere 32 e 64 [[bit]]. Sono previsti, in modo nativo, numeri interi arbitrariamente grandi (<code>long</code>, che diventano l'opzione di default per gli interi a partire da Python 3.0) e numeri complessi (<code>complex</code>).
▲Python prevede tutti i principali operatori logici e aritmetici fra numeri, compreso l'elevamento a potenza. Il tipo booleano (<code>bool</code>) appartiene anch'esso alla categoria dei numeri.
▲Dalla versione 2.4 di Python sono disponibili come libreria<ref>{{Cita web|url=https://docs.python.org/2/library/decimal.html|titolo=9.4. decimal — Decimal fixed point and floating point arithmetic — Python 2.7.18 documentation|sito=docs.python.org|accesso=2020-05-28}}</ref> anche i numeri decimali (<code>decimal</code>), ossia numeri in virgola mobile con precisione illimitata, come quelli disponibili in [[REXX]] o in [[Cobol]], che non soffrono di problemi di arrotondamento e stabilità tipici dei numeri [[floating point]] classici.
▲=== Contenitori ===
▲Python considera in generale come ''contenitori'' gli oggetti che prevedono la possibilità di iterare su un insieme di elementi, perciò utilizzabili all'interno di contesti quali il ciclo <code>for</code> e funzioni quali somma, ricerca e ordinamento. I contenitori in genere permettono di contenere dati di tipo eterogeneo.
▲Per quanto riguarda i contenitori standard propriamente detti, sono classificabili come ''sequenze'', ''insiemi'' e ''dizionari''. I contenitori seguono una filosofia comune e condividono gran parte dei [[Metodo (programmazione)|metodi]].
▲Le ''sequenze'' sono contenitori ordinati, che condividono metodi basati sull'ordinamento, l'indicizzazione intera e la creazione di sottosequenze tramite ''slicing''.
▲Le ''liste'' (<code>list</code>) sono sequenze estendibili, mentre le [[tupla|tuple]] (<code>tuple</code>) sono sequenze immutabili. Anche le [[Stringa (informatica)|stringhe]] alfanumeriche (<code>str</code> e <code>unicode</code>) sono considerate sequenze. A partire da Python 3.0, i tipi <code>str</code> e <code>unicode</code> sono unificati e compare il tipo <code>byte</code>, equivalente grosso modo a una stringa binaria.
▲Sono previste tutte le operazioni classiche sulle stringhe come concatenamento, formattazione, ricerca, sostituzione e così via. Le stringhe in Python sono sequenze immutabili, cosicché qualsiasi operazione che in qualche modo potrebbe alterare una stringa, per esempio la sostituzione di un carattere, restituisce in effetti una nuova stringa, come avviene in Java e in [[C sharp|C#.]]
▲Altri contenitori sono i ''dizionari'' (<code>dict</code>), conosciuti in altri contesti con il nome di [[hash table]] oppure [[array associativo|array associativi]]. Esiste una sintassi per la creazione di dizionari, i cui elementi sono specificati da una coppia di dati separati da due punti ':'. Il primo elemento della coppia rappresenta l'indice, detto "chiave", e il secondo è il suo valore corrispondente. Infatti ogni elemento di un dizionario è detto anche "coppia chiave-valore".
▲Per esempio l'istruzione seguente crea un dizionario identificato come <code>diz</code> composto da due elementi le cui chiavi sono <code>wikipedia</code> e <code>wikiquote</code>'', rispettivamente'' e con associati i valori interi <code>40</code> e <code>60</code>: <syntaxhighlight lang="python">diz = {'wikipedia': 40, 'wikiquote': 60}</syntaxhighlight>
▲Le chiavi in un dizionario sono immutabili, mentre il valore corrispondente a ciascuna chiave è alterabile tramite un'assegnazione. La seguente istruzione modifica il valore corrispondente a "wikipedia", portandolo a 4500: <syntaxhighlight lang="python">diz['wikipedia'] = 4500</syntaxhighlight>
▲A partire dalla versione 2.7 di Python<ref>{{Cita web|url=https://docs.python.org/2.7/library/stdtypes.html|titolo=5. Built-in Types — Python 2.7.18 documentation|sito=docs.python.org|accesso=2020-05-28}}</ref> sono supportati anche gli insiemi (<code>set</code> e <code>frozenset</code>), ovvero insiemi non ordinati di oggetti ''hashable''.
▲=== Organizzazione a oggetti ===
▲Il [[sistema dei tipi]] Python è ben integrato con il sistema delle [[Classe (informatica)|classi]]. Anche se i tipi base non sono formalmente classi, come per esempio in [[C sharp|C#]], una classe può comunque ereditare da essi. In questo modo è possibile estendere stringhe, dizionari e perfino gli interi. È inoltre supportata l'[[ereditarietà multipla]].<ref>{{Cita web|url=https://pythonitalia.github.io/python-abc/Pyllole/85_Inheritance_Multiple.html|titolo=Ereditarietà multipla|sito=Python ABC|lingua=en|accesso=2020-05-28}}</ref>
▲Vengono supportate anche funzionalità estensive di [[Riflessione (informatica)|introspezione]] sui tipi e sulle classi. I tipi e le classi sono a loro volta oggetti che possono essere esplorati e confrontati. Gli [[Attributo (programmazione)|attributi]] sono gestiti in un dizionario.
== Programmazione funzionale e sintassi avanzate ==
|