Python

De la Viquipèdia, l'enciclopèdia lliure.
Saltar a la navegació Saltar a la cerca
Nota de desambiguació.svg Desambiguació : si busqueu altres significats, vegeu Python (desambiguació) .
Python
llenguatge de programació
Logotip de Python i wordmark.svg
Autor Guido van Rossum
Data d’origen 20 de febrer de 1991
Última versió 3.9.6 (28 de juny de 2021) i 3.10.0rc1 (3 d'agost de 2021)
Ús genèric, scripting
Paradigmes Programació orientada a objectes
Escrivint dinàmic
Extensions comunes .py, .pyw, .pyc, .pyo, .pyd
Influenciat per ABC , ALGOL 68 , C , C ++ , Dylan , Haskell , Icon , Java , Lisp , Modula-3 , Perl
Va influir Boo , Cobra , D , F # , Falcon , Go , Groovy , JavaScript , Julia , Ruby , Swift , Perl 6
Implementació de referència
Sistema operatiu Multiplataforma
Llicència Llicència Python Software Foundation
Lloc web www.python.org/

Python és un llenguatge de programació més "d'alt nivell" que la majoria dels altres llenguatges, orientat a objectes , adequat, entre altres usos, per al desenvolupament d' aplicacions distribuïdes, scripts , computació numèrica i proves de sistemes .

Concebut per Guido van Rossum a principis dels anys noranta , el nom va ser escollit per la passió de l'inventor per Monty Pythons i per la seva sèrie de televisió Monty Python's Flying Circus [1] i es compara sovint amb Ruby , Tcl , Perl , JavaScript , Visual Basic o Scheme. [2] .

Sovint també s’estudia entre els primers idiomes per la seva semblança amb un pseudocodi i s’utilitza freqüentment per simular la creació de programari gràcies a la flexibilitat d’experimentació permesa per Python, que permet al programador organitzar idees durant el desenvolupament, com ara per exemple, crear un joc mitjançant Pygame o el back-end d’un lloc web mitjançant Flask o Django .

Python també té una secció de gràfics, el mòdul Gràfics Python Turtle Graphics.

Descripció

És un llenguatge multi-paradigma que té entre els seus principals objectius: dinamisme, senzillesa i flexibilitat. Admet el paradigma orientat a objectes, la programació estructurada i moltes funcions de programació funcionals i de reflexió .

Les característiques més reconegudes immediatament de Python són les variables sense escriure i l’ús de sagnat per a la sintaxi d’especificació, en lloc dels parèntesis més comuns.

Altres característiques distintives són la sobrecàrrega d'operadors i funcions a través dels delegats , la presència d'un ampli assortiment de tipus i funcions bàsiques i biblioteques estàndard, sintaxis avançades com el tallat i la comprensió de llistes .

La comprovació de tipus és forta ( escriptura forta ) i es realitza en temps d’ execució ( escriptura dinàmica ): una variable és un contenidor al qual s’associa una etiqueta (el nom) que es pot associar a diferents contenidors fins i tot de diferents tipus durant la seva vida útil. Un sistema de recollida d’escombraries per alliberar i recuperar automàticament la memòria de treball forma part de Python.

Python té una certa semblança amb Perl , però els seus dissenyadors han escollit una sintaxi més bàsica i uniforme amb l'objectiu de millorar la llegibilitat del codi. De manera similar a Perl, sovint es classifica com a llenguatge de seqüència d’ordres , però si bé és útil per escriure seqüències d’ordres del sistema, com a alternativa per exemple a bash , la gran quantitat de biblioteques disponibles i la facilitat amb què el llenguatge permet escriure programari modular també afavoreix el desenvolupament d'aplicacions molt complexes.

Altres característiques

Codi font d'un programa escrit en Python
Exemple de codi font escrit en Python

Tot i que generalment es considera que Python és un llenguatge interpretat , en realitat el codi font no es converteix directament en llenguatge màquina . De fet, primer passa per una fase de precompilació en bytecode , que gairebé sempre es reutilitza després de la primera execució del programa, evitant així reinterpretar la font cada vegada i millorant el rendiment. A més, és possible distribuir programes Python directament en bytecode, saltant-se completament la fase d’interpretació per part de l’usuari final i obtenint programes Python de font tancada [3] .

Menú desplegable des del qual podeu executar el programa fent clic a "Executa el mòdul" o amb la drecera F5 a partir de Windows 10 .

Igual que el llenguatge Lisp i, a diferència de Perl, l’ intèrpret de Python també admet un mode d’usuari interactiu ( REPL ) mitjançant el qual podeu introduir codi directament des d’un terminal, mostrant el resultat immediatament.

Exemple d'alguns codis font escrits amb Python IDLE 3.8.5

A més, l'intèrpret de Python es troba a la biblioteca estàndard, de manera que, com en molts altres llenguatges interpretats, és possible avaluar cadenes arbitràries en el context actual. També és possible passar a l'intèrpret un context completament diferent, en forma de llistes que contenen la llista de símbols definits.

Python també disposa d’un marc de proves d’unitats que admet el desenvolupament de proves unitàries automatitzades.

Rendiment

En comparació amb els llenguatges compilats de tipus estàtic , com C , la velocitat d'execució no és un dels punts forts de Python [4] , especialment en càlcul matemàtic. A més, el programa es basa únicament en un nucli i el multi-threading només està present a nivell abstracte. Hi va haver una extensió, Psyco [5] , el desenvolupament del qual va acabar el 2012, que era una mena de compilador JIT , capaç d’accelerar significativament alguns tipus de codi, especialment la implementació d’algoritmes, a costa d’augmentar la memòria utilitzada. Un projecte actual i desenvolupat activament per millorar el rendiment del codi Python amb un compilador JIT és PyPy [6] .

Python us permet evitar fàcilment l'obstacle del rendiment pur: de fet, és relativament senzill escriure una extensió en C o C ++ i després utilitzar-la dins de Python, aprofitant així l'alta velocitat d'un llenguatge compilat només a les parts de que serveix realment i aprofitant la potència i versatilitat de Python per a la resta del programari [7] .

Altres implementacions

Actualment estan disponibles les següents implementacions de Python:

Tipus de dades i estructures

Com Python s'escriu dinàmicament , totes les variables són en realitat indicadors d' objectes . Per exemple, si a una variable se li assigna un valor enter, es pot assignar una cadena o una llista immediatament després. D’altra banda, els objectes tenen un tipus.

Python espera una comprovació de tipus moderada en temps d' execució , és a dir, en temps d'execució . Els tipus numèrics tenen conversió implícita, de manera que és possible, per exemple, multiplicar un nombre complex per un enter. No hi ha cap conversió implícita entre números i cadenes alfanumèriques; per tant, un número no és un argument vàlid per a operacions de cadenes, a diferència del que passa per exemple en llenguatge PHP.

Python disposa de diverses plantilles / biblioteques per proporcionar funcionalitats sense haver d’escriure codi, com ara els gràfics de tortuga [14] (per dibuixar), còpia [15] (per crear còpies d’ objectes ), aleatòria [16] (per generar aleatòriament) nombres), sys [17] (per interactuar des de la línia d’ordres amb l’intèrpret) i l’ hora (per operar amb unitats de data i hora).

