- Python tarjoaa ydinlukutyyppejä (int, float, complex, bool) sekä tehokkaita aputyyppejä, kuten math, cmath, decimal ja random jokapäiväisiin laskutoimituksiin.
- Numbers-moduuli määrittelee abstrakteja perusluokkia, joten monia sisäänrakennettuja, NumPy- ja mukautettuja numeerisia tyyppejä voidaan käsitellä yhdenmukaisesti Number-instansseina.
- Pyöristystavat, erikoisarvot (NaN, äärettömyydet) ja tarkka desimaalilaskenta desimaalien avulla ovat ratkaisevan tärkeitä vankan tieteellisen ja taloudellisen koodin kannalta.
- Laajempi numeerinen Python-ekosysteemi, erityisesti NumPy, laajentaa ydintyyppejä kiinteäleveyksisillä kokonaisluvuilla ja tehokkailla taulukoilla raskasta laskentaa varten.
Numeroiden kanssa työskentely on useimpien Python-ohjelmien ydin.Olitpa sitten rakentamassa yksinkertaista skriptiä, analysoimassa tieteellistä dataa tai prototyyppaamassa algoritmia, Pythonin numeeristen arvojen esittämis- ja käsittelytapojen ymmärtäminen on ensimmäinen askel luotettavan ja tehokkaan koodin kirjoittamiseen, joka toimii odotetulla tavalla.
Kun ihmiset puhuvat "numeerisesta Pythonista", he tarkoittavat usein kahta asiaatoisella puolella sisäänrakennetut numerotyypit ja vakiokirjastotyökalut, kuten math, cmath, decimal, random ja numberstoisaalta laajempi numeerisen laskennan ekosysteemi, jossa on kirjastoja, kuten NumPy, jotka laajentavat kieltä lisäämällä siihen numeerisia tyyppejä ja vektorilaskutoimituksia. Tämä opas opastaa sinut tämän perusteen läpi yksityiskohtaisesti perustyypeistä edistyneisiin abstraktioihin.
Pythonin ydinnumerotyypit
Python määrittelee useita sisäänrakennettuja numeerisia luokkia, jotka kattavat useimmat arkipäivän tarpeetkokonaisluvut, liukulukut reaaliarvoille desimaalien kera, kompleksiluvut arvoille, joissa on reaali- ja imaginaarinen osa, ja erityinen Boolen tyyppi, joka käyttäytyy kuin hyvin pieni kokonaislukuperheen jäsen. Kaikki nämä integroituvat saumattomasti Pythonin aritmeettisten operaattoreiden kanssa.
Kokonaisluvut (int) edustavat kokonaislukuja, positiivisia tai negatiivisia, ilman desimaaliaPythonissa ei ole kiinteää ylärajaa niiden koolle; niin kauan kuin sinulla on muistia, kokonaislukusi voi kasvaa. Arvot, kuten 1, -5 or 20234567890123456789 ovat kaikki voimassa int tapauksia, ja voit vahvistaa sen type(1) or type(-5), joka tulee takaisin <class 'int'>.
Liukuluvut (float) käytetään reaaliluvuille, joilla on murtolukukomponenttiNe kirjoitetaan desimaalipilkulla, kuten 2.0, -7.823457 or 0.5tai tieteellisellä merkinnällä, kuten 1e8 (mikä tarkoittaa 100 000 000). Kun teet laskutoimituksia, kuten jakolaskua, jopa kokonaislukujen välillä, Python usein siirtää tuloksen arvoon float; esimerkiksi, 9 / 2 saannot 4.5ja type(4.5) is <class 'float'>.
Kompleksiluvut (complex) yhdistää reaaliosan ja imaginääriosan, kirjoitettuna loppuun j imaginääriyksikölle. Arvo, kuten 2 + 3j on reaalikomponentti 2 ja imaginäärikomponentti 3. Voit konstruoida ne suoraan (esim. 3.14j) ja tutki niitä ominaisuuksilla, kuten .real ja .imagtai soita .conjugate() kompleksikonjugaatin saamiseksi. Nämä ovat erityisen suosittuja tekniikassa, signaalinkäsittelyssä ja tieteellisessä laskennassa.
Totuusarvot (bool) ovat teknisesti myös numeerisia, Koska True ja False käyttäytyvät kuten kokonaisluvut 1 ja 0 aritmeettisissa lausekkeissa. Esimerkiksi True + 2 arvioi 3. Sisäisesti, bool on alaluokka int, minkä vuoksi totuusarvot integroituvat saumattomasti laskelmiin ja vertailuihin.
Python antaa sinun sekoittaa näitä numeerisia tyyppejä vapaasti lausekkeissa, ylennetään yleisemmäksi tyypiksi tarvittaessa. Lisäämällä int joka float tuottaa a float, ja liukulukujen yhdistäminen kompleksilukuihin tuottaa kompleksituloksen: lausekkeet, kuten 1 + 1.0, 2.0 + (3 + 5j) or 6 / (5 + 8j) kaikki toimii ilman ylimääräisiä seremonioita.

