Wat is Python? Krachtige, intuïtieve programmering

De programmeertaal Python dateert uit 1991 en werd beschouwd als een gap-filler, een manier om scripts te schrijven die 'de saaie dingen automatiseren' (zoals een populair boek over het leren van Python het uitdrukte) of om snel prototypen van applicaties te maken die in andere talen zullen worden geïmplementeerd. .

De afgelopen jaren is Python echter uitgegroeid tot een eersteklas burger op het gebied van moderne softwareontwikkeling, infrastructuurbeheer en data-analyse. Het is niet langer een hulpprogramma-taal in de achterkamer, maar een belangrijke kracht bij het maken van webapplicaties en systeembeheer, en een belangrijke oorzaak van de explosie in big data-analyse en machine-intelligentie.

Gerelateerde video: hoe Python programmeren eenvoudiger maakt

Python is perfect voor IT en vereenvoudigt vele soorten werk, van systeemautomatisering tot het werken op geavanceerde gebieden zoals machine learning.

De belangrijkste voordelen van Python 

Het succes van Python draait om verschillende voordelen die het zowel voor beginners als experts biedt.

Python is gemakkelijk te leren en te gebruiken

Het aantal functies in de taal zelf is bescheiden, waardoor het relatief weinig tijd of moeite kost om uw eerste programma's te maken. De Python-syntaxis is ontworpen om leesbaar en duidelijk te zijn. Deze eenvoud maakt Python tot een ideale onderwijstaal en laat nieuwkomers het snel oppikken. Het resultaat is dat ontwikkelaars meer tijd besteden aan het nadenken over het probleem dat ze proberen op te lossen en minder aan het nadenken over taalcomplexiteit of het ontcijferen van code die door anderen is achtergelaten.

Python wordt algemeen aangenomen en ondersteund

Python is zowel populair als veel gebruikt, aangezien de hoge scores in enquêtes zoals de Tiobe Index en het grote aantal GitHub-projecten die Python gebruiken, getuigen. Python draait op elk groot besturingssysteem en platform, en ook op de meeste kleinere. Veel grote bibliotheken en API-aangedreven services hebben Python-bindingen of wrappers, waardoor Python vrij kan communiceren met die services of die bibliotheken rechtstreeks kan gebruiken. 

Python is geen "speelgoed" -taal

Hoewel scripting en automatisering een groot deel van de use-cases van Python beslaan (daarover later meer), wordt Python ook gebruikt om professionele software te bouwen, zowel als zelfstandige applicaties als als webservices. Python is misschien niet de snelste taal, maar wat het mist aan snelheid, wordt goedgemaakt in veelzijdigheid.

Python blijft vooruitgaan

Elke herziening van de Python-taal voegt handige nieuwe functies toe om gelijke tred te houden met moderne softwareontwikkelingspraktijken. Asynchrone bewerkingen en coroutines zijn nu bijvoorbeeld standaardonderdelen van de taal, waardoor het gemakkelijker wordt om Python-apps te schrijven die gelijktijdige verwerking uitvoeren.

Waar wordt Python voor gebruikt?

De meest elementaire use case voor Python is als script- en automatiseringstaal. Python is niet alleen een vervanging voor shell-scripts of batchbestanden; het wordt ook gebruikt om interacties met webbrowsers of applicatie-GUI's te automatiseren of om systeemprovisioning en -configuratie uit te voeren in tools zoals Ansible en Salt. Maar scripting en automatisering vertegenwoordigen slechts het topje van de ijsberg met Python.

G lgemene application programming met Python

U kunt zowel opdrachtregel- als platformonafhankelijke GUI-toepassingen maken met Python en deze implementeren als zelfstandige uitvoerbare bestanden. Python heeft niet de native mogelijkheid om een ​​zelfstandig binair bestand te genereren vanuit een script, maar pakketten van derden zoals cx_Freeze en PyInstaller kunnen worden gebruikt om dat te bereiken.

Datawetenschap en machine learning met Python

Geavanceerde data-analyse is een van de snelst bewegende IT-gebieden en een van de belangrijkste use-cases van Python geworden. De overgrote meerderheid van de bibliotheken die voor datawetenschap of machine learning worden gebruikt, hebben Python-interfaces, waardoor de taal de populairste opdrachtinterface op hoog niveau is voor machine learning-bibliotheken en andere numerieke algoritmen.

Webservices en RESTful API's in Python

De native bibliotheken van Python en webframeworks van derden bieden snelle en gemakkelijke manieren om alles te maken, van eenvoudige REST API's in een paar regels code tot volledige, datagestuurde sites. De nieuwste versies van Python bieden sterke ondersteuning voor asynchrone bewerkingen, waardoor sites tienduizenden verzoeken per seconde kunnen verwerken met de juiste bibliotheken.

Metaprogrammering en codegeneratie in Python

In Python is alles in de taal een object, inclusief Python-modules en bibliotheken zelf. Hierdoor werkt Python als een zeer efficiënte codegenerator, waardoor het mogelijk wordt om applicaties te schrijven die hun eigen functies manipuleren en die het soort uitbreidbaarheid hebben dat moeilijk of onmogelijk zou zijn om uit te voeren in andere talen.