Python proporciona un gran nombre de tipus bàsics , essencialment numèrics i tipus de contenidors. La característica distintiva és el suport natiu, a més de tipus clàssics com enters, punt flotant (números amb coma flotant) i cadenes alfanumèriques, fins i tot tipus més avançats com enters de mida arbitrària, nombres complexos, llistes , conjunts i diccionaris . Tot i això, no hi ha cap tipus específic per als caràcters.

Molts altres tipus són importables de biblioteques estàndard i es poden crear nous tipus mitjançant classes .

Gràfics de tortuga

Exemple de la sortida d’un programa escrit amb la biblioteca de tortugues.

El mòdul tortuga, com la resta de biblioteques, es pot importar amb la funció d’ importació adequada escrivint al codi font:

 importació de tortuga
d'importació tortuga tortuga, de la pantalla

Les ordres escrites més amunt permeten disposar dels objectes Turtle i Screen, les funcions dels quals es poden assignar a objectes reals de la següent manera:

 de tortuga tortuga importació, la pantalla # això importarà una tortuga (ploma pitó) i la seva pantalla.
Background = Screen () # de manera que assigneu totes les funcions i propietats de Screen a Background.
Pen = Turtle () #aquest serà el Pen.
# Per descomptat, qualsevol nom d'objecte es pot assignar a la tortuga i a la pantalla i canviar-lo al llarg del programa.

