Python: differenze tra le versioni
Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica |
Pulizia del linguaggio e aggiornamento di alcune parti |
||
Riga 22:
'''Python''' è un [[linguaggio di programmazione ad alto livello|linguaggio di programmazione di più "alto livello"]] rispetto alla maggior parte degli altri linguaggi. È [[Programmazione orientata agli oggetti|orientato a oggetti]], ma non in maniera ferrea come ad esempio [[Java (linguaggio di programmazione)|Java]]; adatto, tra gli altri usi, a sviluppare [[applicazione (informatica)|applicazioni]] distribuite, [[scripting]], [[Calcolo (matematica)|computazione numerica]] e [[Testing#Il collaudo di sistema|system testing]].
Fu ideato da [[Guido van Rossum]] all'inizio degli [[Anni 1990|anni novanta]]. Il nome fu scelto per
Spesso viene anche studiato tra i primi linguaggi per la sua somiglianza a uno [[Pseudocodice|pseudo-codice]]
== Descrizione ==
È un linguaggio [[Paradigma di programmazione|multi-paradigma]] che ha tra i principali obiettivi: dinamicità, semplicità e flessibilità. Supporta il paradigma [[object oriented]], la [[programmazione strutturata]] e molte caratteristiche di [[programmazione funzionale]] e [[Riflessione (informatica)|riflessione]].
Le caratteristiche più immediatamente riconoscibili di Python sono le [[variabile (informatica)|variabili]] non tipizzate e l'uso dell'indentazione per la
Altre caratteristiche distintive sono l'[[overloading]] di operatori e funzioni tramite [[delegation|delegati]], la presenza di un ricco assortimento di tipi e funzioni di base e librerie standard, sintassi avanzate quali ''slicing'' e ''list comprehension''.
Il controllo dei tipi è forte (''strong typing'') e viene eseguito a [[runtime]] (''dynamic typing''): una variabile è un contenitore a cui viene associata un'etichetta (il nome) che può essere associata a diversi contenitori anche di tipo diverso durante il suo tempo di vita. Usa un [[garbage collector]] per la liberazione automatica della memoria.▼
▲Il controllo dei tipi è forte (''strong typing'') e viene eseguito
Ha qualche somiglianza con [[Perl]], ma i suoi progettisti hanno scelto una sintassi più essenziale e uniforme con l'obiettivo di aumentare la leggibilità del codice. Analogamente a Perl è classificato spesso come [[linguaggio di scripting]], ma pur essendo utile per scrivere script di sistema, in alternativa per esempio a [[bash]], la grande quantità di librerie disponibili e la facilità con cui il linguaggio permette di scrivere software modulare favoriscono anche lo sviluppo di applicazioni molto complesse.▼
▲
=== Altre caratteristiche ===
[[File:esempio Python.png|miniatura|destra|[[Codice sorgente]] di un programma scritto in Python]]
[[File:Python_add5_syntax.svg|miniatura|destra|Esempio di codice sorgente scritto in Python]]
Sebbene Python venga in genere considerato un [[linguaggio interpretato]], in realtà il [[codice sorgente]] non viene convertito direttamente in [[linguaggio macchina]]. Infatti passa prima da una fase di pre-compilazione in [[bytecode]], che viene quasi sempre riutilizzato dopo la prima esecuzione del programma, evitando così di reinterpretare ogni volta il sorgente e
Come il linguaggio [[Lisp]] e a differenza del Perl, l'[[Interprete (informatica)|interprete]] Python supporta anche un modo d'uso interattivo ([[Read–eval–print loop|REPL]]) attraverso cui è possibile inserire codice direttamente da un terminale, visualizzando immediatamente il risultato.
Inoltre l'interprete Python è contenuto nella libreria standard,
Python dispone anche di un [[framework]] per lo [[Testing#Il collaudo di modulo|unit testing]] che supporta lo sviluppo di test unitari automatici.
Line 48 ⟶ 50:
=== Prestazioni ===
{{F|linguaggi di programmazione|giugno 2014}}
Se paragonato ai linguaggi compilati ''statically typed'', come ad esempio il [[C (linguaggio)|C]], la velocità di esecuzione non è uno dei punti di forza di Python<ref>{{Cita web|url=https://benchmarksgame-team.pages.debian.net/benchmarksgame/fastest/python3-gcc.html|titolo=Python 3 vs C gcc - Which programs are fastest? {{!}} Computer Language Benchmarks Game|sito=benchmarksgame-team.pages.debian.net|accesso=2020-05-28}}</ref>, specie nel calcolo matematico.
Le prestazioni di Python sono allineate o addirittura superiori a quelle di altri linguaggi interpretati, quali [[PHP]]<ref>{{Cita web|url=https://medium.com/@HarriSrivastav/is-python-faster-than-php-852e7734cd82|titolo=Is Python faster than PHP?|autore=Harri Srivastav|sito=Medium|data=2016-02-19|lingua=en|accesso=2020-05-28}}</ref> e Ruby, e in certe condizioni Python può rivaleggiare anche con [[Java (linguaggio di programmazione)|Java]]<ref>{{Cita web|url=https://www.
Python permette di aggirare in modo facile l'ostacolo delle performance pure: è infatti relativamente semplice scrivere un'estensione in [[C (linguaggio)|C]] o [[C++]] e poi utilizzarla all'interno di Python, sfruttando così l'elevata velocità di un linguaggio compilato solo nelle parti in cui effettivamente serve e sfruttando invece la potenza e versatilità di Python per tutto il resto del software<ref>{{Cita web|url=https://realpython.com/python-bindings-overview/|titolo=Python Bindings: Calling C or C++ From Python – Real Python|autore=Real Python|sito=realpython.com|lingua=en|accesso=2020-05-28}}</ref>.
=== Altre implementazioni ===
Line 61 ⟶ 65:
== Tipi di dati e strutture ==
Essendo Python a [[tipizzazione dinamica]], tutte le variabili sono in realtà [[Puntatore (programmazione)|puntatori]] a [[Oggetto (informatica)|oggetto]]
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), <u>''sys''</u><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
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
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
=== Contenitori ===
Line 83 ⟶ 87:
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
Le ''liste'' (<code>list</code>) sono sequenze estendibili, Sono previste tutte le operazioni classiche sulle stringhe come concatenamento, formattazione, ricerca, sostituzione
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, detto "valore". Ogni elemento è detto "coppia chiave-valore".
Per esempio l'istruzione seguente crea un dizionario
Le chiavi sono immutabili, mentre il valore corrispondente è variabile tramite un'assegnazione. La seguente istruzione modifica il valore corrispondente a "wikipedia", portandolo a
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
Vengono supportate anche funzionalità estensive di [[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 ==
Python è stato progettato in modo da
Per esempio, Python ha solo due forme di ciclo: <kbd><code>for</code></kbd> che itera sugli elementi di una lista o su di un iteratore (equivalente al <kbd>''foreach''</kbd> del Perl) e <kbd><code>while</code></kbd> che cicla fin tanto che l'[[espressione booleana]] indicata risulterà vera. In sostanza manca dei cicli in stile C <kbd><code>for</code></kbd>, <kbd><code>do -</code></kbd>
=== Indentazione ===
Un aspetto inusuale del Python è il metodo che usa per delimitare i blocchi di programma, che lo rende unico fra i linguaggi più diffusi.
Nei linguaggi derivati dall'[[ALGOL]] come Pascal, C e Perl, i blocchi di codice sono indicati con
''Fattoriale in C:''
Line 129 ⟶ 135:
</syntaxhighlight>
All'inizio questo modo di indicare i blocchi e esprimere la sintassi può confondere le idee a chi viene da altri linguaggi, ma poi si rivela molto vantaggioso, perché risulta conciso e obbliga a scrivere sorgenti indentati correttamente, aumentando così la leggibilità del codice.
Lo svantaggio è che la gestione degli spazi e dei caratteri di tabulazione può essere diversa da un [[editor di testo]] all'altro, il che costringe a
if b > a: print("b is greater than a")
</syntaxhighlight>
a = b + 10; print("Hello world"); b = 243 - 23;
</syntaxhighlight>
|