Python

python
Utvikler(e)
Python Software Foundation
offisielle nettsted
Generell informasjon
Vanlige utvidelser .py, .pyc, .pyd, .pyo, .pyw, .pyz_.pyi
Paradigme Multi -paradigme : objektorientert , imperativ , funksjonell , refleksiv
Dukket opp i 1991
Designet av Guido van Rossum
Siste stabile versjon 3.10.8 [ 1 ] ​( 11. oktober 2022 (4 dager))
type system Sterkt skrevet , dynamisk
implementeringer CPython , IronPython , Jython , Python for S60, PyPy , ActivePython , Unload Swallow
dialekter Stackless Python , RPython
påvirket av ABC , ALGOL 68, C , Haskell , Icon , Lisp , Modula-3 , Perl , Smalltalk , Java
har påvirket Boo , Cobra, D , Falcon , Genie , Groovy , Ruby , JavaScript , Cython , Go Latino
Operativsystem Multiplattform
Tillatelse Python Software Foundation-lisens

Python er et tolket programmeringsspråk på høyt nivå hvis filosofi legger vekt på lesbarheten til koden , den brukes til å utvikle applikasjoner av alle slag, eksempler: Instagram , Netflix , Spotify , Panda 3D , blant andre. [ 2 ] Det er et programmeringsspråk med flere paradigmer , siden det delvis støtter objektorientering , imperativ programmering og i mindre grad [ hvilket? ] , funksjonell programmering . Det er et tolket , dynamisk og tverrplattformspråk .

Administrert av Python Software Foundation , er den lisensiert under en åpen kildekode-lisens , kalt Python Software Foundation License . [ 3 ] Python rangerer konsekvent som et av de mest populære programmeringsspråkene.

Historikk

Python ble opprettet på slutten av 1980-tallet [ 4 ] av Guido van Rossum ved Center for Mathematics and Informatica (CWI, Centrum Wiskunde & Informatica ), i Nederland , som en etterfølger til ABC-programmeringsspråket , i stand til å håndtere unntak og samhandle med Amoeba-operativsystemet . [ 5 ]

Navnet på språket kommer fra dets skapers forkjærlighet for de britiske humoristene Monty Python . [ 6 ]

Guido van Rossum er hovedforfatteren av Python, og hans fortsatte sentrale rolle i å bestemme Pythons retning er anerkjent, og refererer til ham som Benevolent Dictator for Life ( BDFL); Imidlertid avviste han den 12. juli 2018 fra denne ærefulle situasjonen uten å forlate en etterfølger eller etterfølger og med en høylydende uttalelse: [ 7 ]

Så hva skal dere alle gjøre? Skape et demokrati? Anarki? Et diktatur? Et forbund? Guido van Rossum [ 8 ]

20. februar 1991 publiserte van Rossum koden for første gang i alt.sources , med versjonsnummer 0.9.0. [ 9 ] På dette utviklingsstadiet fantes allerede klasser med arv , unntakshåndtering, funksjonerstr og modulære typer, slik som: , list, dict, blant andre. I tillegg inneholdt denne første utgivelsen et modulsystem adoptert fra Modula-3 ; van Rossum beskriver modulen som "en av de største programmeringsenhetene i Python". [ 4 ] Unntaksmodellen i Python ligner på Modula-3, med tillegg av en else. [ 5 ] I 1994 ble comp.lang.python , hoveddiskusjonsforumet for Python, dannet, og markerte en milepæl i veksten til Python-brukergruppen.

Python nådde versjon 1.0 i januar 1994. En funksjon i denne utgivelsen var de funksjonelle programmeringsverktøyene : lambda, reduce, filterog map. [ 10 ] Van Rossum forklarte at "for 12 år siden kjøpte Python lambda, reduce(), filter() og map(), med tillatelse fra Amrit Perm, en Lisp- hacker som implementerte dem fordi han savnet dem. [ 11 ]

Den siste versjonen utgitt fra CWI var Python 1.2. I 1995 fortsatte van Rossum arbeidet med Python ved Corporation for National Research Initiatives (CNRI) i Reston, Virginia , hvor han ga ut flere versjoner av programvaren .

I løpet av sin tid ved CNRI lanserte van Rossum initiativet Computer Programming for Everybody (CP4E), for å gjøre programmering mer tilgjengelig for flere mennesker, med et grunnleggende nivå av 'literacy' i programmeringsspråk, som ligner på grunnleggende literacy. på engelsk og matematiske ferdigheter som trengs av mange arbeidere. Python spilte en avgjørende rolle i denne prosessen: på grunn av sin orientering mot ren syntaks, var den allerede egnet, og målene til CP4E hadde likheter med forgjengeren, ABC. Prosjektet ble sponset av DARPA . [ 12 ] Fra og med 2007 er CP4E-prosjektet i dvale, og mens Python prøver å være lett å lære og ikke for mystisk i syntaks og semantikk, er det ikke en aktiv bekymring å nå ikke-programmerere. [ 13 ]

I år 2000 flyttet kjerneteamet av Python-utviklere til BeOpen.com for å danne BeOpen PythonLabs-teamet . CNRI ba om at versjon 1.6 ble offentliggjort, og fortsatte utviklingen til utviklingsteamet forlot CNRI; utgivelsesplanen og versjon 2.0 hadde en betydelig mengde overlapping. [ 14 ] Python 2.0 var den første og eneste utgivelsen fra BeOpen.com. Etter at Python 2.0 ble utgitt av BeOpen.com, fusjonerte Guido van Rossum og de andre PythonLabs-utviklerne til Digital Creations .