Totes les funcions del fons i del llapis es poden utilitzar trucant-les com es mostra al codi següent:

 Ploma . cercle ( 5 ) # per exemple, la funció de cercle crearà un cercle que tingui el valor entre parèntesis com a radi
#la funció setcolor (referida tant a la tortuga com al fons) determina el seu color
Antecedents . setcolor ( "taronja" ) # amb el nom de color desitjat
Antecedents . setcolor ( "FFFFFF" ) # o escrivint el color en RGB hexadecimal

Tipus numèrics

Els tipus enter ( int ) i de coma flotant ( float ) tenen una mida que depèn del maquinari i de la implementació de l’intèrpret, normalment de 32 i 64 bits . S’espera de forma nativa enteros arbitràriament grans ( long , que es converteix en l’opció predeterminada per als enters que comencen amb Python 3.0) i els nombres complex ( complex ).

Python té tots els principals operadors lògics i aritmètics entre nombres, inclosa l'exponentiació. El tipus booleà ( bool ) també pertany a la categoria de nombres.

Com que la versió 2.4 de Python està disponible com a biblioteca [18] també els nombres decimals ( decimal ), és a dir, els nombres de coma flotant amb una precisió il·limitada, com els disponibles a REXX o Cobol , que no pateixen problemes d'arrodoniment i estabilitat típica dels nombres clàssics punts flotants .

Contenidors

Python considera generalment com a contenidors objectes que ofereixen la possibilitat d'iterar sobre un conjunt d'elements, per tant usables en contextos com el bucle for i funcions com suma, cerca i ordenació. Els contenidors generalment permeten contenir dades heterogènies.

Pel que fa als contenidors estàndard adequats, es poden classificar com a seqüències , conjunts i diccionaris . Els contenidors segueixen una filosofia comuna i comparteixen la majoria dels mètodes .

Les seqüències són contenidors ordenats, mètodes d’intercanvi basats en l’ordenació, la indexació de nombres enters i la creació de subseqüències mitjançant la segmentació .

Les llistes ( list ) poden ser seqüències ampliades, mentre que les tuples ( tuple ) són seqüències immutables. Les cadenes alfanumèriques ( str i unicode ) també es consideren seqüències. A partir de Python 3.0, els tipus str i unicode s’uneixen i apareix el tipus de byte , aproximadament equivalent a una cadena binària.

Es proporcionen totes les operacions de cadena clàssiques, com la concatenació, el format, la cerca, la substitució, etc. Les cadenes de Python són seqüències immutables, de manera que qualsevol operació que d'alguna manera pugui alterar una cadena, com ara substituir un caràcter, retorna una cadena nova, com a Java i C #.

Altres contenidors són els diccionaris ( dict ), coneguts en altres contextos amb el nom de taula de hash o matrius associatives . Hi ha una sintaxi per crear diccionaris, els elements dels quals estan especificats per un parell de dades separades per dos punts: "." El primer element del parell representa l'índex, anomenat "clau", i el segon és el seu valor corresponent. De fet, cada element d'un diccionari també s'anomena "parell clau-valor".

Per exemple, la instrucció següent crea un diccionari identificat com diz compost de dos elements les claus de les quals són wikipedia i wikiquote , respectivament i amb valors enters associats 40 i 60 :

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

Les claus d’un diccionari són immutables, mentre que el valor corresponent a cada clau es pot modificar mitjançant una assignació. La següent instrucció canvia el valor corresponent a "wikipedia" i el porta a 4500:

 diz [ 'wikipedia' ] = 4500

A partir de la versió 2.7 de Python [19] , també s'admeten conjunts ( set i frozenset ), és a dir, conjunts no ordenats d'objectes hashable .

Organització orientada a objectes

El sistema tipus Python està ben integrat amb el sistema de classes . Tot i que els tipus de base no són classes formalment, com a C # per exemple, una classe encara pot heretar-ne. D'aquesta manera és possible ampliar cadenes, diccionaris i fins i tot nombres enters. També s'admet l' herència múltiple [20] .

També s’admeten funcions d’ introspecció de tipus i classe extenses. Els tipus i les classes són objectes que poden ser explorats i comparats. Els atributs es gestionen en un diccionari.

Sintaxi

