Python: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Recupero di 1 fonte/i e segnalazione di 0 link interrotto/i.) #IABot (v2.0.9.5
Nessun oggetto della modifica
Riga 22:
'''Python''' è un [[linguaggio di programmazione ad alto livello]], [[programmazione orientata agli oggetti|orientato a oggetti]], adatto, tra gli altri usi, a sviluppare [[applicazione (informatica)|applicazioni]] distribuite, [[scripting]], [[Calcolo (matematica)|computazione numerica]] e [[Testing#Il collaudo di sistema|system testing]].
 
Ideato dadall'[[Paesi Bassi|olandese]] [[Guido van Rossum]] all'inizio degli [[Anni 1990|anni novanta]], è spesso paragonato a [[Ruby (linguaggio di programmazione)|Ruby]], [[Tcl]], [[Perl]], [[JavaScript]], [[Visual Basic]] o [[Scheme]]<ref>Dal file ''README'' della distribuzione 2.6.4: "''What is Python anyway? Python is an interpreted, interactive object-oriented programming language suitable (amongst other uses) for distributed application development, scripting, numeric computing and system testing. Python is often compared to Tcl, Perl, Java, JavaScript, Visual Basic or Scheme.''"</ref>. Il nome fu scelto per la passione dello stesso inventore verso i [[Monty Python]] e per la loro serie televisiva ''[[Monty Python's Flying Circus]]''<ref>Fonte: {{cita web |url=https://www.python.org/search/hypermail/python-1992/0001.html |titolo=Copia archiviata |accesso=27 ottobre 2009 |urlmorto=sì |urlarchivio=https://web.archive.org/web/20091217210327/http://www.python.org/search/hypermail/python-1992/0001.html |dataarchivio=17 dicembre 2009 }}</ref>.
 
Spesso viene anche studiatoè tra i primi linguaggi di programmazione ad essere studiati dai neofiti, per la sua somiglianza a uno [[Pseudocodice|pseudo-codice]], e di frequente viene usato per simulare la creazione di software grazie alla flessibilità di sperimentazione consentita da Python, che permette al programmatore di organizzare le idee durante lo sviluppo, come per esempio il creare un gioco tramite [[Pygame]] oppure il [[back-end]] di un sito web tramite [[Flask (informatica)|Flask]] o [[Django (informatica)|Django]].
 
Python dispone anche di una sezione grafica, il modulo '''Python Turtle Graphics''', che permette di applicare le righe di codici alla grafica.
Riga 35:
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 ina [[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. Fa parte di Python un sistema [[garbage collector]] per liberazione e recupero automatico della memoria di lavoro.
 
Python ha qualche somiglianza con [[Perl]], ma i suoi progettisti hanno scelto una sintassi più essenziale e uniforme con l'obiettivo di migliorare 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.
Riga 42:
[[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 e presentato come un [[linguaggio interpretato]], in realtà il [[codice sorgente]] non viene convertito direttamente in [[linguaggio macchina]]., Infattima passa prima da una fase di pre-compilazione in [[bytecode]], che viene quasi sempre riutilizzato dopo la prima esecuzione del programma, evitando così di dover reinterpretare ogni volta il sorgente e migliorando le prestazioni. Inoltre è possibile distribuire programmi Python direttamente in bytecode, saltando totalmente la fase di interpretazione da parte dell'utilizzatore finale e ottenendo programmi Python a sorgente chiuso<ref>{{Cita web|url=http://effbot.org/pyfaq/how-do-i-create-a-pyc-file.htm|titolo=How do I create a .pyc file?|sito=effbot.org|accesso=2020-05-28|dataarchivio=3 giugno 2020|urlarchivio=https://web.archive.org/web/20200603024428/http://effbot.org/pyfaq/how-do-i-create-a-pyc-file.htm|urlmorto=sì}}</ref>.
[[File:Run Module Python.png|miniatura|408x408px|[[Menù a tendina]] dal quale si può eseguire il programma cliccando su "Run Module" o con lo shortcut F5 da [[windows 10]] in poi.]]
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.
Riga 68:
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).
Riga 126:
Python è stato progettato in modo da risultare facilmente leggibile e scrivibile. Visivamente si presenta in modo lineare e pulito, con pochi costrutti sintattici rispetto ad altri linguaggi strutturati come per esempio [[C (linguaggio)|C]], [[Perl]] o [[Pascal (linguaggio di programmazione)|Pascal]].
 
Per esempio, Python ha solo due forme di ciclo: <kbd><code>for</code></kbd> che itera sugli elementi di una lista o su un iteratore (equivalente al <kbd>''foreach''</kbd> di Perl o PHP) e <kbd><code>while</code></kbd>, che ciclaitera fintanto che l'[[espressione booleana]] specificata risulterà vera. In sostanza manca dei cicli in stile C <kbd><code>for</code></kbd>, <kbd><code>do</code></kbd> <kbd><code>while</code></kbd> e <kbd><code>until</code></kbd>, ma tutti questi possono essere espressi con dei semplici equivalenti. Allo stesso modo ha solamente il costrutto <kbd><code>if elif</code></kbd> <kbd><code>else</code></kbd> per le scelte condizionate, mae non possiede né <kbd><code>switch</code></kbd> né <kbd><code>goto</code></kbd>.
 
=== Indentazione ===
Un aspetto inusuale deldi 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 parentesi oppure con parole chiave; per esempio il [[C (linguaggio)|C]] e il [[Perl]] usano <kbd>{ }</kbd> mentre il [[Pascal (linguaggio di programmazione)|Pascal]] usa <kbd><code>begin</code></kbd> e <kbd><code>end</code></kbd>. In questi linguaggi è solo una pura convenzione degli sviluppatori [[Indentazione|indentare]] (ovvero "farespostare rientrare"verso daldestra rispetto al margine sinistro della pagina) il codice sorgente interno a un blocco, per migliorarnemigliorare la leggibilità del codice e chiarire la struttura del flusso di esecuzione.
 
Invece Python, invece, deriva il suo sistema di indentazione dal meno noto linguaggio di programmazione [[Occam (linguaggio di programmazione)|Occam]]: invece di usare parentesi o parole chiave, usa l{{'}}''indentazione'' stessa per indicare i blocchi nidificati, in congiunzione col carattere "due punti" (:). In PythonL'indentazione si possonopuò usareottenere sia unacon il [[Tabulatore|carattere di tabulazione]] sia con un numero arbitrario di spazi, purché ovviamente sianosi usatioperi in modo congruente con la sintassi del linguaggio. L'esempio che segue chiarisce questo aspetto, mostrando la versione in C e in Python di funzioni per il calcolo del fattoriale di un numero intero.
 
''Fattoriale in C:''
Riga 157:
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 prestare bene attenzione nell'indentare il codice oppure ad affidarsi alle funzioni di indentazione automatica ormai presenti nella maggior parte degli editor di programmi. Può anche capitare di lavorare con editor di codice sorgente diversi, su vari computer, e ritrovarsi così con codice sorgente che usa in modo misto tabulazioni e spazi, accorgendosi dell'errore solo in fase di esecuzione.
 
Python permette anche alcune scorciatoie per scrivere codiceuna "più"maggiore quantità di codice sulla stessa riga. Se i due punti (:) danno il via a un blocco indentato di una sola riga:istruzione, laesso possiamopuò spostareessere ascritto seguitoanche disulla stessa riga, preceduto da uno spazio dopo. <syntaxhighlight lang="python">
if b > a: print("b is greater than a")
</syntaxhighlight>
Riga 171:
Un altro punto di forza di Python è la disponibilità di elementi che facilitano la [[programmazione funzionale]]. Le funzioni sono considerate degli oggetti e sono dunque utilizzabili alla stregua di qualsiasi altro oggetto, ad esempio inserendole in collezioni o utilizzandole direttamente come parametri per altre funzioni. Gli elementi di programmazione funzionale, insieme a costrutti specifici per la manipolazione di contenitori, rendono ancora più comodo operare con liste o altri tipi contenitore.
 
Gli ''slicing'' sono un costrutto simile all'indicizzazione in grado di ottenere sottosequenze specificando gli indici di inizio, e di fine, e lo 'step'.
<syntaxhighlight lang="python">
numeri = [1, 2, 3, 4, 5]
Riga 227:
</syntaxhighlight>
 
Dal momento che Python permette di avere [[Funzione di ordine superiore|funzioni come argomenti]], è anche possibile avere costrutti funzionali più sottili, come ad esempio la [[continuazione]].<ref>[http://www.ps.uni-saarland.de/~duchier/python/continuations.html Continuations Made Simple and Illustrated]</ref>.
 
In Python esiste la parola chiave <code>lambda</code>, particolarmente utile in contesti dove è necessario svolgere piccole operazioni che probabilmente saranno effettuate solo in quella zona del codice:
Riga 244:
</syntaxhighlight>
 
Tuttavia iI blocchi <code>lambda</code> possono però contenere solo [[espressione (informatica)|espressioni]], non [[statement]]. Non sono quindi il modo più generale per restituire una funzione. Si può usare invece la seguente tecnica che restituisce una funzione il cui nome è definito in uno [[scope]] locale, ovvero una [[Chiusura (informatica)|closure]]:
 
<syntaxhighlight lang="python">
Riga 256:
Un ''decoratore'' è qualsiasi oggetto di Python invocabile usato per aggiungere codice all'inizio o al termine di una funzione, un metodo o una definizione di classe, senza modificarne internamente il codice. Un decoratore è passato all'oggetto e ritorna l'oggetto modificato.
 
I decoratori sono ispirati in parte dalla notazione Java, hanno una sintassi simile e sono considerati [[zucchero sintattico]]. Usano <code>@</code> come parola chiave:
 
<syntaxhighlight lang="python">
Riga 293:
 
=== Commenti ===
Analogamente ad altri linguaggi di programmazione, in Python è possibile lasciare dei commenti nelle righe di codice per comprendere e far comprendere meglio ciò che accade eseguendo il programma. In Python i commenti (già a partire dalle primissime versioni del linguaggio di programmazione) si introducono con il simbolo "#"; pertutto nonciò alterareche ilè scritto nella stessa riga dopo tale simbolo viene codiceignorato.<syntaxhighlight lang="python" line="1">
print("qualcosa a caso") #questo programma stampa "qualcosa a caso" nella console ignorando tutto ciò che viene scritto dopo il simbolo "#"
print("andando a caporiga l'effetto del cancelletto sparisce e il codice ha effetto sul programma")
Riga 299:
</syntaxhighlight>
 
Spesso i commenti vengono utilizzati per il cosiddetto "[[Debugging]]", datoin chequanto riesceè apossibile far saltarecommentare delle specifiche linee di codice per farle saltare all'[[Ambiente di sviluppo integrato|IDE]].
 
Un esempio pratico sarebbe:
Riga 318:
Python ha una vasta [[Libreria software|libreria standard]], il che lo rende adatto a molti impieghi. Oltre ai moduli della libreria standard se ne possono aggiungere altri scritti in C oppure Python per soddisfare le proprie esigenze particolari. Tra i moduli già disponibili ve ne sono per scrivere applicazioni web: sono supportati [[MIME]], [[Hypertext Transfer Protocol|HTTP]] e tutti gli altri standard Internet. Sono anche disponibili moduli per creare applicazioni con interfaccia grafica, per connettersi a [[Relational database management system|database relazionali]], per usare le [[espressione regolare|espressioni regolari]].
 
La libreria standard è uno dei punti forti di Python., Infattiin essa èquanto compatibile con tutte le piattaforme, a eccezione di poche funzioni, segnalate chiaramente nella documentazione come specifiche di una piattaforma particolare.
 
== Esempi di programma ==