Python kan ook worden gebruikt om systemen voor het genereren van code aan te sturen, zoals LLVM, om efficiënt code in andere talen te maken.

"Lijm code" in Python

Python wordt vaak omschreven als een "lijmtaal", wat betekent dat het ongelijksoortige code (meestal bibliotheken met C-taalinterfaces) kan laten samenwerken. Het gebruik ervan in datawetenschap en machine learning is in deze geest, maar dat is slechts één incarnatie van het algemene idee. Als je applicaties of programmadomeinen hebt die je wilt koppelen, maar niet rechtstreeks met elkaar kunt praten, kun je Python gebruiken om ze te verbinden.

Waar Python tekort schiet

Ook vermeldenswaard zijn de soorten taken waarvoor Python niet geschikt is.

Python is een taal op hoog niveau, dus het is niet geschikt voor programmeren op systeemniveau - apparaatstuurprogramma's of OS-kernels zijn buiten beeld.

Het is ook niet ideaal voor situaties waarin standalone binaire bestanden op verschillende platforms nodig zijn . Je zou een zelfstandige Python-app kunnen bouwen voor Windows, MacOS en Linux, maar niet elegant of eenvoudig.

Ten slotte is Python niet de beste keuze wanneer snelheid een absolute prioriteit is in elk aspect van de applicatie. Daarvoor ben je beter af met C / C ++ of een andere taal van dat kaliber.

Hoe Python programmeren eenvoudig maakt

De syntaxis van Python is bedoeld om leesbaar en schoon te zijn, met weinig pretentie. Een standaard "hallo wereld" in Python 3.x is niets meer dan:

print ("Hallo wereld!")

Python biedt veel syntactische elementen om veel voorkomende programmastromen beknopt uit te drukken. Beschouw een voorbeeldprogramma voor het lezen van regels uit een tekstbestand in een lijstobject, waarbij elke regel van het afsluitende teken voor een nieuwe regel wordt verwijderd:

met open ('myfile.txt') als my_file:

    file_lines = [x.rstrip ('\ n') voor x in mijn_bestand]

De with/asconstructie is een contextmanager , die een efficiënte manier biedt om een ​​object te instantiëren voor een codeblok en het vervolgens buiten dat blok te verwijderen. In dit geval wordt het object my_filegeïnstantieerd met de open() functie. Dit neemt de plaats in van meerdere regels boilerplate om het bestand te openen, afzonderlijke regels eruit te lezen en vervolgens te sluiten.

De [x … for x in my_file]constructie is een andere Python-eigenaardigheid, het lijstbegrip . Het laat een item dat andere items bevat (hier, my_fileen de regels die het bevat) doorlopen, en het laat elk herhaald element (dat wil zeggen, elk x) verwerkt en automatisch aan een lijst toegevoegd.

Je zou zoiets als een formele for… lus in Python kunnen schrijven , net zoals je zou doen in een andere taal. Het punt is dat Python een manier heeft om zaken als lussen die itereren over meerdere objecten economisch uit te drukken en een eenvoudige bewerking uit te voeren op elk element in de lus, of om te werken met dingen die expliciete instantiëring en verwijdering vereisen.

Constructies zoals deze laten Python-ontwikkelaars een evenwicht vinden tussen beknoptheid en leesbaarheid.

De andere taalfuncties van Python zijn bedoeld als aanvulling op veelvoorkomende gebruikssituaties. De meeste moderne objecttypen - bijvoorbeeld Unicode-strings - zijn rechtstreeks in de taal ingebouwd. Datastructuren - zoals lijsten, woordenboeken (dwz hashmaps of sleutelwaardeopslagplaatsen), tuples (voor het opslaan van onveranderlijke verzamelingen objecten) en sets (voor het opslaan van verzamelingen van unieke objecten) - zijn beschikbaar als standaarduitgiftepunten.

Python 2 versus Python 3

Python is beschikbaar in twee versies, die verschillend genoeg zijn om veel nieuwe gebruikers te laten struikelen. Python 2.x, de oudere “legacy” branch, zal ondersteund blijven worden (dat wil zeggen, officiële updates ontvangen) tot en met 2020, en het kan daarna onofficieel blijven bestaan. Python 3.x, de huidige en toekomstige incarnatie van de taal, heeft veel nuttige en belangrijke functies die niet in Python 2.x voorkomen, zoals nieuwe syntaxisfuncties (bijv. De "walrusoperator"), betere besturingselementen voor gelijktijdigheid en een meer efficiënte tolk.

De acceptatie van Python 3 werd het langst vertraagd door het relatieve gebrek aan bibliotheekondersteuning van derden. Veel Python-bibliotheken ondersteunden alleen Python 2, waardoor het moeilijk was om over te schakelen. Maar de afgelopen jaren is het aantal bibliotheken dat alleen Python 2 ondersteunt, afgenomen; alle populaire bibliotheken zijn nu compatibel met zowel Python 2 als Python 3. Tegenwoordig is Python 3 de beste keuze voor nieuwe projecten; er is geen reden om Python 2 te kiezen, tenzij je geen keus hebt. Als je met Python 2 vastzit, heb je verschillende strategieën tot je beschikking.

