Python numèric: tipus, mòduls i ús pràctic

Darrera actualització: 05/17/2026
  • Python ofereix tipus numèrics bàsics (int, float, complex, bool) a més d'eines auxiliars potents com ara math, cmath, decimal i random per a càlculs quotidians.
  • El mòdul numbers defineix classes base abstractes, de manera que molts tipus numèrics integrats, NumPy i personalitzats es poden tractar uniformement com a instàncies de Number.
  • Els modes d'arrodoniment, els valors especials (NaN, infinits) i l'aritmètica decimal exacta mitjançant decimals són crucials per a un codi científic i financer robust.
  • L'ecosistema numèric més ampli de Python, especialment NumPy, estén els tipus bàsics amb enters d'amplada fixa i matrius d'alt rendiment per a càlculs pesats.

concepte numèric de Python

Treballar amb nombres és el cor de la majoria de programes en Python., tant si esteu creant un script senzill, processant dades científiques o prototipant un algoritme. Entendre com Python representa i manipula valors numèrics és el primer pas per escriure codi fiable i eficient que es comporti com espereu.

Quan la gent parla de "Python numèric" sovint vol dir dues coses: d'una banda, els tipus de números integrats i les eines de biblioteca estàndard com ara math, cmath, decimal, random i numbers; de l'altra, l'ecosistema més ampli al voltant de la computació numèrica, amb biblioteques com ara NumPy que amplien el llenguatge amb tipus numèrics addicionals i operacions vectoritzades. Aquesta guia us guiarà detalladament a través d'aquests fonaments, des dels tipus bàsics fins a les abstraccions avançades.

Tipus numèrics bàsics en Python

Python defineix diverses categories numèriques integrades que cobreixen la majoria de les necessitats quotidianes: enters per a nombres enters, nombres de coma flotant per a valors reals amb decimals, nombres complexos per a valors amb parts reals i imaginàries, i el tipus booleà especial que es comporta com un membre molt petit de la família d'enters. Tots ells s'integren sense problemes amb els operadors aritmètics de Python.

Nombres enters (int) representen nombres enters, positius o negatius, sense coma decimalNo hi ha un límit superior fix per a la seva mida en Python estàndard; sempre que tingueu memòria, el vostre enter pot créixer. Valors com 1, -5 or 20234567890123456789 són tots vàlids int instàncies, i podeu confirmar-ho amb type(1) or type(-5), que tornarà <class 'int'>.

Nombres de coma flotant (float) s'utilitzen per a nombres reals amb un component fraccionariS'escriuen amb coma decimal, com ara 2.0, -7.823457 or 0.5, o amb notació científica com ara 1e8 (que significa 100,000,000). Quan feu operacions com la divisió, fins i tot entre nombres enters, Python sovint promou el resultat a un float; per exemple, 9 / 2 rendiments 4.5i type(4.5) is <class 'float'>.

Nombres complexos (complex) combinar una part real i una part imaginària, escrit amb un final j per a la unitat imaginària. Un valor com 2 + 3j té una component real 2 i una component imaginària 3. Les podeu construir directament (per exemple 3.14j) i inspeccionar-los amb atributs com ara .real i .imag, o trucar .conjugate() per obtenir el conjugat complex. Aquests són particularment populars en enginyeria, processament de senyals i computació científica.

Booleans (bool) també són tècnicament numèrics, Perquè True i False es comporten com els nombres enters 1 i 0 en expressions aritmètiques. Per exemple, True + 2 avalua a 3. Internament, bool és una subclasse de int, motiu pel qual els valors booleans s'integren perfectament en els càlculs i les comparacions.

Python et permet barrejar lliurement aquests tipus numèrics en expressions, promovent a un tipus més general quan calgui. Afegint un int a una float rendiments a float, i la combinació de nombres en flotació amb nombres complexos produeix un resultat complex: expressions com 1 + 1.0, 2.0 + (3 + 5j) or 6 / (5 + 8j) tota la feina sense cerimònia addicional.