Aritmeettiset operaattorit ja jakolaskun käyttäytyminen
Kun sinulla on numeerisia arvoja, käytät niiden kanssa työskentelyyn tavallisia aritmeettisia operaattoreita.: yhteenlasku (+), vähennyslasku (-), kertolasku (*), jako (/), lattiajako (//), potenssiin korotus (**) ja modulo (%). Python soveltaa näitä kokonaislukuihin, liukulukuihin ja kompleksilukuihin suorittaen tyypinkorotuksia tarpeen mukaan.
Division on yksi alue, jossa Pythonin suunnittelu on erittäin harkittua.. käyttämällä / tuottaa aina liukulukutuloksen, kun molemmat argumentit ovat numeerisia, vaikka ne molemmat olisivat kokonaislukuja. Joten 9 / 2 johtaa 4.5, Ei 4Tämä kannustaa sinua ajattelemaan oletusarvoisesti reaalilukujen jakolaskun kautta, mikä on yleensä se, mitä tarvitaan tieteellisissä tai taloudellisissa laskelmissa.
Jos tarvitset kokonaislukujakoa, joka hylkää murto-osan, käytät pohjajako-operaattoria //. Esimerkiksi, 9 // 2 tuottaa 4ja -9 // 2 saannot -5, koska tulos on pyöristetty alaspäin kohti negatiivista äärettömyyttä. Lisäksi divmod(a, b) antaa sinulle sekä osamäärän että jakojäännöksen kerralla, palauttaen parin, joka heijastaa (a // b, a % b).
Kulissien takana Python koordinoi huolellisesti eri numeeristen aromien vuorovaikutustaStandardikirjastossa näkyy sisäinen kaava, jossa käytetään "operaattorivarafunktioita": funktioita, jotka ensin kokeilevat tyyppikohtaista toteutusta, esimerkiksi rationaaliluvuille, ja palaavat sitten sisäänrakennettuihin operaattoreihin, kun yksi operandi on säännöllinen. int, float or complexTämä mahdollistaa mukautettujen numeeristen tyyppien yhteensopivuuden Pythonin aritmeettisen järjestelmän kanssa käyttämällä erityismetodeja, kuten __add__ ja __radd__.
Rationaalisen aritmetiikan kirjastokoodi, kuten Fraction tyyppi, havainnollistaa tätä strategiaa selvästiKun lisätään kaksi Fraction esiintymissä se laskee uuden murtoluvun kertomalla osoittajat ja nimittäjät keskenään. Jos lisäät Fraction pelkäksi kokonaisluvuksi tai instanssiksi numbers.Rational, se käyttää tarkkaa rationaalista algoritmia. Jos toinen operandi on float or complex, se muuntaa laajemmaksi tyypiksi ja delegoi tavallisille operaattoreille pitäen toiminnan johdonmukaisena ja intuitiivisena.
Sisäänrakennetut numeeriset funktiot
Raakojen operaattoreiden lisäksi Pythonissa on joukko sisäänrakennettuja funktioita, jotka osaavat käsitellä numeroita.Nämä funktiot ovat aina käytettävissä ilman minkään tuontia ja toimivat sekä vakiomuotoisten numeeristen tyyppien että kaikkien mukautettujen objektien kanssa, jotka toteuttavat oikeat erikoismetodit.
abs(x) palauttaa argumenttinsa itseisarvon, jolloin negatiiviset luvut ovat positiivisia ja positiiviset arvot pysyvät ennallaan. Jos välität objektin, joka määrittelee __abs__()Python delegoi kyseiselle metodille. Kompleksilukujen tapauksessa abs() palauttaa suuruuden (etäisyyden origosta kompleksitasossa).
round(x, ndigits) antaa sinulle arvon pyöristettynä tiettyyn desimaalien määrään. Jos ndigits on jätetty pois tai None, se palauttaa lähimmän kokonaisluvun. Toisin kuin koulukirjan "pyöristä puoli ylöspäin" -sääntö, Pythonin sisäänrakennettu round käyttää tasapelien yhteydessä ”pyöristää puolikkaan tasatulokseen” -strategiaa tilastollisen virheen vähentämiseksi toistuvissa laskelmissa.
Muunnosfunktiot, kuten int() ja float() muodostaa numeroita muista olioistaSoittaminen int(x) kelluvalla arvolla hylkää murto-osan (esimerkiksi int(1.9) is 1), Ja float(x) tuottaa liukulukuesityksen kokonaisluvuista, merkkijonoista tai yhteensopivista objekteista. Kun muunnat luvun liukulukusta kokonaisluvuksi, pyöristystä ei tapahdu; desimaaliosa yksinkertaisesti katkaistaan.
Muut sisäänrakennetut elementit toimivat edustus- ja aggregointirooleissaToiminnot, kuten hex() ja oct() palauttaa kokonaislukujen merkkijonoesitykset heksadesimaali- tai oktaalimuodossa sopivilla etuliitteillä (0x ja 0o). Yhdistämisen apuohjelmat, kuten max() ja min() skannaa iteroitavaa objektia tai sarjaa argumentteja löytääkseen suurimman tai pienimmän arvon samalla kun pow() ja ** operaattori laskee potensseja ja hyväksyy valinnaisesti kolmannen argumentin modulaarista potenssiin korotusta varten.
Edistyneet numeeriset työkalut: matematiikka, CMath ja desimaali
Kehittyneempiä laskelmia varten Python tarjoaa erillisiä vakiokirjastomoduuleja ydinkielen turvotuksen sijaan. Numeerisen työn kannalta tärkeimmät ovat math, cmath ja decimal, joista jokainen kohdistuu tiettyyn ongelmien osajoukkoon.
math moduuli keskittyy reaaliarvoisten liukulukujen matematiikkaan. Tuomisen jälkeen import mathsaat käyttöösi funktioita ja vakioita, joita yleisesti tarvitaan tekniikassa, fysiikassa ja jokapäiväisessä analytiikassa, kaikki toteutettuna tehokkaalla C-koodilla ja toimivana float arvot.
math sisältää lukuteoreettisia ja esitystyökaluja kuten math.ceil() pyöristämistä lähimpään kokonaislukuun ylöspäin varten, math.floor() alaspäin pyöristämistä varten, math.modf() jakaa kelluvan luvun murto- ja kokonaislukuosiin ja math.frexp() / math.ldexp() työskennellä sisäisen binääriesityksen kanssa. Se tarjoaa myös potenssi- ja logaritmisia rutiineja, kuten math.exp(), math.log(), math.log10(), math.pow() ja math.sqrt()sekä trigonometrisiä ja hyperbolisia funktioita, kuten math.sin(), math.cos(), math.tan(), math.asin(), math.acos(), math.atan(), math.atan2(), math.sinh(), math.cosh() ja math.tanh().
Mukavuuden vuoksi math vie perusvakioita, kuten math.pi ja math.eNämä ovat käteviä aina, kun lasket pinta-aloja, kulmia tai eksponentiaalista kasvua ja haluat yhdenmukaisia arvoja hyvällä tarkkuudella koko koodikannassasi.
Kun sinun on työskenneltävä kompleksilukujen kanssa, cmath moduulilla on sama rooli kompleksitasolleSen API-peilit math mutta käyttää monimutkaisia argumentteja ja palauttaa monimutkaisia tuloksia, joten voit laskea monimutkaisia eksponentiaaleja, logaritmeja ja trigonometrisiä funktioita ilman, että lukuja tarvitsee manuaalisesti jakaa reaali- ja imaginääriosiin.
decimal moduuli kohdistuu eri kipupisteeseen: tarkkaan kymmenjärjestelmäänStandardi binäärinen liukuluku ei pysty esittämään tarkasti monia desimaalilukuja, joten laskutoimitukset, kuten 0.1 + 0.2 tuottaa hieman vinon tuloksen. decimal.Decimal ohittaa tämän käyttämällä mielivaltaista tarkkuuskantaista kymmenjärjestelmää, mikä tekee siitä ihanteellisen ratkaisun taloussovelluksiin ja kaikkiin muihin sovelluksiin, joissa pyöristyskäyttäytymistä on hallittava erittäin tarkasti.
Oletusarvoisesti Pythonin liukulukuoperaatiot noudattavat IEEE-754-käytäntöä ja käyttävät 2-kantaista esitystä.Kun arvo on täsmälleen kahden esitettävän luvun puolivälissä, käytetään toimintoa ”pyöristä puoli parilliseksi”, mikä tarkoittaa, että puolet tasaluvuista pyöristetään alaspäin ja puolet ylöspäin. Tämä välttää systemaattisen ajautumisen suurissa laskelmissa. Jos haluat kaupallista ”pyöristä puoli ylöspäin” -semantiikkaa, voit määrittää decimal käytettävä konteksti ROUND_HALF_UP, joka aina siirtää arvoa 5 poispäin nollasta.
Numeeristen tyyppien kanssa työskentely käytännössä
Numeroiden vuorovaikutteisen käyttäytymisen tutkiminen on loistava tapa kehittää intuitiotaKäynnistä Python-tulkki ja luo sekoitus kokonaislukuja, liukulukuja ja kompleksilukuja. Kokeile sitten niiden perusoperaatioita. Yhteen- ja kertolasku on suoraviivaista, mutta on erityisen opettavaista kokeilla jakolaskua, jakolaskua lattialla, pyöristämistä ja muunnoksia sekä seurata, miten tuloksen tyyppi muuttuu.
Numeeristen tyyppien välinen muuntaminen on joskus tarpeen API:n odotusten täyttämiseksi tai logiikan yksinkertaistamiseksi.Jos sinulla on liukuluku ja haluat vain sen kokonaislukuosan, aseta se muuttujaan, kuten my_float = 1.9 ja sitten soita my_int = int(my_float)Tulostus my_int antaa 1ja type(my_int) vahvistaa, että kyseessä on intMuista, että murto-osa hylätään pyöristämisen sijaan.
Käänteinen suunta – ylennys yleisempään tyyppiin – tapahtuu usein implisiittisestiKun lisäät kokonaisluvun ja liukulukun, Python palauttaa liukulukun kysymättä, koska reaalilukujärjestelmä sisältää kokonaisluvut. Sama ylennys tapahtuu, kun yhdistät liukulukun ja kompleksiluvun: liukulukua käsitellään ikään kuin sillä olisi nollan imaginääriosa, ja tulos on kompleksiluku.
Kompleksiluvuissa on useita sisäänrakennettuja mukavuuksia, jotka saavat ne tuntumaan luonnollisiltaVoit tarkastaa suoraan a.real ja a.imag Saadaksesi komponentit, soita a.conjugate() kääntääkseen imaginaarisen osan etumerkin ja välittääkseen ne funktioille cmath ilman manuaalista muuntamista. Vaikka käyttäisit niitä harvoin, niiden olemassaolon ja toiminnan tunteminen auttaa, kun kohtaat tieteellistä koodia.
Tarkkuus ja täsmällisyys ovat aina tärkeitä liukulukudataa käsiteltäessäStandardin Pythonin efektiivinen tarkkuus float on noin 15 desimaalinumeroa; sen jälkeen 16. numero voi olla epäluotettava. Monissa tehtävissä tämä on täysin hyväksyttävää, mutta jos tarvitset tarkkaa desimaaliaritmetiikkaa tai ennustettavampaa pyöristystä, decimal moduuli antaa sinulle tarvitsemasi hallinnan suorituskyvyn kustannuksella.
Satunnaisluvut ja erikoisnumeroarvot
Satunnaislukujen luominen on toinen yleinen tehtävä numeerisissa Pythonin työnkuluissa., olitpa sitten rakentamassa yksinkertaisia pelejä, suorittamassa Monte Carlo -simulaatioita tai kirjoittamassa reunaehtoja käyttäviä testitapauksia. Vakiokirjaston random moduuli tarjoaa perusteet tällaisia tilanteita varten.
random.randint(a, b) tuottaa näennäissatunnaisen kokonaisluvun väliltä a ja bmukaan lukienTämä helpottaa nopanheittojen simulointia tai satunnaisten indeksien valitsemista listasta. Liukulukuarvoille funktiot, kuten random.random() ja siihen liittyvät apuohjelmat luovat yhdenmukaisia satunnaislukuja välillä, kuten [0.0, 1.0), jotka ovat valmiita skaalattaviksi tai muunnettavaksi juuri sinun jakaumaasi sopivaksi.
Python paljastaa myös muutamia numeerisia arvoja, jotka edustavat epätavallisia tai "reunatapauksiin" kuuluvia määriä.Yksi on NaN (”Not a Number”), joka saadaan esimerkiksi kutsumalla float('nan')NaN osoittaa määrittelemättömiä tai esittämättömiä tuloksia, kuten nollan jakamisen nollalla tai vioittuneen numeerisen kentän jäsentämisen syöttötiedoista.
NaN:n lisäksi Python tukee positiivista ja negatiivista äärettömyyttä, rakennettu käyttäen float('inf') ja float('-inf')Nämä ovat hyödyllisiä vartioarvoina alustettaessa muuttujia algoritmeille, jotka etsivät minimi- tai maksimiarvoja, tai mallinnettaessa rajattomia alueita numeerisissa menetelmissä.
NaN-lukujen kanssa työskentely vaatii erityistä huolellisuutta, koska ne eivät käyttäydy kuten tavalliset numerotNaN:ää sisältävät vertailut ovat aina vääriä (jopa nan == nan), ja NaN-aritmetiikka pyrkii levittämään NaN:iä tuloksen kautta. Vaikka tämä opas ei syvenny NaN-semantiikkaan syvällisesti, niiden erityispiirteiden tunteminen auttaa sinua debugaamaan dataputkia ja numeerisia algoritmeja tehokkaammin.
Abstraktit numeeriset hierarkiat numeromoduulin avulla
Kun koodisi kehittyy, saatat tarvita joustavan tavan tunnistaa "numeerisia" arvoja ilman manuaalista tarkistusta jokaista yksittäistä betonityyppiä vasten (kuten int, float, complex ja NumPy-skalaarit). Tässä kohtaa numbers moduuli tulee mukaan ja tarjoaa abstraktin numeeristen tyyppien hierarkian.
numbers moduuli määrittelee abstraktit perusluokat (ABC), jotka kuvaavat numeerista käyttäytymistä, Kuten Number, Complex, Real, Rational ja IntegralNäitä luokkia ei ole tarkoitettu suoraan instansseiksi. Sen sijaan konkreettiset numeeriset tyypit perivät niistä merkiksi siitä, että ne toteuttavat vaaditut operaatiot ja ominaisuudet.
Yleisin ABC on numbers.Number, joka edustaa "mitä tahansa numeerista tyyppiä"Jos haluat testata, pitäisikö muuttujaa käsitellä numeerisena – esimerkiksi virheenkorjauksen aikana tai pieniä apuohjelmia kirjoitettaessa – voit yhdistää isinstance tämän ABC:n kanssa. Esimerkiksi isinstance(x, Number) Tuotto True sisäänrakennetuille numeerisille tyypeille ja monille ulkoisille numeerisille tyypeille, kuten erilaisille NumPy-skalaareille.
Käytännön esimerkki käyttää NumPy-tyyppejä Pythonin sisäänrakennettujen osioiden rinnallaJos tuot NumPyn muodossa np ja sitten silmukan läpi arvoja, kuten 1, 1., -0.2, 1e8, np.int64(1), np.int0(10), np.int16(2), np.float64(10), np.complex64(10) ja np.int32(89), kutsumus isinstance(value, Number) Jokaisen kohdalla huomaat, että ne kaikki lasketaan numeereiksi. Tämä säästää sinut pitkän tyyppitarkistusten ketjun kirjoittamiselta jokaiselle tietylle luokalle.
On syytä huomata, että isinstance itseään pidetään koodin "hajuna", kun sitä käytetään liikaaLiiallinen luottaminen eksplisiittiseen tyyppitarkistukseen voi viestiä syvemmistä suunnitteluongelmista olio-ohjelmoinnissa. Nopeaa virheenkorjausta, tutkivia komentosarjoja tai pieniä apuohjelmia varten tyyppitarkistus numbers.Number on tehokas ja käytännöllinen työkalu sen varmistamiseksi, että muuttujasi todella käyttäytyvät numeroiden tavoin.
Laajennetut numeeriset ekosysteemit: NumPy ja mukautetut tyypit
Vaikka Pythonin ydinosa tarjoaa vain pienen joukon yleiskäyttöisiä numeerisia tyyppejä, laajempi ekosysteemi laajentaa vaihtoehtojasi huomattavasti.Erityisesti NumPy esittelee monia uusia numeerisia vaihtoehtoja, jotka on suunniteltu tehokkaaseen laskentaan suurissa taulukoissa ja matriiseissa.
NumPy määrittelee kiinteäleveydeiset kokonaislukutyypit, kuten numpy.int64, numpy.int32, numpy.int16 ja erikoistuneita aliaksia, kuten numpy.int0Nämä muistuttavat matalan tason, numeerisesti suuntautuneissa kielissä, kuten Fortranissa ja C:ssä, esiintyviä tyyppejä, joissa numeroiden tarkan tallennuskoon ja käyttäytymisen tunteminen on olennaista suorituskyvyn ja yhteentoimivuuden kannalta.
Kokonaislukujen lisäksi NumPy tarjoaa tyyppejä, kuten numpy.float64 ja numpy.complex64, sekä monia muita, jotka integroituvat siististi taulukoiden ja ufunc-funktioiden (universaalien funktioiden) kanssa. Nämä tyypit rekisteröityvät yleensä sopivien ABC-funktioiden instansseina numbers moduuli, minkä vuoksi se tarkistaa numbers.Number toimi kuten aiemmin on kuvattu.
Pythonin suunnittelussa ydinnumeerinen malli pidettiin tarkoituksella yksinkertaisena ja helppokäyttöisenä.Sen sijaan, että jokainen käyttäjä pakotettaisiin hallitsemaan kymmeniä erilaisia numeerisia tyyppejä, se keskittyy kolmeen perusnumerotyyppiin (sekä totuusarvoihin) ja helpottaa samalla erikoistuneiden kirjastojen laajentaa tätä valikoimaa tarpeen mukaan. Suunnitteluun keskittyvä ympäristö, kuten simulointiohjelmistoyrityksen rakentama, nojaa luonnollisesti vahvasti näihin laajennettuihin tyyppeihin ja kirjastoihin.
Jos rakennat omia numeerisia luokkia noudattaen kaavioita numbers ja fractions auttaa sinua sopeutumaan ekosysteemiinLuokittelemalla sopiva ABC aliluokkiin ja toteuttamalla tarvittavat erikoismetodit (__add__, __radd__, __mul__, ja niin edelleen), mukautetut tyyppisi voivat olla luonnollisesti vuorovaikutuksessa Pythonin operaattoreiden, sisäänrakennettujen numeeristen funktioiden ja muiden numeeristen kirjastojen kanssa.
Kaiken kaikkiaan numeerinen Python yhdistää puhtaan ydintyyppijärjestelmän, tehokkaat standardikirjastomoduulit ja rikkaan kirjastojen ekosysteemin. kuten NumPy, luoden ympäristön, jossa voit siirtyä mukavasti yksinkertaisesta aritmeettisesta edistyneisiin teknisiin laskutoimituksiin. Kun sisäistät, miten kokonaisluvut, liukuluvut, kompleksiluvut, erikoisarvot, pyöristyssäännöt ja abstraktit numeeriset luokat sopivat yhteen, voit päätellä koodistasi luottavaisemmin, välttää hienovaraisia virheitä ja valita oikeat työkalut jokaiseen kohtaamaasi numeeriseen tehtävään.