Python ha estat dissenyat perquè sigui fàcil de llegir i escriure. Visualment es presenta de forma lineal i neta, amb poques construccions sintàctiques en comparació amb altres llenguatges estructurats com C , Perl o Pascal .

Per exemple, Python només té dues formes de bucles: for quals itera sobre elements d'una llista o un iterador (equivalent a Perl o PHP foreach ) i while que les bucles sempre que l' expressió booleana especificada sigui certa. Bàsicament no té bucles for estil C for , do while i until , però tots aquests es poden expressar com a equivalents simples. De la mateixa manera, només té la construcció if elif else per a opcions condicionals, però no té ni switch ni goto .

Sagnia

Un aspecte inusual de Python és el mètode que utilitza per delimitar blocs de programes, cosa que el fa únic entre els idiomes més populars.

En idiomes derivats d’ ALGOL com Pascal, C i Perl, els blocs de codi s’indiquen amb claudàtors o amb paraules clau; per exemple, C i Perl utilitzen {}, mentre que Pascal begin i end . En aquests idiomes, només és una pura convenció dels desenvolupadors sagnar (és a dir, "sagnar" des del marge esquerre de la pàgina) el codi font dins d'un bloc per millorar la seva llegibilitat i aclarir l'estructura del flux d'execució.

En lloc d'això, Python deriva el seu sistema de sagnat del llenguatge de programació Occam menys conegut: en lloc d'utilitzar parèntesis o paraules clau, utilitza el sagnat per indicar blocs niats juntament amb el caràcter "dos punts" (:). A Python podeu utilitzar una pestanya i un nombre arbitrari d'espais, sempre que, per descomptat, s'utilitzin de manera congruent amb la sintaxi del llenguatge. L'exemple següent ho aclareix mostrant la versió de funcions C i Python per calcular el factorial d'un enter.

Factorial en Do:

 int factorial ( int x ) {
    if ( x == 0 ) 
        retorn 1 ;
    en cas contrari 
        retorna x * factorial ( x -1 );
}

Factorial a Python:

 factorial def ( x ):
    si x == 0 :
        retorn 1
    altrament :
        retorn x * factorial ( x - 1 )

Al principi, aquesta forma d’indicar blocs i d’expressar la sintaxi pot confondre les idees dels que provenen d’altres llengües, però després resulta molt avantatjosa, perquè és concisa i obliga a escriure fonts sagnades correctament, augmentant així la llegibilitat de la codi.

L’inconvenient és que la gestió d’espais i caràcters de pestanya pot ser diferent d’un editor de text a un altre, cosa que obliga a prestar molta atenció a la sagnia del codi o a confiar en les funcions de sagnat automàtic que ara hi ha a la majoria d’editors de programes. També pot passar que treballeu amb diferents editors de codi font en diversos equips i, per tant, acabeu amb un codi font que utilitza pestanyes i espais de manera mixta, i només es nota l’error en temps d’execució.

Python també permet a algunes dreceres escriure codi "múltiple" a la mateixa línia. Si els dos punts (:) inicien un bloc sagnat de només una línia: el podem moure seguint un espai més endavant.

 si b > a : print ( "b és més gran que a" )

Tot i que no és molt bo per als puristes del llenguatge Python, encara és possible utilitzar el "punt i coma" (;) com en la majoria dels llenguatges de programació per indicar que una instrucció està acabada i iniciar-ne una altra a la mateixa línia.

 a = b + 10 ; print ( "Hola món" ); b = 243 - 23 ;

Programació funcional i sintaxi avançada

Un altre punt fort de Python és la disponibilitat d’elements que faciliten la programació funcional . Les funcions es consideren objectes i, per tant, es poden utilitzar com qualsevol altre objecte, per exemple inserint-les a col·leccions o utilitzant-les directament com a paràmetres per a altres funcions. Els elements de programació funcionals, juntament amb construccions específiques per manipular contenidors, fan que sigui encara més convenient treballar amb llistes o altres tipus de contenidors.

Les llesques són una construcció semblant a la indexació capaç d'obtenir subseqüències especificant els índexs d'inici, final i "pas".

 nombres = [ 1 , 2 , 3 , 4 , 5 ]
nombres_parells = números [ 1 :: 2 ] # exemple de segmentació

