做美甲师容易得什么病| 积食内热吃什么药| 什么牌子好| 眉毛浓的男人代表什么| yellow是什么颜色| 牙为什么会疼| 622是什么星座| 生粉和淀粉有什么区别| 副师级是什么军衔| 梦见父母是什么意思| 尿比重1.030是什么意思| 莆田系是什么意思啊| 喜用神什么意思| 周杰伦为什么叫jay| 孩子流鼻血是什么原因| 胃炎胃溃疡吃什么药| 头皮屑多是什么原因| 什么叫靶向治疗| 汤姆福特属于什么档次| 鱼子酱是什么鱼的鱼子| 鸟加一笔变成什么字| 紫外线过敏用什么药膏| 大雄宝殿是什么意思| 为什么夏天热冬天冷| 骨化性肌炎是什么病| 右边腰疼是什么原因| 伏特加兑什么饮料好喝| 红枣桂圆泡水喝有什么好处和坏处| coser什么意思| 调岗是什么意思| 乳杆菌是什么| 九点是什么时辰| 运动出汗有什么好处| 血型b型rh阳性是什么意思| 脂肪肝吃什么药治疗| 福州有什么好玩的地方| 湿热是什么原因引起的| 熬夜吃什么维生素| 莲雾是什么水果| 福禄安康是什么意思| 瓜子脸适合什么发型| 大枣吃多了有什么危害| 最近我和你都有一样的心情什么歌| 短阵房速是什么意思| 四维彩超和大排畸有什么区别| 佛牌是什么| 蜘蛛代表什么生肖| 阿莫西林什么时候吃| 女人身体发热预示什么| 日昳是什么意思| 什么是门户网站| 瓒字取名有什么寓意| 喝蜂蜜水有什么好处和坏处| 岫玉是什么| 早上起来嘴巴发苦是什么原因| 喉痹是什么意思| 九月二十六是什么星座| 猫咪能吃什么水果| 见红是什么样的| 什么是碧玺| 海绵肾是什么意思| 什么是低碳饮食| 什么云见日| 51岁属什么| 什么矿泉水最好| 光纤和宽带有什么区别| 1978年五行属什么| 悄悄的什么| 瘦肉炒什么好吃| 十二指肠溃疡是什么症状| 干眼症吃什么食物好| 梦见挖土豆是什么意思| 硬膜囊前缘受压是什么意思| 感冒能吃什么| 口腔溃疡用什么药治疗| 不割包皮有什么影响吗| 乳头刺痛什么原因| 掉头发是缺什么维生素| 梦见自己假牙掉了是什么意思| 巴掌是什么意思| 鲜牛奶和纯牛奶有什么区别| 开金花是什么生肖| 两面人是什么意思| 龟头责是什么意思| 吃鹅蛋对孕妇有什么好处| 马齿苋是什么| peak是什么牌子| 质子泵抑制剂是什么药| 低血钾是什么病| 六娃的能力是什么| hg是什么意思| 什么时候开始数伏| 不停的放屁是什么原因| 1938年属什么生肖属相| 舐犊是什么意思| 闺蜜是什么意思| 清白是什么意思| 沅字的寓意是什么| 软柿子是什么意思| 黑龙江有什么特产| 反复发烧吃什么药| remax是什么牌子| 孙膑是什么学派| 梦见看电影是什么意思| 醋泡葡萄干有什么功效和作用| 塞药塞到什么位置| vj是什么| 儿童口腔溃疡用什么药| 举不胜举的举是什么意思| 慢性萎缩性胃炎是什么意思| 运钞车是什么车| 养殖什么最赚钱| 父母什么血型会溶血| 欲情故纵什么意思| 腰疼肚子疼是什么原因引起的| 皮肤属于什么组织| 学习机什么牌子好| mt是什么单位| 灌肠是什么意思| 胸部正侧位片检查什么| 梦见自己光脚走路是什么意思| 红枣为什么要炒黑再泡水喝| 虾皮是什么| 企鹅代表什么生肖| 一个丝一个鸟读什么| 风湿关节炎吃什么药| 脑供血不足吃什么中药| 牙龈出血吃什么药| 肾气虚吃什么中成药| 老婆生日送什么鲜花| 知秋是什么意思| 吃什么东西补钙| 丹参有什么作用和功效| 1985年出生是什么命| 判缓刑是什么意思| 四个月宝宝可以吃什么辅食| 探病买什么水果| 区委书记属于什么级别| 梦见乌龟是什么意思| 圣人是什么意思| 属兔的守护神是什么菩萨| 六月初一什么日子| 熊猫为什么吃竹子| 五行海中金是什么意思| 氯雷他定片治什么病| 走四方是什么生肖| 水平是什么意思| 西米露是什么做的| 非那根又叫什么| 甲状腺结节不能吃什么| 卵圆孔未闭是什么病| 感冒全身酸痛吃什么药| 刺猬是什么动物| 男人眼袋大是什么原因造成的| 弓形虫是什么| 孕早期不能吃什么| 肺部炎症用什么药最好| 额头上长斑是什么原因造成的| 心烦意乱是什么意思| 胎儿fl是什么意思| 黑咖啡什么时候喝| 潭柘寺求什么最灵验| 女人喝什么调节内分泌| 97年五行属什么| 红蜘蛛是什么虫| 蒹葭苍苍是什么意思| 肌酸激酶偏低说明什么| 脚底板脱皮是什么原因| 看山不是山看水不是水是什么意思| 痰多是什么原因引起的| 破财免灾什么意思| 女人出虚汗是什么原因引起的| 85年属什么的| jackjones是什么品牌| 梦到被蛇咬是什么预兆| 梦见穿裤子是什么意思| 脾虚湿热吃什么药| 坐位体前屈是什么| 吃什么保肝护肝| 血淀粉酶是检查什么的| 欲是什么生肖| 唇干是什么原因引起的| 耳朵热是什么原因| o是什么| 女孩子学什么专业比较好| 红米是什么米| 星盘是什么| 下午17点是什么时辰| 夏枯草治什么病| 梦见吃粉条是什么预兆| 蛰伏是什么意思| yearcon是什么牌子| 厘米为什么叫公分| 光动能手表是什么意思| 闭口是什么样子| 有什么办法让男人死精| 肝功能检查什么| 吃什么除湿气| 成本倒挂什么意思| 付字五行属什么| 农历是什么生肖| 惊艳了时光温柔了岁月什么意思| 什么人始终不敢洗澡| 水乳什么牌子好用| 瘤变是什么意思| 头发硬是什么原因| 吹空调嗓子疼吃什么药| 发痧吃什么药可以断根| 戒指带中指什么意思| 结婚14年是什么婚| 天龙八部是什么朝代| 高糖是什么| 等闲识得东风面下一句是什么| 小孩发烧流鼻血是什么原因| 什么时候教师节| 寒酸是什么意思| 孕酮低是什么原因| 男人左眼跳是什么意思| 土土心念什么| 窝在沙发里是什么歌| 合肥有什么好玩的地方| 贫血吃什么药补血最快| 德国人是什么人种| 右胳膊麻木是什么征兆| 三丧日是什么意思| 天蝎座女生配什么星座| 1958年属什么生肖| 有过之而不及什么意思| 40年是什么婚姻| 胀气打嗝是什么原因| 药物过敏用什么药| 花生对胃有什么好处| 载脂蛋白是什么意思| 男人吃什么增大增长| 慢性肠炎吃什么药效果好| 头皮屑多是什么原因引起的| 氢是什么| 吃虫草有什么好处| 一个大一个小念什么| 10月12号是什么星座| 副县长是什么级别| 喝酒对身体有什么危害| 儿化音是什么意思| 护照是什么意思| 海绵体充血不足吃什么药| 11月2日是什么星座| 男人肾虚吃什么补得快| 后背痛什么原因| 梨花压海棠是什么意思| 手足口病喝什么汤| 孕期吃什么长胎不长肉| 大便干燥一粒一粒的是什么原因| 便秘挂什么科| 佩字五行属什么| 吃红糖有什么好处和坏处| 七月十日是什么日子| 为什么第一次进不去| 太阳一晒脸就红是什么原因| betty是什么意思| 富士山什么时候喷发| 焦糖是什么糖| 霉菌是什么引起的| 北京大栅栏有什么好玩的| 总是放响屁是什么原因| 百度Vai al contenuto

