Python | |
---|---|
Kieliluokka | olio-ohjelmointikieli |
Esiintyi | 20. helmikuuta 1991 [17] |
Tekijä | Guido van Rossum [1] |
Kehittäjä | Python Software Foundation ja Guido van Rossum [1] |
Tiedostotunniste _ | .py, [18] , [19] , [20] , [21] , [22] tai [23].pyc.pyd.pyo.pyw.pyz.pyi |
Vapauta |
|
Vaikutettu | ABC , [5] Ada , [6] Algol 68 , [7] APL , [8] C , [9] C++ , [10] Clu , [11] Dylan , [12] Haskell , [13] Ikoni , [14 ] Java , [15] Lisp , [16] Modula-3 , [10] Perl , Standard ML [8] |
Lisenssi | Python Software Foundation -lisenssi [1] |
Verkkosivusto | python.org _ |
Alusta | Microsoft Windows |
OS | monialustainen [24] |
Mediatiedostot Wikimedia Commonsissa |
Python ( IPA : [ ˈpʌɪθ ( ə ) n ] _ _ _ _ _ _ _ _ ] keskittyi kehittäjien tuottavuuden, koodin ja laadun parantamiseen sekä siihen kirjoitettujen ohjelmien siirrettävyyden varmistamiseen [29] . Kieli on täysin oliosuuntautunut siinä mielessä, että kaikki on objektia [27] . Kielen epätavallinen ominaisuus on koodilohkojen välilyöntien sisennys [30] . Ydinkielen syntaksi on minimalistinen, minkä vuoksi käytännössä on harvoin tarvetta viitata dokumentaatioon [29] . Itse kieli tunnetaan tulkittuna ja sitä käytetään muun muassa kirjoitusten kirjoittamiseen [ 27] . Kielen haittoja ovat usein siihen kirjoitettujen ohjelmien alhaisempi nopeus ja suurempi muistinkulutus verrattuna vastaavaan koodiin, joka on kirjoitettu käännetyillä kielillä, kuten C tai C++ [27] [29] .
Python on moniparadigma ohjelmointikieli , joka tukee pakottavaa , proseduuria , strukturoitua , olioohjelmointia [27] , metaohjelmointia [31] ja toiminnallista ohjelmointia [27] . Yleisiä ohjelmointiongelmia ratkaistaan dynaamisella kirjoituksella [32] [33] . Aspektisuuntautunutta ohjelmointia tuetaan osittain koristeltujen [34] kautta , täydellisempää tukea tarjoavat lisäkehykset [35] . Tekniikoita, kuten sopimus- ja logiikkaohjelmointi , voidaan toteuttaa käyttämällä kirjastoja tai laajennuksia [36] . Tärkeimmät arkkitehtoniset ominaisuudet ovat dynaaminen kirjoittaminen , automaattinen muistinhallinta [27] , täysi itsetutkiskelu , poikkeusten käsittelymekanismi , tuki monisäikeisille laskutoimituksille globaalilla tulkin lukituksella ( GIL ) [37] , korkean tason tietorakenteet . Ohjelmien jakamista moduuleiksi tuetaan , jotka puolestaan voidaan yhdistää paketeiksi [38] .
Python- viitetoteutus on CPython- tulkki , joka tukee yleisimmin käytettyjä alustoja [39] ja on de facto kielistandardi [40] . Sitä jaetaan ilmaisella Python Software Foundation -lisenssillä , jonka avulla voit käyttää sitä rajoituksetta kaikissa sovelluksissa, mukaan lukien omistusoikeus [41] . CPython kääntää lähdekoodin korkean tason tavukoodiksi , joka toimii pinovirtuaalikoneessa [42] . Kielen kolme muuta päätoteutusta ovat Jython ( JVM ), IronPython ( CLR / .NET ) ja PyPy [27] [43] . PyPy on kirjoitettu Python-kielen (RPython) osajoukossa, ja se kehitettiin CPythonin vaihtoehdoksi ohjelman suoritusnopeuden lisäämiseksi, myös JIT -käännöksen avulla [43] . Python 2:n tuki päättyi vuonna 2020 [44] . Tällä hetkellä Python 3 -kielen versiota kehitetään aktiivisesti [45] . Kielen kehittäminen tapahtuu PEP ( Python Enhancement Proposal ) kielilaajennusehdotuksilla , jotka kuvaavat innovaatioita, tekevät mukautuksia yhteisön palautteen perusteella ja dokumentoivat lopullisia päätöksiä [46] .
Vakiokirjasto sisältää suuren joukon hyödyllisiä kannettavia toimintoja, jotka vaihtelevat tekstinkäsittelyominaisuuksista verkkosovellusten kirjoitustyökaluihin. Lisäominaisuudet, kuten matemaattinen mallintaminen, työskentely laitteiden kanssa, verkkosovellusten kirjoittaminen tai pelien kehittäminen, voidaan toteuttaa useiden kolmansien osapuolien kirjastojen kautta sekä integroida C- tai C++-kielellä kirjoitettuja kirjastoja, kun taas Python itse tulkki voidaan integroida näillä kielillä kirjoitettuihin projekteihin [27] . Pythonilla kirjoitetuille ohjelmistoille on olemassa myös erikoisvarasto , PyPI [47] . Tämä arkisto tarjoaa tavan asentaa paketit helposti käyttöjärjestelmään, ja siitä on tullut Pythonin tosiasiallinen standardi [48] . Vuodesta 2019 lähtien se sisälsi yli 175 000 pakettia [47] .
Pythonista on tullut yksi suosituimmista kielistä, ja sitä käytetään data-analytiikassa , koneoppimisessa , DevOpsissa ja verkkokehityksessä muun muassa pelien kehittämisessä . Luettavuuden, yksinkertaisen syntaksin ja käännöksen puutteen ansiosta kieli sopii hyvin ohjelmoinnin opettamiseen, jolloin voit keskittyä algoritmien, käsitteiden ja paradigmojen oppimiseen. Virheenkorjausta ja kokeilua helpottaa suuresti se, että kieli on tulkittavissa [27] [49] . Kieltä käyttävät monet suuret yritykset, kuten Google tai Facebook [27] . Syyskuusta 2022 lähtien Python sijoittui ohjelmointikielten suosion TIOBE-luokituksen ensimmäiseksi pistemäärällä 15,74 % [50] . Python on julistettu TIOBE:n Vuoden kieleksi vuosina 2007, 2010, 2018, 2020 ja 2021 [51] .
Idea kielen käyttöönotosta syntyi 1980-luvun lopulla , ja sen toteutuksen kehittämisen aloitti vuonna 1989 hollantilaisen CWI -instituutin työntekijä Guido van Rossum [46] . Amoeban hajautettu käyttöjärjestelmä vaati laajennettavan skriptikielen , ja Guido aloitti Pythonin kehittämisen vapaa-ajallaan lainaten osan työstä ABC -kielestä (Guido oli mukana kehittämässä tätä ohjelmoinnin opettamiseen keskittyvää kieltä). Helmikuussa 1991 Guido lähetti lähdekoodin alt.sources [52] -uutisryhmään . Python suunniteltiin alusta lähtien olio-kieliksi .
Guido van Rossum nimesi kielen suositun 1970 -luvun brittiläisen komediatelevisio-ohjelman Monty Python's Flying Circus [ 53 ] mukaan, koska kirjoittaja oli ohjelman fani, kuten monet muutkin tuon ajan kehittäjät, ja itse ohjelmalla oli jonkin verran rinnakkaisuutta maailman kanssa. tietotekniikan alalla [29] .
Ystävällisen, reagoivan käyttäjäyhteisön ja Guidon suunnitteluintuition katsotaan olevan yksi Pythonin menestyksen avaimista. Kielen kehitys tapahtuu selkeästi säädellyn prosessin mukaisesti, jossa luodaan, keskustellaan, valitaan ja toteutetaan PEP-dokumentteja ( Python Enhancement Proposal ) - ehdotuksia Pythonin kehittämiseen [54] .
3. joulukuuta 2008 [55] , laajan testauksen jälkeen, ensimmäinen versio Python 3000:sta (tai Python 3.0:sta, joka tunnetaan myös nimellä Py3k ) julkaistiin. Python 3000 korjaa monet arkkitehtuurin puutteet säilyttäen samalla mahdollisimman suuren (mutta ei täydellisen) yhteensopivuuden Pythonin vanhempien versioiden kanssa.
Python 2.7:n tuen päättymispäivämääräksi asetettiin alun perin 2015, ja se siirrettiin sitten vuoteen 2020, koska huolenaiheena oli, että suurta osaa olemassa olevasta koodista ei voitu helposti siirtää Python 3:een [56] [57] . Python 2 -tuki suunnattiin vain olemassa oleviin projekteihin, uusia projekteja vaadittiin käyttämään Python 3:a [45] . Python 2.7:ää ei ole virallisesti tuettu 1. tammikuuta 2020 jälkeen, vaikka viimeisin päivitys julkaistiin huhtikuussa 2020. Python 2.7:lle ei julkaista enää tietoturvakorjauksia tai muita parannuksia [44] [58] . Python 2.x:n käyttöiän päätyttyä vain Python 3.6.x ja uudemmat ovat tuettuja [59] .
Kieli käyttää dynaamista kirjoittamista sekä viitteiden laskemista ja pyöreää roskakeräystä muistin hallintaan [60] . On myös dynaamisia nimien ratkaisuja ( dynaaminen sidonta ), jotka linkittävät menetelmän ja muuttujien nimet ohjelman suorittamisen aikana.
Python tarjoaa tukea toiminnalliseen ohjelmointiin Lispin perinteen mukaisesti . Pythonissa on siis funktioita filter, mapja reduce; Lispistä lainattiin myös käsitteet listojen , assosiatiivisten taulukoiden (sanakirjojen), joukkojen ja listageneraattoreiden [61] ominaisuuksista . Vakiokirjasto sisältää kaksi moduulia (itertools ja functools), jotka toteuttavat Haskellilta ja Standard ML :ltä lainattuja työkaluja [62] .
Python-kielen kehittäjät noudattavat tiettyä ohjelmointifilosofiaa nimeltä "The Zen of Python" (" Pythonin Zen " tai "Pythonin zen") [63] . Python - tulkki antaa sen tekstin komennolla import this(se toimii kerran istunnossa). Tim Petersia pidetään tämän filosofian kirjoittajana .
Filosofia alkaa näin [64] :
….
Alkuperäinen teksti (englanniksi)[ näytäpiilottaa]...
Sen sijaan, että kaikki kielen toiminnot olisi rakennettu Python-ytimeen, se on suunniteltu helposti laajennettavaksi. Tämä teki kielestä suositun tavan lisätä ohjelmoitavia liitäntöjä olemassa oleviin sovelluksiin. Guido van Rossumin näkemys pienestä ytimestä, jossa on suuri standardikirjasto ja helposti laajennettavissa oleva tulkki, johtui ABC -kielen kehittämisen negatiivisesta kokemuksesta , joka omaksui päinvastaisen lähestymistavan [65] .
Python pyrkii yksinkertaisempaan, vähemmän hankalaan syntaksiin ja kielioppiin, jolloin kehittäjät voivat valita koodausmenetelmistään. Toisin kuin Perlin motto " on useita tapoja tehdä se ", Pythonin filosofia on "pitää olla yksi - ja mieluiten vain yksi - ilmeinen tapa tehdä se" [66] . Alex Martelli , Python Software Foundationin jäsen ja Python -kirjojen kirjoittaja kirjoittaa, että "Jonkin kuvaamista "älykkääksi" ei pidetä kohteliaisuutena Python-kulttuurissa" [67] .
Python-kehittäjät pyrkivät välttämään ennenaikaista optimointia ja hylkäämään korjaukset CPython -viitetoteutuksen ei-kriittisiin osiin, jotka lisäisivät marginaalista nopeutta koodin selkeyden kustannuksella [68] . On kuitenkin olemassa tapoja parantaa suorituskykyä. Jos ohjelmassa on pullonkauloja, jotka liittyvät keskusprosessorin resurssivaltaisten toimintojen suorittamiseen, mutta eivät liity I / O-toimintojen käyttöön, on mahdollista parantaa suorituskykyä kääntämällä ohjelma Cythonilla C-kielelle ja sen jälkeen. kokoelma [69] . Ohjelman laskentaresursseja vaativat osat voidaan myös kirjoittaa uudelleen C-kielelle ja yhdistää erillisiksi kirjastoiksi Python-sidoksilla [43] .
Python-kehittäjien tärkeä tavoite on tehdä siitä hauska käyttää. Tämä näkyi kielen nimessä, joka annettiin Monty Pythonin kunniaksi [53] . Se näkyy myös toisinaan leikkisässä lähestymistavassa opetusohjelmiin ja viitemateriaaliin, kuten dokumentaation esimerkkiohjelmiin, jotka käyttävät nimiä roskaposti ja muna monien muiden kielten dokumentaatiossa käytettyjen nimien sijaan foo and bar [70 ] [71] .
Python on siirretty ja se toimii lähes kaikilla tunnetuilla alustoilla PDA - laitteista keskuskoneisiin . Portteja on Microsoft Windowsille , lähes kaikille UNIX -versioille (mukaan lukien FreeBSD ja Linux ), Android [72] , Plan 9 , Mac OS ja macOS , iPhone OS (iOS) 2.0 tai uudempi, iPadOS , Palm OS , OS/2 , Amiga , HaikuOS , AS/400 , OS/390 , Windows Mobile ja Symbian .
Kun alusta vanhenee, sen tuki kielen päähaarassa lakkaa. Esimerkiksi Windows 95 , Windows 98 ja Windows ME [73] tuki on poistettu versiosta 2.6 lähtien . Windows XP :tä ei enää tueta versiossa 3.5 [74] Windows Vistaa ja Windows 7 :ää ei enää tueta versiossa 3.9 [75] .
Samaan aikaan, toisin kuin monissa kannettavissa järjestelmissä, Pythonilla on tuki tälle alustalle ominaisille teknologioille (esimerkiksi Microsoft COM / DCOM ). Lisäksi Java-virtuaalikoneelle on olemassa erityinen Python-versio - Jython , jonka avulla tulkki voi toimia missä tahansa Javaa tukevassa järjestelmässä , kun taas Java -luokkia voidaan käyttää suoraan Pythonista ja jopa kirjoittaa Pythonilla. Useat projektit tarjoavat myös integraation Microsoft.NET -alustaan , joista tärkeimmät ovat IronPython ja Python.Net .
Python tukee dynaamista kirjoittamista , eli muuttujan tyyppi määritetään vain ajon aikana. Joten "arvon määrittämisen muuttujalle" sijaan on parempi puhua "arvon liittämisestä johonkin nimeen". Pythonin primitiivityyppejä ovat boolean , mielivaltaisen tarkkuuden kokonaisluku , liukuluku ja kompleksi . Pythonin sisäänrakennetut säilötyypit ovat string , list , tuple , dictionary ja set [49] . Kaikki arvot ovat objekteja, mukaan lukien funktiot, menetelmät, moduulit, luokat.
Voit lisätä uuden tyypin joko kirjoittamalla luokan (luokan) tai määrittämällä uuden tyypin laajennusmoduulissa (esimerkiksi kirjoitettuna C-kielellä). Luokkajärjestelmä tukee periytymistä (yksittäinen ja moninkertainen ) ja metaohjelmointia . On mahdollista periä useimmista sisäänrakennetuista ja laajennustyypeistä.
Tyyppi | Vaihdettavuus | Kuvaus | Esimerkkejä |
---|---|---|---|
bool | muuttumaton | boolen tyyppi | True False |
bytearray | vaihdettavissa | Tavutaulukko | bytearray(b'Some ASCII') bytearray(b"Some ASCII") bytearray([119, 105, 107, 105]) |
bytes | muuttumaton | Tavutaulukko | b'Some ASCII' b"Some ASCII" bytes([119, 105, 107, 105]) |
complex | muuttumaton | Monimutkainen luku | 3+2.7j |
dict | vaihdettavissa | Sanakirja ( assosiatiivinen array ) on kokoelma avainarvopareja; arvo voi olla mitä tahansa tyyppiä, avaimen on oltava hajautettavissa olevaa tyyppiä | {'key1': 1.0, 3: False} {} |
ellipsis[K 1] | muuttumaton | Ellipsi (ellipsi). Käytetään ensisijaisesti NumPyssä tarjoamaan oikotie moniulotteisen taulukon leikkaamiseen. Se on läsnä itse Pythonissa tukemaan mukautettuja tyyppejä ja laajennuksia, kuten NumPy [76] | ... Ellipsis NumPy : lle : mikä vastaa [76] x[i, ..., j] x[i, :, :, j] |
float | muuttumaton | Liukulukuluku . Tarkkuusaste riippuu alustasta, mutta käytännössä se toteutetaan yleensä 64-bittisenä 53-bittisenä numerona [77] |
1.414 |
frozenset | muuttumaton | Sekava sarja , ei sisällä kaksoiskappaleita; voi sisältää sisällä erilaisia hajautettavia tietotyyppejä | frozenset([4.0, 'string', True]) |
int | muuttumaton | Rajoittamaton kokonaisluku [78] | 42 |
list | vaihdettavissa | Luettelo , voi sisältää erityyppisiä tietoja | [4.0, 'string', True] [] |
NoneType[K 1] | muuttumaton | Objekti, joka edustaa arvon puuttumista, jota kutsutaan usein nimellä Null muilla kielillä. | None |
NotImplementedType[K 1] | muuttumaton | Objekti, joka palautetaan ylikuormitettaessa operaattoreita, kun operandityyppejä ei tueta. | NotImplemented |
range | muuttumaton | Kokonaislukujen sarja arvosta toiseen, jota käytetään yleensä toistamaan toiminto useita kertoja [79] :n kanssa | range(1, 10) range(10, -5, -2) |
set | vaihdettavissa | Sekava sarja , ei sisällä kaksoiskappaleita; voi sisältää sisällä erilaisia hajautettavia tietotyyppejä | {4.0, 'string', True} set() |
str | muuttumaton | merkkijonotyyppi | 'Wikipedia' "Wikipedia" """ Useita rivejä ulottuva""" |
tuple | muuttumaton | Tuple . Se voi sisältää sisällään erityyppistä dataa. Voidaan käyttää muuttumattomana luettelona ja tietueina, joissa on nimeämättömät kentät [80] | Muuttumattomana luettelona: merkintöinä: [80] (4.0, 'string', True) ('single element',) () lax_coordinates = (33.9425, -118.408056) city, year, pop, chg, area = ('Tokyo', 2003, 32450, 0.66, 8014) |
Kielellä on selkeä ja johdonmukainen syntaksi, harkittu modulaarisuus ja skaalautuvuus , mikä tekee Pythonilla kirjoitettujen ohjelmien lähdekoodista helppolukuisen. Välittäessään argumentteja funktioille Python käyttää puhelujen jakamista [ 81 ] .
Operaattoreiden joukko on melko perinteinen.
Yksi kielen mielenkiintoisista syntaktisista ominaisuuksista on koodilohkojen (välilyöntien tai sarkainten) sisennys , joten Pythonissa ei ole aloitus/ loppusulkuja , kuten Pascalissa , tai kiharasulkuja, kuten C :ssä. Tällaisen "tempun" avulla voit vähentää ohjelman rivien ja merkkien määrää ja opettaa "hyvää" ohjelmointityyliä. Toisaalta ohjelman käyttäytyminen ja jopa oikeellisuus voi riippua tekstin alkuvälilyönnistä. Niille, jotka ovat tottuneet ohjelmoimaan kielillä, joissa on selkeä valinta lohkojen alun ja lopun osalta, tämä käyttäytyminen voi aluksi tuntua epäintuitiiviselta ja hankalalta.
Guido itse kirjoitti [82] :
Pythonin ehkä kiistanalaisin ominaisuus on sisennyksen käyttö lausekkeiden ryhmittelyssä, joka on otettu suoraan ABC :stä . Tämä on yksi sydämelleni läheisen kielen piirteistä. Tämä tekee Python-koodista luettavamman kahdella tavalla. Ensinnäkin sisennyksen käyttö vähentää visuaalista sotkua ja lyhentää ohjelmia, mikä vähentää koodin perusyksikön ymmärtämiseen tarvittavaa huomiota. Toiseksi se antaa ohjelmoijalle vähemmän vapautta muotoilussa, mikä mahdollistaa johdonmukaisemman tyylin, joka helpottaa muiden ihmisten koodin lukemista. (Vertaa esimerkiksi kolmea tai neljää erilaista C - sulkeen käytäntöä , joista jokaisella on vahva kannattaja.)
Alkuperäinen teksti (englanniksi)[ näytäpiilottaa] Pythonin ehkä kiistanalaisin ominaisuus on sen sisennyksen käyttö lauseiden ryhmittelyssä, joka johtuu suoraan ABC:stä. Se on yksi sydäntäni rakastavista kielen ominaisuuksista. Se tekee Python-koodista luettavamman kahdella tavalla. Ensinnäkin sisennyksen käyttö vähentää visuaalista sotkua ja lyhentää ohjelmia, mikä vähentää huomion kestoa, joka tarvitaan koodin perusyksikön vastaanottamiseen. Toiseksi se antaa ohjelmoijalle vähemmän vapautta muotoilussa, mikä mahdollistaa yhtenäisemmän tyylin, mikä helpottaa jonkun toisen koodin lukemista. (Vertaa esimerkiksi kolmea tai neljää erilaista aaltosulkeiden sijoittamista koskevaa käytäntöä C:ssä, joista jokaisella on vahvoja kannattajia.)Koostumus, syntaksi, assosiatiivisuus ja operaatioiden ensisijaisuus ovat varsin tuttuja ohjelmointikielille, ja ne on suunniteltu minimoimaan hakasulkeiden käyttöä. Matematiikkaan verrattuna operaattorien ensisijaisuus heijastaa matematiikan arvonmääritysoperaattoria, joka =vastaa typografista operaattoria ←. Vaikka operaattorien ensisijaisuus välttää sulkeiden käytön monissa tapauksissa, suurten lausekkeiden jäsentäminen voi olla aikaa vievää, mikä tekee eksplisiittisistä sulkeista hyödyllisempiä tällaisissa tapauksissa [45] .
Erikseen kannattaa mainita merkkijonojen muotoilutoiminto (se toimii analogisesti printf()C:n funktion kanssa), joka käyttää samaa symbolia kuin jaon loppuosa:
>>> str_var = "maailma" >>> print ( "Hei, % s " % str_var ) Hei maailmaVersiossa 3.6 lisättiin muotoiltuja merkkijonoliteraaaleja eli f-merkkijonoja, jotta koodista tuli luettavampi ja ytimekkäämpi:
>>> str_var = "maailma" >>> print ( f "Hei, { str_var } " ) # tuloste f-merkkijonolla Hei maailmaPythonilla on käteviä ketjutettuja vertailuja . Tällaiset olosuhteet ohjelmissa eivät ole harvinaisia:
1 <= a < 10 ja 1 <= b < 20Lisäksi loogiset operaatiot ( orja and) ovat laiskoja : jos ensimmäinen operandi riittää arvioimaan operaation arvon, tämä operandi on tulos, muuten loogisen operaation toinen operandi arvioidaan. Tämä perustuu logiikan algebran ominaisuuksiin : esimerkiksi jos operaation "OR" ( or) yksi argumentti on tosi, niin tämän operaation tulos on aina tosi. Jos toinen operandi on monimutkainen lauseke, tämä vähentää sen laskennan kustannuksia. Tätä tosiasiaa käytettiin laajalti versioon 2.5 asti ehdollisen rakenteen sijaan:
a < b ja "pienempi kuin" tai "suurempi tai yhtä suuri kuin"Sisäänrakennetuilla tietotyypeillä on yleensä erityinen syntaksi niiden literaaleille (lähdekoodiin kirjoitetut vakiot):
"merkkijono ja Unicode-merkkijono samaan aikaan" "merkkijono ja Unicode-merkkijono samaan aikaan" """myös merkkijono ja Unicode-merkkijono samaan aikaan""" Oikein vai väärin # boolen literaalit 3.14 # liukulukuluku 0b1010 + 0o12 + 0xA # numerot binääri-, oktaali- ja heksadesimaaliluvuissa 1 + 2 j # kompleksiluku [ 1 , 2 , "a" ] # lista ( 1 , 2 , "a" ) # monikko { 'a' : 1 , 'b' : ' B' } # sanakirja { 'a' , 6 , 8.8 } # set lambda x : x ** 2 # anonyymi funktio ( i for i alueella ( 10 ) ) # generaattoriPython tarjoaa luetteloille (ja muille sarjoille) joukon viipalointitoimintoja. Ominaisuus on indeksointi, joka voi tuntua oudolta aloittelijasta, mutta paljastaa sen johdonmukaisuuden sitä käytettäessä. Luetteloelementtien indeksit alkavat nollasta. Viipaleen tallentaminen s[N:M]tarkoittaa, että kaikki elementit N mukaan lukien M, mutta eivät sisälly, putoavat viipaleen. Tässä tapauksessa indeksi voidaan jättää pois. Esimerkiksi Record s[:M]tarkoittaa, että kaikki elementit alusta alkaen putoavat siivuun; merkintä s[N:]tarkoittaa, että kaikki elementit ovat mukana viipaleen loppuun asti; Record s[:]tarkoittaa, että kaikki elementit alusta loppuun ovat mukana.
Nimi (tunniste) voi alkaa minkä tahansa aakkoston kirjaimella Unicodessa , millä tahansa kirjaimella tai alaviivalla, jonka jälkeen nimessä voidaan käyttää myös numeroita. Et voi käyttää avainsanoja nimenä (niiden luettelo löytyy import keyword; print(keyword.kwlist)painikkeella ), eikä sisäänrakennettuja nimiä ole toivottavaa määrittää uudelleen. Alaviivalla alkavilla nimillä on erityinen merkitys [83] .
Ohjelman jokaisessa kohdassa tulkilla on pääsy kolmeen nimiavaruuteen (eli nimi-objekti-vastaavuksiin): paikallinen, globaali ja sisäänrakennettu.
Nimialueet voidaan upottaa toistensa sisään (nimet ympäröivästä koodilohkosta näkyvät määritetyn funktion sisällä). Käytännössä laajuuksiin ja nimisidoksiin liittyy useita hyviä tapoja, joista voit tutustua tarkemmin dokumentaatiossa.
Python tarjoaa mekanismin pydoc-koodin dokumentointiin . Jokaisen moduulin, luokan, funktion alkuun lisätään dokumentaatiomerkkijono - docstring . Dokumentaatiomerkkijonot pysyvät koodissa ajon aikana, ja dokumentaatiokäyttö [84] (muuttuja __doc__) on sisäänrakennettu kieleen, kuten nykyaikaiset IDE:t ( Integrated Development Environment ) (esim. Eclipse ) käyttävät.
Voit saada apua interaktiivisesti, luoda hypertekstidokumentaatiota koko moduulille tai jopa testata automaattisesti avulla
Python on moniparadigma ohjelmointikieli . Oliosuuntautunut , rakenteellinen [85] , yleinen , toiminnallinen ohjelmointi [27] ja metaohjelmointi [31] ovat täysin tuettuja . Perustukea aspektisuuntautuneelle ohjelmoinnille tarjotaan metaohjelmoinnin kautta [34] . Monia muita tekniikoita, mukaan lukien sopimus [86] [87] ja logiikkaohjelmointi [88] , voidaan toteuttaa laajennusten avulla.
Python-kielen suunnittelu on rakennettu olio-ohjelmointimallin ympärille. OOP : n toteutus Pythonissa on hyvin harkittu, mutta samalla varsin spesifinen verrattuna muihin oliokieliin . Kaikki kielessä on objektia, joko luokan ilmentymä tai metaluokan ilmentymä. Poikkeuksena on perussisäänrakennettu metaluokka type. Luokat ovat siis itse asiassa metaluokkien esiintymiä, ja johdetut metaluokat ovat metaluokan esiintymiä type. Metaluokat ovat osa metaohjelmoinnin käsitettä ja tarjoavat mahdollisuuden hallita luokan periytymistä, mikä mahdollistaa abstraktien luokkien luomisen, luokkien rekisteröinnin tai minkä tahansa ohjelmointirajapinnan lisäämisen niihin kirjastossa tai kehyksessä [31] .
Luokat edustavat pohjimmiltaan suunnitelmaa tai kuvausta siitä, kuinka objekti luodaan, ja tallentavat kuvauksen objektin attribuuteista ja menetelmistä sen kanssa työskennellä. OOP-paradigma perustuu kapseloitumiseen , periytymiseen ja polymorfismiin [89] . Kapselointi Pythonissa edustaa kykyä tallentaa julkisia ja piilotettuja attribuutteja (kenttiä) objektiin tarjoamalla menetelmiä niiden kanssa työskentelemiseen [89] , vaikka itse asiassa kaikki attribuutit ovat julkisia, mutta piilotettujen merkitsemiseen on olemassa nimeämiskäytäntö. attribuutit [90] . Perinnön avulla voit luoda johdettuja objekteja ilman, että sinun tarvitsee kirjoittaa koodia uudelleen, ja polymorfismi on kyky ohittaa kaikki objektin menetelmät (Pythonissa kaikki menetelmät ovat virtuaalisia [90] ), sekä ylikuormittaa menetelmiä ja operaattoreita . Pythonin menetelmien ylikuormitus on toteutettu, koska on mahdollista kutsua samaa menetelmää eri argumenteilla [89] . Pythonin ominaisuus on kyky muokata luokkia niiden ilmoittamisen jälkeen lisäämällä niihin uusia attribuutteja ja menetelmiä [45] , voit myös muokata itse objekteja, minkä seurauksena luokkia voidaan käyttää rakenteina mielivaltaisen tiedon tallentamiseen [ 90] .
Python tukee moniperintöä. Moninkertainen periytyminen itsessään on monimutkaista, ja sen toteutuksissa on ongelmia pääluokkien välisten nimien törmäysten ratkaisemisessa ja mahdollisesti uudelleenperimisessä samasta luokasta hierarkiassa. Pythonissa menetelmiä kutsutaan menetelmän resoluutiojärjestyksen (MRO) mukaan, joka perustuu C3-linearisointialgoritmiin [91] , normaalitapauksissa ohjelmia kirjoitettaessa ei tarvitse tietää miten tämä algoritmi toimii, kun taas ymmärtäminen voi vaaditaan luotaessa ei-triviaaleja luokkahierarkioita [92] .
Pythonille ominaiset ominaisuudet ja ominaisuudet:
Dynaamista kirjoittamista ja olioohjelmointia tukevia kieliä ei yleensä oteta huomioon geneerisen ohjelmoinnin puitteissa, koska geneeriset ohjelmointiongelmat ratkaistaan tietotyyppejä koskevien rajoitusten puuttumisen vuoksi [32] [33] . Pythonissa vahvasti kirjoitettu yleinen ohjelmointi saavutetaan käyttämällä kieliominaisuuksia yhdessä ulkoisten koodianalysaattoreiden [ 93] , kuten Mypyn [94] kanssa .
Vaikka Python ei alun perin suunniteltu toiminnalliseksi ohjelmointikieleksi [95] , Python tukee ohjelmointia funktionaalisen ohjelmoinnin tyyliin, erityisesti [96] :
Toisin kuin useimmat suoraan toiminnalliseen ohjelmointiin keskittyvät kielet, Python ei ole puhdas ohjelmointikieli eikä koodi ole immuuni sivuvaikutuksille [96] [97] .
Python-standardikirjastossa on myös erikoispaketteja operatortoiminnalliseen functoolsohjelmointiin [95] .
Python tukee metaohjelmointia [98] [31] .
Python-ohjelmisto (sovellus tai kirjasto) on pakattu moduuleiksi, jotka puolestaan voidaan pakata . Moduulit voivat sijaita sekä hakemistoissa että ZIP-arkistoissa . Moduulit voivat olla alkuperältään kahdenlaisia: "puhtaalla" Pythonilla kirjoitetut moduulit ja muilla ohjelmointikielillä kirjoitetut laajennusmoduulit (laajennusmoduulit). Esimerkiksi vakiokirjastossa on "puhdas" suolakurkkumoduuli ja sen C-vastine: cPickle. Moduuli on tehty erilliseksi tiedostoksi ja paketti erilliseksi hakemistoksi. Moduuli liittää ohjelmaan käyttäjän toimesta import. Kun moduuli on tuotu, sitä edustaa erillinen objekti, joka antaa pääsyn moduulin nimiavaruuteen. Ohjelman suorituksen aikana moduuli voidaan ladata uudelleen toiminnolla reload().
Python tukee täyttä ajonaikaista itsetutkiskelua [99] . Tämä tarkoittaa, että mistä tahansa objektista saat kaikki tiedot sen sisäisestä rakenteesta.
Itsetutkiskelun käyttö on tärkeä osa niin kutsuttua pythonic-tyyliä , ja sitä käytetään laajalti Python-kirjastoissa ja -kehyksissä , kuten PyRO , PLY, Cherry, Django ja muissa, mikä säästää huomattavasti ohjelmoijan aikaa.
Itsetutkiskelua varten tarvittavat tiedot tallennetaan erityisiin attribuutteihin. Joten esimerkiksi voit saada useimpien objektien kaikki käyttäjän määrittämät attribuutit erityisestä attribuutista - sanakirjasta (tai muusta objektista, joka tarjoaa käyttöliittymän dict)__dict__
>>> luokka x ( objekti ): läpäissyt .... >>> f = x () >>> f . attr = 12 >>> tulosta ( f . __dict__ ) { 'attr' : 12 } >>> tulosta ( x . __dict__ ) # koska luokat ovat myös objektityypin # esiintymiä, joten ne tukevat tämän tyyppistä itsetutkiskelua { '__dict__' : < 'x'- objektien attribuutti '__dict__' > , ' __module__ ' .......On myös muita määritteitä, joiden nimet ja tarkoitukset riippuvat objektista:
>>> def f (): läpäissyt .... >>> f . toimintokoodi . co_code # hanki funktio tavukoodi 'd \x00\x00 S' >>> f . __class__ # erikoisattribuutti - viittaus annetun objektin luokkaan < type 'function' >Suurin osa itsetutkiskelua tukevista attribuuteista on luokkapohjaisia, ja ne puolestaan voidaan hakea osoitteesta obj.__class__.__dict__. Osa perusluokasta peritystä tiedosta jaetaan kaikkien objektien kesken, mikä säästää muistia.
Introspektiivisen tiedon hankkimisen helpottamiseksi Pythonissa on moduuli inspect[100] .
>>> def f ( x , y = 10 , ** mp ): läpäise ... >>> tarkasta . getargspec ( f ) ([ 'x' , 'y' ], ei mitään , 'mp' , ( 10 ,))Moduulin avulla newkäänteinen prosessi on mahdollista - objektin rakentaminen komponenteistaan suoritusvaiheessa
>>> def f ( i ): palauta j + i .... >>> j = 2 >>> f ( 1 ) 3 >>> tuo uusi >>> g = uusi . function ( f . func_code , { 'j' : 23 }) >>> g ( 1 ) 24Poikkeuskäsittelyä tuetaan Pythonissa lauseiden kautta, try, except, else, finally, raisejotka muodostavat poikkeuskäsittelylohkon. Yleensä lohko näyttää tältä:
kokeile : # Tässä on koodi, joka voi heittää poikkeuksen korotuksen Poikkeus ( "viesti" ) # Poikkeus, tämä on yksi vakiopoikkeustyypeistä (vain luokka), # mitä tahansa muuta voidaan käyttää, mukaan lukien omasi paitsi ( Poikkeustyyppi1 , Poikkeustyyppi2 , … ) muuttujana : # Lohkon koodi suoritetaan, jos poikkeustyyppi vastaa yhtä # -tyypeistä (Poikkeustyyppi1, Poikkeustyyppi2, ...) tai on yhden näistä tyypeistä #:n jälkeläinen. # Tuloksena oleva poikkeus on saatavilla valinnaisessa muuttujassa. paitsi ( Poikkeustyyppi3 , Poikkeustyyppi4 , … ) muuttujana : # Poikkeuslohkojen lukumäärä on rajoittamaton nosto # Heittää poikkeus vastaanotetun "päälle"; ei parametreja - Rethrow vastaanotettu paitsi : # Suoritetaan kaikille poikkeuksille, joita kirjoitetut lohkot eivät käsittele, paitsi else : # Lohkokoodi suoritetaan, jos poikkeuksia ei havaittu. lopuksi : # Suoritetaan joka tapauksessa, mahdollisesti vastaavan # paitsi tai muuten lohkon jälkeenJakaminen else, excepton finallyollut mahdollista vasta Python 2.5:n jälkeen. Tiedot nykyisestä poikkeuksesta ovat aina saatavilla osoitteesta sys.exc_info(). Poikkeuksen arvon lisäksi Python tallentaa myös pinon tilan siihen pisteeseen asti, jossa poikkeus heitetään - ns. traceback.
Toisin kuin käännetyissä ohjelmointikielissä, Pythonissa poikkeuksen käyttö ei aiheuta merkittäviä ylimääräisiä kuluja (ja usein jopa nopeuttaa ohjelmien suorittamista) ja on erittäin laajalti käytetty. Poikkeukset ovat Python-filosofian mukaisia (" Zen of Pythonin " kohta 10 - "Virheitä ei saa koskaan hiljentää") ja ovat yksi keino tukea " ankan kirjoittamista ".
Joskus on kätevämpää käyttää lohkoa nimenomaisen poikkeuskäsittelyn sijaan with(saatavilla Python 2.5:stä lähtien).
Iteraattoreita käytetään laajalti Python-ohjelmissa. Silmukka forvoi toimia sekä sekvenssin että iteraattorin kanssa. Useimmat kokoelmat tarjoavat iteraattoreita, käyttäjä voi myös määrittää iteraattorit omiin objekteihinsa. Vakiokirjastomoduuli itertoolssisältää välineet iteraattorien kanssa työskentelyyn.
Yksi kielen mielenkiintoisista ominaisuuksista ovat generaattorit - toiminnot, jotka tallentavat sisäisen tilan: paikallisten muuttujien arvot ja nykyinen ohje (katso myös: korutiinit ). Generaattorit voidaan käyttää iteraattorina tietorakenteille ja laiskalle arvioinnille .
Kun generaattoria kutsutaan, funktio palauttaa välittömästi iteraattoriobjektin, joka tallentaa nykyisen suorituspisteen ja funktion paikallisten muuttujien tilan. Kun seuraavaa arvoa pyydetään ( next()silmukassa implisiittisesti kutsutun menetelmän kautta for), generaattori jatkaa funktiota edellisestä keskeytyskohdasta seuraavaan yieldtai lauseeseen return.
Python 2.4 esitteli generaattorilausekkeet , lausekkeet, jotka johtavat generaattoriin. Generaattorilausekkeiden avulla voit säästää muistia siellä, missä muuten joutuisit käyttämään luetteloa välituloksilla:
>>> summa ( i i : lle alueella ( 1 , 100 ) jos i % 2 != 0 ) 2500Tässä esimerkissä lasketaan yhteen kaikki parittomat luvut 1:stä 99:ään.
Versiosta 2.5 alkaen Python tukee täysimittaisia yhteisproseduureja: voit nyt välittää arvoja generaattorille menetelmällä send()ja nostaa poikkeuksia sen kontekstissa käyttämällä throw().
Python tukee myös sisäkkäisiä generaattoreita. Jos esimerkiksi haluat luoda kaksiulotteisen taulukon, sinun on sijoitettava luettelogeneraattori, joka on merkkijono kaikkien merkkijonojen generaattorin sisään:[[0 for j in range(m)] for i in range(n)]
Python 2.5 esitteli työkalut koodilohkon - käskyn withja moduulin - suorituskontekstin hallintaan contextlib. Katso: esimerkki .
Operaattoria voidaan käyttää tapauksissa, joissa ennen ja jälkeen joitain toimintoja on suoritettava joitain muita toimintoja, riippumatta lohkoon heitetyistä poikkeuksista tai käskyistä return: tiedostot on suljettava, resurssit on vapautettava, vakiosyötteen uudelleenohjaus on päättynyt jne. Operaattori parantaa koodin luettavuutta, mikä tarkoittaa, että se auttaa estämään virheitä.
Funktiokoristimet ovat kutsuttavia objekteja, jotka ottavat toisen funktion argumenttina. Funktioiden sisustajat voivat suorittaa toimintoja funktiolle ja palauttaa joko itse funktion tai muun sen korvaavan funktion tai kutsuttavan objektin. Eli jos koodiin on aiemmin kirjoitettu koristelija nimeltä koriste, niin seuraava koodi on [101] :
@decorate def target (): print ( 'running target()' )vastaa tätä [101] :
def target (): tulosta ( 'running target()' ) target = koristele ( kohde )Esimerkki funktion koristelun [101] käytöstä :
>>> def deco ( func ): ... def inner (): ... print ( 'running inner()' ) ... palauta sisäinen … >>> @deco ... def target (): .. .print ( 'running target()' ) >>> target () running inner() >>> target <function deco.<locals> .inner at 0.10063b598>On luokan sisustajia [102] .
Säännöllisen lausekkeen muoto on peritty Perlistä joillakin eroilla. Niiden käyttöä varten sinun on tuotava moduuli re[103] , joka on osa standardikirjastoa.
Runsas standardikirjasto on yksi Pythonin nähtävyyksistä . On olemassa työkaluja monien verkkoprotokollien ja Internet - muotojen kanssa työskentelyyn , esimerkiksi moduuleja HTTP-palvelimien ja -asiakkaiden kirjoittamiseen, sähköpostiviestien jäsentämiseen ja luomiseen, XML -työskentelyyn jne. Käyttöjärjestelmän kanssa työskentelyyn tarkoitettujen moduulien avulla voit käyttää kirjoittaa monialustaisia sovelluksia. Siellä on moduuleja säännöllisten lausekkeiden , tekstikoodausten , multimediamuotojen , salausprotokollien , arkistojen, tietojen serialisoinnin , yksikkötestauksen jne. käsittelyyn .
Vakiokirjaston lisäksi on monia kirjastoja, jotka tarjoavat käyttöliittymän kaikille järjestelmäkutsuille eri alustoilla; erityisesti Win32-alustalla tuetaan kaikkia Win32 API -kutsuja sekä COM -kutsuja vähintään Visual Basic- tai Delphi -kutsuja . Pythonin sovelluskirjastojen määrä eri aloilla on kirjaimellisesti valtava ( verkko , tietokannat , kuvankäsittely, tekstinkäsittely, numeeriset menetelmät , käyttöjärjestelmäsovellukset jne.).
Pythonille on otettu käyttöön DB-API 2 -tietokantaohjelmointirajapinnan määrittely ja tätä määritystä vastaavia paketteja on kehitetty erilaisten tietokantajärjestelmien käyttämiseen : Oracle , MySQL , PostgreSQL , Sybase , Firebird ( Interbase ) , Informix , Microsoft SQL Server ja SQLite . Windows- alustalla pääsy tietokantaan on mahdollista ADO :n ( ADOdb ) kautta . eGenix on kehittänyt kaupallisen mxODBC-paketin DBMS-käyttöön ODBC :n kautta Windows- ja UNIX -alustoille [105] . Pythonille on kirjoitettu monia ORM -järjestelmiä ( SQLObject , SQLAlchemy , Dejavu, Django ), ohjelmistokehyksiä web-sovellusten kehittämiseen on toteutettu ( Django , Pylons , Pyramid ).
NumPy -kirjasto moniulotteisten taulukoiden kanssa työskentelyyn voi joskus saavuttaa tieteellisen suorituskyvyn, joka on verrattavissa erikoispaketteihin. SciPy käyttää NumPyä ja tarjoaa pääsyn monenlaisiin matemaattisiin algoritmeihin (matriisialgebra - BLAS - tasot 1-3, LAPACK , FFT ...). Numarray [106] on erityisesti suunniteltu operaatioihin, joissa on suuria määriä tieteellistä dataa.
WSGI [107] on yhdyskäytäväliitäntä verkkopalvelimella (Python Web Server Gateway Interface).
Python tarjoaa yksinkertaisen ja kätevän C-sovellusliittymän omien moduulien kirjoittamiseen C- ja C++- kielellä . SWIG :n kaltaisen työkalun avulla voit saada lähes automaattisesti sidoksia C / C ++ -kirjastojen käyttämiseen Python-koodissa. Tämän ja muiden työkalujen ominaisuudet vaihtelevat automaattisesti (C/C++/Fortran)-Python-rajapintojen luomisesta erikoistiedostoista (SWIG, pyste [108] , SIP [109] , pyfort [110] ) kätevämpien API:iden tarjoamiseen (boost). :: python [111] [112] , CXX [113] , Pyhrol [114] jne.). Ctypes- standardikirjastotyökalu mahdollistaa Python-ohjelmien pääsyn suoraan C-kielellä kirjoitettuihin dynaamisiin kirjastoihin / DLL -tiedostoihin. On moduuleja, joiden avulla voit upottaa C/C++-koodia suoraan Python-lähdetiedostoihin luomalla laajennuksia lennossa (pyinline [115] , weave [116] ).
Toinen lähestymistapa on upottaa Python-tulkki sovelluksiin. Python on helppo integroida Java-, C/C++- ja OCaml- ohjelmiin . Python-sovellusten vuorovaikutus muiden järjestelmien kanssa on mahdollista myös käyttämällä CORBA , XML-RPC , SOAP , COM.
Cython- projektin avulla on mahdollista kääntää Python- ja Pyrex - kielillä kirjoitettuja ohjelmia C-koodiksi, jonka jälkeen käännös konekoodiksi. Cythonilla yksinkertaistetaan Python-kirjastojen kirjoittamista, sitä käytettäessä huomioidaan, että koodi on nopeampi ja lisäkustannus pienenee.
Shedskinin kokeelliseen projektiin kuuluu kääntäjän luominen, joka muuntaa implisiittisesti kirjoitetut Python-ohjelmat optimoiduksi C++-koodiksi. Versiosta 0.22 lähtien Shedskin mahdollistaa yksittäisten toimintojen kokoamisen laajennusmoduuleiksi.
Python ja suurin osa sen kirjastoista ovat ilmaisia ja tulevat lähdekoodilla. Lisäksi toisin kuin monet avoimet järjestelmät, lisenssi ei rajoita Pythonin käyttöä kaupallisessa kehittämisessä millään tavalla eikä aseta muita velvoitteita kuin tekijänoikeuden ilmoittamiseen.
Yksi Python-pakettien jakelu- ja päivityskanavista on PyPI ( Python Package Index ) .
Pythonissa on Tcl / Tk - pohjainen tkinter -kirjasto , jolla voidaan rakentaa monialustaisia GUI -ohjelmia .
On olemassa laajennuksia, joiden avulla voit käyttää kaikkia tärkeimpiä GUI-kirjastoja - wxPython [117] , joka perustuu wxWidgets-kirjastoon , PyGObject for GTK [118] , PyQt ja PySide for Qt ja muut. Jotkut niistä tarjoavat myös laajat tietokanta-, grafiikka- ja verkkoominaisuudet hyödyntäen täysimääräisesti kirjastoa, johon ne perustuvat.
Pygame- kirjaston avulla voit luoda pelejä ja sovelluksia, jotka vaativat epätyypillisen käyttöliittymän . Se tarjoaa myös laajat multimediatyökalut : sen avulla voit hallita ääntä ja kuvia, toistaa videoita. Pygamen tarjoamassa OpenGL - grafiikkalaitteistokiihdytyksessä on korkeampi käyttöliittymä kuin PyOpenGL :ssä [119] , joka kopioi OpenGL C -kirjaston semantiikan. On myös PyOgre [120] , joka tarjoaa linkin Ogreen , korkean tason oliosuuntautuneeseen 3D-grafiikkakirjastoon. Lisäksi on olemassa pythonOCC-kirjasto [121] , joka tarjoaa linkin OpenCascaden 3D-mallinnus- ja simulointiympäristöön [122] .
Rasterigrafiikan kanssa työskentelyyn käytetään Python Imaging Library -kirjastoa .
PyCairoa käytetään vektorigrafiikan kanssa työskentelyyn .
On olemassa moduuleja, joiden avulla voit hallita toimintoparametrien tyyppejä ajon aikana, esimerkiksi tyypintarkistus [123] tai menetelmän allekirjoituksen tarkistus koristelijoita [124] . Python 3:ssa lisättiin valinnainen tyyppimääritys funktioparametreille, tulkki ei tarkista tyyppejä, vaan vain lisää tarvittavat tiedot funktion metatietoihin, jotta laajennusmoduulit voivat myöhemmin käyttää näitä tietoja [125] .
Toimintojen ylikuormitusta toteuttavat useat kolmannen osapuolen kirjastot, mukaan lukien PEAK [126] [127] . Suunnitelmat, joita ei hyväksytty ylikuormitustuelle Python3000:ssa [128] , toteutettiin osittain overloading- libissä [129] .
Wikiversity - artikkeli " Python-ohjelmaesimerkit " sisältää esimerkkejä pienistä ohjelmista, jotka esittelevät Python-kielen ja sen vakiokirjaston ominaisuuksia.
Hei maailma! ' voidaan kirjoittaa yhdelle riville:
tulosta ( "Hei maailma!" )Luvun 10 (10!) kertoimen laskeminen :
def factorial ( n ): jos n < 0 : nosta ArithmeticError ( 'Negatiivinen luku.' ) f = 1 i :lle alueella ( 2 , n + 1 ) : f *= i palauttaa f print ( factorial ( 10 )) # 3628800Toteutus rekursiolla :
def factorial ( n ): jos n < 0 : nosta ArithmeticError ( 'Negatiivisen luvun tekijä.' ) if ( n == 0 ) tai ( n == 1 ): palauttaa 1 else : palauttaa kertoimen ( n - 1 ) * n tulosta ( factorial ( 10 ))Python-standardikirjasto tarjoaa profilaattorin (moduulin profile), jonka avulla voidaan kerätä tilastoja yksittäisten toimintojen käyttöajasta. Päättääksesi, mikä koodin versio toimii nopeammin, voit käyttää timeit. Seuraavan ohjelman mittausten avulla voimme selvittää, mikä merkkijonojen ketjutusvaihtoehdoista on tehokkaampi:
from timeit import Timer tmp = "Python 3.2.2 (oletus, 12. kesäkuuta 2011, 15:08:59) [MSC v.1500 32 bit (Intel)] win32:ssa." def case1 (): # A. inkrementaaliset ketjutukset silmukassa s = "" i :lle alueella ( 10000 ) : s += tmp def case2 (): # B. väliluettelon kautta ja liitosmenetelmä s = [] i :lle alueella ( 10000 ) : s . liitä ( tmp ) s = "" . liity ( t ) def case3 (): # B. listalauseke ja liitosmenetelmä palauttavat "" . liity ([ tmp for i in range ( 10000 )]) def case4 (): # D. generaattorilauseke ja liitosmenetelmä palauttavat "" . liity ( tmp for i alueella ( 10000 ) ) v :lle alueella ( 1 , 5 ) : print ( Ajastin ( "func()" , "from __main__ import case %s as func" % v ) . timeit ( 200 ))Kuten kaikilla ohjelmointikielellä, Pythonilla on omat koodin optimointitekniikat . Voit optimoida koodin useiden (usein keskenään kilpailevien) kriteerien perusteella (suorituskyvyn kasvu, tarvittavan RAM-muistin määrän väheneminen, lähdekoodin kompakti jne.). Useimmiten ohjelmat on optimoitu suoritusaikaa varten.
On olemassa useita sääntöjä, jotka ovat ilmeisiä kokeneille ohjelmoijille.
Pythonilla on seuraavat ominaisuudet ja niihin liittyvät optimointisäännöt.
Pychecker-niminen työkalu [130] auttaa sinua analysoimaan Python-lähdekoodiasi ja antamaan suosituksia löydetyistä ongelmista (esimerkiksi käyttämättömät nimet, menetelmän allekirjoituksen muuttaminen sen ylikuormittuessa jne.). Tällaisen lähdekoodin staattisen analyysin aikana voidaan havaita myös virheitä. Pylint [131] pyrkii ratkaisemaan samankaltaisia ongelmia, mutta pyrkii tarkistamaan koodityyliä, löytämään haisevaa koodia [132] .
Kielen valinta riippuu yleensä ratkaistavista tehtävistä, kielten ominaisuuksista ja ongelman ratkaisemiseksi tarvittavien kirjastojen saatavuudesta. Sama eri kielillä kirjoitettu tehtävä voi vaihdella suuresti suoritustehokkuuden suhteen, mukaan lukien erot, kun se suoritetaan eri käyttöjärjestelmissä tai käytettäessä eri kääntäjiä. Yleisesti ottaen kielet voidaan jakaa tulkittuihin (scripting), koota väliesitykseen ja kääntää, mikä vaikuttaa suorituskykyyn ja muistin kulutukseen. Pythonista puhutaan yleensä tulkittuna. Myös yksittäisillä kielillä voi olla omat vahvuutensa, Pythonin tapauksessa ohjelmien kirjoittamisen helppous erottuu [133] .
Pythonia verrataan C++/Javaan Pythonin tiiviyden, yksinkertaisuuden ja joustavuuden suhteen [134] . Voidaan verrata " Hei, maailma " -ohjelmia, jotka on kirjoitettu kullakin kielellä [134] .
C++ [134] | Java [134] | Python [134] |
---|---|---|
#include <iostream> int main () { std :: cout << "Hei, maailma!" << std :: endl ; paluu 0 ; } | public class HelloClass { public static void main ( String [ ] args ) { System . ulos . println ( "Hei, maailma!" ); } } | print ( "Hei, maailma!" ) |
Mitä tulee OOP:iin, Pythonissa, toisin kuin C ++:ssa ja Javassa, ei ole luokkakenttien ja menetelmien käyttöoikeusmuutoksia, objektien attribuutteja ja kenttiä voidaan luoda lennossa ohjelman suorituksen aikana ja kaikki menetelmät ovat virtuaalisia. Javaan verrattuna Python sallii myös operaattorin ylikuormituksen, mikä mahdollistaa luonnollista läheisten lausekkeiden käytön [134] . Yhdessä Pythonin lähestymistapa OOP:iin yksinkertaistaa ohjelmointia, tekee koodista ymmärrettävämpää ja samalla lisää joustavuutta kieleen [134] . Toisaalta Python-koodi (samoin kuin muut tulkitut kielet) on paljon hitaampaa kuin vastaava C++-koodi [135] ja sen odotetaan yleensä olevan hitaampaa kuin Java [136] . C++-koodi on tuottavampi kuin Python, mutta vie enemmän rivejä. Bioinformatiikassa käytettävien algoritmien tutkimusten mukaan Python on osoittautunut joustavammaksi kuin C++, ja Java on osoittautunut kompromissiksi C++:n suorituskyvyn ja Pythonin joustavuuden välillä [133] .
Javassa ja Pythonissa kaikki objektit luodaan kasaan , kun taas C++ sallii objektien luomisen sekä kasaan että pinoon käytetystä syntaksista riippuen [137] . Suorituskykyyn vaikuttaa myös tapa, jolla muistissa olevia tietoja käytetään. C++:ssa ja Javassa dataan päästään vakiosiirtymällä muistissa, kun taas Pythonissa se tapahtuu hash-taulukoiden kautta . Osoittimien käyttö C++:ssa voi olla aloittelijoille melko vaikeaa ymmärtää, ja osoittimien oikean käytön oppiminen voi kestää jonkin aikaa [133] .
Go ja Python ovat dramaattisesti erilaisia kieliä, mutta niitä verrataan usein toisiinsa niiden yhteisen markkinaraon - verkkosovellusten taustajärjestelmän - vuoksi. Kuten Jason Kincaid sanoo, Go yhdistää "käännettyjen kielten, kuten C++, suorituskyvyn ja turvallisuuden dynaamisten kielten, kuten Pythonin, kehitysnopeuteen" [138] . Jossain määrin tämä pitää paikkansa: Go suunniteltiin alun perin vahvasti staattisesti kirjoitetuksi käännöskieleksi, joka tukee dynaamisten kielten maksimaalisia ominaisuuksia ja jolla on edelleen mahdollista varmistaa tehokas käännös ja ylläpitää käännettyjen ohjelmien suorituskykyä. Molemmille kielille yhteistä on automaattisen muistinhallinnan käyttö, sisäänrakennettujen dynaamisten kokoelmien (taulukot ja sanastot), tuki viipaleille, kehitetty moduulimekanismi sekä yksinkertainen ja minimalistinen syntaksi. Eroja on paljon enemmän, eikä aina ole mahdollista osoittaa selvästi, mitä kieliä he puhuvat.
dynaamisia mahdollisuuksia. Jos Python on täysin dynaaminen kieli ja melkein kaikki ohjelman elementit voivat muuttua ajon aikana, mukaan lukien uusien tyyppien rakentaminen lennossa ja olemassa olevien muokkaaminen, niin Go on staattinen kieli, jolla on melko rajalliset heijastusominaisuudet ja joka toimii vain tietotyyppien suhteen. kehitettynä. Jossain määrin Go:n dynaamisten ominaisuuksien korvaaminen on koodin luonti, jonka syntaksin yksinkertaisuus ja tarvittavien työkalujen ja järjestelmäkirjastojen saatavuus tarjoavat. Go 2.0:ssa on myös tarkoitus lisätä tuki geneerisille lääkkeille. Olio-ohjelmointi. Python on rakennettu "kaikki-objekti"-ideologialle ja sillä on monia OOP-mekanismeja, mukaan lukien harvinaiset ja epätyypilliset. Go on melko tyypillinen modulaarinen proseduuriohjelmointikieli, jossa OOP-ominaisuudet rajoittuvat tukeviin liitäntöihin ja mahdollisuuteen upottaa rakenteita ja rajapintoja. Itse asiassa Golla ei ole edes täysimittaista perintöä. Jos siis Python kannustaa ohjelmointiin OOP-tyyliin, luokkien välisten puumaisten riippuvuuksien rakentamisella ja perinnön aktiivisella käytöllä, niin Go keskittyy komponenttilähestymistapaan: komponenttien käyttäytyminen määräytyy rajapinnoilla, jotka eivät välttämättä edes ole. olla yhteydessä toisiinsa, ja rajapintojen toteutus sijoitetaan struct-tyyppeihin . Go:ssa toteutettu "ankkakirjoitus" johtaa siihen, että rajapintojen ja niitä toteuttavien rakenteiden välillä ei ole edes muodollisia syntaktisia linkkejä. Rinnakkaisohjelmointi. Rinnakkaisen ohjelmoinnin tukena Python on huomattavasti huonompi kuin Go. Ensinnäkin Pythonin GIL on este sellaisten järjestelmien tehokkaalle käytölle, joissa on suuri määrä (kymmeniä tai enemmän) fyysisiä prosessoriytimiä. Toinen ongelma on tehokkaiden sisäänrakennettujen vuorovaikutuskeinojen puute rinnakkaisten säikeiden välillä. Go sisältää gorutiinin kielen primitiivin, jonka avulla voit luoda "kevyitä" säikeitä, ja syntaksituetut putket, jotka mahdollistavat säikeiden kommunikoinnin. Tämän seurauksena, kun luodaan esimerkiksi jonojärjestelmiä Gossa, ei ole ongelma käyttää satoja tai jopa tuhansia olemassa olevia samanaikaisia säikeitä, ja lisäksi normaalilla latauksella mitä tahansa käytettävissä olevia prosessoriytimiä, kun taas mikään olemassa olevista Python-toteutukset varmistavat tällaisen määrän säikeitä tehokkaan toiminnan. Virheiden käsittely, poikkeukset. Python tukee poikkeusten käsittelyä, kun taas Go toteuttaa mekanismeja funktioiden virhekoodien eksplisiittiseen palauttamiseen ja niiden käsittelemiseen puhelupaikassa. Tätä eroa voidaan arvioida eri tavoin. Toisaalta poikkeukset ovat kätevä ja tuttu mekanismi ohjelmavirheiden käsittelyyn, jonka avulla voit keskittää tämän käsittelyn valittuihin koodinpätkiin, eikä "tahistaa" sitä koko ohjelman tekstissä. Toisaalta Go-kirjan kirjoittajat kokevat, että ohjelmoijat jättävät liian usein huomiotta virheiden käsittelyn luottaen siihen, että poikkeus heitetään käsiteltäväksi muualla; hajautetuissa sovelluksissa poikkeuksia ei usein välitetä järjestelmäkomponenttien välillä ja ne johtavat odottamattomiin vioihin, ja monisäikeisissä sovelluksissa käsittelemätön poikkeus säikeessä voi johtaa tukkoon tai päinvastoin ohjelman kaatumiseen. Visuaaliset mahdollisuudet, syntaksi. Python tarjoaa enemmän kieliominaisuuksia ja primitiivisiä, jotka ovat käteviä nopeaan kehitykseen kuin Go. Tämä johtuu suurelta osin siitä, että Go-kehittäjät kieltäytyivät tietoisesti sisällyttämästä kieleen joitakin "muodikas" ominaisuuksia, joista joidenkin katsottiin aiheuttavan virheitä, toisten peittäneen tarkoituksella tehottoman toteutuksen. Esimerkiksi yksinkertaisen toiminnon, jossa elementti lisätään taulukon keskelle, esiintyminen kielessä saa aikaan sen toistuvan käytön, ja jokainen tällainen toiminto vaatii vähintään taulukon "häntä" siirtämistä muistissa, ja joskus se voi vaatia muistin varaamista ja koko ryhmän siirtämistä. Esitys. Suorituskyvyn suhteen useimmissa testeissä, jotka toteuttavat tyypillisiä taustatoimintoja (kyselynkäsittely, verkkosivujen luominen), Go ylittää Pythonin useita kertoja useisiin suuruusluokkiin. Tämä ei ole yllättävää, kun otetaan huomioon kielen staattinen luonne ja se tosiasia, että Go-ohjelmat käännetään suoraan kohdealustan koodiin. Järjestelmissä, joissa suurin osa ajasta käytetään tietokantakyselyjen suorittamiseen tai tiedon siirtämiseen verkon kautta, tämä ei ole välttämätöntä, mutta erittäin kuormitetuissa järjestelmissä, jotka käsittelevät suuren määrän pyyntöjä, Go:n etu on kiistaton. Myös Go- ja Python-ohjelmien suorituskyvyn eroihin vaikuttavat edellä mainitut erot rinnakkaisuuden toteutuksessa.Molemmat kielet tulkitaan, kootaan väliesitykseen, joka lähetetään sitten suoritettavaksi. Pythonin tapauksessa välitavukoodi luodaan, kun taas Perl-kääntäjä luo syntaksipuun. Muistinhallinta molemmilla kielillä on automaattinen, ja itse kielet ovat skriptikielinä ja sopivat hyvin web-sovellusten kirjoittamiseen. Python-koodausmenetelmään sisältyy ohjelmien listauksen parempi ymmärtäminen suorituskyvyn kustannuksella, kun taas Perlillä on enemmän vapautta syntaksissa, mikä voi tehdä Perl-ohjelmista lukukelvottomia muille kuin Perl-ohjelmoijille [133] .
Lua on yksinkertainen kieli, joka alun perin suunniteltu upotettavaksi ohjelmistoihin ja jota käytettiin automatisoimaan monimutkaisia toimintoja (kuten robottien käyttäytymistä tietokonepeleissä). Pythonia voidaan käyttää myös näillä alueilla, se kilpailee Luan kanssa myös skriptien kirjoittamisessa tietokoneiden ja käyttöjärjestelmien hallinnan automatisoinnissa sekä ei-ammattimaisessa itseohjelmoinnissa. Viime vuosina molemmat kielet on sisällytetty mobiililaitteisiin, kuten ohjelmoitaviin laskimiin.
Molemmat kielet ovat dynaamisia, tulkittuja, tukevat automaattista muistinhallintaa ja niillä on vakiomuotoinen vuorovaikutus muilla kielillä (lähinnä C ja C++) kirjoitettujen ohjelmistojen kanssa. Lua-ajonaika on kompaktimpi ja vaatii vähemmän resursseja ajamiseen kuin Python, mikä antaa Lualle etua upotuksessa. Pythonin tavoin Lua tukee lähdekoodin kääntämistä virtuaalikoneen suoritettavaksi tavukoodiksi. Lualle on JIT-kääntäjätoteutus.
Lua on yksinkertaisempi kuin Python ja siinä on klassisempi Pascal-tyyppinen syntaksi. Kielessä on vain kahdeksan sisäänrakennettua tietotyyppiä, ja kaikki strukturoidut tyypit (rakenteet, luettelot, taulukot, joukot) mallinnetaan yhden sisäänrakennetun taulukkotyypin perusteella, joka on itse asiassa heterogeeninen sanakirja. OOP on toteutettu taulukoissa ja perustuu prototyyppimalliin, kuten JavaScriptissä. Python tarjoaa enemmän vaihtoehtoja, ja sen strukturoiduilla tietotyypeillä jokaisella on oma toteutus, mikä parantaa suorituskykyä. Pythonin OOP-ominaisuudet ovat paljon laajempia, mikä antaa etua monimutkaisten ohjelmien kirjoittamisessa, mutta sillä on vain vähän vaikutusta yksinkertaisten skriptien laatuun ja suorituskykyyn, joihin Lua keskittyy.
Python, MATLAB ja R ovat käytössä tietojenkäsittelyssä sekä matematiikan ja tilastotieteen perusteiden opettamisessa. R on tilastollisten laskutoimitusten kieli, kun taas MATLAB:ia voidaan pitää ohjelmointikielenä Pythonin ohella [139] .
Python, erittäin suosittu ohjelmointikieli, on vaikuttanut seuraaviin kieliin:
Klassisella Pythonilla on yhteinen haitta monien muiden tulkittujen kielten kanssa - ohjelmien suhteellisen hidas suoritusnopeus [147] . Jossain määrin tilannetta parantaa tavukoodin tallentaminen (laajennukset .pycja ennen versiota 3.5, .pyo), jolloin tulkki ei voi käyttää aikaa moduulien tekstin jäsentämiseen jokaisen käynnistyksen yhteydessä.
On olemassa Python-kielen toteutuksia, jotka tuovat käyttöön korkean suorituskyvyn virtuaalikoneita (VM:t) kääntäjän taustaohjelmistona. Esimerkkejä tällaisista toteutuksista ovat PyPy , joka perustuu RPythoniin; aikaisempi aloite on Parrot - projekti . LLVM-tyyppisten virtuaalikoneiden käytön odotetaan johtavan samoihin tuloksiin kuin vastaavien lähestymistapojen käyttö Java-kielen toteutuksissa, joissa heikko laskennallinen suorituskyky on suurelta osin voitettu [148] . Emme kuitenkaan saa unohtaa, että Pythonin dynaaminen luonne tekee väistämättömäksi lisäkulujen syntymisen ohjelman suorittamisen aikana, mikä rajoittaa Python-järjestelmien suorituskykyä käytetyistä teknologioista riippumatta. Tämän seurauksena matalan tason kieliä käytetään kriittisten koodiosien kirjoittamiseen, joiden kanssa monet ohjelmat ja kirjastot tarjoavat integroinnin (katso yllä).
Python-kielen suosituimmassa toteutuksessa tulkki on melko suuri ja resurssiintensiivisempi kuin vastaavissa suosituissa Tcl , Forth , LISP tai Lua toteutuksissa , mikä rajoittaa sen käyttöä sulautetuissa järjestelmissä. Python on kuitenkin siirretty joillekin suhteellisen alhaisen suorituskyvyn alustoille. .
Python-tulkki CPythonissa (sekä Stackless ja PyPy [149] ) käyttää säikeille vaarallisia tietoja, joiden tuhoutumisen estämiseksi, kun niitä muutetaan yhdessä eri säikeistä, käytetään globaalia tulkin lukitusta - GIL (Global Interpreter Lock) [150 ] : koodin suorituksen aikana säiettä Tulkki lukitsee GIL:n, suorittaa tietyn ajan (oletus 5 millisekuntia [K 2] ) joukon käskyjä, vapauttaa sitten lukituksen ja pysähtyy antaakseen muiden säikeiden suorittaa. GIL vapautetaan myös I/O:n aikana, jolloin synkronointiprimitiivien tilaa muutetaan ja tarkistetaan, kun suoritetaan laajennuskoodia, joka ei pääse käsiksi tulkin tietoihin, kuten NumPy / SciPy . Siten vain yksi Python-koodisäie voi olla käynnissä yhdessä Python-tulkkiprosessissa kerrallaan riippumatta käytettävissä olevien prosessoriytimien määrästä.
GIL:n suorituskykymaksu riippuu ohjelmien luonteesta ja järjestelmän arkkitehtuurista. Useimmat ohjelmat ovat yksisäikeisiä tai ajavat vain muutaman säikeen, joista osa on käyttämättömänä kulloinkin. Henkilökohtaisissa tietokoneissa on yleensä pieni määrä prosessoriytimiä, joita kuormittavat järjestelmässä rinnakkain toimivat prosessit, joten todellinen GIL:n aiheuttama henkilökohtaisten tietokoneiden suorituskyvyn menetys on pieni. Mutta palvelinsovelluksissa voi olla kätevää käyttää kymmeniä ja satoja (tai useampia) rinnakkaisia säikeitä (esimerkiksi jonojärjestelmissä, joissa jokainen säie käsittelee dataa erillistä käyttäjäpyyntöä varten), ja palvelimia 2010-luvun lopulla. niillä on usein kymmeniä ja jopa satoja prosessoriytimiä, eli ne voivat teknisesti tarjota näille säikeille fyysisesti samanaikaisen suorituksen; tällaisissa olosuhteissa GIL voi johtaa todella merkittävään kokonaissuorituskyvyn heikkenemiseen, koska se riistää ohjelmalta kyvyn käyttää täysimääräisesti moniytimien järjestelmien resursseja.
Guido van Rossum sanoi, että GIL "ei ole niin huono" ja tulee olemaan CPythonissa, kunnes "joku muu" keksii ei-GIL Python-toteutuksen, joka tekee yksisäikeisistä komentosarjoista yhtä nopeita [153] [154] .
Kehitystehtäviin kuuluu työ GIL:n optimoimiseksi [155] . GIL:n käytöstä poistamista ei ole suunniteltu lähitulevaisuudessa, koska vaihtoehtoiset mekanismit yksisäikeisissä sovelluksissa, joista suurin osa on, ovat hitaampia tai kuluttavat enemmän resursseja:
Radikaalinen ratkaisu ongelmaan voisi olla vaihtaminen Java-virtuaalikoneissa ja .NET/ Monossa toimiviin Jythoniin ja IronPythoniin : nämä toteutukset eivät käytä GIL:ää ollenkaan.
Vaikka yksi Pythonin ilmoittamista suunnitteluperiaatteista on vähiten yllätyksen periaate , kriitikot viittaavat useisiin arkkitehtonisiin valintoihin, jotka voivat olla hämmentäviä tai hämmentäviä ohjelmoijille, jotka ovat tottuneet muihin valtavirran kieliin [162] . Heidän keskuudessaan:
Rubyyn ja joihinkin muihin kieliin verrattuna Pythonilla ei ole kykyä muokata sisäänrakennettuja luokkia int, str, float, listmuiden tavoin, mikä kuitenkin antaa Pythonille mahdollisuuden kuluttaa vähemmän RAM-muistia ja toimia nopeammin. Toinen syy tällaisen rajoituksen käyttöönotolle on tarve koordinoida laajennusmoduulien kanssa. Monet moduulit (suorituskyvyn optimoimiseksi) muuntavat Python-alkeistyypit vastaaviksi C-tyypeiksi sen sijaan, että manipuloisivat niitä C API:n kautta. Se eliminoi myös monet mahdolliset sudenkuopat, jotka johtuvat sisäänrakennettujen tyyppien hallitsemattomasta dynaamisesta ohittamisesta.
CPython on kielen tärkein toteutus. Se on kirjoitettu C -kielellä ja on siirrettävissä eri alustoilla. Muistinhallinnan perusta on viitelaskurin ja syklisten referenssikaappausten löytämisestä vastaavan roskakeräimen yhdistelmän käyttö [42] . Vaikka kielen katsotaan olevan tulkittu, se itse asiassa käännetään keskitason korkean tason tavukoodiksi [166] [167] , joka sitten suoritetaan pinon virtuaalikoneen [42] kautta . Esimerkiksi funktiokutsu print()voidaan esittää muodossa [167] :
1 0 LOAD_NAME 0 ( print ) 2 LOAD_CONST 0 ( ' Hei maailma ! ' ) 4 CALL_FUNCTION 1 6 RETURN_VALUEKielen nimet ovat myöhässä, mikä tarkoittaa, että voit kirjoittaa kutsuja muuttujiin, menetelmiin ja attribuutteihin, joita ei vielä ole olemassa, mutta jotka on ilmoitettava niitä käyttävän koodin suorituksen yhteydessä. Jokaisella Python-objektilla on hash-taulukkosanakirja, jonka avulla määritteiden nimiä verrataan niiden arvoihin. Globaalit muuttujat kartoitetaan myös sanakirjan avulla. Yksittäistä menetelmän tai attribuutin kutsua voi seurata vaihtoehtoinen haku useista sanakirjoista [42] .
PyPy on Python-toteutus, joka on kirjoitettu RPythonilla (Pythonin osajoukko, jolla on paljon vähemmän dynaamisia ominaisuuksia). Voit helposti testata uusia ominaisuuksia. PyPy sisältää tavallisen CPythonin lisäksi Stacklessin, Psycon, AST - muokkauksen lennossa ja paljon muuta ominaisuuksia. Projekti integroi Python-koodin analysointimahdollisuudet ja käännökset muille kielille ja virtuaalikoneiden tavukoodeille ( C , LLVM , Javascript , .NET versiosta 0.9.9 alkaen). Alkaen versiosta 0.9.0, on mahdollista kääntää RPython täysin automaattisesti C:ksi, jolloin nopeus on hyväksyttävä (2-3 kertaa pienempi kuin CPython, jossa JIT ei ole käytössä versiossa 0.9.9). PyPyssä on oletusarvoisesti sisäänrakennettu JIT-kääntäjä, jolla se pystyy toimimaan paljon nopeammin kuin CPython.
Jython on Python-toteutus, joka kääntää Python - koodin Java-tavukoodiksi , jonka JVM voi suorittaa . Sitä voidaan käyttää myös sellaisen luokan tuomiseen, jonka lähdekoodi on kirjoitettu Java-kielellä Pythonin moduulina [168] .
On myös muita toteutuksia.
Pythonin pohjalta on luotu useita erikoistuneita kielen osajoukkoja, jotka on tarkoitettu pääasiassa staattiseen kääntämiseen konekoodiksi. Jotkut niistä on lueteltu alla.
Lispin ja Prologin tapaan Pythonia voidaan käyttää interaktiivisesti, jolloin näppäimistöltä kirjoitetut käskyt suoritetaan välittömästi ja tulos näkyy näytöllä ( REPL ). Tämä tila on kätevä sekä kielen oppimisen että ammatillisen kehittymisen aikana - yksittäisten koodinpätkien nopeaan testaamiseen - koska se antaa välitöntä palautetta. Sen avulla voit myös käyttää tulkkia laskimena , jossa on suuri joukko toimintoja.
Lähes kaikki Python IDE:t tukevat REPL -toimintoa nopeaa testausta varten.
Python-kehitykseen on olemassa useita erikoistuneita IDE :itä.
Lisäksi on olemassa laajennuksia, jotka tukevat Python-ohjelmointia yleisille IDE :ille Eclipse , KDevelop ja Microsoft Visual Studio sekä tuki syntaksin korostamiseen, koodin viimeistelyyn sekä virheenkorjaus- ja käynnistystyökaluihin useille yleisille tekstieditoreille.
Python on vakaa ja laajalle levinnyt kieli. Sitä käytetään monissa projekteissa ja eri ominaisuuksissa: pääohjelmointikielenä tai laajennusten luomiseen ja sovellusten integrointiin. Pythonissa on toteutettu suuri määrä projekteja, ja sitä käytetään aktiivisesti myös tulevien ohjelmien prototyyppien luomiseen.
Python on helppo kieli oppia, ja sitä opetetaan usein ensimmäisenä kielenä [27] , myös opetettaessa lapsille ohjelmointia [185] . Ensimmäiseksi kieleksi se sopii hyvin, koska sen ohjelmat ovat lähellä luonnollista kieltä, jolla ihmiset ovat tottuneet ajattelemaan, ja oikean ohjelman kirjoittamiseen tarvitaan vähimmäismäärä avainsanoja. Muissa kielissä, kuten C++ , on olemassa suuri määrä erilaisia syntakseja ja kielielementtejä, joihin sinun on kiinnitettävä huomiota algoritmien tutkimisen sijaan [134] .
Python-tulkkia käytetään avoimen lähdekoodin sovelluksena kaikkialla maailmassa ja se toimitetaan Linux-pohjaisten käyttöjärjestelmien ja Apple-tietokoneiden kanssa . Python on suosittu yksittäisten kehittäjien keskuudessa, mutta sitä käyttävät myös suuret yritykset melko vakavissa, voittoa tavoittelevissa tuotteissa [186] . Reddit [46] on kirjoitettu Pythonilla . Dropboxissa on myös vahva Pythonin käyttö, ja dynaamisen kirjoittamisen monimutkaisuuden ja valtavan koodimäärän vuoksi yritys on siirtynyt staattiseen kirjoittamiseen avoimen lähdekoodin projektissa Mypy [187] . Python on myös vahvasti käytössä Facebookissa [188 ] ja Instagram [189] . Monet yritykset käyttävät Pythonia laitteiston testaukseen, näitä yrityksiä ovat Intel , Cisco , Hewlett-Packard ja IBM . Industrial Light & Magic ja Pixar käyttävät sitä animaatioelokuvissaan [186] .
Google käyttää kieltä runsaasti hakukoneessaan, ja Youtube on kirjoitettu suurelta osin Pythonilla [186] [190] . Lisäksi Google on sponsoroinut Pythonin kehitystä vuodesta 2010 [191] [192] sekä Pythonin pääpakettien jakelujärjestelmän PyPI :n [191] [193] tukea .
Pythonin vahvuuksia ovat sen modulaarisuus ja kyky integroida muihin ohjelmointikieliin, myös osana monimutkaisia monimutkaisia sovelluksia ja järjestelmiä [194] . Yksinkertaisuuden ja tiiviyden yhdistelmä lukuisten ominaisuuksien kanssa tekee Pythonista kätevän skriptikielen . . Monet projektit tarjoavat Python API:n komentosarjoille, kuten Autodesk Maya [186] , Blender [195] ja Houdini [196] 3D-mallinnusympäristöt sekä ilmainen paikkatietojärjestelmä QGIS [197] . Jotkut projektit toteuttavat ydinosan tuottavammilla ohjelmointikielillä ja tarjoavat täysimittaisen sovellusliittymän Pythonissa työn yksinkertaistamiseksi. . Siten ilmaisen videoeditorin OpenShot -moottori on toteutettu libopenshot -kirjaston muodossa , joka on kirjoitettu C ++ -kielellä C-kirjastojen avulla, ja Python API kattaa kaikki mahdollisuudet [198] .[ tosiasian merkitys? ] . Yhdysvaltain kansallinen turvallisuusvirasto käyttää Pythonia tietojen analysointiin ja NASA käyttää sitä tieteellisiin tarkoituksiin [186] . NASAn työkaluista mainittakoon ilmainen graafinen verkkosimulaattori GNS3 , joka on osoittautunut myös yritysympäristössä ja jota käytetään teknologiayrityksissä esimerkiksi Intelillä [199] . Cura [200] [201] on myös kirjoitettu Pythonilla, ilmaisella ja suositulla ohjelmalla 3D-mallien leikkaamiseen 3D-tulostimilla tulostamista varten .
Pythonia NumPy- , SciPy- ja MatPlotLib-pakettien kanssa käytetään aktiivisesti yleiskäyttöisenä tieteellisenä laskentaympäristönä, joka korvaa yleiset erikoistuneet kaupalliset paketit, kuten Matlab , tarjoten samanlaisia toimintoja ja alhaisemman pääsykynnyksen [202] . Suurin osa graafisesta ohjelmasta Veusz on myös kirjoitettu Pythonilla.[203] , jonka avulla voit luoda korkealaatuista grafiikkaa, joka on valmis julkaistavaksi tieteellisissä julkaisuissa [204][ tosiasian merkitys? ] . Astropy -kirjasto on suosittu työkalu tähtitieteellisiin laskelmiin [205][ tosiasian merkitys? ] .
Python soveltuu myös epästandardien tai monimutkaisten tehtävien suorittamiseen projektinrakennusjärjestelmissä , mikä johtuu siitä, ettei lähdetiedostoja tarvitse esikääntää. Google Test -projekti käyttää sitä luomaan valelähdekoodia C++ -luokille [ 206][ tosiasian merkitys? ] .
Python-tulkkia voidaan käyttää tehokkaana komentotulkkina ja komentosarjakielinä käyttöjärjestelmän erätiedostojen kirjoittamiseen. Python-skriptien helppokäyttöisyys ulkoisiin ohjelmiin ja kirjastojen saatavuus, jotka antavat pääsyn järjestelmänhallintaan, tekevät Pythonista kätevän työkalun järjestelmän hallintaan [207] . Sitä käytetään laajasti tähän tarkoitukseen Linux-alustalla: Python tulee yleensä järjestelmän mukana, monissa jakeluissa asennusohjelmat ja järjestelmäapuohjelmien visuaalinen käyttöliittymä on kirjoitettu Pythonilla. Sitä käytetään myös muiden Unix-järjestelmien, erityisesti Solariksen ja macOS :n, hallinnassa [207] . Itse kielen ja kirjastojen monialustainen luonne tekee siitä houkuttelevan järjestelmänhallinnan tehtävien yhtenäiseen automatisointiin heterogeenisissä ympäristöissä, joissa käytetään yhdessä erityyppisillä käyttöjärjestelmillä varustettuja tietokoneita.
Yleiskäyttöisenä kielenä Python soveltuu lähes kaikille toiminnan aloille. Itse asiassa lähes kaikki hyvämaineiset yritykset käyttävät Pythonia tavalla tai toisella, sekä päivittäisiin tehtäviin että testaukseen, hallintaan tai ohjelmistokehitykseen [186] .
Python | |
---|---|
Yhteisö | |
Toteutukset | |
muu |
|
Ohjelmointikielet | |
---|---|
|
![]() | ||||
---|---|---|---|---|
Sanakirjat ja tietosanakirjat | ||||
|