Python's bibliotheken

Het succes van Python berust op een rijk ecosysteem van eigen software en software van derden. Python profiteert van zowel een sterke standaardbibliotheek als een royaal assortiment gemakkelijk verkrijgbare en direct gebruikte bibliotheken van externe ontwikkelaars. Python is verrijkt door decennia van uitbreiding en bijdrage.

De standaardbibliotheek van Python biedt modules voor veelvoorkomende programmeertaken - wiskunde, stringverwerking, toegang tot bestanden en mappen, netwerken, asynchrone bewerkingen, threading, multiprocesbeheer, enzovoort. Maar het bevat ook modules die algemene programmeertaken op hoog niveau beheren die moderne toepassingen nodig hebben: gestructureerde bestandsindelingen zoals JSON en XML lezen en schrijven, gecomprimeerde bestanden bewerken, werken met internetprotocollen en gegevensindelingen (webpagina's, URL's, e-mail). Vrijwel elke externe code die een C-compatibele externe functie-interface blootlegt, is toegankelijk met de ctypesmodule van Python .

De standaard Python-distributie biedt ook een rudimentaire, maar nuttige, platformonafhankelijke GUI-bibliotheek via Tkinter en een ingesloten kopie van de SQLite 3-database.

De duizenden bibliotheken van derden, beschikbaar via de Python Package Index (PyPI), vormen de sterkste showcase voor Pythons populariteit en veelzijdigheid.

Bijvoorbeeld:

  • De BeautifulSoup-bibliotheek biedt een alles-in-één toolbox om HTML te scrapen - zelfs lastige, kapotte HTML - en er gegevens uit te extraheren.
  • Verzoeken maakt het werken met HTTP-verzoeken op schaal pijnloos en eenvoudig.
  • Frameworks zoals Flask en Django maken een snelle ontwikkeling van webservices mogelijk die zowel eenvoudige als geavanceerde use-cases omvatten.
  • Meerdere cloudservices kunnen worden beheerd via het objectmodel van Python met Apache Libcloud.
  • NumPy, Pandas en Matplotlib versnellen wiskundige en statistische bewerkingen en maken het gemakkelijk om visualisaties van gegevens te maken.

De compromissen van Python

Net als C #, Java en Go heeft Python garbage-verzameld geheugenbeheer, wat betekent dat de programmeur geen code hoeft te implementeren om objecten te volgen en vrij te geven. Normaal gesproken vindt garbage collection automatisch op de achtergrond plaats, maar als dat een prestatieprobleem oplevert, kunt u het handmatig activeren of volledig uitschakelen, of hele gebieden van objecten vrijstellen van garbage collection als prestatieverbetering.

Een belangrijk aspect van Python is zijn dynamiek . Alles in de taal, inclusief functies en modules zelf, wordt als objecten behandeld. Dit gaat ten koste van de snelheid (daarover later meer), maar maakt het veel gemakkelijker om code op hoog niveau te schrijven. Ontwikkelaars kunnen complexe objectmanipulaties uitvoeren met slechts een paar instructies, en zelfs delen van een applicatie behandelen als abstracties die indien nodig kunnen worden gewijzigd.

Pythons gebruik van aanzienlijke witruimte wordt zowel als een van de beste en slechtste attributen van Python genoemd. De inspringing op de tweede regel hieronder is niet alleen voor de leesbaarheid; het maakt deel uit van de syntaxis van Python. Python-interpreters zullen programma's weigeren die niet de juiste inspringing gebruiken om de besturingsstroom aan te geven.

met open ('myfile.txt') als my_file:

    file_lines = [x.rstrip ('\ n') voor x in mijn_bestand]

Syntactische witruimte kan ervoor zorgen dat neuzen gaan rimpelen, en sommige mensen wijzen Python om deze reden af. Maar strikte regels voor inspringen zijn in de praktijk veel minder opdringerig dan ze in theorie lijken, zelfs met de meest minimale code-editors, en het resultaat is code die schoner en beter leesbaar is.

Een andere mogelijke afknapper, vooral voor degenen die afkomstig zijn uit talen zoals C of Java, is hoe Python omgaat met typen met variabelen. Standaard gebruikt Python dynamisch of "duck" -typering - geweldig voor snelle codering, maar mogelijk problematisch in grote codebases. Dat gezegd hebbende, heeft Python onlangs ondersteuning toegevoegd voor optionele hinting tijdens het compileren, dus projecten die baat kunnen hebben bij statisch typen, kunnen het gebruiken.

Is Python traag? Niet noodzakelijk

Een veelvoorkomend voorbehoud bij Python is dat het traag is. Objectief gezien is het waar. Python-programma's werken over het algemeen veel langzamer dan overeenkomstige programma's in C / C ++ of Java. Sommige Python-programma's zullen een orde van grootte of meer langzamer zijn.