中国の二次元消費は驚異的 日本アニメが若者に大人気

Da Wikipedia, l'enciclopedia libera.
Disambiguazione – Se stai cercando altri significati, vedi Python (disambigua).
Python
linguaggio di programmazione
AutorePython Software Foundation e Guido van Rossum
Data di origine20 febbraio 1991
Ultima versione3.13.5 (11 giugno 2025) e 3.14.0rc1 (22 luglio 2025)
Utilizzogeneral-purpose, scripting
Paradigmiprogrammazione funzionale, programmazione orientata agli oggetti, dynamic programming, programmazione imperativa e programmazione multi-paradigma
Tipizzazionedinamica
Influenzato daABC
Ha influenzatoBoo, Cobra, CoffeeScript, D, F#, Go, Groovy, JavaScript, Julia, Ruby, Swift
Implementazione di riferimento
Sistema operativoMultipiattaforma
LicenzaPython Software Foundation License
Sito webwww.python.org/
百度 因此,提升整个社会,尤其是父母的“教育素养”,是当下最迫切的工作之一。

Python è un linguaggio di programmazione ad alto livello, orientato a oggetti, adatto, tra gli altri usi, a sviluppare applicazioni distribuite, scripting, computazione numerica e system testing.

Ideato dall'olandese Guido van Rossum all'inizio degli anni novanta, è spesso paragonato a Ruby, Tcl, Perl, JavaScript, Visual Basic o Scheme[1]. 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[2].