Python 2.0 tok en viktig funksjon fra Haskell funksjonelle programmeringsspråk : listeforståelser. Pythons syntaks for denne konstruksjonen er veldig lik Haskells, bortsett fra Haskells preferanse for tegnsettingstegn, og Pythons preferanse for alfabetiske nøkkelord. Python 2.0 introduserte også et søppeloppsamlingssystem som er i stand til å samle sykliske referanser. [ 14 ]

Etter denne doble utgivelsen, og etter at van Rossum forlot CNRI for å jobbe med kommersielle programvareutviklere, ble det klart at muligheten til å bruke Python med programvare tilgjengelig under GNU GPL var svært ønskelig. Lisensen som ble brukt på den tiden, Python-lisensen , inkluderte en klausul som sa at lisensen ble styrt av staten Virginia , noe som gjorde den, etter Free Software Foundations (FSF)-advokaters syn, uforenlig med GPL. For versjon 1.61 og 2.1 gjorde CNRI og FSF Python-lisensen kompatibel med GPL, og ga den nytt navn til Python Software Foundation License . I år 2001 ble van Rossum tildelt FSF Award for the Advancement of Free Software .

Python 2.1 var et avledet verk av versjonene 1.6.1 og 2.0. Det er fra dette øyeblikket Python Software Foundation (PSF) blir eier av prosjektet, organisert som en ideell organisasjon grunnlagt i 2001, og tar Apache Software Foundation som modell . [ 3 ] Inkludert i denne utgivelsen var en scoping-implementering som er mer beslektet med de statiske scoping - reglene (som Scheme er opphavsmannen til). [ 15 ]

En stor innovasjon i Python 2.2 var foreningen av Python-typer (typer skrevet i C), og klasser (typer skrevet i Python) til et hierarki. Den foreningen oppnådde en ren og konsistent Python-objektmodell. [ 16 ] Generatorer som var inspirert av ikonspråket ble også lagt til . [ 17 ]

Tillegg til Python-standardbiblioteket og syntaksavgjørelser ble sterkt påvirket av Java i noen tilfeller: pakken logging, [ 18 ]​ introdusert i versjon 2.3, er basert på log4j ; SAX - parseren , introdusert i 2.0; pakken threading, [ 19 ]​ hvis klasse Thread viser et undersett av grensesnittet til den homonyme klassen i Java.

Python 2, dvs. Python 2.7.x, ble offisielt avviklet 1. januar 2020 (først planlagt for 2015), hvoretter ingen sikkerhetsoppdateringer og andre forbedringer vil bli utgitt for den. [ 20 ] ​[ 21 ]​ Med slutten av Python 2-livssyklusen er det bare Python 3.6.x-grenen [ 22 ]​ og senere som støttes.

I dag brukes Python innen kunstig intelligens og maskinlæring . [ 23 ]

Kjennetegn og paradigmer

Python er et programmeringsspråk med flere paradigmer . Dette betyr at i stedet for å tvinge programmerere til å ta i bruk en bestemt programmeringsstil, tillater den flere stiler: objektorientert programmering , imperativ programmering og funksjonell programmering . Andre paradigmer støttes gjennom bruk av utvidelser.

Python bruker dynamisk skriving og referansetelling for minneadministrasjon .

En viktig funksjon i Python er dynamisk navneoppløsning; det vil si hva som binder en metode og et variabelnavn under programkjøring (også kalt dynamisk metodebinding).

Et annet mål for språkdesign er enkel utvidelse. Nye moduler kan enkelt skrives i C eller C++ . Python kan inkluderes i applikasjoner som trenger et programmerbart grensesnitt.

Selv om Python-programmering i noen situasjoner kan betraktes som fiendtlig mot tradisjonell Lisp -funksjonell programmering , er det mange analogier mellom Python og minimalistiske Lisp-familiespråk som Scheme .

Filosofi

Python-brukere refererer ofte til Python-filosofien som er ganske analog med Unix -filosofien . Kode som følger prinsippene til Python sies å være "pytonisk". Disse prinsippene ble beskrevet av Python-utvikleren Tim Peters i The Zen of Python

Tim Peters , The Zen of Python

Siden versjon 2.1.2 inkluderer Python disse prikkene (i den originale engelske versjonen) som et påskeegg som vises når du kjører import this. [ 25 ]

Interaktiv modus

Standard Python-tolken inkluderer en interaktiv modus der instruksjoner skrives i en slags kommandotolk : uttrykk kan legges inn ett etter ett, og resultatet av deres evaluering kan sees umiddelbart, noe som gir mulighet for å teste deler. kode i interaktiv modus før den integreres som en del av et program. Dette er nyttig både for folk som nettopp har blitt kjent med språket og for mer avanserte programmerere.

Det finnes andre programmer, som IDLE , bpython eller IPython , [ 26 ] som legger til ekstra funksjonalitet til den interaktive modusen, for eksempel automatisk kodefullføring og språksyntaksfarging .

Eksempel på interaktiv modus:

>>> 1 + 1 2 >>> a = område ( 10 ) >>> print ( liste ( a )) [ 0 , 1 , 2 , 3 , 4 , 5 , 6 , 7 , 8 , 9 ]

Språkelementer og syntaks

Python er ment å være et svært lesbart språk. Formatet er visuelt ryddig, og det bruker ofte engelske søkeord der andre språk bruker tegnsetting. I motsetning til mange andre språk, bruker den ikke firkantede parenteser for å avgrense blokker, og semikolon er tillatt etter erklæringer, men brukes sjelden eller aldri. Den har færre syntaktiske unntak og spesielle tilfeller enn C eller Pascal.