La comprensió de la llista és una construcció extreta del llenguatge funcional Haskell i permet "omplir" una llista, mitjançant una sintaxi especial, tal com podem veure a l'exemple següent en què es calculen les cinc primeres potències de dos:

 nombres = [ 1 , 2 , 3 , 4 , 5 ]
powers_of_two = [ 2 ** n per n en nombres ] # exemple de comprensió de la llista

Els generadors , en canvi, són objectes particulars capaços de construir col·leccions d’una manera dinàmica, útils per augmentar l’eficiència, en particular la presència d’iteracions en un gran nombre d’elements. Les expressions generadores , similars a les comprensions de llista, són una eina ràpida i eficaç per crear generadors. La paraula clau rendiment us permet crear generadors amb una sintaxi molt similar a la d’una funció.

Passem a alguns exemples; expressió del generador :

 nombres = [ 1 , 2 , 3 , 4 , 5 ]
powers_of_two = ( 2 ** n per n en nombres ) # generador

O, per obtenir més control, com una funció normal, podem utilitzar la paraula clau rendiment en lloc de retorn , per convertir la nostra funció en un generador. D'aquesta manera, la funció "guarda" el seu estat i després reprèn l'execució del codi quan es recorda el valor del següent rendiment .

 nombres = [ 1 , 2 , 3 , 4 , 5 ]
def power_of_two ( números ):
    per a n en nombres :
        rendiment 2 ** n
gen = power_of_two ( números )