Spesso è tra i primi linguaggi di programmazione a essere studiati dai neofiti, per la sua somiglianza a uno pseudo-codice, e di frequente viene usato per simulare la creazione di software grazie alla flessibilità di sperimentazione consentita, 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 o Django.

Python dispone anche di una sezione grafica, il modulo Python Turtle Graphics, che permette di applicare le righe di codici alla grafica.

è un linguaggio che ha tra i principali obiettivi: dinamicità, 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.[non chiaro]. Supporta multipli paradigmi di programmazione, tra cui quello a oggetti e quello funzionale.

Le caratteristiche più immediatamente riconoscibili di Python sono le variabili non tipizzate e l'uso dell'indentazione per la sintassi delle specifiche, al posto delle più comuni parentesi.

Altre caratteristiche distintive sono l'overloading di operatori e funzioni tramite 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 run-time (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 la liberazione e il recupero automatici della memoria con cui si lavora.

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.

Altre caratteristiche

[modifica | modifica wikitesto]
Codice sorgente di un programma scritto in Python
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, ma 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[3].

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 Python supporta anche un modo d'uso interattivo (REPL) attraverso cui è possibile inserire codice direttamente da un terminale, visualizzando immediatamente il risultato.

Esempio di alcuni codici sorgente scritti con l'IDLE di Python 3.8.5

Inoltre l'interprete Python è contenuto nella libreria standard, perciò come in molti altri linguaggi interpretati è possibile far valutare stringhe arbitrarie nel contesto corrente. è possibile passare all'interprete anche un contesto completamente diverso, sotto forma di liste che contengono l'elenco dei simboli definiti.

Python dispone anche di un framework per lo unit testing che supporta lo sviluppo di test unitari automatici.

Se paragonato ai linguaggi compilati statically typed, come ad esempio il C, la velocità di esecuzione non è uno dei punti di forza di Python[4], 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 [5], 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[6].

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[7].

Implementazioni

[modifica | modifica wikitesto]
  • CPython: è l'implementazione di riferimento del linguaggio Python. Scritto in C e Python, è l'implementazione più usata in assoluto;[8]
  • Jython: implementazione basata su Java;[9]
  • IronPython: implementazione C# pensata per l'integrazione con l'ecosistema .NET;[10]
  • PyS60: implementazione per Symbian OS;[11]
  • PyPy: scritto in Python stesso. Ha tra i principali obiettivi la semplificazione dello sviluppo del linguaggio e la sua ottimizzazione in termini prestazionali[12];

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, Perl o Pascal.

Per esempio, Python ha solo due forme di ciclo: for che itera sugli elementi di una lista o su un iteratore (equivalente al foreach di Perl o PHP) e while, che itera fintanto che l'espressione booleana specificata risulterà vera. In sostanza gli mancano i cicli in stile C come il for, il do...while e come l'until del Pascal, ma tutti questi possono essere espressi con dei semplici equivalenti. Allo stesso modo ha solamente il costrutto if...elif...else per le scelte condizionate e non possiede né switchgoto.

Un aspetto inusuale di 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 e il Perl usano {} mentre il Pascal usa begin e end. In questi linguaggi è solo una pura convenzione degli sviluppatori 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: invece di usare parentesi o parole chiave, usa l'indentazione stessa per indicare i blocchi nidificati, in congiunzione col carattere "due punti" (:). L'indentazione si può ottenere sia con il carattere di tabulazione sia con un numero arbitrario di spazi, purché 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

[modifica | modifica wikitesto]
int fattoriale(int x) {
    if (x == 0) 
        return 1;
    else 
        return x * fattoriale(x-1);
}

Fattoriale in Python