Designet for å være lett å lese, en av funksjonene er bruken av ord der andre språk vil bruke symboler. For eksempel er de logiske operatorene !, ||og &&i Python skrevet henholdsvis not, orog and. Merkelig nok er Pascal -språket , sammen med COBOL , et av språkene med veldig tydelig syntaks og begge er fra 70-tallet. Ideen om klar og lesbar kode er ikke noe nytt.

Innholdet i kodeblokker (løkker, funksjoner, klasser osv.) er avgrenset med mellomrom eller tabulatorer, kjent som innrykk , før hver kommandolinje som tilhører blokken. [ 27 ] Python skiller seg dermed fra andre programmeringsspråk som opprettholder skikken med å deklarere blokker ved å bruke et sett med tegn, vanligvis omsluttet av krøllete klammeparenteser {}. [ 28 ] ​[ 29 ]​ Både mellomrom og tabulatorer kan brukes til å rykke inn kode, men det anbefales ikke å blande dem. [ 30 ]

Faktoriell funksjon i C (valgfritt innrykk) Faktoriell funksjon i Python (obligatorisk innrykk)
int factorial ( int x ) { if ( x < 0 || x % 1 != 0 ) { printf ( "x må være et heltall større enn eller lik 0" ); returnere -1 ; //Feil } if ( x == 0 ) { retur 1 ; } returner x * faktoriell ( x - 1 ); } def factorial ( x ): hevd x >= 0 og x % 1 == 0 , "x må være et heltall større enn eller lik 0." hvis x == 0 : returner 1 annet : returner x * faktoriell ( x - 1 )

På grunn av den syntaktiske betydningen av innrykk, må hvert utsagn inneholde en enkelt linje. Men hvis du for lesbarheten ønsker å dele instruksjonen i flere linjer, vil det å legge til en omvendt skråstrek \på slutten av en linje indikerer at instruksjonen fortsetter på neste.

Disse instruksjonene er likeverdige:

list = [ 'verdi 1' , 'verdi 2' , 'verdi 3' ] string = 'Dette er en ganske lang streng' list = [ 'verdi 1' , 'verdi 2' \ , 'verdi 3' ] string = 'Dette er en ganske lang ' \ 'streng'

Kommentarer

Kommentarer kan settes på to måter. Den første og mest hensiktsmessige for lange kommentarer er å bruke ''' kommentar '''-notasjonen, tre åpnings- og tre avsluttende apostrof. Den andre notasjonen bruker symbolet #, og de strekker seg til slutten av linjen.

Tolken tar ikke hensyn til kommentarer , noe som er nyttig hvis vi ønsker å legge inn tilleggsinformasjon i koden. For eksempel en forklaring om oppførselen til en del av programmet.

''' Lengste kommentar på en linje i Python ''' -utskrift ( "Hello world" ) # Det er også mulig å legge til en kommentar på slutten av en kodelinje

Variabler

Variabler er dynamisk definert , noe som betyr at du ikke trenger å spesifisere hva slags type er på forhånd og kan ta andre verdier på et senere tidspunkt, selv av en annen type enn tidligere. Symbolet brukes =til å tildele verdier.

x = 1 x = "tekst" # Dette er mulig fordi typene er dynamisk tilordnet

Variablenavn kan inneholde tall og bokstaver, men må begynne med en bokstav, og det er 28 reserverte ord: [ 31 ]

  • and
  • assert
  • break
  • class
  • continue
  • def
  • del
  • elif
  • else
  • except
  • exec
  • finally
  • for
  • from
  • global
  • if
  • import
  • in
  • is
  • lambda
  • not
  • or
  • pass
  • print
  • raise
  • return
  • try
  • while

Datatyper

Datatypene kan oppsummeres i denne tabellen:

Fyr Klasse Karakterer Eksempel
str String Uforanderlig 'Cadena'
unicode String Unicode- versjon avstr u'Cadena'
list Sekvens Mulig, kan inneholde objekter av ulike typer [4.0, 'Cadena', True]
tuple Sekvens Uforanderlig, kan inneholde objekter av ulike typer (4.0, 'Cadena', True)
set Sett Mulig, ingen rekkefølge, inneholder ingen duplikater {4.0, 'Cadena', True}
frozenset Sett Uforanderlig, ingen rekkefølge, inneholder ingen duplikater frozenset([4.0, 'Cadena', True])
dict kartlegging Nøkkel:verdipargruppe {'key1': 1.0, 'key2': False}
int heltall Fast presisjon, konvertert til lang ved overløp. 42
long heltall vilkårlig presisjon 42Lenten456966786151987643L
float Desimaltall Dobbelt presisjon flytepunkt 3.1415927
complex komplekst tall Virkelig del og imaginær del j . (4.5 + 3j)
bool boolsk boolsk verdi sann eller usann True o False
  • Mutable: Om innholdet (eller nevnte verdi) kan endres under kjøring.
  • Uforanderlig: hvis innholdet (eller nevnte verdi) ikke kan endres under kjøring.

Betingelser

En betinget ( if ) -setning utfører sin indre kodeblokk bare hvis en bestemt betingelse er oppfylt. Det er definert ved hjelp av nøkkelordet ifetterfulgt av betingelsen og kodeblokken. Hvis det finnes flere betingelser, legges de inn ved hjelp av nøkkelordet elifetterfulgt av betingelsen og dens kodeblokk. Betingelsene blir evaluert sekvensielt til den første som er sann er funnet, og den tilhørende kodeblokken er den eneste som blir utført. Eventuelt kan det være en siste blokk (nøkkelordet elseetterfulgt av en kodeblokk) som kjøres bare når alle de tidligere betingelsene var falske.

>>> sant = Sant >>> hvis sant : # Du trenger ikke å sette "true == True" ... print ( "True" ) ... annet : ... print ( "False" ) ... True >>> språk = "Python" >>> hvis språk == "C" : # språk er ikke "C", så denne blokken vil hoppe over og evaluere følgende tilstand ... print ( "Programmeringsspråk: C " ) . .. elif language == "Python" : # Du kan legge til så mange "elif"-blokker du vil ... print ( "Programmeringsspråk: Python" ) ... annet : # I tilfelle ingen av Hvis forholdene ovenfor var true, denne blokken vil bli utført ... print ( " Programmeringsspråk : undefined" ) ... Programmeringsspråk : Python >>> hvis true og språk == "Python" : # Bruk "og" for å sjekke at begge betingelsene er true ... print ( "True and Programming language: Python " ) ... True and Programming language : Python

for loop

For -løkken er lik foreaching på andre språk. Gå gjennom et iterbart objekt, for eksempel en liste , tuppel eller generator, og kjør den indre kodeblokken for hvert element i den iterable. Det er definert med nøkkelordet foretterfulgt av et variabelnavn, etterfulgt av in, etterfulgt av den iterable, og til slutt den indre kodeblokken. På hver iterasjon blir det neste elementet i iterable tilordnet det angitte variabelnavnet:

>>> liste = [ "a" , "b" , "c" ] >>> for i i liste : # Vi itererer over en liste, som kan itereres ... skriv ut ( i ) ... a b c > > > string = "abcdef" >>> for i i streng : # Vi itererer over en streng, som også kan itereres ... print ( i , end = ', ' ) # Legge til end=', ' på slutten gjør den skriver ikke inn en ny linje, men et komma og et mellomrom ... a , b , c , d , e , f ,

mens loop

While-løkken evaluerer en betingelse og, hvis den er sann, utfører den indre kodeblokken. Den fortsetter å evaluere og utføre så lenge tilstanden er sann. Det er definert med nøkkelordet whileetterfulgt av betingelsen, og deretter den interne kodeblokken:

>>> tall = 0 >>> mens tall < 10 : ... print ( tall , slutt = " " ) ... tall += 1 # En god programmerer vil modifisere kontrollvariablene på slutten av while - løkken . .. 0 1 2 3 4 5 6 7 8 9

Lister og tupler

  • Firkantede parenteser brukes til å erklære en liste , mens parenteser brukes []til å erklære en tuppel() . I begge er elementene atskilt med komma, og når det gjelder tupler må de ha minst ett komma.
  • Både lister og tupler kan inneholde elementer av forskjellige typer. Imidlertid brukes lister vanligvis for elementer av samme type i en variabel mengde, mens tupler er reservert for forskjellige elementer i en fast mengde.
  • For å få tilgang til elementene i en liste eller tuppel , brukes en heltallsindeks (som starter med "0, ikke "1"). Negative indekser kan brukes for å få tilgang til elementer fra slutten.
  • Lister kjennetegnes ved å være mutable , det vil si at innholdet deres kan endres under kjøring, mens tuples er uforanderlige siden det ikke er mulig å endre innholdet når det først er opprettet.
lister >>> liste = [ "abc" , 42 , 3.1415 ] >>> liste [ 0 ] # Få tilgang til et element ved hjelp av indeksen 'abc' >>> liste [ - 1 ] # Få tilgang til et element ved hjelp av en negativ indeks 3.1415 >> > liste . append ( True ) # Legg til et element til slutten av listen >>> list [ 'abc' , 42 , 3.1415 , True ] >>> del liste [ 3 ] # Slett et element fra listen ved å bruke en indeks (i dette tilfellet : Sant) >>> liste [ 0 ] = "xyz" # Tilordne verdien til det første elementet i listen >>> listen [ 0 : 2 ] # Vis elementene i listen fra indeks "0" til " 2 " (ikke inkludert sistnevnte) [ 'xyz' , 42 ] >>> nested_list = [ liste , [ True , 42 L ]] # Det er mulig å neste lister >>> nested_list [[ 'xyz' , 42 , 3.1415 ], [ True , 42 L ]] >>> nested_list [ 1 ][ 0 ] # Få tilgang til et element i en liste i en annen liste (for det andre elementet, vis det første elementet) True tupler >>> tuple = ( "abc" , 42 , 3.1415 ) >>> tuple [ 0 ] # Få tilgang til et element ved dets indeks 'abc' >>> av tuple [ 0 ] # Det er ikke mulig å slette (eller legge til) et element i en tuppel, som vil forårsake et unntak ( Unntak ) >>> tuppel [ 0 ] = "xyz" # Det er heller ikke mulig å omtilordne verdien til et element i en tuppel, som også vil forårsake et unntak ( Unntak ) > >> tuppel [ 0 : 2 ] # Vis elementene i tuppelen fra indeks "0" til "2" (ikke inkludert sistnevnte) ( 'abc' , 42 ) >>> nested_tuppel = ( tuppel , ( True , 3.1415 ) ) # Det er også mulig å hekke tupler >>> 1 , 2 , 3 , "abc" # Dette er også en tuppel, selv om det anbefales å sette den i parentes (husk at den krever minst ett komma ) ( 1 , 2 , 3 , 'abc' ) >>> ( 1 ) # Selv om dette i parentes ikke er en tuppel, siden den ikke har minst ett komma, så vil bare verdien 1 vises >>> ( 1 ,) # I stedet, i dette andre tilfellet, ja det er en tuppel ( 1 ,) >>> ( 1 , 2 ) # Med mer enn ett element er co ikke nødvendig ma finalen ( 1 , 2 ) >>> ( 1 , 2 ,) # Selv om du legger til det endrer ikke resultatet ( 1 , 2 )

Ordbøker

  • Klammer brukes til å erklære en ordbok{} . De inneholder elementer atskilt med komma, der hvert element består av et par clave:valor(symbolet :skiller nøkkelen fra dens tilsvarende verdi).
  • Ordbøker kan endres, det vil si at innholdet i en ordbok kan endres valorunder kjøring.
  • I stedet må de clavestil en ordbok være uforanderlige. Dette betyr for eksempel at vi ikke vil kunne bruke lister eller ordbøker som claves.
  • Den valorsom er knyttet til en clavekan være av hvilken som helst datatype , til og med en ordbok .
>>> ordbok = { "string" : "abc" , "number" : 42 , "list" : [ True , 42 L ]} # Ordbok som har forskjellige verdier for hver nøkkel, til og med en liste >>> ordbok [ " string" ] # Bruk en nøkkel, få tilgang til verdien 'abc' >>> ordbok [ "list" ][ 0 ] # Få tilgang til et listeelement innenfor en verdi (av verdien til nøkkelen "list", vis det første elementet ) Sann >>> ordbok [ "streng" ] = "xyz" # Tilordne verdien til en nøkkel på nytt >>> ordbok [ "streng" ] 'xyz' >>> ordbok [ "desimal" ] = 3.1415927 # Sett inn en ny nøkkel:verdi >>> ordbok [ "desimal" ] 3.1415927 >>> mixed_dictionary = { "tuple" : ( True , 3.1415 ), "dictionary" : ordbok } # Det er også mulig for en verdi å være en ordbok >> > blandet_ordbok [ "ordbok" ][ "liste" ][ 1 ] # Få tilgang til et element i en liste, funnet i en ordbok 42 L >>> ordbok = {( "abc" ,): 42 } # Ja det er mulig for en nøkkel til å være en tuppel, siden den er uforanderlig ble >>> ordbok = {[ "abc" ]: 42 } # Det er ikke mulig for en nøkkel å være en liste, siden den kan endres, noe som vil forårsake et unntak ( Unntak )

Bytt saksuttalelse

Python har svitsjhusstrukturen siden versjon 3.10. Dette har navnet Structural Pattern Matching .

samsvarsvariabel : tilfelle tilstand : # kode tilfelle tilstand : # kode tilfelle tilstand : # kode tilfelle _ : # kode

Det skal bemerkes at denne funksjonaliteten er betydelig mer kompleks enn det velkjente svitsj-tilfellet for de fleste språk, siden det ikke bare tillater en sammenligning av verdien, men det kan også sjekke typen av objektet og dets attributter. I tillegg kan den også utføre en direkte utpakking av datastrømmer, og sjekke dem spesifikt.

Følgende eksempel kontrollerer attributtene til vår forekomst av Punto. Hvis disse ikke er lik x10e y40, vil den gå til neste tilstand.

Det er viktig å merke seg at Punto(x=10, y=40)du ikke bygger et nytt objekt, selv om det kan se ut til å være det.

fra dataklasser importer dataklasse @dataclass class Punkt : x : int y : int koordinat = Punkt ( 10 , 34 ) match koordinat : kasus Punkt ( x = 10 , y = 40 ): # attributter "x" og "y" har den angitte verdien print ( "Koordinat 10, 40" ) kasus Punkt (): # hvis det er en forekomst av punkt print ( "det er en prikk" ) sak _ : # ingen betingelse oppfylt (standard) print ( "det er ikke en prikk" )

I tidligere versjoner er det forskjellige måter å utføre denne logiske operasjonen på på lignende måte:

Bruke if, elif, else

Vi kan bruke strukturen som følger:

>>> if condition1 : ... do1 >>> elif condition2 : ... do2 >>> elif condition3 : ... do3 >>> else : ... do

I den strukturen vil den bli utført kontrollerende betingelse1, hvis den ikke er oppfylt vil den gå til den neste og så videre til den andre går inn. Et praktisk eksempel vil være:

>>> def compute ( op , a , b ): ... hvis 'sum' == op : ... returner a + b ... elif 'rest' == op : ... returner a - b . .. elif 'mult' == op : ... return a * b ... elif 'div' == op : ... return a / b ... else : ... return Ingen >>> >> > skriv ut ( beregn ( 'sum' , 3 , 4 )) 7

Vi kan si at den negative siden av utsagnet med if, elif og else er at hvis listen over mulige operasjoner er veldig lang, må du gå gjennom dem en etter en til du kommer til den riktige.

Bruke ordbok

Vi kan bruke en ordbok for samme eksempel:

>>> def compute ( op , a , b ): ... return { ... 'sum' : lambda : a + b , ... 'rest' : lambda : a - b , ... 'mult' : lambda : a * b , ... 'div' : lambda : a / b ... } . ( op , lambda : Ingen )() >>> >>> print ( beregn ( 'sum' , 3 , 4 )) 7

På denne måten, hvis alternativene var mange, ville det ikke gå gjennom alle; det ville bare gå direkte til operasjonen som ble søkt i den siste linjen .get(op, lambda: None)() vi gir standardalternativet.

Setter

  • Sett er konstruert av set(items)hvor elementer er et gjentakbart objekt , for eksempel lister eller tupler . Sett opprettholder ikke rekkefølge og inneholder ikke dupliserte elementer.
  • De brukes vanligvis til å fjerne duplikater fra en sekvens, eller for matematiske operasjoner som kryss , union , forskjell og symmetrisk forskjell .
>>> immutable_set = frozenset ([ "a" , "b" , "a" ]) # Bruk en liste som et iterabelt objekt >>> immutable_set frozenset ([ 'a' , 'b' ]) >>> set1 = sett ([ "a" , "b" , "a" ]) # Første mutbare sett >>> sett1 sett ([ 'a' , 'b' ]) >>> sett2 = sett ([ "a" , "b " , "c" , "d" ]) # Andre mutable sett >>> sett2 sett ([ 'a' , 'c' , 'b' , 'd' ]) # Husk at de ikke opprettholder orden, som ordbøker >>> sett1 og sett2 # skjæringssett ([ 'a' , ' b' ]) >>> sett1 | sett2 # Union sett ([ 'a' , 'c' , 'b' , 'd' ]) >>> sett1 - sett2 # Differanse (1) sett ([]) >>> sett2 - sett1 # Differanse (2) sett ([ 'c' , 'd' ]) >>> sett1 ^ sett2 # Symmetrisk forskjellssett ( [ 'c' , 'd' ])

Listeforståelser

En listeforståelse er et kompakt uttrykk for å definere lister . Som lambda, det vises på funksjonelle språk. Eksempler:

>>> område ( 5 ) # "område"-funksjonen returnerer en liste som starter på 0 og slutter med det gitte tallet minus én [ 0 , 1 , 2 , 3 , 4 ] >>> [ i * i for i i området ( 5 )] # For hvert element i området, multipliser det med seg selv og legg det til resultatet [ 0 , 1 , 4 , 9 , 16 ] >>> liste = [( i , i + 2 ) for i i området ( 5 )] >>> liste [( 0 , 2 ), ( 1 , 3 ), ( 2 , 4 ), ( 3 , 5 ), ( 4 , 6 )]

Funksjoner

  • Funksjoner defineres med nøkkelordet def, etterfulgt av navnet på funksjonen og dens parametere. En annen måte å skrive funksjoner på , selv om det er mindre brukt, er med nøkkelordet lambda(som vises på funksjonelle språk som Lisp ).
  • Returverdien i with - funksjonenedef vil være den som er gitt med return.

def:

>>> def sum ( x , y = 2 ): ... return x + y # Returner summen av verdien av variabelen "x" og verdien av "y" ... >>> sum ( 4 ) # Variabelen "y" er ikke modifisert, og er dens verdi: 2 6 >>> sum ( 4 , 10 ) # Variabelen "y" er modifisert, og er dens nye verdi: 10 14

lambda:

>>> sum = lambda x , y = 2 : x + y >>> sum ( 4 ) # Variabelen "y" er ikke modifisert, og er dens verdi: 2 6 >>> sum ( 4 , 10 ) # Variabelen "y" er modifisert, og er dens nye verdi: 10 14

Klasser

  • Klasser defineres med nøkkelordet , etterfulgt av klassenavnet og , hvis de arver fra en annen klasse , klassenavnet .class
  • I Python 2.x ble det anbefalt at en klasse arver fra "Object", i Python 3.x er det ikke lenger nødvendig.
  • I en klasse tilsvarer en "metode" en "funksjon", og et "attributt" tilsvarer en "variabel". [ 32 ]
  • "__init__" er en spesiell metode som utføres når klassen instansieres, den brukes vanligvis til å initialisere attributter og utføre nødvendige metoder. Som alle metoder i Python, må den ha minst én parameter, vanligvis self. Resten av parameterne vil være de som er angitt når klassen instansieres .
  • Attributter som du ønsker skal være tilgjengelige utenfor klassen , må deklareres ved å bruke self.foran navnet.
  • I Python er det ikke noe konsept for innkapsling, [ 33 ]​ så programmereren må være ansvarlig for å tilordne verdiene til attributtene
>>> klasse Person (): ... def __init__ ( selv , navn , alder ): ... selv . navn = navn # Enhver attributt ... selv . alder = alder # Enhver annen attributt ... def display_age ( self ): # Den må ha minst én parameter, vanligvis: "self" ... print ( self . age ) # viser et attributt ... def modify_age ( self , alder ): # Endre alder ... hvis alder < 0 eller alder > 150 : # Sjekk at alderen ikke er mindre enn 0 (noe umulig), og heller ikke mer enn 150 (noe virkelig vanskelig) ... return False .. else : # Hvis i området 0-150, endres variabelen ... self . alder = alder # Endre alderen ... >>> p = Person ( 'Alice' , 20 ) # Instantier klassen, som du kan se, er verdien av "selv" ikke spesifisert >>> p . name # Variabelen "navn" til selve objektet er tilgjengelig fra utenfor 'Alice' >>> p . name = 'Andrea' # Så innholdet kan endres >>> p . navn 'Andrea' >>> s . show_age () # En metode i klasse 20 >>> p kalles . modify_age ( 21 ) # Det er mulig å endre alderen ved å bruke den spesifikke metoden vi har laget for å gjøre det på en kontrollert måte >>> p . show_age () 21

Moduler

Det er mange egenskaper som kan legges til språket ved å importere moduler, som er "minikoder" (de fleste også skrevet i Python) som gir visse funksjoner og klasser for å utføre bestemte oppgaver. Et eksempel er Tkinter- modulen , [ 34 ] som lar deg lage grafiske grensesnitt basert på Tk -biblioteket . Et annet eksempel er os -modulen , som gir tilgang til mange funksjoner i operativsystemet. Moduler legges til kodene ved å skrive importetterfulgt av navnet på modulen vi ønsker å bruke. [ 35 ]

Installere moduler (pip)

Installasjon av moduler i Python kan gjøres ved å bruke programvareverktøyet (vanligvis inkludert med Python-installasjoner) Pip . Dette verktøyet tillater administrasjon av de forskjellige installerbare pakkene eller modulene for Python, og inkluderer dermed følgende funksjoner:

  • Installasjon av pakker.
    • Installasjon av spesifikke versjoner av pakker.
    • Installasjon fra en konfigurasjonsfil.
  • Avinstaller.
  • Oppdater.
Grensesnitt til operativsystemet

Modulen gir deg funksjoner for å samhandle med operativsystemet:

>>> import os # Modul som gir operativsystemfunksjoner >>> os . name # Returnerer navnet på operativsystemet 'posix' >>> os . mkdir ( "/tmp/eksempel" ) # Opprett en katalog på den angitte banen >>> importtid # Modul for arbeid med datoer og klokkeslett >>> tid . strftime ( "%Y-%m- %d %H:%M:%S" ) # Ved å gi det et bestemt format, returnerer gjeldende dato og/eller klokkeslett '2010-08-10 18:01:17'

For filbehandlingsoppgaver gir shutil- modulen et grensesnitt på høyere nivå:

>>> importer shutil >>> shutil . kopifil ( 'data.db' , 'information.db' ) 'information.db' >>> shutil . move ( '/build/programs' , 'dir_progs' ) 'dir_progs' Fil jokertegn

Glob - modulen gir en funksjon for å lage fillister fra jokertegnsøk i mapper:

>>> import glob >>> glob . glob ( '*.py' ) [ 'numbers.py' , 'example.py' , 'example2.py' ] Kommandolinjeargumenter

Kommandolinjeargumenter lagres i sys -modulens argv-attributt som en liste.

>>> import sys >>> print ( sys . argv ) [ 'demo.py' , 'one' , 'to' , 'tre' ] Matematikk

Matematikkmodulen gir tilgang til matematiske funksjoner med flyttall:

>>> importer matematikk >>> matematikk . cos ( matte . pi / 3 ) 0 , 494888338963 >>> matte . log ( 1024 , 2 ) 10.0

Den tilfeldige modulen brukes til å gjøre tilfeldige valg:

>>> import tilfeldig >>> tilfeldig . valg ([ 'fersken' , 'eple' , 'jordbær' ]) 'fersken' >>> tilfeldig . sample ( range ( 100 ), 10 ) # valg uten erstatning [ 30 , 23 , 17 , 24 , 8 , 81 , 41 , 80 , 28 , 13 ] >>> tilfeldig . random () # a random float 0,23370387692726126 >>> random . randområde ( 6 ) # et tilfeldig heltall hentet fra område(6) 3

Statistikkmodulen brukes til grunnleggende statistikk, for eksempel: gjennomsnitt, median, varians osv .:

>>> importstatistikk >>> data = [ 1,75 , 2,75 , 1,25 , 0,5 , 0,25 , 1,25 , 3,5 ] >>> statistikk . _ gjennomsnitt ( data ) 1,6071428571428572 >>> statistikk . median ( data ) 1,25 >>> statistikk . varians ( data ) 1,3720238095238095 Datoer og klokkeslett

Datetime- modulen lar deg håndtere datoer og klokkeslett:

>>> fra dato og klokkeslett importdato >>> i dag = dato . i dag () >>> i dag dato klokkeslett . dato ( 2017 , 8 , 16 ) Skilpaddemodul

Skilpaddemodulen tillater implementering av skilpaddegrafer :

>>> importer skilpadde >>> skilpadde . pensize ( 2 ) >>> skilpadde . venstre ( 120 ) >>> skilpadde . fremover ( 100 )

Objektsystem

I Python er alt et objekt (selv klasser ). Klasser , som er objekter , er forekomster av en metaklasse . Python støtter også multippel arv og polymorfisme .

>>> string = "abc" # En streng er et objekt av "str" >>> streng . upper () # Som et objekt har det sine egne 'ABC'- metoder >>> list = [ True , 3.1415 ] # En liste er et objekt av "list" >>> list . append ( 42 L ) # En liste er også (som alt annet) et objekt, og har også sine egne metoder >>> liste [ True , 3.1415 , 42 L ]

Standardbibliotek

Python har et stort standardbibliotek som brukes til en rekke oppgaver. Dette kommer fra "batterier inkludert "-filosofien med henvisning til Python-moduler. Standard bibliotekmoduler kan forbedres med tilpassede moduler skrevet i både C og Python. På grunn av det store utvalget av verktøy inkludert i standardbiblioteket, kombinert med muligheten til å bruke lavnivåspråk som C og C++, som er i stand til å kommunisere med andre biblioteker, er Python et språk som kombinerer klar syntaks med enorm kraft av mindre elegante språk. [ 36 ]

Implementeringer

Det er flere implementeringer av språket:

  • CPython er den originale implementeringen, tilgjengelig for ulike plattformer på den offisielle Python-siden.
  • IronPython er implementeringen for .NET
  • Stackless Python er CPython-varianten som prøver å ikke bruke C -stakken ( www.stackless.com )
  • Jython er implementeringen laget i Java
  • Pippy er implementeringen laget for Palm ( pippy.sourceforge.net )
  • PyPy er en Python-implementering skrevet i Python og optimalisert ved hjelp av JIT ( pypy.org )
  • ActivePython er en proprietær implementering av Python med utvidelser for produksjonsservere og oppdragskritiske applikasjoner utviklet av ActiveState Software.

Hendelser

Gjennom historien har Python presentert en rekke hendelser, hvorav de viktigste har vært følgende:

  • En ny versjon av Python ble utgitt 13. februar 2009 under kodenavnet "Python 3000" eller " Py3K " for kort . [ 38 ] Denne nye versjonen inkluderer en hel rekke endringer som krever omskrivning av koden til tidligere versjoner. For å gjøre denne prosessen enklere, har et automatisert verktøy kalt 2to3 blitt utgitt sammen med Python 3 . [ 39 ]​ [ 40 ]
  • I Windows 10 -operativsystemet , fra mai 2019-oppdateringen, er Python-språkassistert forhåndsinstallasjonsfunksjon og flere av tilleggsverktøyene tilgjengelige. [ 41 ]

Se også

Referanser

  1. ^ "Changelog - Python-dokumentasjon" . python.org . Hentet 13. oktober 2022 . 
  2. "Hva er Python?" (html) . LUCA . Arkivert fra originalen 24. februar 2020 . Hentet 24. februar 2020 .  
  3. a b Historie og lisens
  4. a b The Making of Python
  5. ^ a b "Hvorfor ble Python opprettet i utgangspunktet?" . Vanlige spørsmål om Python. 
  6. 1. Hva din appetitt
  7. Tannhausser (12. juli 2018). "Guido van Rossum trekker seg som Python-leder" (html) . Replikantens blikk . Arkivert fra originalen 12. juli 2018 . Hentet 21. juli 2018 . "Som du kan se, overfører den ikke bare makt, men unngår også å utnevne en etterfølger og overlater oppgaven med å organisere overgangen, så vel som regjeringsmodellen i fremtiden, til kjerneutviklerne. » 
  8. ^ van Rossum, Guido (12. juli 2018). "[python-committers] Overføring av makt" (html) . Mail Archive Com (på engelsk) . Arkivert fra originalen 12. juli 2018 . Hentet 21. juli 2018 . «Jeg kommer ikke til å utnevne en etterfølger. Så hva skal dere alle gjøre? Skape et demokrati? Anarki? til diktatur? til forbund? » 
  9. ^ van Rossum, Guido (20. januar 2009). "En kort tidslinje for Python" . The History of Python (på engelsk) . Hentet 14. februar 2021 . 
  10. Chacón Sartori, Camilo. Databehandling og funksjonell programmering: en introduksjon til lambdaregning og funksjonell programmering ved bruk av racket og Python . [Barcelona]: Marcombo. ISBN  8426732437 . 
  11. Skjebnen til reduce() i Python 3000
  12. Dataprogrammering for alle
  13. Indeks for /cp4e
  14. a b Hva er nytt i Python 2.0
  15. PEP 227 -- Statisk nestede skoper
  16. PEP 252 og 253: Type- og klasseendringer
  17. PEP 255: Enkle generatorer
  18. PEP 282 – Et loggingssystem
  19. gjenging — Gjengegrensesnitt på høyere nivå
  20. "Python 2 Sunset" (på engelsk) . python.org . 21. januar 2020. 
  21. ^ "PEP 373 - Utgivelsesplan for Python 2.7 " . python.org . 21. januar 2020. 
  22. ^ "Python Developer's Guide - Python Developer's Guide " . devguide.python.org . 21. januar 2020. 
  23. "Maskinlæring med Python: En praktisk introduksjon" . edX (på engelsk) . Hentet 6. juli 2020 . 
  24. "Nederlandsk" refererer til Guido van Rossum , forfatteren av programmeringsspråket Python, som er nederlandsk . Det refererer også til den store konsentrasjonen av kjente nederlandske utviklere i forhold til andre nasjonaliteter.
  25. PEP 20 – The Zen of Python
  26. ^ "Arkiveret kopi" . Arkivert fra originalen 4. august 2018 . Hentet 25. februar 2010 . 
  27. Python Software Foundation. "Flere kontrollflytalternativer" . Python v2.7.8 Dokumentasjon . Hentet 20. juli 2014 . 
  28. Eric Huss. «Funksjonsdefinisjon» . C Library Reference Guide . Arkivert fra originalen 18. januar 2015 . Hentet 20. juli 2014 . 
  29. Álvarez, Miguel Ángel (2. november 2001). "Funksjoner i Javascript" . webdevelopment.com (på engelsk) . Hentet 20. juli 2014 . 
  30. David Goodger. "Code Like a Pythonista: Idiomatic Python" . Python.net (på engelsk) . Arkivert fra originalen 27. mai 2014 . Hentet 20. juli 2014 . 
  31. Downey, Allen; Elkner, Jeffrey (1. april 2002). "Lær å tenke som en programmerer med Python" (pdf) . Argentinsk Python . s. 40. Arkivert fra originalen 23. oktober 2017 . Hentet 21. mars 2020 .  
  32. Recuero de los Santos, Paloma (13. mai 2020). "Python for alle: Forskjellen mellom metode og funksjon" (html) . Arkivert fra originalen 14. mai 2020 . Hentet 13. mai 2020 .  
  33. Innkapsling i Python
  34. "Python GUI-eksempler (Tkinter Tutorial) - Like Geeks" . Som Geeks . 22. januar 2018 . Hentet 16. juli 2018 . 
  35. "Liten tur gjennom standardbiblioteket" . Python (og Django!) opplæring på spansk . Arkivert fra originalen 15. september 2017 . Hentet 16. august 2017 . 
  36. "The Python Standard Library" . docs.python.org . Hentet 26. april 2021 . 
  37. Python 3.0.1
  38. PEP 3000 -- Python 3000
  39. 2to3 - Automatisert Python 2 til 3 kodeoversettelse
  40. Hva er nytt i Python 3.0
  41. Dower, Steve (21. mai 2019). "Hvem la Python i Windows 10 mai 2019-oppdateringen?" (html) . Microsoft Blog (på engelsk) . Hentet 23. mai 2019 .  

Bibliografi

  • Knowlton, Jim (2009). python . tr: Fernández Vélez, María Jesús (1 utgave). Anaya Multimedia-Anaya Interactive. ISBN  978-84-415-2513-9 . 
  • Martelli, Alex (2007). Python. Referanseguide . tr: Gorjón Salvador, Bruno (1 opplag). Anaya Multimedia-Anaya Interactive. ISBN  978-84-415-2317-3 . 

Eksterne lenker