L’ús és idèntic. Es diu la següent funció que retorna un valor nou cada vegada, reprenent l'execució del codi a partir de la paraula clau rendiment . Quan s’acaben els valors, es genera una excepció StopIterationError . Tanmateix, no és l'única manera d'interactuar amb els generadors i podeu rastrejar les dades transmeses al rendiment de la funció d'aquesta manera:

 gen = ( 2 ** n per n a l' interval ( 1 , 6 ))
per a x en gen :
    imprimir ( x )

Per crear una llista a partir d’un generador, només cal que utilitzeu la llista de trucades (gen):

 gen = ( 2 ** n per n a l' interval ( 1 , 6 ))
imprimir ( llista ( gen ))

Es prefereixen els generadors a les llistes ja que no ocupen memòria, ja que els valors simplement es calculen de tant en tant i no queden en memòria. Per a això, és aconsellable utilitzar, per exemple, xrange (que és un generador) en lloc d’ interval (que retorna una llista) amb nombres molt grans, per garantir una major velocitat

També és possible escriure expressions if ... else en una sola línia, que és útil en combinació amb lambdas (vegeu més avall).

 importació aleatòria
l = [ 1 , 2 ]
a = aleatori . elecció ( l )
imprimir ( 'dret' si un 'incorrecte' cosa == 1)

Com que Python us permet tenir funcions com a arguments , també és possible tenir construccions funcionals més subtils, com ara la continuació . [21] .

A Python hi ha la paraula clau lambda , particularment útil en contextos en què és necessari realitzar petites operacions que probablement només es realitzaran en aquesta àrea del codi:

 >>> l = [ 1 , 2 , 3 , 4 , 5 ] # o rang (1,6)
>>> imprimir ( mapa ( lambda x : x + 10 , l ))
[ 11 , 12 , 13 , 14 , 15 ]

Tanmateix, aquest ús del mapa és discutit i es prefereix utilitzar comprensions de llista:

 >>> l = [ 1 , 2 , 3 , 4 , 5 ] # o rang (1,6)
>>> imprimeix ([ x + 10 per x en l ])
[ 11 , 12 , 13 , 14 , 15 ]

Tanmateix, els blocs lambda només poden contenir expressions , no sentències . Per tant, no són la forma més general de retornar una funció. En el seu lloc, podeu utilitzar la tècnica següent que retorna una funció el nom del qual es defineix en un àmbit local, és a dir, un tancament :

 def múltiple_adder ( x , y ):
    def sumador (z):
        torna z + x + y
    return ( x + y + sumador ( x + y )) # seria (x + y) * 3

Decoradors

Un decorador és qualsevol objecte invocable de Python que s'utilitza per afegir codi al començament o al final d'una funció, mètode o definició de classe, sense modificar-ne el codi internament. Un decorador ha passat l'objecte i retorna l'objecte modificat.

Els decoradors s’inspiren en part en la notació Java, tenen una sintaxi similar i es consideren sucre sintàctic . Utilitzen @ com a paraula clau:

 @viking_chorus
def menu_item ():
    imprimir ( "correu brossa" )

Els decoradors es poden encadenar col·locant-ne diversos en línies adjacents:

 @invencible
@favorite_color ( "Blau" )
def black_knight ():
    passar

i equival a:

 def black_knight ():
    passar
black_knight = invencible (favorite_color ( "blau") (black_knight))

L’estructura de decoració estàndard és:

 def favorite_color ( color ):
    decorador def (func):
        embolcall def ():
            imprimir ( color )
            func ()
        embolcall de retorn
    decorador de tornades

Comentaris

Com altres llenguatges de programació, a Python podeu deixar comentaris en línies de codi per entendre millor què passa quan executeu el programa. A Python, els comentaris (a partir de les primeres versions del llenguatge de programació) s’introdueixen amb el símbol "#" per no alterar el codi.

 print ( "quelcom aleatori" ) #aquest programa imprimeix "quelcom aleatori" ignorant qualsevol cosa després del símbol "#"
print ( "l'efecte del hash desapareix cap a cap desapareix i el codi afecta el programa" )

Gestió d'excepcions

Python admet i utilitza àmpliament la gestió d’excepcions com a mitjà per informar i comprovar si hi ha condicions d’error, incloses les excepcions generades per errors de sintaxi.

Les excepcions permeten una comprovació d'errors més concisa i fiable que moltes altres formes possibles que s'utilitzen normalment per informar d'errors o situacions anormals. Les excepcions són segures per a fils ; no sobrecarreguen el codi font com fan les comprovacions dels valors d'error retornats i poden propagar fàcilment la pila de trucades de funcions quan cal informar d'un error a un nivell superior del programa.

Amb la gestió d’excepcions, les comprovacions preventives se substitueixen per un mecanisme més fàcil que us permet dur a terme l’acció desitjada directament i captar per separat les excepcions que es puguin produir. A més de la manipulació d'errors, a Python de vegades s'utilitzen excepcions també per al control de flux: per exemple, l'operació d'iteració i, en conseqüència, el bucle for, es basa en una senyalització d'excepció.

Biblioteca estàndard

Python té una extensa biblioteca estàndard , cosa que el fa adequat per a molts usos. A més dels mòduls de biblioteca estàndard, podeu afegir altres escrits en C o Python per satisfer les vostres necessitats particulars. Entre els mòduls ja disponibles hi ha per escriure aplicacions web: s'admeten MIME , HTTP i la resta d'estàndards d'Internet. També hi ha mòduls disponibles per crear aplicacions amb una interfície gràfica, connectar-se a bases de dades relacionals i utilitzar expressions regulars .

La biblioteca estàndard és un dels punts forts de Python. De fet, és compatible amb totes les plataformes, a excepció d'algunes funcions, clarament marcades a la documentació com a específiques d'una plataforma concreta.

Exemples de programes

Hola món!

L'exemple següent d'un programa Python (versió 3.0) imprimeix el text " Hola, món! ":

 print ( "Hola, món!" )

El següent és el mateix programa que s’executa amb la versió 2.7 o anterior:

 imprimir "Hola, món!"

RGB binari, RGB hexagonal

L'exemple següent d'un programa Python (versió 3.8.5 [22] ) converteix una entrada en un color codificat RGB amb els passos necessaris dels percentatges de vermell, verd i blau:

 def RGB_bin ():
cadena d' importació
percentatge1 = entrada ( "vermell ( % d ex):" )
percentatge2 = entrada ( "verd ( % d ex):" )
percentatge3 = entrada ( "blau ( % d ex):" )
print ( "Codificació en color RGB amb" + str ( percentatge1 ) + " % o f vermell", + str ( percentatge2 ) + " % o f verd i" + str ( percentatge3 ) + " % o f blau ... " )
    
print ( str ( percentatge1 ) + ": 100 = X: 256, de manera que X =" + str ( percentatge1 ) + "* 256 / 100." )
X = float (int (percentatge1) * 256/100)
    
print ( str ( percentatge2 ) + ": 100 = Y: 256, de manera que Y =" + str ( percentatge2 ) + "* 256 / 100." )
Y = float (int (percentatge2) * 256/100)
    
print ( str ( percentatge3 ) + ": 100 = Z: 256, de manera que Z =" + str ( percentatge3 ) + "* 256 / 100." )
Z = float (int (percentatge3) * 256/100)

X = bin ( int ( X ))
Y = bin ( int ( Y ))
Z = bin ( int ( Z ))
color_binar = ( str ( X ) + "" + str ( Y ) + "" + str ( Z ))
print ( "Color codificat per dígits binaris:" + str ( binary_colour [ 2 :]))



def RGB_hex ():
percentatge1 = entrada ( "vermell ( % d ex):" )
percentatge2 = entrada ( "verd ( % d ex):" )
percentatge3 = entrada ( "blau ( % d ex):" )
print ( "Codificació en color RGB amb" + str ( percentatge1 ) + " % o f vermell", + str ( percentatge2 ) + " % o f verd i" + str ( percentatge3 ) + " % o f blau ... " )
    
print ( str ( percentatge1 ) + ": 100 = X: 256, de manera que X =" + str ( percentatge1 ) + "* 256 / 100." )
R = float (int (percentatge1) * 256/100)
    
print ( str ( percentatge2 ) + ": 100 = Y: 256, de manera que Y =" + str ( percentatge2 ) + "* 256 / 100." )
G = float (int (percentatge2) * 256/100)
    
print ( str ( percentatge3 ) + ": 100 = Z: 256, de manera que Z =" + str ( percentatge3 ) + "* 256 / 100." )
B = float (int (percentatge3) * 256/100)

R = hexadecimal ( int ( R ))
G = hexadecimal ( int ( G ))
B = hexadecimal ( 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

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.

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

A partire da Python 3.6, è possibile utilizzare una nuova funzione chiamata "f-strings" [24] . 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

Note

  1. ^ Fonte: Copia archiviata , su python.org . URL consultato il 27 ottobre 2009 (archiviato dall' url originale il 17 dicembre 2009) .
  2. ^ 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. "
  3. ^ How do I create a .pyc file? , su effbot.org . URL consultato il 28 maggio 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. ^ Jython: Python for the Java Platform
  9. ^ IronPython: the Python programming language for the .NET Framework
  10. ^ The Python programming language for S60 mobile phones
  11. ^ PyPy Archiviato il 13 gennaio 2007 in Internet Archive .
  12. ^ Pagina dove vengono archiviati i file caricati , su Repl.it .
  13. ^ SL4A su Google Code
  14. ^ 24.1. turtle — Turtle graphics — Python 3.3.7 documentation , su docs.python.org . URL consultato il 28 maggio 2020 .
  15. ^ 8.17. copy — Shallow and deep copy operations — Python 2.7.18 documentation , su docs.python.org . URL consultato il 28 maggio 2020 .
  16. ^ random — Generate pseudo-random numbers — Python 3.8.3 documentation , su docs.python.org . URL consultato il 28 maggio 2020 .
  17. ^ 28.1. sys — System-specific parameters and functions — Python 2.7.18 documentation , su docs.python.org . URL consultato il 28 maggio 2020 .
  18. ^ 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 .
  19. ^ 5. Built-in Types — Python 2.7.18 documentation , su docs.python.org . URL consultato il 28 maggio 2020 .
  20. ^ ( EN ) Ereditarietà multipla , su Python ABC . URL consultato il 28 maggio 2020 .
  21. ^ Continuations Made Simple and Illustrated
  22. ^ rilascio versione 3.8.5 , su Python.org .
  23. ^ 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) .
  24. ^ ( EN ) PEP 498 -- Literal String Interpolation , su Python.org . URL consultato il 23 maggio 2019 .

Bibliografia

  • Micha Gorelick, Ian Ozsvald, Python alla massima potenza. Programmazione pratica ad alte prestazioni , Milano, Hoepli, 2015, p. 376, ISBN 9788820367015 .
  • Mark Lutz, Imparare Python , Milano, Tecniche Nuove, 2011, p. 1097, ISBN 9788848125956 .
  • ( EN ) Luciano Ramalho, Fluent Python: Clear, Concise, and Effective Programming , O'Reilly Media, 2015, p. 792, ISBN 9781491946008 .

Voci correlate

Altri progetti

Collegamenti esterni

Controllo di autorità LCCN ( EN ) sh96008834 · GND ( DE ) 4434275-5 · BNF ( FR ) cb13560465c (data)
Software libero Portale Software libero : accedi alle voci di Wikipedia che trattano di software libero