tipus numèrics de Python

Operadors aritmètics i comportament de divisió

Un cop tingueu valors numèrics, feu servir els operadors aritmètics habituals per treballar-hi: suma (+), resta (-), multiplicació (*), divisió (/), divisió de planta (//), exponenciació (**) i mòdul (%). Python aplica aquests valors a enters, nombres de tipus floats i nombres complexos, realitzant la promoció de tipus segons calgui.

La divisió és una àrea on el disseny de Python és molt deliberat.. Utilitzant / sempre dóna un resultat de coma flotant quan tots dos arguments són numèrics, fins i tot si tots dos són enters. Per tant 9 / 2 resultats en 4.5, No 4Això t'anima a pensar en termes de divisió de nombres reals per defecte, que normalment és el que vols en càlculs científics o financers.

Si necessiteu una divisió entera que descarti la part fraccionària, feu servir l'operador de divisió de terra //. Per exemple, 9 // 2 produeix 4i -9 // 2 rendiments -5, ja que el resultat és "floor" (arrodonit cap avall cap a l'infinit negatiu). A més, divmod(a, b) et dóna tant el quocient com el residu alhora, retornant un parell que reflecteix (a // b, a % b).

Darrere de les càmeres, Python coordina acuradament com interactuen els diferents sabors numèrics.Un patró intern que podeu veure a la biblioteca estàndard és la idea dels "operadors alternatius": funcions que primer intenten una implementació específica del tipus, per exemple per a nombres racionals, i després tornen a operadors integrats quan un operand és un operand normal. int, float or complexAixò és el que permet que els tipus numèrics personalitzats interoperin amb el sistema aritmètic de Python mitjançant mètodes especials com ara __add__ i __radd__.

Codi de biblioteca per a aritmètica racional, com ara Fraction tipus, il·lustra clarament aquesta estratègiaEn afegir dos Fraction exemples, calcula una nova fracció multiplicant en creu numeradors i denominadors. Si afegiu un Fraction a un enter pla o una instància de numbers.Rational, utilitza l'algoritme racional precís. Si l'altre operand és un float or complex, es convertirà a aquest tipus més ampli i delegarà als operadors habituals, mantenint un comportament coherent i intuïtiu.

Funcions numèriques integrades

Més enllà dels operadors en brut, Python inclou un conjunt de funcions integrades que saben com gestionar nombres.Aquestes funcions sempre estan disponibles sense importar res i funcionen amb els tipus numèrics estàndard, a més de qualsevol objecte personalitzat que implementi els mètodes especials adequats.

abs(x) retorna el valor absolut del seu argument, fent que els nombres negatius siguin positius i deixant els valors positius sense canvis. Si passeu un objecte que defineix __abs__(), Python delegarà a aquest mètode. Per a nombres complexos, abs() retorna la magnitud (la distància des de l'origen en el pla complex).

round(x, ndigits) et dóna un valor arrodonit a un nombre determinat de decimals. Si ndigits s'omet o None, retorna l'enter més proper. A diferència de la regla d'"arrodonir la meitat cap amunt" del llibre escolar, la regla integrada de Python round utilitza una estratègia d'"arrodonir la meitat a parell" per a empats per reduir el biaix estadístic en càlculs repetits.

Funcions de conversió com ara int() i float() construir nombres a partir d'altres objectes. Trucant int(x) en un nombre flotant descarta la part fraccionària (per exemple, int(1.9) is 1), I float(x) produeix una representació de coma flotant a partir d'enters, cadenes o objectes compatibles. Quan es converteix de nombre flotant a nombre enter, no es produeix cap arrodoniment; la part decimal simplement es trunca.

Altres elements integrats tenen funcions de representació i agregacióFuncions com ara hex() i oct() retorna representacions de cadena d'enters en hexadecimal o octal amb els prefixos adequats (0x i 0o). Ajudants d'agregació com ara max() i min() escaneja un iterable o una sèrie d'arguments per trobar el valor més gran o més petit, mentre pow() i la ** potències de càlcul de l'operador i opcionalment acceptar un tercer argument per a l'exponenciació modular.

Eines numèriques avançades: matemàtiques, cmath i decimal

Per a càlculs més sofisticats, Python proporciona mòduls de biblioteca estàndard dedicats. en comptes d'inflar el llenguatge principal. Els més importants per al treball numèric són math, cmath i decimal, cadascun dirigit a un subconjunt particular de problemes.

L' math El mòdul se centra en les matemàtiques de coma flotant amb valors realsDesprés d'importar-ho amb import math, obtindreu accés a funcions i constants que es necessiten habitualment en enginyeria, física i anàlisi quotidiana, totes implementades en codi C eficient i operant amb float valors.

math inclou eines de teoria de nombres i de representació tal com math.ceil() per arrodonir a l'enter més proper, math.floor() per arrodonir a la baixa, math.modf() per dividir un nombre en flotant en parts fraccionàries i enteres, i math.frexp() / math.ldexp() per treballar amb la representació binària interna. També proporciona rutines de potència i logarítmiques com ara math.exp(), math.log(), math.log10(), math.pow() i math.sqrt(), així com funcions trigonomètriques i hiperbòliques com ara math.sin(), math.cos(), math.tan(), math.asin(), math.acos(), math.atan(), math.atan2(), math.sinh(), math.cosh() i math.tanh().

Per comoditat, math exporta constants fonamentals com ara math.pi i math.eAquests paràmetres són útils sempre que calculeu àrees, angles o creixement exponencial i voleu valors consistents amb bona precisió a tota la vostra base de codi.

Quan cal treballar amb nombres complexos, el cmath el mòdul juga el mateix paper per al pla complexEls seus miralls d'API math però utilitza arguments complexos i retorna resultats complexos, de manera que podeu calcular exponencials, logaritmes i funcions trigonomètriques complexes sense descompondre manualment els nombres en parts reals i imaginàries.

L' decimal El mòdul s'adreça a un punt problemàtic diferent: l'aritmètica exacta en base 10. El sistema binari de coma flotant estàndard no pot representar moltes fraccions decimals amb precisió, de manera que càlculs com ara 0.1 + 0.2 donar un resultat lleugerament desviat. decimal.Decimal evita això mitjançant l'ús d'aritmètica de base 10 de precisió arbitrària, cosa que la fa ideal per a aplicacions financeres i en qualsevol lloc on calgui controlar el comportament d'arrodoniment de manera molt estricta.

Per defecte, les operacions de coma flotant de Python segueixen el comportament IEEE-754 i utilitzen la representació en base 2.Quan un valor es troba exactament a mig camí entre dos nombres representables, s'aplica "arrodonir la meitat al parell", és a dir, la meitat dels emparellaments s'arrodoneixen cap avall i la meitat cap amunt. Això evita la deriva sistemàtica en càlculs grans. Si voleu una semàntica comercial d'"arrodonir la meitat cap amunt", podeu configurar una decimal context a utilitzar ROUND_HALF_UP, que sempre allunya els valors de zero 5 vegades.

Treballar amb tipus numèrics a la pràctica

Explorar com es comporten els nombres de manera interactiva és una manera excel·lent de desenvolupar la intuïció.Inicieu l'intèrpret de Python i creeu una barreja d'enters, nombres en flotació i valors complexos, i després proveu operacions bàsiques entre ells. Sumar i multiplicar és senzill, però és especialment instructiu experimentar amb la divisió, la divisió per mínims, l'arrodoniment i les conversions, observant com canvia el tipus de resultat.

La conversió entre tipus numèrics de vegades és necessària per complir les expectatives d'una API o per simplificar la lògica.Si teniu un nombre enter i només voleu la seva part entera, assigneu-lo a una variable com ara my_float = 1.9 i després truca my_int = int(my_float)Impressió my_int dóna 1i type(my_int) confirma que és un intTingueu en compte que la part fraccionària es descarta en comptes d'arrodonir-la.

La direcció inversa —promocionar a un tipus més general— sovint passa implícitamentQuan sumeu un enter i un nombre de coma flotant, Python retorna un nombre de coma flotant sense preguntar, ja que el sistema de nombres reals conté els nombres enters. La mateixa promoció passa quan combineu un nombre de coma flotant i un nombre complex: el valor de coma flotant es tracta com si tingués una part imaginària de zero i el resultat és complex.

Els nombres complexos inclouen diverses comoditats incorporades que els fan semblar naturalsPodeu inspeccionar directament a.real i a.imag per obtenir els components, truqueu a.conjugate() per invertir el signe de la part imaginària i passar-les a funcions de cmath sense conversió manual. Fins i tot si rarament els feu servir, saber que existeixen i com es comporten ajuda quan us trobeu amb codi científic.

La precisió i l'exactitud sempre importen quan es treballa amb dades de coma flotant.La precisió efectiva d'un Python estàndard float té uns 15 dígits decimals; més enllà d'això, el setzen dígit pot ser poc fiable. Per a moltes tasques, això és perfectament acceptable, però si necessiteu una aritmètica decimal exacta o un arrodoniment més predictible, el decimal El mòdul et dóna el control que necessites a costa d'una mica de rendiment.

Nombres aleatoris i valors numèrics especials

La generació de nombres aleatoris és una altra tasca freqüent en els fluxos de treball numèrics de Python., tant si esteu construint jocs senzills, executant simulacions de Monte Carlo o escrivint casos de prova que executin condicions de vora. La biblioteca estàndard random El mòdul proporciona els conceptes bàsics per a aquests escenaris.

random.randint(a, b) produeix un enter pseudoaleatori entre a i b, inclusivamentAixò facilita la simulació de tirades de daus o l'elecció d'índexs aleatoris en una llista. Per a valors de coma flotant, funcions com ara random.random() i els ajudants relacionats generen nombres aleatoris uniformes en rangs com ara [0.0, 1.0), llestos per ser escalats o transformats per a la vostra distribució particular.

Python també exposa alguns valors numèrics que representen quantitats inusuals o "casos límit".Un és NaN (“No és un nombre”), obtingut per exemple trucant float('nan')NaN indica resultats no definits o no representables, com ara el resultat de dividir zero per zero o analitzar un camp numèric corrupte de les dades d'entrada.

A més de NaN, Python admet l'infinit positiu i negatiu, construït utilitzant float('inf') i float('-inf')Aquests valors són útils com a valors sentinella a l'hora d'inicialitzar variables per a algoritmes que busquen valors mínims o màxims, o a l'hora de modelar rangs il·limitats en mètodes numèrics.

Treballar amb NaNs requereix una cura especial perquè no es comporten com a nombres normals.Les comparacions que impliquen NaN sempre són falses (fins i tot nan == nan), i l'aritmètica amb NaN tendeix a propagar el NaN a través del resultat. Tot i que aquesta guia no aprofundeix en la semàntica del NaN, ser conscient de les seves peculiaritats us ajuda a depurar les canonades de dades i els algoritmes numèrics de manera més eficaç.

Jerarquies numèriques abstractes amb el mòdul de números

A mesura que el vostre codi esdevé més sofisticat, és possible que necessiteu una manera flexible de reconèixer valors "numèrics". sense comprovar manualment cada tipus de formigó (com ara int, float, complex i escalars NumPy). Aquí és on numbers entra el mòdul, que proporciona una jerarquia abstracta de tipus numèrics.

L' numbers El mòdul defineix classes base abstractes (ABC) que descriuen el comportament numèric, Com ara Number, Complex, Real, Rational i IntegralAquestes classes no estan pensades per ser instanciades directament. En canvi, els tipus numèrics concrets n'hereten per indicar que implementen les operacions i propietats necessàries.

L'ABC més general és numbers.Number, que representa "qualsevol tipus numèric"Si voleu comprovar si una variable s'ha de tractar com a numèrica (potser durant la depuració o en escriure petits scripts d'utilitat), podeu combinar isinstance amb aquest ABC. Per exemple, isinstance(x, Number) rendiments True per a tipus numèrics integrats i molts tipus numèrics externs, com ara diversos escalars NumPy.

Una il·lustració pràctica utilitza tipus NumPy juntament amb els elements integrats de Python. Si importeu NumPy com a np i després repassa valors com ara 1, 1., -0.2, 1e8, np.int64(1), np.int0(10), np.int16(2), np.float64(10), np.complex64(10) i np.int32(89), trucant isinstance(value, Number) per a cadascun, veureu que tots compten com a numèrics. Això us estalvia escriure una llarga cadena de comprovacions de tipus per a cada classe específica.

Val la pena assenyalar això isinstance en si mateix es considera una "olor" de codi quan s'utilitza excessivamentLa dependència excessiva de la comprovació explícita de tipus pot indicar problemes de disseny més profunds en un programa orientat a objectes. Dit això, per a la depuració ràpida, scripts exploratoris o petites utilitats, la comprovació contra numbers.Number és una eina potent i pragmàtica per verificar que les variables es comporten realment com a nombres.

Ecosistemes numèrics ampliats: NumPy i tipus personalitzats

Tot i que el nucli de Python només exposa un petit conjunt de tipus numèrics d'ús general, l'ecosistema més ampli amplia enormement les opcions.. NumPy, en particular, introdueix moltes més variants numèriques dissenyades per a un càlcul eficient sobre grans matrius i matrius.

NumPy defineix tipus enters d'amplada fixa com ara numpy.int64, numpy.int32, numpy.int16 i àlies especialitzats com ara numpy.int0Aquests s'assemblen als tipus que es troben en llenguatges de baix nivell i orientats numèricament com ara Fortran i C, on conèixer la mida d'emmagatzematge exacta i el comportament dels números és essencial per al rendiment i la interoperabilitat.

A més dels nombres enters, NumPy ofereix tipus com ara numpy.float64 i numpy.complex64, juntament amb molts altres, que s'integren perfectament amb matrius i ufuncs (funcions universals). Aquests tipus normalment es registren com a instàncies dels ABC apropiats del numbers mòdul, motiu pel qual es comprova contra numbers.Number treball com s'ha il·lustrat anteriorment.

El disseny de Python va mantenir intencionadament el model numèric principal simple i accessible.En lloc d'obligar cada usuari a gestionar desenes de tipus numèrics diferents, se centra en tres tipus numèrics bàsics (més booleans), alhora que facilita que les biblioteques especialitzades ampliïn aquest repertori segons calgui. Un entorn centrat en l'enginyeria, com un creat per una empresa de programari de simulació, naturalment es basarà en gran mesura en aquests tipus i biblioteques ampliats.

Si creeu les vostres pròpies classes numèriques, seguint els patrons de numbers i fractions t'ajuda a integrar-te en l'ecosistema. Subclassificant l'ABC apropiat i implementant els mètodes especials necessaris (__add__, __radd__, __mul__, etc.), els vostres tipus personalitzats poden interactuar naturalment amb els operadors de Python, les funcions numèriques integrades i altres biblioteques numèriques.

En conjunt, Python numèric combina un sistema de tipus bàsic net, potents mòduls de biblioteca estàndard i un ric ecosistema de biblioteques. com NumPy, creant un entorn on podeu passar còmodament de l'aritmètica simple als càlculs d'enginyeria avançats. Un cop internalitzeu com encaixen els enters, els nombres flotants, els nombres complexos, els valors especials, les regles d'arrodoniment i les classes numèriques abstractes, podreu raonar amb més confiança sobre el vostre codi, evitar errors subtils i triar les eines adequades per a cada tasca numèrica que trobeu.

Articles Relacionats: