Piton | |
---|---|
Nyelvóra | objektum-orientált programozási nyelv |
Megjelent | 1991. február 20. [17] |
Szerző | Guido van Rossum [1] |
Fejlesztő | Python Software Foundation és Guido van Rossum [1] |
Fájlkiterjesztés _ | .py, [18] , [19] , [20] , [21] , [22] vagy [23].pyc.pyd.pyo.pyw.pyz.pyi |
Kiadás |
|
Befolyásolva | ABC , [5] Ada , [6] Algol 68 , [7] APL , [8] C , [9] C++ , [10] Clu , [11] Dylan , [12] Haskell , [13] Ikon , [14 ] Java , [15] Lisp , [16] Modula-3 , [10] Perl , Standard ML [8] |
Engedély | Python Software Foundation licenc [1] |
Weboldal | python.org _ |
Felület | Microsoft Windows |
OS | többplatformos [24] |
Médiafájlok a Wikimedia Commons oldalon |
A Python ( IPA : [ˈpʌɪθ(ə)n] ; oroszul vannak nevek python [25] vagy python [26] ) egy magas szintű általános célú programozási nyelv dinamikus erős gépeléssel és automatikus memóriakezeléssel [27] [28 ] , a fejlesztői termelékenység, a kód és minőségének javítására, valamint a rá írt programok hordozhatóságának biztosítására összpontosított [29] . A nyelv teljesen objektumorientált abban az értelemben, hogy minden objektum [27] . A nyelv szokatlan jellemzője a kódblokkok szóközök behúzása [30] . A törzsnyelv szintaxisa minimalista, ami miatt a gyakorlatban ritkán van szükség a dokumentációra hivatkozni [29] . Magát a nyelvet értelmezettnek ismerik, és többek között szkriptek írására is használják [27] . A nyelv hátránya gyakran az alacsonyabb sebesség és a benne írt programok nagyobb memóriafogyasztása a hasonló, olyan lefordított nyelveken írt kódokhoz képest, mint a C vagy C++ [27] [29] .
A Python egy többparadigmájú programozási nyelv , amely támogatja az imperatív , procedurális , strukturált , objektumorientált programozást [27] , metaprogramozást [31] és funkcionális programozást [27] . Az általános programozási problémákat dinamikus tipizálással oldják meg [32] [33] . Az aspektusorientált programozás részben dekorátorokon keresztül támogatott [34] , teljesebb támogatást további keretrendszerek [35] biztosítanak . Az olyan technikák, mint a szerződéses és logikai programozás , megvalósíthatók könyvtárak vagy bővítmények segítségével [36] . A fő architektúra jellemzői a dinamikus gépelés , az automatikus memóriakezelés [27] , a teljes önvizsgálat , a kivételkezelési mechanizmus , a többszálú számítások támogatása globális értelmezőzárral ( GIL ) [37] , a magas szintű adatstruktúrák . A programok modulokra bontása támogatott , amelyek viszont csomagokká kombinálhatók [38] .
A Python referencia implementációja a CPython interpreter , amely támogatja a legszélesebb körben használt platformokat [39] és a de facto nyelvi szabvány [40] . Az ingyenes Python Software Foundation License alatt terjesztik , amely lehetővé teszi, hogy korlátozás nélkül használja bármilyen alkalmazásban, beleértve a védett [41] alkalmazást is . A CPython a forráskódot magas szintű bájtkódba fordítja , amely egy verem virtuális gépen fut [42] . A nyelv másik három fő implementációja a Jython (a JVM -hez ), az IronPython (a CLR / .NET -hez ) és a PyPy [27] [43] . A PyPy a Python nyelv (RPython) egy részhalmazában íródott, és a CPython alternatívájaként fejlesztették ki a programvégrehajtás sebességének növelésére, többek között a JIT fordítás használatával [43] . A Python 2 támogatása 2020-ban lejárt [44] . Jelenleg a Python 3 nyelv verziója aktív fejlesztés alatt áll [45] . A nyelvi fejlesztés PEP ( Python Enhancement Proposal ) nyelvbővítési javaslatokon keresztül történik , amelyek leírják az újításokat, a közösségi visszajelzések alapján korrekciókat hajtanak végre, és dokumentálják a végső döntéseket [46] .
A szabványos könyvtár számos hasznos hordozható funkciót tartalmaz, a szövegfeldolgozási képességektől a hálózati alkalmazások írására szolgáló eszközökig. A további funkciók, mint például a matematikai modellezés, a berendezésekkel való munkavégzés, a webalkalmazások írása vagy a játékok fejlesztése számos külső féltől származó könyvtáron, valamint a C vagy C++ nyelven írt könyvtárak integrációján keresztül valósíthatók meg, míg a Python maga a tolmács integrálható ezeken a nyelveken írt projektekbe [27] . A Python nyelven írt szoftverek számára is létezik egy speciális tárház , a PyPI [47] . Ez a tároló lehetőséget biztosít a csomagok egyszerű telepítésére az operációs rendszerbe, és a Python de facto szabványává vált [48] . 2019-ben több mint 175 000 csomagot tartalmazott [47] .
A Python az egyik legnépszerűbb nyelv lett, és használják az adatelemzésben , a gépi tanulásban , a DevOps -ban és a webfejlesztésben , többek között a játékfejlesztésben . Olvashatósága, egyszerű szintaxisa és a fordítás hiánya miatt a nyelv kiválóan alkalmas programozás tanítására, lehetővé téve az algoritmusok, fogalmak és paradigmák tanulására való összpontosítást. A hibakeresést és a kísérletezést nagyban megkönnyíti, hogy a nyelv értelmezhető [27] [49] . A nyelvet számos nagy cég használja, például a Google vagy a Facebook [27] . 2022 szeptemberétől a Python az első helyen áll a TIOBE programozási nyelvek népszerűségi rangsorában 15,74%-os pontszámmal [50] . A Pythont 2007-ben, 2010-ben, 2018-ban, 2020-ban és 2021-ben a TIOBE év nyelvének nyilvánították [51] .
A nyelv megvalósításának ötlete az 1980 -as évek végén jelent meg, megvalósításának fejlesztését 1989-ben Guido van Rossum , a holland CWI intézet munkatársa [46] kezdte el . Az Amoeba elosztott operációs rendszere bővíthető szkriptnyelvet igényelt , és Guido szabadidejében elkezdte fejleszteni a Pythont, a munka egy részét az ABC nyelvből kölcsönözve (Guido részt vett ennek a nyelvnek a programozás tanítására összpontosító fejlesztésében). 1991 februárjában Guido elküldte a forráskódot az alt.sources [52] hírcsoportba . A Python a kezdetektől fogva objektum-orientált nyelvként készült .
Guido van Rossum a nyelvet az 1970- es évek népszerű brit vígjátéka, a Monty Python's Flying Circus [ 53 ] után nevezte el a nyelvnek, mivel a szerző rajongója volt a műsornak, akárcsak sok más korabeli fejlesztő, és maga a műsor párhuzamot mutatott a világgal. a számítástechnika [29] .
A barátságos, érzékeny felhasználói közösség, valamint Guido tervezési intuíciója a Python sikerének egyik kulcsa. A nyelv fejlesztése a PEP ( Python Enhancement Proposal ) dokumentumok létrehozásának, megvitatásának, kiválasztásának és megvalósításának világosan szabályozott folyamata szerint történik - javaslatok a Python fejlesztésére [54] .
2008. december 3- án [55] kiterjedt tesztelés után megjelent a Python 3000 (vagy Python 3.0, más néven Py3k ) első verziója. A Python 3000 kijavítja az architektúra számos hiányosságát, miközben megőrzi a lehető legnagyobb (de nem teljes) kompatibilitást a Python régebbi verzióival.
A Python 2.7 támogatásának lejárati dátuma eredetileg 2015 volt, majd 2020-ra tolták ki, mert a meglévő kód nagy részét nem lehet könnyen átvinni Python 3-ra [56] [57] . A Python 2 támogatása csak a meglévő projektekre irányult, az új projektekhez Python 3 használatához volt szükség [45] . A Python 2.7 hivatalosan 2020. január 1-je óta nem támogatott, bár az utolsó frissítés 2020 áprilisában jelent meg. A Python 2.7-hez nem adnak ki több biztonsági javítást vagy egyéb fejlesztést [44] [58] . A Python 2.x élettartamának végével csak a Python 3.6.x és újabb verziók támogatottak [59] .
A nyelv dinamikus gépelést , referenciaszámlálást és körkörös szemétgyűjtőt használ a memóriakezeléshez [60] . Léteznek olyan dinamikus névfeloldások is ( dinamikus kötés ), amelyek összekapcsolják a metódusokat és a változóneveket a program végrehajtása során.
A Python a Lisp hagyományának megfelelően támogatja a funkcionális programozást . Tehát a Pythonban vannak függvények filter, mapés reduce; a listák , asszociatív tömbök (szótárak), halmazok és listagenerátorok [61] jellemzőinek fogalmait szintén a Lisp-től kölcsönözték . A szabványos könyvtár két modult tartalmaz (itertools és functools), amelyek a Haskelltől és a Standard ML -től kölcsönzött eszközöket valósítanak meg [62] .
A Python nyelv fejlesztői ragaszkodnak egy bizonyos programozási filozófiához, amelyet "The Zen of Python"-nak (" Python Zene" vagy "Python Zene") neveznek [63] . Szövegét a Python interpreterimport this adja ki parancsra (munkamenetenként egyszer működik). Tim Peterst tartják e filozófia szerzőjének .
A filozófia így kezdődik [64] :
….
Eredeti szöveg (angol)[ showelrejt]...
Ahelyett, hogy a nyelv összes funkcióját a Python magba építette volna, úgy tervezték, hogy könnyen bővíthető legyen. Emiatt a nyelv népszerű eszközzé tette a programozható interfészek hozzáadását a meglévő alkalmazásokhoz. Guido van Rossum víziója egy kis rendszermagról, nagy szabványkönyvtárral és könnyen bővíthető értelmezővel az ABC nyelv fejlesztésének negatív tapasztalataiból fakadt , amely az ellenkező megközelítést alkalmazta [65] .
A Python célja egy egyszerűbb, kevésbé nehézkes szintaxis és nyelvtan, így a fejlesztők választási lehetőséget biztosítanak a kódolási módszereikben. Perl mottójával szemben : „ több módja is van ennek ”, a Python filozófiája szerint „egy – és lehetőleg csak egy – nyilvánvaló mód kell, hogy ezt megtegye” [66] . Alex Martelli , a Python Software Foundation tagja és a Pythonról szóló könyvek szerzője azt írja, hogy „A Python-kultúrában nem tekintik dicséretnek, ha valamit „okosnak” nevezünk” [67] .
A Python-fejlesztők hajlamosak elkerülni az idő előtti optimalizálást, és elutasítják a CPython referencia-implementáció nem kritikus részeinek javításait , amelyek kismértékű sebességnövekedést kínálnának a kód tisztaságának rovására [68] . Vannak azonban módok a teljesítmény javítására. Ha a programnak vannak szűk keresztmetszetek, amelyek a központi processzor erőforrásigényes műveleteihez kapcsolódnak, de nem kapcsolódnak az I / O műveletek használatához, akkor lehetséges a teljesítmény javítása a program Cython használatával C nyelvre történő lefordításával, majd ezt követően. összeállítás [69] . A program számítási erőforrásokat igénylő részei szintén átírhatók C nyelvre, és külön könyvtárakként kapcsolhatók össze Python-hoz kötésekkel [43] .
A Python fejlesztők fontos célja, hogy szórakoztatóvá tegyék a használatát. Ez tükröződött a nyelv nevében, amelyet a Monty Python tiszteletére adtak [53] . Ezt tükrözi az oktatóanyagok és referenciaanyagok olykor játékos megközelítése is, mint például a dokumentációban szereplő példaprogramok, amelyek a spam és tojás neveket használják a sok más nyelv dokumentációjában használt nevek helyett foo and bar [70 ] [71] .
A Python szinte minden ismert platformon át van portolva , a PDA -któl a mainframe -ekig . Vannak portok a Microsoft Windowshoz , a UNIX szinte minden változatához (beleértve a FreeBSD -t és a Linuxot is ), Android [72] , Plan 9 , Mac OS és macOS , iPhone OS (iOS) 2.0 és újabb, iPadOS , Palm OS , OS/2 , Amiga , HaikuOS , AS/400 , OS/390 , Windows Mobile és Symbian .
Ahogy a platform elavulttá válik, támogatása a nyelv fő ágában leáll. Például a Windows 95 , Windows 98 és Windows ME [73] támogatása megszűnt a 2.6-os verzió óta . A Windows XP 3.5-ös verziója már nem támogatott [74] A Windows Vista és a Windows 7 a 3.9-es verzióban már nem támogatott [75] .
Ugyanakkor, sok hordozható rendszertől eltérően, a Python minden nagyobb platformon támogatja az erre a platformra jellemző technológiákat (például Microsoft COM / DCOM ). Sőt, a Pythonnak van egy speciális verziója a Java Virtual Machine számára - Jython , amely lehetővé teszi, hogy az interpreter bármilyen Java -t támogató rendszeren futhasson , míg a Java osztályok közvetlenül a Pythonból használhatók, sőt Pythonban is megírhatók. Számos projekt integrálja a Microsoft.NET platformot is, ezek közül a legfontosabbak az IronPython és a Python.Net .
A Python támogatja a dinamikus gépelést , vagyis a változó típusát csak futás közben határozzák meg. Tehát ahelyett, hogy „értéket rendelnénk egy változóhoz”, jobb, ha „érték társításáról valamilyen névhez” beszélünk. A Python primitív típusai közé tartozik a logikai , tetszőleges pontosságú egész szám , lebegőpontos és összetett . A Python beépített tárolótípusai a string , list , tuple , dictionary és set [49] . Minden érték objektum, beleértve a függvényeket, metódusokat, modulokat, osztályokat.
Új típust hozzáadhat egy osztály (osztály) írásával vagy egy új típus meghatározásával egy bővítőmodulban (például C-ben írva). Az osztályrendszer támogatja az öröklődést (egyszeres és többszörös ) és a metaprogramozást . A legtöbb beépített és bővítmény típusból örökölhető.
A Pythonban használt típusokTípusú | Változtathatóság | Leírás | Példák |
---|---|---|---|
bool | változhatatlan | logikai típusú | True False |
bytearray | változékony | Byte tömb | bytearray(b'Some ASCII') bytearray(b"Some ASCII") bytearray([119, 105, 107, 105]) |
bytes | változhatatlan | Byte tömb | b'Some ASCII' b"Some ASCII" bytes([119, 105, 107, 105]) |
complex | változhatatlan | Összetett szám | 3+2.7j |
dict | változékony | A szótár ( asszociatív tömb ) kulcs-érték párok gyűjteménye; az érték bármilyen típusú lehet, a kulcsnak hashable típusúnak kell lennie | {'key1': 1.0, 3: False} {} |
ellipsis[K 1] | változhatatlan | Ellipszis (ellipszis). Elsősorban a NumPy -ben használják, hogy rövidítést biztosítson egy többdimenziós tömb szeleteléséhez. Magában a Pythonban is jelen van, hogy támogassa az egyéni típusokat és kiterjesztéseket, például a NumPy-t [76] | ... Ellipsis NumPy esetén : ami egyenértékű a [76] -kal x[i, ..., j] x[i, :, :, j] |
float | változhatatlan | Lebegőpontos szám . A pontosság mértéke platformtól függ, de a gyakorlatban általában 64 bites 53 bites számként valósítják meg [77] |
1.414 |
frozenset | változhatatlan | Rendetlen halmaz , nem tartalmaz másolatokat; belül különféle hashálható adattípusokat tartalmazhat | frozenset([4.0, 'string', True]) |
int | változhatatlan | Korlátlan egész szám [78] | 42 |
list | változékony | Lista , különböző típusú adatokat tartalmazhat | [4.0, 'string', True] [] |
NoneType[K 1] | változhatatlan | Érték hiányát jelképező objektum, amelyet más nyelveken Null -nek is neveznek . | None |
NotImplementedType[K 1] | változhatatlan | Az operátorok túlterhelésekor visszaadott objektum, amikor az operandustípusok nem támogatottak. | NotImplemented |
range | változhatatlan | Egész számok sorozata egyik értéktől a másikig, amelyet általában egy művelet többszöri megismétlésére használnak [79] esetén | range(1, 10) range(10, -5, -2) |
set | változékony | Rendetlen halmaz , nem tartalmaz másolatokat; belül különféle hashálható adattípusokat tartalmazhat | {4.0, 'string', True} set() |
str | változhatatlan | húrtípus | 'Wikipedia' "Wikipedia" """ Több sort átívelő""" |
tuple | változhatatlan | Tuple . Különféle típusú adatokat tartalmazhat magában. Használható megváltoztathatatlan listaként és névtelen mezőket tartalmazó rekordokként [80] | Megváltozhatatlan listaként: Bejegyzésként: [80] (4.0, 'string', True) ('single element',) () lax_coordinates = (33.9425, -118.408056) city, year, pop, chg, area = ('Tokyo', 2003, 32450, 0.66, 8014) |
A nyelv világos és konzisztens szintaxissal, átgondolt modularitású és méretezhető , így a Pythonban írt programok forráskódja könnyen olvasható. Amikor argumentumokat ad át a függvényeknek, a Python hívásonkénti megosztást használ [ 81 ] .
Az operátorkészlet meglehetősen hagyományos.
A nyelv egyik érdekes szintaktikai sajátossága a kódblokkok (szóközök vagy tabulátorok) behúzása , így a Pythonnak nincsenek kezdő/vége zárójelei , mint a Pascalban , vagy kapcsos zárójelek, mint a C -ben. Egy ilyen "trükk" lehetővé teszi a sorok és karakterek számának csökkentését a programban, és megtanítja a "jó" programozási stílusra. Másrészt a program viselkedése, sőt helyessége is múlhat a szöveg kezdeti szóközeitől. Azok számára, akik hozzászoktak a programozáshoz olyan nyelveken, amelyekben a blokkok elejét és végét egyértelműen kiválasztják, ez a viselkedés elsőre intuitívnak és kényelmetlennek tűnhet.
Guido maga írta [82] :
A Python talán legvitatottabb tulajdonsága a behúzás használata a csoportos utasításokhoz, amely közvetlenül az ABC -ből származik . Ez az egyik olyan tulajdonsága a nyelvnek, amely kedves a szívemnek. Ez kétféleképpen teszi olvashatóbbá a Python-kódot. Először is, a behúzás csökkenti a vizuális zűrzavart, és rövidebbé teszi a programokat, ezáltal csökkenti a kód alapegységének megértéséhez szükséges figyelmet. Másodszor, kevesebb szabadságot ad a programozónak a formázás során, ezáltal konzisztensebb stílust tesz lehetővé, amely megkönnyíti mások kódjának olvasását. (Hasonlítsa össze például három vagy négy különböző C kapcsos zárójelet , amelyek mindegyike erős támogatókkal rendelkezik.)
Eredeti szöveg (angol)[ showelrejt] A Python talán legvitatottabb tulajdonsága az, hogy a behúzást használja az utasítások csoportosítására, amely közvetlenül az ABC-ből származik. A nyelvnek ez az egyik legkedvesebb sajátossága a szívemnek. Kétféleképpen teszi olvashatóbbá a Python kódot. Először is, a behúzás csökkenti a vizuális zűrzavart, és lerövidíti a programokat, ezáltal csökkenti az alapvető kódegység befogadásához szükséges figyelemidőt. Másodszor, kevesebb szabadságot ad a programozónak a formázás során, ezáltal egységesebb stílust tesz lehetővé, ami megkönnyíti valaki más kódjának olvasását. (Hasonlítsa össze például a három vagy négy különböző konvenciót a fogszabályozók C nyelvben való elhelyezésére vonatkozóan, mindegyik erős támogatóval.)Az összetétel, a szintaxis, az asszociativitás és a műveletek elsőbbsége meglehetősen ismerős a programozási nyelveknek, és úgy tervezték, hogy minimalizálja a zárójelek használatát. A matematikával összehasonlítva az operátor elsőbbsége tükrözi a matematikában tapasztalhatóat, és az érték hozzárendelési operátor =megfelel a tipográfiai operátornak ←. Míg az operátor elsőbbsége sok esetben elkerüli a zárójelek használatát, a nagy kifejezések elemzése időigényes lehet, így az explicit zárójelek ilyen esetekben előnyösebbek [45] .
Külön érdemes megemlíteni a karakterláncok formázási műveletét (a C függvényhez hasonlóan működik printf()), amely ugyanazt a szimbólumot használja, mint az osztás többi részét:
>>> str_var = "world" >>> print ( "Hello, %s " % str_var ) Hello , worldA 3.6-os verzióban formázott karakterlánc-literálokat vagy f-stringeket adtunk hozzá , hogy a kód olvashatóbbá és tömörebbé váljon:
>>> str_var = "world" >>> print ( f "Hello, { str_var } " ) # kimenet f-string használatával Hello , worldA Pythonnak praktikus láncolt összehasonlításai vannak . Az ilyen feltételek a programokban nem ritkák:
1 <= a < 10 és 1 <= b < 20Ezenkívül a logikai műveletek ( orés and) lusták : ha az első operandus elegendő a művelet értékének kiértékeléséhez, akkor ez az operandus az eredmény, ellenkező esetben a logikai művelet második operandusa kerül kiértékelésre. Ez a logikai algebra tulajdonságain alapul : például ha az "VAGY" ( or) művelet egyik argumentuma igaz, akkor ennek a műveletnek az eredménye mindig igaz. Ha a második operandus összetett kifejezés, ez csökkenti a számítási költséget. Ezt a tényt a 2.5-ös verzióig széles körben használták a feltételes konstrukció helyett:
a < b és "kisebb, mint" vagy "nagyobb vagy egyenlő"A beépített adattípusok általában speciális szintaxissal rendelkeznek a literálokhoz (a forráskódban írt feltételek):
"karakterlánc és Unicode karakterlánc egyszerre" "karakterlánc és Unicode karakterlánc egyszerre" """karakterlánc és Unicode karakterlánc is egyidejűleg""" Igaz vagy hamis # logikai literálok 3.14 # lebegőpontos szám 0b1010 + 0o12 + 0xA # számok bináris , oktális és hexadecimális formában 1 + 2 j # komplex szám [ 1 , 2 , "a" ] # lista ( 1 , 2 , "a" ) # tuple { 'a' : 1 , 'b' : ' B' } # szótár { 'a' , 6 , 8.8 } # set lambda x : x ** 2 # anonymous function ( i for i in range ( 10 )) # generátorListákhoz (és egyéb szekvenciákhoz) a Python szeletelési műveleteket kínál. Egy funkció az indexelés, ami furcsának tűnhet egy kezdő számára, de használat közben felfedi konzisztenciáját. A listaelem indexei nullával kezdődnek. Egy szelet rögzítése s[N:M]azt jelenti, hogy N-től M-ig minden elem, de nem szerepel, beleesik a szeletbe. Ebben az esetben az index elhagyható. Például a rekord s[:M]azt jelenti, hogy a kezdetektől fogva minden elem beleesik a szeletbe; a jelölés s[N:]azt jelenti, hogy minden elem szerepel a szelet végéig; rekord s[:]azt jelenti, hogy az elejétől a végéig minden elem benne van.
A név (azonosító) kezdődhet bármely Unicode ábécé betűjével , bármilyen kisbetűvel vagy aláhúzással, amely után számok is használhatók a névben. A kulcsszavakat nem használhatja névként (a listát a következővel találhatja meg import keyword; print(keyword.kwlist)), és nem kívánatos a beépített nevek újradefiniálása. Az aláhúzással kezdődő nevek különleges jelentéssel bírnak [83] .
A program minden pontján az értelmező három névtérhez (vagyis név-objektum leképezésekhez) fér hozzá: helyi, globális és beépített.
A névtartományok egymásba ágyazhatók (a környező kódblokk nevei a definiált függvényen belül láthatók). A gyakorlatban számos jó modor kapcsolódik a hatókörhöz és névkötésekhez, amelyekről bővebben a dokumentációban tájékozódhat.
A Python egy mechanizmust kínál a pydoc kód dokumentálására . Minden modul, osztály, függvény elejére beszúrunk egy dokumentációs karakterláncot - docstring . A dokumentációs karakterláncok futás közben a kódban maradnak, a dokumentációs hozzáférés [84] (változó __doc__) pedig beépül a nyelvbe, ahogyan azt a modern IDE-k ( Integrated Development Environment ) (pl. Eclipse ) használják.
Interaktívan kérhet segítséget, létrehozhat hiperszöveges dokumentációt egy teljes modulhoz, vagy akár a segítségével is automatikusan tesztelhet egy
A Python egy többparadigmájú programozási nyelv . Az objektum-orientált , strukturális [85] , általános , funkcionális programozás [27] és metaprogramozás [31] teljes mértékben támogatott . Az aspektusorientált programozás alapvető támogatását a metaprogramozás biztosítja [34] . Sok más technika, beleértve a szerződést [86] [87] és a logikai programozást [88] , megvalósítható kiterjesztések segítségével.
A Python nyelv tervezése egy objektumorientált programozási modell köré épül. Az OOP Pythonban való megvalósítása jól átgondolt, ugyanakkor meglehetősen specifikus a többi objektum-orientált nyelvhez képest . Egy nyelvben minden objektum, akár egy osztály példánya, akár egy metaosztály példánya. A kivétel az alap beépített metaosztály type. Tehát az osztályok valójában metaosztályok példányai, a származtatott metaosztályok pedig egy metaosztály példányai type. A metaosztályok a metaprogramozás fogalmának részét képezik, és lehetőséget adnak az osztályöröklődés szabályozására, ami lehetővé teszi absztrakt osztályok létrehozását, osztályok regisztrálását, vagy bármilyen programozási felület hozzáadását egy könyvtáron vagy keretrendszeren belül [31] .
Az osztályok lényegében egy objektum létrehozásának tervét vagy leírását jelentik, és tárolják az objektum attribútumainak leírását és a vele való munkavégzés módszereit. Az OOP paradigma a beágyazáson , az öröklődésen és a polimorfizmuson alapul [89] . A Pythonban a beágyazást az a képesség jelenti, hogy nyilvános és rejtett attribútumokat (mezőket) tárolhatunk egy objektumban a velük való munkavégzésre szolgáló módszerek biztosításával [89] , miközben valójában minden attribútum nyilvános, de van elnevezési konvenció a rejtett jelölésre attribútumok [90] . Az öröklődés lehetővé teszi származtatott objektumok létrehozását anélkül, hogy át kellene írnia a kódot, a polimorfizmus pedig az objektum bármely metódusának felülbírálása (Pythonban minden metódus virtuális [90] ), valamint a metódusok és operátorok túlterhelése . A metódusok túlterhelése a Pythonban azért valósul meg, mert lehetséges, hogy ugyanazt a metódust eltérő argumentumkészlettel hívják meg [89] . A Python sajátossága, hogy deklarálásuk után módosíthatjuk az osztályokat, új attribútumokat és metódusokat adunk hozzájuk [45] , módosíthatjuk magukat az objektumokat is, aminek eredményeként az osztályok struktúrákként használhatók tetszőleges adatok tárolására [ 90] .
A Python támogatja a többszörös öröklődést. A többszörös öröklődés önmagában is bonyolult, és megvalósításai problémákba ütköznek a szülőosztályok közötti névütközések megoldása során, és esetleg újraörökléssel ugyanabból az osztályból egy hierarchiában. A Pythonban a metódusokat a C3 linearizációs algoritmuson alapuló metódusfelbontási sorrend (MRO) szerint hívják [91] , normál esetben programíráskor nem kell ismerni ennek az algoritmusnak a működését, míg a megértése nem triviális osztályhierarchiák létrehozásakor szükséges [92] .
A Python jellemzői és jellemzői:
A dinamikus gépelést és az objektum-orientált programozást támogató nyelveket általában nem veszik figyelembe az általános programozás keretében, mivel az adattípusokra vonatkozó korlátozások hiánya miatt az általános programozási problémák megoldódnak [32] [33] . A Pythonban az erősen tipizált általános programozást úgy érik el, hogy nyelvi jellemzőket használnak külső kódelemzőkkel [93] , például a Mypy-vel [94] .
Bár a Python eredetileg nem funkcionális programozási nyelvként készült [95] , a Python támogatja a funkcionális programozás stílusában történő programozást, különösen [96] :
Azonban a legtöbb közvetlenül a funkcionális programozásra összpontosító nyelvtől eltérően a Python nem egy tiszta programozási nyelv , és a kód nem mentes a mellékhatásoktól [96] [97] .
A Python szabványkönyvtárában is vannak speciális csomagok a operatorfunkcionális functoolsprogramozáshoz [95] .
A Python támogatja a metaprogramozást [98] [31] .
A Python szoftverek (alkalmazás vagy könyvtár) modulokba vannak csomagolva, amelyek viszont becsomagolhatók . A modulok könyvtárakban és ZIP archívumokban egyaránt megtalálhatók . A modulok eredetüket tekintve kétfélék lehetnek: "tiszta" Python nyelven írt modulok és más programozási nyelveken írt bővítőmodulok (kiterjesztési modulok). Például a szabványos könyvtárnak van egy „tiszta” pác modulja és ennek C megfelelője: cPickle. A modul külön fájlként, a csomag pedig külön könyvtárként készül. A modult a kezelő csatlakoztatja a programhoz import. Az importálás után a modult egy külön objektum képviseli, amely hozzáférést biztosít a modul névteréhez. A program végrehajtása során a modul újratölthető a funkcióval reload().
A Python támogatja a teljes futásidejű önvizsgálatot [99] . Ez azt jelenti, hogy bármely objektum esetében minden információt megkaphat a belső szerkezetéről.
Az introspekció használata fontos része az úgynevezett pythonic stílusnak , és széles körben használják Python könyvtárakban és keretrendszerekben , mint például a PyRO , PLY, Cherry, Django és mások, ami jelentősen megtakarítja a programozó idejét.
Az önvizsgálathoz szükséges adatokat speciális attribútumokban tároljuk. Így például a legtöbb objektum összes felhasználó által definiált attribútuma lekérhető egy speciális attribútumból - egy szótárból (vagy egy másik, felületet biztosító objektumból dict).__dict__
>>> osztály x ( objektum ): pass .... >>> f = x () >>> f . attr = 12 >>> print ( f . __dict__ ) { 'attr' : 12 } >>> print ( x . __dict__ ) # mert osztályok is a # objektumtípus példányai, így támogatják ezt a típusú introspekciót { '__dict__' : < attribútum '__dict__' of 'x' objects > , '__module__' .......Vannak más attribútumok is, amelyek neve és célja az objektumtól függ:
>>> def f (): pass .... >>> f . func_code . co_code # get függvény bytecode 'd \x00\x00 S' >>> f . __class__ # speciális attribútum - hivatkozás az adott objektum osztályára < type 'function' >Az introspekciót támogató attribútumok túlnyomó többsége osztályalapú, és ezek pedig a -ból lekérhetők obj.__class__.__dict__. Az alaposztálytól örökölt információk egy részét minden objektum megosztja, ami memóriát takarít meg.
Az introspektív információk megszerzésének kényelme érdekében a Python rendelkezik egy inspect[100] modullal .
>>> def f ( x , y = 10 , ** mp ): átmegy ... >>> vizsgálja meg . getargspec ( f ) ([ 'x' , 'y' ], nincs , 'mp' , ( 10 ,))A modul segítségével a newfordított folyamat lehetséges - a végrehajtási szakaszban egy objektum felépítése annak összetevőiből
>>> def f ( i ): return j + i .... >>> j = 2 >>> f ( 1 ) 3 >>> új importálás >>> g = új . function ( f . func_code , { 'j' : 23 }) >>> g ( 1 ) 24A kivételkezelést a Python támogatja try, except, else, finally, raisea kivételkezelési blokkot alkotó utasításokon keresztül. Általában a blokk így néz ki:
try : # Itt van egy kód, amely kivételt tud dobni Kivétel ( " üzenet" ) # Kivétel, ez az egyik szabványos kivételtípus (csak egy osztály), # bármely más használható, beleértve a sajátját is, kivéve ( Exception type1 , Kivételtípus2 , … ) mint Változó : # A blokkban lévő kód akkor kerül végrehajtásra, ha a kivételtípus megfelel a # típusok valamelyikének ( ExceptionType1, ExceptionType2, ...) vagy e típusok egyikének leszármazottja . # Az eredményül kapott kivétel egy opcionális változóban érhető el. kivéve ( Kivétel típusa3 , Kivétel típusa4 , … ) mint Változó : # A kivétel blokkok száma korlátlan emelés # Dobj kivételt a fogadott "tetejére" ; nincs paraméter - újradobás érkezett , kivéve : # Minden olyan kivételre végrehajtódik, amelyet nem kezelnek a beírt blokkok, kivéve mást : # A blokkkód végrehajtásra kerül, ha nem történt kivétel. végül : # Mindenképpen végrehajtásra kerül, esetleg egy egyező # után, kivéve vagy más blokkA megosztás else, exceptcsak finallya Python 2.5 óta lehetséges. Az aktuális kivétellel kapcsolatos információk mindig elérhetők a következőn keresztül sys.exc_info(). A kivétel értékén kívül a Python a verem állapotát is elmenti egészen addig a pontig, amikor a kivétel megjelenik - az úgynevezett nyomkövetés.
A lefordított programozási nyelvekkel ellentétben a Pythonban a kivétel használata nem vezet jelentős többletköltséghez (sőt gyakran még a programok végrehajtását is felgyorsítja), és nagyon széles körben használják. A kivételek összhangban vannak a Python filozófiájával (a " Zen of Python " 10. pontja - "A hibákat soha nem szabad elhallgattatni"), és a " kacsa gépelés " támogatásának egyik eszköze.
Néha kényelmesebb egy blokkot használni az explicit kivételkezelés helyett with(a Python 2.5 óta elérhető).
Az iterátorokat széles körben használják a Python programokban. A ciklus forszekvenciával és iterátorral is működhet. A legtöbb gyűjtemény iterátort biztosít, az iterátorokat a felhasználó saját objektumain is meghatározhatja. A itertoolsszabványos könyvtári modul tartalmaz lehetőségeket az iterátorokkal való munkavégzéshez.
A nyelv egyik érdekes tulajdonsága a generátorok - a belső állapotot mentő függvények: a helyi változók értékei és az aktuális utasítás (lásd még: korutinok ). A generátorok használhatók iterátorként adatstruktúrákhoz és lusta kiértékeléshez .
Generátor meghívásakor a függvény azonnal egy iterátor objektumot ad vissza, amely tárolja az aktuális végrehajtási pontot és a függvény helyi változóinak állapotát. Amikor a következő értéket kérik ( next()a ciklusban implicit módon meghívott metóduson keresztül for), a generátor az előző törésponttól a következőre yieldvagy utasításra folytatja a függvényt return.
A Python 2.4 generátor kifejezéseket vezetett be , olyan kifejezéseket, amelyek generátort eredményeznek. A generátorkifejezések lehetővé teszik, hogy memóriát takarítson meg ott, ahol egyébként köztes eredményeket tartalmazó listát kellene használnia:
>>> összeg ( i i tartományban ( 1 , 100 ) if i % 2 ! = 0 ) 2500 _Ez a példa összeadja az összes páratlan számot 1-től 99-ig.
A 2.5-ös verziótól kezdve a Python támogatja a teljes értékű társeljárásokat: mostantól értékeket adhat át egy generátornak egy metódus segítségével, send()és a környezetében kivételeket hozhat létre a throw().
A Python támogatja a beágyazott generátorokat is. Például egy kétdimenziós tömb létrehozásához el kell helyeznie egy listagenerátort, amely egy karakterlánc az összes karakterlánc generátorában:[[0 for j in range(m)] for i in range(n)]
A Python 2.5 eszközöket vezetett be egy kódblokk – az utasítás withés a modul – végrehajtási környezetének kezelésére contextlib. Lásd: példa .
Az operátor olyan esetekben használható, amikor bizonyos műveletek előtt és után más műveleteket kell végrehajtani, függetlenül a blokkba dobott kivételektől vagy utasításoktól return: a fájlokat be kell zárni, az erőforrásokat fel kell szabadítani, a szabványos bemeneti kimenet átirányítása véget ért stb. Az operátor javítja a kód olvashatóságát, ami azt jelenti, hogy segít megelőzni a hibákat.
A függvénydekorátorok olyan hívható objektumok, amelyek egy másik funkciót vesznek fel argumentumként. A függvénydekorátorok műveleteket hajthatnak végre egy függvényen, és visszaadhatják magát a függvényt vagy egy másik, azt helyettesítő függvényt, vagy egy hívható objektumot. Vagyis, ha korábban egy díszítő nevű dekorátor szerepelt a kódban, akkor a következő kód [101] :
@decorate def target (): print ( 'futó cél()' )egyenértékű ezzel [101] :
def target (): print ( 'futó cél()' ) target = díszít ( target )Példa a funkciódekorátor [101] használatára :
>>> def deco ( func ): ... def inner (): ... print ( 'running inner()' ) ... return inner … >>> @deco ... def target (): .. .print ( 'running target()' ) >>> target () running inner() >>> target <function deco.<locals> .inner at 0.10063b598>Vannak osztálydekorátorok [102] .
A reguláris kifejezés formátumát a Perl örökölte néhány eltéréssel. Használatukhoz importálni kell a re[103] modult , amely a szabványos könyvtár része.
A gazdag szabványos könyvtár a Python egyik vonzereje. Számos hálózati protokollal és internetes formátummal használható eszközök, például modulok HTTP-kiszolgálók és kliensek írásához, e-mail üzenetek elemzéséhez és létrehozásához, XML -lel való munkavégzéshez stb. Az operációs rendszerrel való munkavégzéshez szükséges modulok segítségével többplatformos alkalmazások írásához. Vannak modulok a reguláris kifejezésekkel , szövegkódolással , multimédiás formátumokkal, kriptográfiai protokollokkal , archívumokkal, adatsorosozással , egységteszt támogatásával stb.
A szabványos könyvtár mellett számos olyan könyvtár létezik, amelyek interfészt biztosítanak az összes rendszerhíváshoz különböző platformokon; különösen a Win32 platformon az összes Win32 API -hívás támogatott , valamint a COM -hívások legalább olyan mértékben, mint a Visual Basic vagy a Delphi . A Python alkalmazáskönyvtárainak száma a különböző területeken szó szerint hatalmas ( web , adatbázisok , képfeldolgozás, szövegfeldolgozás, numerikus módszerek , operációs rendszer -alkalmazások stb.).
A Python esetében a DB-API 2 adatbázis-programozási interfész specifikációt fogadták el , és ennek a specifikációnak megfelelő csomagokat fejlesztettek ki a különböző DBMS -ek eléréséhez : Oracle , MySQL , PostgreSQL , Sybase , Firebird ( Interbase ), Informix , Microsoft SQL Server és SQLite . A Windows platformon az adatbázishoz való hozzáférés az ADO -n ( ADOdb ) keresztül lehetséges. A kereskedelmi mxODBC csomagot a DBMS ODBC -n keresztüli eléréséhez Windows és UNIX platformokhoz az eGenix fejlesztette ki [105] . Sok ORM -et írtak Pythonra ( SQLObject , SQLAlchemy , Dejavu, Django ), webes alkalmazások fejlesztésére szolgáló szoftveres keretrendszereket implementáltak ( Django , Pylons , Pyramid ).
A többdimenziós tömbökkel való munkavégzésre szolgáló NumPy könyvtár néha olyan tudományos teljesítményt érhet el, amely összehasonlítható a speciális csomagokkal. A SciPy a NumPy -t használja, és matematikai algoritmusok széles skálájához biztosít hozzáférést (mátrixalgebra - BLAS 1-3 szint, LAPACK , FFT ...). A Numarray [106] kifejezetten nagy mennyiségű tudományos adattal végzett műveletekhez készült.
A WSGI [107] egy átjáró felület webszerverrel (Python Web Server Gateway Interface).
A Python egy egyszerű és kényelmes C API -t biztosít saját moduljainak C és C++ nyelven történő írásához . Egy olyan eszköz, mint a SWIG , lehetővé teszi szinte automatikusan kötések beszerzését a C / C ++ könyvtárak Python kódban való használatához. Ennek és más eszközöknek a képességei a speciális fájlokból (SWIG, pyste [108] , SIP [109] , pyfort [110] ) automatikus (C/C++/Fortran)-Python interfészek generálásától a kényelmesebb API-k biztosításáig (boost) terjednek. :: python [111] [112] , CXX [113] , Pyhrol [114] stb.). A ctypes szabványos könyvtári eszköz lehetővé teszi a Python programok számára, hogy közvetlenül hozzáférjenek a C nyelven írt dinamikus könyvtárakhoz / DLL -ekhez. Vannak olyan modulok, amelyek lehetővé teszik, hogy a C/C++ kódot közvetlenül Python forrásfájlokba ágyazzuk be, menet közbeni kiterjesztések létrehozásával (pyinline [115] , weave [116] ).
Egy másik megközelítés a Python értelmező beágyazása az alkalmazásokba. A Python könnyen integrálható Java, C/C++, OCaml programokba . A Python alkalmazások kölcsönhatása más rendszerekkel is lehetséges a CORBA , XML-RPC , SOAP , COM használatával.
A Cython projekt segítségével lehetőség nyílik a Python és Pyrex nyelven írt programok C kódra fordítására, majd az ezt követő gépi kódba fordításra. A Cython-t a Python-könyvtárak írásának egyszerűsítésére használják, használatakor megjegyzendő, hogy a kód gyorsabb, és csökken a többletköltség.
Shedskin kísérleti projektje egy olyan fordító létrehozását foglalja magában, amely az implicit módon beírt Python programokat optimalizált C++ kódokká alakítja. A 0.22-es verzió óta a Shedskin lehetővé teszi, hogy az egyes funkciókat bővítőmodulokba fordítsa.
A Python és könyvtárainak túlnyomó többsége ingyenes, és forráskódban érkezik. Ezen túlmenően, sok nyílt rendszertől eltérően, a licenc semmilyen módon nem korlátozza a Python használatát a kereskedelmi fejlesztésben, és nem ír elő semmilyen kötelezettséget a szerzői jog megjelölésén kívül.
A Python csomagjainak terjesztésének és frissítésének egyik csatornája a PyPI ( Python Package Index ) .
A Python egy Tcl / Tk - alapú tkinter -könyvtárral érkezik a többplatformos GUI -programok létrehozásához .
Vannak olyan bővítmények, amelyek lehetővé teszik az összes fő grafikus felhasználói felület-könyvtár használatát - wxPython [117] , a wxWidgets könyvtáron alapuló , PyGObject for GTK [118] , PyQt és PySide for Qt és mások. Némelyikük kiterjedt adatbázis-, grafikai és hálózati képességeket is kínál, teljes mértékben kihasználva az alapul szolgáló könyvtárat.
Nem szabványos felületet igénylő játékok és alkalmazások létrehozásához használhatja a Pygame könyvtárat . Kiterjedt multimédiás eszközöket is biztosít : segítségével hangot és képeket vezérelhet, videókat játszhat le. A pygame által biztosított OpenGL grafikus hardveres gyorsítás magasabb szintű felülettel rendelkezik, mint a PyOpenGL [119] , amely az OpenGL C könyvtár szemantikáját másolja. Létezik még a PyOgre [120] , amely hivatkozást biztosít az Ogre -hoz , egy magas szintű objektum-orientált 3D grafikus könyvtárhoz. Ezen kívül létezik egy pythonOCC könyvtár [121] , amely hivatkozást biztosít az OpenCascade 3D modellező és szimulációs környezetéhez [122] .
A rasztergrafikák használatához a Python Imaging Library szolgál .
A PyCairo vektoros grafikával dolgozik .
Vannak olyan modulok, amelyek lehetővé teszik a függvényparaméterek típusainak futás közbeni vezérlését, például típusellenőrzés [123] vagy metódus aláírás-ellenőrző dekorátorok [124] . A Python 3-ban bekerült egy opcionális típusdeklaráció a függvényparaméterekhez, az értelmező nem ellenőrzi a típusokat, hanem csak a megfelelő információkat adja hozzá a függvény metaadataihoz, hogy a bővítőmodulok később felhasználhassák ezeket az információkat [125] .
A funkciók túlterhelését különféle külső könyvtárak valósítják meg, köztük a PEAK [126] [127] . Azok a tervek, amelyeket nem fogadtak el a Python3000 [128] túlterhelési támogatására, részben implementálták az overloading-lib-ben [129] .
A Wikiversity " Python program példái " című cikk példákat tartalmaz kisméretű programokra, amelyek bemutatják a Python nyelv és annak szabványos könyvtárának néhány jellemzőjét.
Hello Világ! ' egy sorba írható:
print ( "Hello World!" )A 10 (10!) szám faktoriálisának kiszámítása :
def faktoriális ( n ): ha n < 0 : növeli az ArithmeticError -t ( 'Negatív szám faktoriálisa.' ) f = 1 for i a ( 2 , n + 1 ) tartományban : f *= i return f nyomtatás ( faktoriális ( 10 )) # 3628800Megvalósítás rekurzióval :
def faktoriális ( n ): ha n < 0 : arithmeticError emelése ( 'Negatív szám faktoriálisa.' ) if ( n == 0 ) vagy ( n == 1 ): return 1 else : faktoriális visszaadása ( n - 1 ) * n nyomtatás ( faktoriális ( 10 ))A Python szabványos könyvtára egy profilkészítőt (modul profile) biztosít, amellyel statisztikákat gyűjthetünk az egyes funkciók futási idejéről. Annak eldöntéséhez, hogy a kód melyik verziója fusson gyorsabban, használja a timeit. Az alábbi program mérései lehetővé teszik, hogy megtudjuk, melyik karakterlánc- összefűzési lehetőség a hatékonyabb:
from timeit import Timer tmp = "Python 3.2.2 (alapértelmezett, 2011. június 12., 15:08:59) [MSC v.1500 32 bites (Intel)] win32 rendszeren." def case1 (): # A. növekményes összefűzések egy hurokban s = "" i esetén a ( 10000 ) tartományban : s += tmp def case2 (): # B. közbülső listán keresztül és az s = [] összekapcsolási metóduson keresztül i -hez a ( 10000 ) tartományban : s . hozzáfűz ( tmp ) s = "" . csatlakozz ( ok ) def case3 (): # B. listakifejezés és csatlakozási metódus "" -t ad vissza . csatlakozás ([ tmp for i in range ( 10000 )]) def case4 (): # D. generátor kifejezés és csatlakozási metódus " " . csatlakozás ( tmp for i tartományban ( 10000 ) ) v tartományban ( 1 , 5 ): print ( Timer ( " func()" , " a __main__ import case %s as func" % v . timeit ( 200 ) )Mint minden programozási nyelv, a Python is rendelkezik saját kódoptimalizálási technikákkal. A kódot különféle (gyakran egymással versengő) kritériumok alapján optimalizálhatja (teljesítménynövekedés, szükséges RAM mennyiségének csökkenése, forráskód tömörsége stb.). Leggyakrabban a programokat a végrehajtási időre optimalizálják.
Számos szabály van, amelyek nyilvánvalóak a tapasztalt programozók számára.
A Python a következő funkciókkal és a kapcsolódó optimalizálási szabályokkal rendelkezik.
A Pychecker [130] nevű eszköz segít a Python-forráskód elemzésében, és javaslatokat tesz a talált problémákkal kapcsolatban (például nem használt nevek, a túlterhelt metódus aláírásának megváltoztatása stb.). A forráskód ilyen statikus elemzése során hibák is észlelhetők. A Pylint [131] hasonló problémák megoldására törekszik, de hajlamos a kódstílus ellenőrzésére, szagú kód megtalálására [132] .
A nyelvválasztás általában a megoldandó feladatoktól, a nyelvek sajátosságaitól és a probléma megoldásához szükséges könyvtárak elérhetőségétől függ. Ugyanaz a feladat különböző nyelveken megírva nagymértékben eltérhet a végrehajtás hatékonysága szempontjából, beleértve a különbségeket is, ha különböző operációs rendszereken vagy különböző fordítók használatakor hajtják végre. Általánosságban elmondható, hogy a nyelvek értelmezettre (scripting) oszthatók, közbenső reprezentációra fordíthatók és lefordíthatók, ami befolyásolja a teljesítményt és a memóriafelhasználást. A Python-t általában értelmezettnek nevezik. Ezenkívül az egyes nyelveknek megvannak a maguk erősségei, a Python esetében kiemelkedik a programok egyszerű írása [133] .
A Python tömörsége, egyszerűsége és rugalmassága a C++/Javához hasonlítható [134] . Összehasonlíthatjuk az egyes nyelveken írt „ Hello, world ” programokat [134] .
Programok összehasonlítása "Hello, world!"C++ [134] | Java [134] | Python [134] |
---|---|---|
#include <iostream> int main () { std :: cout << "Hello, world!" << std :: endl ; return 0 ; } | public class HelloClass { public static void main ( String [ ] args ) { System . ki . println ( "Szia, világ!" ); } } | print ( "Helló, világ!" ) |
Ami az OOP-t illeti, a Pythonban a C ++-tól és a Java-tól eltérően nincsenek hozzáférés-módosítók az osztálymezőkhöz és metódusokhoz, az objektumok attribútumai és mezői menet közben is létrehozhatók a programvégrehajtás során, és minden metódus virtuális. A Java-hoz képest a Python lehetővé teszi az operátor túlterhelését is, ami lehetővé teszi a természeteshez közeli kifejezések használatát [134] . Összességében a Python OOP megközelítése leegyszerűsíti a programozást, érthetőbbé teszi a kódot, ugyanakkor rugalmasabbá teszi a nyelvet [134] . Másrészt a Python kód (valamint más értelmezett nyelvek) sokkal lassabb, mint a megfelelő C++ kód [135] , és általában lassabb lesz, mint a Java [136] . A C++ kód produktívabb, mint a Python, miközben több sort foglal el. A bioinformatikában használt algoritmusokkal kapcsolatos kutatások szerint a Python rugalmasabbnak bizonyult, mint a C++, a Java pedig kompromisszumnak bizonyult a C++ teljesítménye és a Python rugalmassága között [133] .
Java és Python esetén minden objektum a kupacban jön létre, míg a C++ a használt szintaxistól függően lehetővé teszi objektumok létrehozását a kupacban és a veremben is [137] . A teljesítményt az is befolyásolja, hogy a memóriában lévő adatok hogyan érhetők el. A C++-ban és a Java-ban az adatok a memóriában állandó eltolással érhetők el, míg a Pythonban hash-táblákon keresztül . A mutatók használata a C++ nyelvben meglehetősen nehezen érthető a kezdők számára, és eltarthat egy ideig, amíg elsajátítják a mutatók helyes használatát [133] .
A Go és a Python drasztikusan különböző nyelvek, azonban gyakran hasonlítják őket egymáshoz közös résük – a webes alkalmazások háttere – miatt. Ahogy Jason Kincaid fogalmaz, a Go egyesíti "a fordított nyelvek, például a C++ teljesítményét és biztonságát a dinamikus nyelvek, például a Python fejlesztési sebességével" [138] . Ez bizonyos mértékig igaz is: a Go-t eredetileg erősen statikusan tipizált fordítónyelvnek tervezték, amely támogatja a dinamikus nyelvek maximális tulajdonságait, amelyben továbbra is biztosítható a hatékony fordítás és a lefordított programok teljesítménye. Mindkét nyelvben közös az automatikus memóriakezelés, a beépített dinamikus gyűjtemények (tömbök és szótárak) jelenléte, a szeletek támogatása, a fejlett modulmechanizmus, valamint az egyszerű és minimalista szintaxis. Sokkal több különbség van, és nem mindig lehet egyértelműen jelezni, hogy melyik nyelvet beszélik.
dinamikus lehetőségek. Ha a Python egy teljesen dinamikus nyelv, és a program szinte minden eleme megváltozhat futás közben, beleértve az új típusok menet közbeni létrehozását és a meglévők módosítását, akkor a Go egy statikus nyelv, meglehetősen korlátozott reflexiós képességekkel, és csak az adattípusok tekintetében működik. fejlesztés során keletkezett. Bizonyos mértékig a Go dinamikus képességeit helyettesíti a kódgenerálás, amelyet a szintaxis egyszerűsége, valamint a szükséges eszközök és rendszerkönyvtárak elérhetősége biztosít. Azt is tervezik, hogy a Go 2.0-ban hozzáadják a generikus gyógyszerek támogatását. Objektumorientált programozás. A Python a „minden-objektum” ideológiára épül, és számos OOP-mechanizmussal rendelkezik, köztük ritka és atipikus is. A Go egy tipikus moduláris procedurális programozási nyelv, ahol az OOP szolgáltatásai az interfészek támogatására, valamint a struktúrák és interfészek beágyazására korlátozódnak. Valójában a Go-nak nincs is teljes értékű öröksége. Ezért, ha a Python az OOP stílusban való programozást ösztönzi, az osztályok közötti fa-szerű függőségek felépítésével és az öröklődés aktív használatával, akkor a Go a komponens megközelítésre összpontosít: a komponensek viselkedését interfészek állítják be, amelyek nem feltétlenül kapcsolódjanak egymáshoz, és az interfészek megvalósítása a struct típusokba kerül. A Go-ban megvalósított „kacsagépelés” oda vezet, hogy még formális szintaktikai kapcsolatok sincsenek az interfészek és az azokat megvalósító struktúrák között. Párhuzamos programozás. A párhuzamos programozás támogatása érdekében a Python lényegesen gyengébb a Go-nál. Először is, a Python GIL-je akadályozza a nagyszámú (tíz vagy több) fizikai processzormagot tartalmazó rendszerek hatékony használatát. Egy másik probléma a párhuzamos szálak közötti kölcsönhatás hatékony beépített eszközeinek hiánya. A Go tartalmaz egy gorutin nyelvi primitívet, amely lehetővé teszi "könnyű" szálak létrehozását, valamint a szintaxis által támogatott csöveket, amelyek lehetővé teszik a szálak kommunikációját. Emiatt például a Go-ban sorba állító rendszerek létrehozásakor nem jelent gondot több száz vagy akár több ezer egyidejűleg létező szál használata, ráadásul tetszőleges számú elérhető processzormag normál betöltésével, miközben a meglévők közül egyik sem A Python implementációk ilyen számú szál hatékony működését biztosítják. Hibakezelés, kivételek. A Python támogatja a kivételkezelést, míg a Go olyan mechanizmusokat valósít meg, amelyek kifejezetten visszaküldik a függvényekből származó hibakódokat, és kezelik azokat a hívás helyén. Ezt a különbséget többféleképpen lehet értékelni. Egyrészt a kivételek egy kényelmes és ismerős mechanizmus a programhibák kezelésére, lehetővé téve, hogy ezt a feldolgozást a kiválasztott kódrészletekre koncentráljuk, és ne „elkenjük” a program szövegében. Másrészt a Go szerzői úgy érzik, hogy a programozók túl gyakran figyelmen kívül hagyják a hibakezelést, és arra hagyatkoznak, hogy a kivételt máshol kezeljék; az elosztott alkalmazásokban a kivételek gyakran nem kerülnek átadásra a rendszerösszetevők között, és váratlan hibákhoz vezetnek, többszálú alkalmazásokban pedig egy szálon belüli kezeletlen kivétel blokkoláshoz, vagy fordítva, program összeomláshoz vezethet. Vizuális lehetőségek, szintaxis. A Python több nyelvi funkciót és primitívet kínál, amelyek kényelmesek a gyors fejlesztéshez, mint a Go. Ez nagyrészt annak tudható be, hogy a Go fejlesztői szándékosan megtagadták néhány „divatos” funkció beillesztését a nyelvbe, amelyek némelyike hibákat provokáló, mások pedig szándékosan nem hatékony megvalósítást takartak el. Például egy egyszerű művelet jelenléte a nyelvben, amikor egy elemet beszúrnak egy tömb közepére, kiváltja annak gyakori használatát, és minden ilyen művelet megköveteli legalább a tömb „farkának” mozgatását a memóriában, és néha szükség lehet a memória lefoglalására és a teljes tömb áthelyezésére. Teljesítmény. A legtöbb, tipikus háttérművelet-készleteket (lekérdezésfeldolgozást, weboldal generálást) megvalósító tesztek teljesítményét tekintve a Go többszörösen, akár több nagyságrenddel is felülmúlja a Pythont. Ez nem meglepő, tekintve a nyelv statikus természetét és azt a tényt, hogy a Go programokat közvetlenül a célplatform kódjába fordítják. Azokban a rendszerekben, ahol az idő nagy részét adatbázislekérdezések végrehajtása vagy információk hálózaton keresztüli továbbítása tölti el, ez nem elengedhetetlen, de a nagy terhelésű, nagy számú kérést feldolgozó rendszerekben a Go előnye tagadhatatlan. A Go és Python programok teljesítményében mutatkozó különbségeket a párhuzamosság megvalósításának fentebb említett különbségei is befolyásolják.Mindkét nyelvet tolmácsolják, közbenső reprezentációba állítják össze, amelyet aztán végrehajtásra küldenek. Python esetén egy köztes bájtkód generálódik, míg a Perl fordító egy szintaktikai fát. A memóriakezelés mindkét nyelven automatikus, és maguk a nyelvek szkriptnyelvként használatosak, és kiválóan alkalmasak webes alkalmazások írására. A Python kódolási megközelítés magában foglalja a programok listázásának jobb megértését a teljesítmény rovására, míg a Perl nagyobb szabadságot biztosít a szintaxisban, ami a Perl programokat olvashatatlanná teheti a nem Perl programozók számára [133] .
A Lua egy egyszerű nyelv, amelyet eredetileg szoftverekbe ágyaztak, és összetett műveletek automatizálására használták (például számítógépes játékokban a robotok viselkedése). A Python ezeken a területeken is használható, a számítógép- és operációsrendszer-kezelés automatizálására szolgáló szkriptek írásában és a nem professzionális önprogramozásban is felveszi a versenyt a Luával. Az elmúlt években mindkét nyelvet beépítették a mobileszközökbe, például a programozható számológépekbe.
Mindkét nyelv dinamikus, értelmezett, támogatja az automatikus memóriakezelést, és szabványos eszközökkel rendelkezik a más nyelveken (főleg C és C++) írt szoftverekkel való interakcióhoz. A Lua futtatókörnyezet kompaktabb, és kevesebb erőforrást igényel, mint a Python, ami a Lua számára előnyt jelent a beágyazás során. A Pythonhoz hasonlóan a Lua is támogatja a forráskód fordítását virtuális gépen futtatható bájtkódba. Van egy JIT fordító megvalósítása a Lua számára.
A Lua egyszerűbb, mint a Python, és klasszikusabb, Pascal-szerű szintaxisa van. A nyelvben mindössze nyolc beépített adattípus található, és az összes strukturált típust (struktúrák, felsorolások, tömbök, halmazok) egyetlen beépített táblatípus alapján modellezzük, amely tulajdonképpen egy heterogén szótár. Az OOP táblákon valósul meg, és egy prototípus modellen alapul, mint a JavaScriptben. A Python több lehetőséget kínál, és strukturált adattípusainak mindegyike saját megvalósítással rendelkezik, ami javítja a teljesítményt. A Python OOP képességei sokkal szélesebbek, ami előnyt jelent összetett programok írásakor, de csekély hatással van az egyszerű szkriptek minőségére és teljesítményére, amelyekre a Lua összpontosít.
A Python-t, a MATLAB-ot és az R-t az adatfeldolgozásban, valamint a matematika és a statisztika alapjainak megtanításában használják. Az R statisztikai számítások végzésére szolgáló nyelv, míg a MATLAB programozási nyelvnek tekinthető a Python mellett [139] .
A Python, mint nagyon népszerű programozási nyelv, a következő nyelvekre hatott:
A klasszikus Pythonnak sok más értelmezett nyelvhez hasonló hátránya van - a programok viszonylag lassú végrehajtási sebessége [147] . Bizonyos mértékig javít a helyzeten a bájtkód mentése (kiterjesztések .pycés a 3.5-ös verzió előtt, .pyo), ami lehetővé teszi, hogy az értelmező ne töltsön időt a modulok szövegének elemzésével minden indításkor.
A Python nyelvnek vannak olyan megvalósításai, amelyek nagy teljesítményű virtuális gépeket (VM-eket) vezetnek be fordítói háttérként. Ilyen megvalósítások például a PyPy , amely az RPythonon alapul; egy korábbi kezdeményezés a Parrot projekt . Várhatóan az LLVM-típusú virtuális gépek használata ugyanazokhoz az eredményekhez vezet, mint a hasonló megközelítések alkalmazása Java nyelvi implementációkhoz, ahol a gyenge számítási teljesítményt nagyrészt leküzdik [148] . Nem szabad azonban megfeledkeznünk arról, hogy a Python dinamikus jellege elkerülhetetlenné teszi, hogy a programvégrehajtás során további többletköltségek merüljenek fel, ami korlátozza a Python rendszerek teljesítményét, függetlenül az alkalmazott technológiáktól. Ennek eredményeként alacsony szintű nyelveket használnak a kritikus kódrészletek írásához, amelyek integrációját számos program és könyvtár biztosítja (lásd fent).
A Python nyelv legnépszerűbb megvalósításában az értelmező meglehetősen nagy és erőforrásigényesebb, mint a Tcl , Forth , LISP vagy Lua hasonló népszerű megvalósításaiban , ami korlátozza a beágyazott rendszerekben való használatát. A Python azonban átkerült néhány viszonylag alacsony teljesítményű platformra. .
A CPython Python értelmezője (valamint a Stackless és a PyPy [149] ) szálak számára nem biztonságos adatokat használ, amelyek megsemmisülésének elkerülése érdekében, ha különböző szálakból együttesen módosítják, globális értelmezőzárat alkalmaznak - GIL (Global Interpreter Lock) [150 ] : kódvégrehajtás során egy szál Az értelmező zárolja a GIL-t, meghatározott ideig (alapértelmezett 5 ezredmásodperc [K 2] ) végrehajt számos utasítást, majd feloldja a zárolást és szünetet tart, hogy más szálak futhassanak. A GIL az I/O során is felszabadul, megváltoztatva és ellenőrzi a szinkronizálási primitívek állapotát, amikor olyan kiterjesztési kódot hajt végre, amely nem fér hozzá az értelmező adataihoz, például a NumPy / SciPy . Így egyszerre csak egy Python-kód szál futhat egyetlen Python értelmező folyamatban, függetlenül a rendelkezésre álló processzormagok számától.
A GIL teljesítménybüntetése a programok természetétől és a rendszer architektúrájától függ. A legtöbb program egyszálú, vagy csak néhány szálat futtat, amelyek közül néhány pillanatnyilag tétlen. A személyi számítógépek általában kevés processzormaggal rendelkeznek, amelyeket a rendszerben párhuzamosan futó folyamatok töltenek be, így a személyi számítógépeken a GIL miatti valós teljesítményveszteség csekély. De a szerveralkalmazásokban kényelmes lehet több tucat és több száz (vagy még több) párhuzamos szál használata (például sorban állási rendszerekben, ahol minden szál külön felhasználói kérésre dolgoz fel adatokat), a 2010-es évek végén pedig a szervereket. gyakran több tucat, sőt több száz processzormaggal rendelkeznek, vagyis technikailag el tudják látni ezeket a szálakat fizikailag egyidejű végrehajtással; ilyen körülmények között a GIL az általános teljesítmény valóban jelentős csökkenéséhez vezethet, mivel megfosztja a programot attól, hogy teljes mértékben kihasználja a többmagos rendszerek erőforrásait.
Guido van Rossum azt mondta, hogy a GIL "nem olyan rossz", és addig lesz a CPythonban, amíg "valaki más" elő nem áll egy nem GIL Python implementációval, amely az egyszálú szkripteket ugyanolyan gyorssá teszi [153] [154] .
A fejlesztési feladatok közé tartozik a GIL optimalizálásával kapcsolatos munka [155] . A közeljövőben nem tervezik a GIL megszüntetését, mivel az egyszálú alkalmazások alternatív mechanizmusai, amelyek többségben vannak, lassabbak vagy több erőforrást fogyasztanak:
A probléma radikális megoldása lehet a Java virtuális gépeken futó Jython és IronPython , valamint a .NET/Mono rendszerre váltás: ezek a megvalósítások egyáltalán nem használják a GIL-t.
Míg a Python egyik kinyilvánított tervezési alapelve a legkisebb meglepetés elve , a kritikusok számos olyan építészeti választásra hívják fel a figyelmet, amelyek megzavarhatják vagy megzavarhatják a más mainstream nyelvekhez szokott programozókat [162] . Közöttük:
A Rubyhoz és néhány más nyelvhez képest a Python nem képes másokhoz hasonlóan módosítani a beépített osztályokat int, str, float, list, ami azonban lehetővé teszi a Python számára, hogy kevesebb RAM-ot fogyasztjon és gyorsabban futjon. Az ilyen korlátozás bevezetésének másik oka a bővítőmodulokkal való koordináció szükségessége. Sok modul (a teljesítmény optimalizálása érdekében) a Python elemi típusokat konvertálja a megfelelő C típusokká, ahelyett, hogy a C API-n keresztül manipulálná őket. Emellett számos lehetséges buktatót is kiküszöböl a beépített típusok ellenőrizetlen dinamikus felülírásából.
A CPython a nyelv fő implementációja. C nyelven íródott, és platformokon keresztül hordozható. A memóriakezelés alapja a referenciaszámlálók és a ciklikus referenciarögzítések megtalálásáért felelős szemétgyűjtő kombinációja [42] . Bár a nyelvet értelmezettnek tekintjük, valójában egy közepes, magas szintű bájtkódba fordítják [166] [167] , amelyet aztán egy verem virtuális gépen [42] hajtanak végre . Például egy függvényhívást a print()következőképpen lehet ábrázolni: [167] :
1 0 LOAD_NAME 0 ( nyomtatás ) 2 LOAD_CONST 0 ( " Hello World ! " ) 4 CALL_FUNCTION 1 6 RETURN_VALUEA nyelvben szereplő nevek késői kötésűek, ami azt jelenti, hogy olyan változókra, metódusokra és attribútumokra írhat hívásokat, amelyek még nem léteznek, de az ezeket használó kód végrehajtásakor deklarálni kell. A Pythonban minden objektumhoz tartozik egy hash tábla szótár, amelyen keresztül az attribútumnevek összehasonlíthatók az értékükkel. A globális változókat egy szótár is leképezi. Egy metódus vagy attribútum egyetlen meghívását követheti egy alternatív keresés több szótárban [42] .
A PyPy egy Python-megvalósítás, amelyet RPython -ban (a Python sokkal kevésbé dinamikus képességekkel rendelkező részhalmaza) írnak. Lehetővé teszi az új funkciók egyszerű tesztelését. A PyPy a szabványos CPython mellett tartalmazza a Stackless, Psyco , az AST menet közbeni módosítás és még sok más funkcióit. A projekt integrálja a Python kód elemzésének és a virtuális gépek más nyelvekre és bájtkódjaira ( C , LLVM , Javascript , .NET 0.9.9-es verziótól) való fordításának képességeit. A 0.9.0-tól kezdődően lehetőség van az RPython teljes automatikus lefordítására C-re, ami a használathoz elfogadható sebességet eredményez (2-3-szor alacsonyabb, mint a CPython, ha a JIT a 0.9.9-es verzióhoz le van tiltva). A PyPy alapértelmezés szerint beépített JIT fordítóval érkezik, amellyel sokkal gyorsabban tud futni, mint a CPython.
A Jython egy Python-megvalósítás, amely a Python -kódot Java bájtkódra fordítja , amelyet a JVM végrehajthat . Használható olyan osztály importálására is, amelynek forráskódja Java nyelven íródott Python modulként [168] .
Vannak más megvalósítások is.
A nyelvnek több speciális részhalmaza készült Python alapján, főként gépi kódba történő statikus fordításra. Néhányat az alábbiakban sorolunk fel.
A Lisphez és a Prologhoz hasonlóan a Python is használható interaktívan, amelyben a billentyűzetről beírt utasítások azonnal végrehajtásra kerülnek, és az eredmény megjelenik a képernyőn ( REPL ). Ez a mód nyelvtanuláskor és a szakmai fejlődés során is kényelmes - az egyes kódrészletek gyors teszteléséhez -, mivel azonnali visszajelzést ad. Azt is lehetővé teszi, hogy a tolmácsot számológépként használja, számos funkcióval.
Szinte az összes Python IDE támogatja a REPL -t a gyors teszteléshez.
Számos speciális IDE létezik a Python fejlesztésére.
Ezen kívül vannak beépülő modulok, amelyek támogatják a Python programozást az Eclipse , a KDevelop és a Microsoft Visual Studio univerzális IDE-ekhez , valamint a szintaxis kiemelését, a kódkiegészítést, valamint a hibakereső és -indító eszközöket számos általános szövegszerkesztőhöz.
A Python egy stabil és széles körben elterjedt nyelv. Számos projektben és különféle kapacitásokban használják: fő programozási nyelvként vagy bővítmények létrehozására és alkalmazások integrálására. Számos projektet valósítottak meg Pythonban, és aktívan használják prototípusok létrehozására a jövőbeli programok számára.
A Python egy könnyen megtanulható nyelv, és gyakran első nyelvként tanítják [27] , beleértve a gyerekek programozásának tanítását is [185] . Első nyelvként kiválóan alkalmas, mert a benne lévő programok közel állnak ahhoz a természetes nyelvhez, amelyen az emberek hozzászoktak a gondolkodáshoz, és a megfelelő program megírásához minimális számú kulcsszó szükséges. Más nyelvekben, mint például a C++ , nagyon sok különböző szintaxis és nyelvi elem létezik, amelyekre az algoritmusok tanulmányozása helyett figyelni kell [134] .
Nyílt forráskódú alkalmazásként a Python interpretert az egész világon használják, és Linux-alapú operációs rendszerekkel és Apple számítógépekkel szállítják . A Python népszerű az egyéni fejlesztők körében, de a nagyvállalatok is használják meglehetősen komoly, profitorientált termékekben [186] . A Reddit [46] Python nyelven íródott . A Dropbox emellett erősen használja a Pythont, és a dinamikus gépelés bonyolultsága és a rengeteg kód miatt a vállalat a statikus gépelésre tért át a nyílt forráskódú Mypy projekttel [187] . A Pythont a Facebookon is erősen használják [188 ] és az Instagram [189] . Sok vállalat használja a Python-t hardvertesztelésre, ezek közé tartozik az Intel , a Cisco , a Hewlett-Packard és az IBM . Az Industrial Light & Magic és a Pixar használja animációs filmjeiben [186] .
A nyelvet a Google nagymértékben használja keresőjében, a Youtube -ot pedig nagyrészt Python segítségével írják [186] [190] . Ezen kívül a Google 2010 óta támogatja a Python fejlesztését [191] [192] és a PyPI , a Python fő csomagelosztó rendszerének [191] [193] támogatását .
A Python erőssége a modularitása és a más programozási nyelvekkel való integrálhatósága, beleértve az összetett, összetett alkalmazások és rendszerek részét is [194] . Az egyszerűség és tömörség számos funkcióval kombinálva a Pythont kényelmes szkriptnyelvvé teszi. . Számos projekt biztosít Python API-t a szkriptezéshez, mint például az Autodesk Maya [186] , a Blender [195] és a Houdini [196] 3D modellező környezet, valamint az ingyenes QGIS földrajzi információs rendszer [197] . Egyes projektek az alapvető részt hatékonyabb programozási nyelveken valósítják meg, és teljes értékű API-t biztosítanak Pythonban a munka egyszerűsítése érdekében. . Így az ingyenes OpenShot videószerkesztő motorja a libopenshot könyvtár formájában van megvalósítva, C ++ nyelven írva C könyvtárak segítségével, és minden lehetőséget teljes mértékben lefed a Python API [198][ a tény jelentősége? ] . Az Egyesült Államok Nemzetbiztonsági Ügynöksége a Python-t használja adatelemzésre, a NASA pedig tudományos célokra [186] . A NASA-nál használt eszközök közül kiemelhető az ingyenes grafikus hálózati szimulátor , a GNS3 , amely vállalati környezetben is bevált, és technológiai cégeknél is használatos, például az Intelnél [199] . A Cura [200] [201] Python nyelven is meg van írva, amely egy ingyenes és népszerű program 3D modellek vágására 3D nyomtatókra történő nyomtatáshoz .
A NumPy , SciPy és MatPlotLib csomagokkal rendelkező Python aktívan használatos általános célú tudományos számítástechnikai környezetként a gyakori speciális kereskedelmi csomagok, például a Matlab helyettesítésére , hasonló funkcionalitást és alacsonyabb belépési küszöböt biztosítva [202] . A Veusz grafikus program nagyrészt Python nyelven íródott.[203] , amely lehetővé teszi kiváló minőségű grafikák készítését, amelyek készen állnak tudományos publikációkban [204][ a tény jelentősége? ] . Az Astropy könyvtár népszerű eszköz a csillagászati számításokhoz [205][ a tény jelentősége? ] .
Ezenkívül a Python alkalmas nem szabványos vagy összetett feladatok végrehajtására projektépítési rendszerekben , ami annak tudható be, hogy nincs szükség a forrásfájlok előzetes fordítására. A Google Tesztprojekt ezt használja a C++ osztályok hamis forráskódjának létrehozásához [206][ a tény jelentősége? ] .
A Python interpreter hatékony shell- és szkriptnyelvként használható az operációs rendszer kötegfájljainak írásához. A Python-szkriptekből a külső programokhoz való könnyű hozzáférés és a rendszerfelügyelethez hozzáférést biztosító könyvtárak elérhetősége a Python-t kényelmes rendszer-adminisztrációs eszközzé teszik [207] . Linux platformon széles körben használják erre a célra: a Python rendszerint a rendszerrel együtt érkezik, sok disztribúcióban Python nyelven írják a telepítőket és a rendszer segédprogramjainak vizuális felületét. Más Unix rendszerek, különösen a Solaris és a macOS adminisztrációjában is használják [207] . Maga a nyelv és a könyvtárak platformközi jellege vonzóvá teszi a rendszeradminisztrációs feladatok egységes automatizálásához heterogén környezetekben, ahol különböző típusú operációs rendszerekkel rendelkező számítógépeket használnak együtt.
Általános célú nyelvként a Python szinte minden tevékenységi területen alkalmazható. Valójában a Pythont szinte minden jó nevű cég használja így vagy úgy, mind a napi feladatokhoz, mind a teszteléshez, adminisztrációhoz vagy szoftverfejlesztéshez [186] .
Piton | |
---|---|
Közösség | |
Megvalósítások | |
Egyéb |
|
Programozási nyelvek | |
---|---|
|
![]() | ||||
---|---|---|---|---|
Szótárak és enciklopédiák | ||||
|