[modifica | modifica wikitesto]
def fattoriale(x):
    if x == 0:
        return 1
    else:
        return x * fattoriale(x-1)

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 (:) danno il via a un blocco indentato di una sola istruzione, esso può essere scritto anche sulla stessa riga, preceduto da uno spazio.

if b > a: print("b is greater than a")

Sebbene decisamente poco apprezzabile per i puristi del linguaggio Python, è comunque possibile usare il "punto e virgola" (;), come in grande parte dei linguaggi di programmazione, per indicare che un'istruzione è conclusa e cominciarne un'altra sulla stessa riga.

a = b + 10; print("Hello world"); b = 243 - 23;

Tipi di dati e strutture

[modifica | modifica wikitesto]
Gerarchia dei tipi in Python 3

Essendo Python a tipizzazione dinamica, tutte le variabili sono, in realtà, puntatori a 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 run-time. 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[13] (per disegnare), copy[14] (per creare copie di oggetti), random[15] (per generare numeri casuali), sys[16] (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 tipi base, essenzialmente numerici e contenitori. Caratteristica distintiva è il supporto nativo, oltre che ai classici tipi quali interi, numeri in 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

[modifica | modifica wikitesto]

I tipi interi (int) e floating point (float) 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 (long, che diventano l'opzione di default per gli interi a partire da Python 3.0) e numeri complessi (complex).

Python prevede tutti i principali operatori logici e aritmetici fra numeri, compreso l'elevamento a potenza. Il tipo booleano (bool) appartiene anch'esso alla categoria dei numeri.

Dalla versione 2.4 di Python sono disponibili come libreria[17] anche i numeri decimali (decimal), 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.

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 for 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 metodi.

Le sequenze sono contenitori ordinati, che condividono metodi basati sull'ordinamento, l'indicizzazione intera e la creazione di sottosequenze tramite slicing.

Le liste (list) sono sequenze estendibili, mentre le tuple (tuple) sono sequenze immutabili. Anche le stringhe alfanumeriche (str e unicode) sono considerate sequenze. A partire da Python 3.0, i tipi str e unicode sono unificati e compare il tipo byte, 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#.

Altri contenitori sono i dizionari (dict), conosciuti in altri contesti con il nome di hash table oppure 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 diz composto da due elementi le cui chiavi sono wikipedia e wikiquote, rispettivamente e con associati i valori interi 40 e 60:

diz = {'wikipedia': 40, 'wikiquote': 60}

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:

diz['wikipedia'] = 4500

A partire dalla versione 2.7 di Python[18] sono supportati anche gli insiemi (set e frozenset), ovvero insiemi non ordinati di oggetti hashable.

Organizzazione a oggetti

[modifica | modifica wikitesto]

Il sistema dei tipi Python è ben integrato con il sistema delle classi. Anche se i tipi base non sono formalmente classi, come per esempio in C#, una classe può comunque ereditare da essi. In questo modo è possibile estendere stringhe, dizionari e perfino gli interi. è inoltre supportata l'ereditarietà multipla.[19]

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 attributi sono gestiti in un dizionario.

Programmazione funzionale e sintassi avanzate

[modifica | modifica wikitesto]

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, per 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'.

numeri = [1, 2, 3, 4, 5]
numeri_pari = numeri[1::2]  # esempio di slicing

La list comprehension è un costrutto preso dal linguaggio funzionale Haskell e consente il "riempimento" di una lista — usando una sintassi apposita — come possiamo vedere nel seguente esempio in cui vengono calcolate le prime cinque potenze di due:

numeri = [1, 2, 3, 4, 5]
potenze_di_due = [2 ** n for n in numeri]  # esempio di list comprehension

I generatori sono invece dei particolari oggetti in grado di costruire delle collezioni in maniera dinamica, utili per aumentare l'efficienza in particolare presenza di iterazioni su un gran numero di elementi. Le generator expression, simili alle list comprehension, sono uno strumento rapido ed efficace per creare generatori. La parola riservata yield permette di creare generatori con una sintassi del tutto simile a quella di una funzione.

Generator expression

[modifica | modifica wikitesto]
numeri = [1, 2, 3, 4, 5]
potenze_di_due = (2 ** n for n in numeri)  # generatore

Oppure, per avere un maggiore controllo, come una normale funzione, possiamo usare la parola chiave yield al posto di return, per trasformare la nostra funzione in un generatore. In questo modo la funzione salva il suo stato, per poi riprendere l'esecuzione del codice quando viene richiamato il valore dello yield successivo.

numeri = [1, 2, 3, 4, 5]
def potenza_di_due(numeri):
    for n in numeri:
        yield 2 ** n
gen = potenza_di_due(numeri)

L'uso è identico. Si chiama la funzione next che restituisce un nuovo valore ogni volta, riprendendo l'esecuzione del codice dalla parola chiave yield. Quando i valori sono finiti, viene sollevata un'eccezione StopIterationError. In ogni caso, non è l'unico modo di interagire con i generatori, e si può risalire ai data passati allo yield della funzione in questo modo:

gen = (2 ** n for n in range(1, 6))
for x in gen:
    print(x)

Per creare una lista da un generatore, si usa semplicemente la chiamata list(gen):

gen = (2 ** n for n in range(1, 6))
print(list(gen))

I generatori sono preferiti alle liste in quanto non occupano memoria, dato che i valori sono semplicemente calcolati di volta in volta e non permangono in memoria. Per questo è consigliabile usare, per esempio, xrange (che è un generatore) al posto di range (che restituisce una lista) con numeri molto grandi, per garantire una maggiore velocità

è anche possibile scrivere espressioni if...else su una sola riga, cosa che risulta utile in combinazione con le lambda (vedi sotto).

import random
l = [1, 2]
a = random.choice(l)
print('Giusto!' if a == 1 else 'Sbagliato!')

Dal momento che Python permette di avere funzioni come argomenti, è anche possibile avere costrutti funzionali più sottili, come per esempio la continuazione.[20]

In Python esiste la parola chiave lambda, particolarmente utile in contesti dove è necessario svolgere piccole operazioni che probabilmente saranno effettuate solo in quella zona del codice:

>>> l = [1, 2,3,4,5]  # oppure range(1,6)
>>> print(map(lambda x: x + 10, l))
[11, 12, 13, 14, 15]

Questo uso di map però è contestato e si preferisce usare le list comprehension:

>>> l = [1, 2, 3, 4, 5]  # oppure range(1,6)
>>> print([x + 10 for x in l])
[11, 12, 13, 14, 15]

I blocchi lambda possono però contenere solo 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 closure:

def multiple_adder(x, y):
    def adder(z):
        return z + x + y
    return(x + y + adder(x + y))  # sarebbe (x + y) * 3

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 @ come parola chiave:

@viking_chorus
def menu_item():
    print("spam")

I decoratori possono essere a catena posizionandone diversi in linee adiacenti:

@invincible
@favorite_color("Blue")
def black_knight():
    pass

ed è equivalente a:

def black_knight():
    pass
black_knight = invincible(favorite_color("Blue")(black_knight))

La struttura standard del decoratore è:

def favorite_color(color):
    def decorator(func):
        def wrapper():
            print(color)
            func()
        return wrapper
    return decorator

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 #; tutto ciò che è scritto nella stessa riga dopo tale simbolo viene ignorato.

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")

Spesso i commenti vengono utilizzati per il cosiddetto "debugging", in quanto è possibile commentare delle specifiche linee di codice per farle saltare all'IDE.

Un esempio pratico sarebbe:

print("Questa riga stampa qualcosa alla console")
# print("Questa invece, non stampa niente.")

Questa forma di debugging serve per rimuovere provvisoriamente delle linee di codice, tenendole sotto commento per uso futuro.

Gestione delle eccezioni

[modifica | modifica wikitesto]

Python supporta e usa estesamente la gestione delle eccezioni come mezzo per segnalare e controllare eventuali condizioni di errore, incluse le eccezioni generate dagli errori di sintassi.

Le eccezioni permettono un controllo degli errori più conciso e affidabile rispetto a molti altri modi possibili usati in genere per segnalare errori o situazioni anomale. Le eccezioni sono thread-safe; non sovraccaricano il codice sorgente come fanno invece i controlli sui valori di errore restituiti e possono facilmente propagarsi verso l'alto nello stack delle chiamate a funzione quando un errore deve essere segnalato a un livello più alto del programma.

Con la gestione delle eccezioni i controlli preventivi sono sostituiti da un più agevole meccanismo che permette di eseguire direttamente l'azione desiderata e catturare separatamente le eventuali eccezioni che si possono verificare. Oltre che per la gestione degli errori, in alcune occasioni le eccezioni sono usate in Python anche per il controllo di flusso: ad esempio l'operazione di iterazione, e di conseguenza il ciclo for, è basata su una segnalazione tramite eccezione.

Libreria standard

[modifica | modifica wikitesto]

Python ha una vasta 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, HTTP e tutti gli altri standard Internet. Sono anche disponibili moduli per creare applicazioni con interfaccia grafica, per connettersi a database relazionali, per usare le 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.

Esempi di programma

[modifica | modifica wikitesto]

Hello, world!

[modifica | modifica wikitesto]

Il seguente esempio di programma Python (versione 3.0) stampa il testo "Hello, world!":

print("Hello, world!")

Il seguente è lo stesso programma funzionante con la versione 2.7 o precedenti:

print "Hello, world!"

Creazione di un Socket, invio di richieste e ricevere dati

[modifica | modifica wikitesto]
import socket

# creazions socket
s = socket.socket()

# connessione server(google)
s.connect(("www.google.com", 80))

# la richiesta
richiesta = richiesta = "GET / HTTP/1.1\nHost: www.google.com\n\n"

# invio dati codificati
s.send(richiesta.encode())

# ricevi dati (home page di google)
dati = s.recv(2048)
while len(dati) > 0:
    print(dati)
    dati = s.recv(2048)

Formattazione delle stringhe e funzione input

[modifica | modifica wikitesto]
a = input('Name: ')
b = input('Last Name: ')
c = input('Age: ')
print(f"Name = {a}\nLast Name = {b}\nAge={c}")
# Ma puoi anche:
print("Name ={}\nLast Name = {}\n Age = {}".format(a,b,c))
# Programma che simula l'inserimento di una password e la sua convalida

# Il modulo getpass nasconde l'input dell'utente
import getpass

# Convalida della password: se errata l'utente ha in tutto 3 tentativi
tentativi = 3
password_corretta = "MyPa55w0rd!"

while tentativi > 0:
    # Input per l'utente con la funzione getpass() del modulo importato
    password = getpass.getpass("Inserisci la password: ")
    
    if password == password_corretta:
        print("Password corretta. Accesso consentito.")
        break
    else:
        tentativi -= 1
        if tentativi == 0:
            print("Password errata. Accesso negato.")
        else:
            print("Password errata. Tentativi rimasti", tentativi)

RGB binario, RGB esadecimale

[modifica | modifica wikitesto]

Il seguente esempio di programma Python (versione 3.8.5[21]) converte con i dovuti passaggi delle percentuali di rosso, verde e blu, un input in un colore codificato in RGB:

def RGB_bin():
    import string
    percentage1 = input("red (%dex): ")
    percentage2 = input("green (%dex): ")
    percentage3 = input("blue (%dex): ")
    print("Coding in RGB a color with " + str(percentage1) + "% of red, " + str(percentage2) + "% of green and " + str(percentage3) + "% of blue...")
    
    print(str(percentage1) + " : 100 = X : 256, so X = " + str(percentage1) + " * 256 / 100." )
    X = float(int(percentage1) * 256 /100)
    
    print(str(percentage2) + " : 100 = Y : 256, so Y = " + str(percentage2) + " * 256 / 100.")
    Y = float(int(percentage2) * 256 /100)
    
    print(str(percentage3) + " : 100 = Z : 256, so Z = " + str(percentage3) + " * 256 / 100.")
    Z = float(int(percentage3) * 256 /100)

    X = bin(int(X))
    Y = bin(int(Y))
    Z = bin(int(Z))
    binary_colour = (str(X) + " " + str(Y) + " " + str(Z))
    print("Colour coded by binary digits: " + str(binary_colour[2:]))

def RGB_hex():
    percentage1 = input("red (%dex): ")
    percentage2 = input("green (%dex): ")
    percentage3 = input("blue (%dex): ")
    print("Coding in RGB a color with " + str(percentage1) + "% of red, " + str(percentage2) + "% of green and " + str(percentage3) + "% of blue...")
    
    print(str(percentage1) + " : 100 = X : 256, so X = " + str(percentage1) + " * 256 / 100." )
    R = float(int(percentage1) * 256 /100)
    
    print(str(percentage2) + " : 100 = Y : 256, so Y = " + str(percentage2) + " * 256 / 100.")
    G = float(int(percentage2) * 256 /100)
    
    print(str(percentage3) + " : 100 = Z : 256, so Z = " + str(percentage3) + " * 256 / 100.")
    B = float(int(percentage3) * 256 /100)

    R = hex(int(R))
    G = hex(int(G))
    B = hex(int(B))
    hexadecimal_colour = (str(R) + " " + str(G) + " " + str(B))
    print("Colour coded by hexadecimal digits: " + str(hexadecimal_colour[2:5]) + str(hexadecimal_colour[7:10]) + str(hexadecimal_colour[12:14]))

L'output del codice sorgente sopra è il seguente:

======== RESTART: D:\Python\Python\Python38-32\Python3.8.5 dal pc\RGB.py =======
>>> RGB_bin()
red (%dex): 30
green (%dex): 40
blue (%dex): 20
Coding in RGB a color with 30% of red, 40% of green and 20% of blue...
30 : 100 = X : 256, so X = 30 * 256 / 100.
40 : 100 = Y : 256, so Y = 40 * 256 / 100.
20 : 100 = Z : 256, so Z = 20 * 256 / 100.
Colour coded by binary digits: 1001100 0b1100110 0b110011

Definizione di una classe

[modifica | modifica wikitesto]

In Python è possibile creare classi attraverso un'istruzione specifica (class) che rappresenta l'alternativa più semplice, ma non esclusiva, per definire nuovi tipi di dato. Caratteristiche particolari in Python sono la possibilità di eredità multipla, la definizione di attributi tramite inizializzazione e non tramite dichiarazione, la dichiarazione esplicita del parametro riflessivo nei metodi d'istanza e l'overloading di funzioni e operatori.

Il parametro riflessivo è per convenzione chiamato self, ma il linguaggio non impone alcuna restrizione in merito alla scelta. Nessuna restrizione è posta anche alla definizione degli attributi: gli attributi esistono dal momento in cui vengono assegnati e l'assegnazione può avvenire al momento della costruzione (metodo __init__, da preferire) oppure all'interno di altri metodi. Inoltre gli attributi possono essere aggiunti esternamente alla classe o direttamente a un oggetto.

Python fa distinzione tra metodi d'istanza, di classe o statici. Gli attributi possono essere invece d'istanza o di classe. Il supporto all'information hiding è parziale, ma integrato dallo strumento delle property che permettono di definire degli attributi virtuali con le caratteristiche di accesso volute.

Inoltre sono previsti dei metodi "speciali" associati a operatori e funzioni di built-in. Ad esempio, ridefinendo il metodo __add__ si ridefinisce l'operatore di addizione quando il primo operando sia del tipo definito, mentre __str__ ridefinisce la conversione a stringa. Non è invece permesso l'overloading dei metodi. Attraverso l'uso della riflessione e delle metaclassi è inoltre possibile personalizzare ulteriormente la definizione delle classi.

Per esempio una classe Persona, avente solo un semplice costruttore e un metodo che restituisce il nome completo. è caldamente consigliato creare solo classi new style, ovvero classi che ereditano (direttamente o indirettamente) da object[22].

A partire da Python 3.6, è possibile utilizzare una nuova funzione chiamata f-strings[23]. Anteponendo la lettera f prima delle virgolette che aprono la dichiarazione di una stringa, questa funzione viene attivata. Grazie a essa è possibile includere variabili all'interno di una stringa inserendo il loro nome tra parentesi graffe. In questo modo rendiamo il codice molto più leggibile senza dover utilizzare una serie di + per concatenare variabili e stringhe vuote. Inoltre, nel caso in cui volessimo includere una variabile o un oggetto non di tipo stringa, la conversione avverrà in automatico, risparmiando l'eccezione TypeError.

class Persona(object):
    # Costruttore della classe
    def __init__(self, nome, cognome):
        self.nome = nome
        self.cognome = cognome

    def nome_completo(self):
        full = f'Sig. {self.cognome} {self.nome}'
        return full

persona = Persona('Mario', 'Rossi')
print(persona.nome_completo())

L'output presentato sarà il seguente: Sig. Rossi Mario

Numeri perfetti fino a n

[modifica | modifica wikitesto]

L'output restituisce i numeri perfetti fino a n (inserito in print).

"""Numeri perfetti"""
def print_perfetti(n):
    """Stampa i numeri perfetti fino ad n"""
    for i in range(2, n + 1):
        somma = 0

        for j in range(1, i // 2 + 1): # Oltre la metà + 1 non ci sono più divisori
            if i % j == 0:
                somma += j # Aggiungo a somma il divisore trovato
                #print(i, j, somma) # Stampa, se serve, i valori intermedi

        if somma == i:
            print(i, end=" ")
print(print_perfetti())
  1. ^ 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."
  2. ^ Fonte: Copia archiviata, su python.org. URL consultato il 27 ottobre 2009 (archiviato dall'url originale il 17 dicembre 2009).
  3. ^ How do I create a .pyc file?, su effbot.org. URL consultato il 28 maggio 2020 (archiviato dall'url originale il 3 giugno 2020).
  4. ^ Python 3 vs C gcc - Which programs are fastest? | Computer Language Benchmarks Game, su benchmarksgame-team.pages.debian.net. URL consultato il 28 maggio 2020.
  5. ^ Psyco - Home Page, su psyco.sourceforge.net. URL consultato il 28 maggio 2020.
  6. ^ (EN) The PyPy Team, PyPy, su PyPy, 28 dicembre 2019. URL consultato il 28 maggio 2020.
  7. ^ (EN) Real Python, Python Bindings: Calling C or C++ From Python – Real Python, su realpython.com. URL consultato il 28 maggio 2020.
  8. ^ (EN) CPython, su github.com. URL consultato il 5 ottobre 2024.
  9. ^ Jython: Python for the Java Platform
  10. ^ IronPython: the Python programming language for the .NET Framework
  11. ^ The Python programming language for S60 mobile phones
  12. ^ PyPy Archiviato il 13 gennaio 2007 in Internet Archive.
  13. ^ 24.1. turtle — Turtle graphics — Python 3.3.7 documentation, su docs.python.org. URL consultato il 28 maggio 2020.
  14. ^ 8.17. copy — Shallow and deep copy operations — Python 2.7.18 documentation, su docs.python.org. URL consultato il 28 maggio 2020.
  15. ^ random — Generate pseudo-random numbers — Python 3.8.3 documentation, su docs.python.org. URL consultato il 28 maggio 2020.
  16. ^ 28.1. sys — System-specific parameters and functions — Python 2.7.18 documentation, su docs.python.org. URL consultato il 28 maggio 2020.
  17. ^ 9.4. decimal — Decimal fixed point and floating point arithmetic — Python 2.7.18 documentation, su docs.python.org. URL consultato il 28 maggio 2020.
  18. ^ 5. Built-in Types — Python 2.7.18 documentation, su docs.python.org. URL consultato il 28 maggio 2020.
  19. ^ (EN) Ereditarietà multipla, su Python ABC. URL consultato il 28 maggio 2020.
  20. ^ Continuations Made Simple and Illustrated
  21. ^ rilascio versione 3.8.5, su Python.org.
  22. ^ Un nuovo stile per le classi | Python-it.org # il punto di riferimento italiano per gli appassionati di Python, su python-it.org. URL consultato il 23 giugno 2010 (archiviato dall'url originale il 6 agosto 2010).
  23. ^ (EN) PEP 498 -- Literal String Interpolation, su Python.org. URL consultato il 23 maggio 2019.

Voci correlate

[modifica | modifica wikitesto]

Altri progetti

[modifica | modifica wikitesto]

Collegamenti esterni

[modifica | modifica wikitesto]
Controllo di autoritàLCCN (ENsh96008834 · GND (DE4434275-5 · BNF (FRcb13560465c (data) · J9U (ENHE987007563637105171
  Portale Software libero: accedi alle voci di Wikipedia che trattano di Software libero
神疲乏力是什么症状 头部出汗多是什么原因 荔枝不能跟什么一起吃 大姨妈延迟是什么原因 珠五行属什么
皮肤有白点是什么原因 早上6点是什么时辰 双子座女和什么星座最配 一月14号是什么星座 暖五行属什么
蝴蝶有什么寓意 吃什么补钾 少字加一笔是什么字 三十六计第一计是什么计 脸上老长痘痘是什么原因
布病是什么 肚子痛是什么原因 卵胎生是什么意思 好景不长是什么意思 部队大校是什么级别
眼袋大是什么原因hcv9jop5ns4r.cn 投行是做什么的dayuxmw.com 晚上九点是什么时辰hcv8jop0ns8r.cn 1月25号什么星座clwhiglsz.com 勾心斗角是什么生肖hcv9jop3ns3r.cn
跑马了是什么意思hcv9jop1ns8r.cn 节令是什么意思hcv8jop3ns6r.cn 闭目养神什么意思hcv9jop1ns9r.cn 胎位roa是什么意思hcv9jop7ns5r.cn 什么是琉璃1949doufunao.com
21属什么hcv8jop5ns6r.cn 哭笑不得是什么意思hcv8jop7ns2r.cn 落枕是什么原因zhiyanzhang.com 咳嗽吃什么好hcv9jop6ns9r.cn 乳和霜有什么区别hanqikai.com
孕妇喝什么汤好hcv8jop7ns0r.cn 盗墓笔记的结局是什么0297y7.com 扁桃体肿大是什么原因引起的clwhiglsz.com 什么运动能长高hcv7jop4ns5r.cn 自相矛盾的道理是什么hcv9jop4ns8r.cn
百度