Python: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Funzionalità collegamenti suggeriti: 2 collegamenti inseriti.
 
(17 versioni intermedie di 14 utenti non mostrate)
Riga 1:
{{nota disambigua}}
'''AUGURI PENSAPython''' è 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]].
{{Linguaggio di programmazione
|nome = Python
|immagine =
|didascalia =
|autore =
|data =
|versione =
|utilizzo = general-purpose, [[linguaggio di scripting|scripting]]
|paradigmi =
|tipizzazione = [[Tipizzazione dinamica|dinamica]]
|specifiche =
|estensione =
|influenzato_da =
|ha_influenzato = [[Boo (linguaggio)|Boo]], [[Cobra (linguaggio di programmazione)|Cobra]], [[CoffeeScript]], [[D (linguaggio di programmazione)|D]], [[F Sharp|F#]], [[Go (linguaggio di programmazione)|Go]], [[Groovy]], [[JavaScript]], [[Julia (linguaggio di programmazione)|Julia]], [[Ruby (linguaggio di programmazione)|Ruby]], [[Swift (linguaggio di programmazione)|Swift]]
|implementazione_riferimento =
|sistema_operativo = [[Multipiattaforma]]
|lingua =
|licenza =
|sito_web =
}}
'''AUGURI PENSAPythonPython''' è 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 dall'[[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>.
Riga 8 ⟶ 29:
 
== Descrizione ==
È un linguaggio che ha tra i principali obiettivi: [[tipizzazione dinamica|dinamicità]], {{chiarire|semplicità e flessibilità. Python è un linguaggio semplice, che è stato progettato appositamente per essere facilmente comprensibile, la cui sintassi si avvicina estremamente al linguaggio naturale (incorporandone alcuni aspetti). Inoltre la potenza di Python è sicuramente il fatto di essere altamente flessibile, prestandosi ad un ampio spettro di utilizzi grazie alle sue numerose librerie. }}.
Supporta multipli [[paradigma di programmazione|paradigmi di programmazione]], tra cui quello [[programmazione orientata agli oggetti|a oggetti]] e quello [[programmazione funzionale|funzionale]].
 
Riga 31 ⟶ 52:
 
=== Prestazioni ===
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. Inoltre, il programma si basa unicamente su un core, e il ''[[multithreading]]'' è presente al solo livello astratto. Esisteva un'estensione, [[Psyco (JITsoftware)|Psyco]] <ref>{{Cita web|url=http://psyco.sourceforge.net/|titolo=Psyco - Home Page|sito=psyco.sourceforge.net|accesso=2020-05-28}}</ref>, il cui sviluppo è terminato nel 2012, che era una sorta di [[compilatore JIT]], in grado di velocizzare in modo notevole alcuni tipi di codice, specialmente l'implementazione di algoritmi, a scapito dell'aumento di memoria utilizzata. Un progetto attuale e attivamente sviluppato per migliorare le prestazioni del codice Python grazie a un compilatore JIT è [[PyPy]]<ref>{{Cita web|url=https://www.pypy.org/|titolo=PyPy|autore=The PyPy Team|sito=PyPy|data=2019-12-28|lingua=en|accesso=2020-05-28}}</ref>.
 
Python permette di aggirare in modo facile l'ostacolo delle performance pure: è infatti relativamente semplice scrivere un'estensione in 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>.
Riga 53 ⟶ 74:
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 e il Perl usano <code>{}</code> mentre il [[Pascal (linguaggio di programmazione)|Pascal]] usa {{Codice|codice=begin|linguaggio=Pascal}} e {{Codice|codice=end|linguaggio=Pascal}}. In questi linguaggi è solo una pura convenzione degli sviluppatori [[Indentazione|indentare]] (ovvero spostare verso destra rispetto al margine sinistro della pagina) il codice sorgente interno a un blocco, per migliorare la leggibilità del codice e chiarire la struttura del flusso di esecuzione.
 
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" (<code>:</code>). L'indentazione si può ottenere sia con il [[Tabulatore|carattere di tabulazione]] sia con un numero arbitrario di spazi, purché ovviamente si operi 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 77 ⟶ 98:
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 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 una maggiore quantità di codice sulla stessa riga. Se i due punti (<code>:</code>) danno il via a un blocco indentato di una sola istruzione, esso può essere scritto anche sulla stessa riga, preceduto da uno spazio. <syntaxhighlight lang="python">
Riga 83 ⟶ 104:
</syntaxhighlight>
 
Sebbene decisamente poco apprezzabile per i puristi del linguaggio Python, è comunque possibile usare il "[[punto e virgola]]" (<code>;</code>), come in grande parte dei linguaggi di programmazione, per indicare che un'istruzione è conclusa, e cominciarne un'altra sulla stessa riga.<syntaxhighlight lang="python">
a = b + 10; print("Hello world"); b = 243 - 23;
</syntaxhighlight>
 
== Tipi di dati e strutture ==
[[File:Python 3.13 TheStandrd standardType type hierarchyHierarchy-en.svg|miniatura|Gerarchia dei tipi in Python 3|428x428px]]
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.
 
Riga 272 ⟶ 293:
 
=== Libreria standard ===
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 [[Applicazione web|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, in quanto compatibile con tutte le piattaforme, a eccezione di poche funzioni, segnalate chiaramente nella documentazione come specifiche di una piattaforma particolare.