Python

Python
programmeringsspråk
ForfatterGuido van Rossum
Opprinnelsesdato20. februar 1991
Siste versjon3.10.7 (7. september 2022) og 3.11.0rc2 (12. september 2022)
Brukgenerisk, skripting
ParadigmerObjektorientert programmering
Skrivingdynamisk
Vanlige utvidelser.py, .pyw, .pyc, .pyo, .pyd
Påvirket avABC , ALGOL 68 , C , C ++ , Dylan , Haskell , Icon , Java , Lisp , Modula-3 , Perl
Det påvirketBoo , Cobra , D , F # , Falcon , Go , Groovy , JavaScript , Julia , Ruby , Swift , Perl 6
Referanseimplementering
OperativsystemMultiplattform
TillatelsePython Software Foundation-lisens
Nettstedwww.python.org/

Python er et objektorientert programmeringsspråk på "høyt nivå" som blant annet er egnet for utvikling av distribuerte applikasjoner , skripting , numerisk databehandling og systemtesting .

Designet av Guido van Rossumbegynnelsen av nittitallet , sammenlignes det ofte med Ruby , Tcl , Perl , JavaScript , Visual Basic eller Scheme [1] . Navnet ble valgt for oppfinnerens lidenskap for Monty Python og for deres TV-serie Monty Python's Flying Circus [2] .

Det er også ofte studert blant de første språkene for dets likhet med en pseudo-kode og brukes ofte til å simulere opprettelsen av programvare takket være eksperimenteringsfleksibiliteten tillatt av Python, som lar programmereren organisere ideer under utvikling, som f.eks. for eksempel å lage et spill via Pygame eller bakenden av et nettsted via Flask eller Django .

Python har også en grafikkdel, Python Turtle Graphics -modulen , som lar deg bruke kodelinjer på grafikk.

Beskrivelse

Det er et flerparadigmespråk som har blant sine hovedmål: dynamikk, enkelhet og fleksibilitet. Den støtter det objektorienterte paradigmet , strukturert programmering og mange funksjonelle og refleksjonsprogrammeringsfunksjoner .

De mest umiddelbart gjenkjennelige funksjonene til Python er de utypede variablene og bruken av innrykk for spesifikasjonssyntaks, i stedet for de mer vanlige parentesene.

Andre karakteristiske trekk er overbelastning av operatører og funksjoner gjennom delegater , tilstedeværelsen av et rikt utvalg av grunnleggende typer og funksjoner og standardbiblioteker, avanserte syntakser som slicing og listeforståelse .

Typekontrollen er sterk ( sterk skriving ) og utføres under kjøring ( dynamisk skriving ): en variabel er en beholder som en etikett (navnet) er knyttet til som kan assosieres med forskjellige beholdere selv av forskjellige typer i løpet av levetiden. Et søppelsamlersystem for automatisk frigjøring og gjenoppretting av arbeidsminne er en del av Python .

Python har en viss likhet med Perl , men designerne har valgt en mer grunnleggende og enhetlig syntaks med sikte på å forbedre lesbarheten til koden. På samme måte som Perl blir det ofte klassifisert som et skriptspråk , men selv om det er nyttig for å skrive systemskript , som et alternativ for eksempel til bash , er det store antallet biblioteker som er tilgjengelige og hvor lett språket lar deg skrive modulær programvare også favoriserer utvikling av svært komplekse applikasjoner.

Andre funksjoner

Selv om Python generelt betraktes som et tolket språk , blir ikke kildekoden direkte konvertert til maskinspråk . Faktisk går den først gjennom en pre-kompileringsfase i bytecode , som nesten alltid gjenbrukes etter den første kjøringen av programmet, og unngår dermed å tolke kilden på nytt hver gang og forbedre ytelsen. Videre er det mulig å distribuere Python-programmer direkte i bytecode, helt hoppe over tolkningsfasen av sluttbrukeren og få lukket kildekode-Python-programmer [3] .

I likhet med Lisp -språket og i motsetning til Perl, støtter Python- tolken også en interaktiv brukermodus ( REPL ) der du kan skrive inn kode direkte fra en terminal, og vise resultatet umiddelbart.

Videre er Python-tolken inneholdt i standardbiblioteket, så som i mange andre tolkede språk er det mulig å få evaluert vilkårlige strenger i gjeldende kontekst. Det er også mulig å overføre til tolken en helt annen kontekst, i form av lister som inneholder listen over definerte symboler.

Python har også et rammeverk for enhetstesting som støtter utviklingen av automatiserte enhetstester.

Ytelse

Sammenlignet med statisk skrevne kompilerte språk , slik som C , er ikke utførelseshastigheten en av Pythons styrker [4] , spesielt innen matematisk beregning. Videre er programmet utelukkende basert på én kjerne, og multi-threading er kun tilstede på abstrakt nivå. Det var en utvidelse, Psyco [5] , hvis utvikling ble avsluttet i 2012, som var en slags JIT-kompilator , som var i stand til å øke hastigheten på enkelte typer kode betydelig, spesielt implementeringen av algoritmer, på bekostning av økt minne som brukes. Et nåværende og aktivt utviklet prosjekt for å forbedre Python-kodeytelsen med en JIT-kompilator er PyPy [6] .

Python lar deg enkelt omgå hindringen for ren ytelse: det er faktisk relativt enkelt å skrive en utvidelse i C eller C++ og deretter bruke den i Python, og dermed utnytte den høye hastigheten til et språk som kun er kompilert i de delene der den tjener faktisk og utnytter i stedet kraften og allsidigheten til Python for resten av programvaren [7] .

Andre implementeringer

Følgende Python-implementeringer er tilgjengelige for øyeblikket:

Datatyper og strukturer

Ettersom Python er dynamisk skrevet , er alle variabler faktisk pekere til objekter . For eksempel, hvis en variabel er tildelt en heltallsverdi, kan en streng eller en liste tildeles umiddelbart etterpå. På den annen side har objekter en type.

Python forventer moderat typekontroll ved kjøretid, dvs. kjøretid . Numeriske typer har implisitt konvertering, så det er for eksempel mulig å multiplisere et komplekst tall med et heltall. Det er ingen implisitt konvertering mellom tall og alfanumeriske strenger; derfor er et tall et ugyldig argument for strengoperasjoner, i motsetning til det som skjer for eksempel i PHP-språket.

Python har forskjellige maler / biblioteker som skal brukes for å gi funksjonalitet uten å måtte skrive kode, for eksempel skilpaddegrafikk [14] (for tegning), kopi [15] (for å lage kopier av objekter ), tilfeldig [16] (for å generere tilfeldig tall), sys [17] (for å samhandle fra kommandolinjen med tolken) og tid (for å operere med tid- og datoenheter).

Python tilbyr et stort antall grunnleggende typer , hovedsakelig numeriske og containere. Karakteristisk er den opprinnelige støtten, i tillegg til klassiske typer som heltall, flyttall (tall med flytende komma) og alfanumeriske strenger, enda mer avanserte typer som heltall av vilkårlig størrelse, komplekse tall, lister , sett og ordbøker . Det er imidlertid ingen spesifikk type for karakterene.

Mange andre typer kan importeres fra standardbiblioteker og nye typer kan opprettes gjennom klasser .

Turtle Graphics

Skilpaddemodulen kan, i likhet med de andre bibliotekene, importeres med den aktuelle importfunksjonen, ved å skrive inn kildekoden:

importere skilpadde fra skilpadde import Turtle , Skjerm

Kommandoene skrevet ovenfor gjør Turtle- og Screen-objektene tilgjengelige, hvis funksjoner kan tilordnes til virkelige objekter som følger:

fra turtle import Turtle , Screen # dette vil importere en skilpadde (pytonpenn) og skjermen. Bakgrunn = Skjerm () # slik at du tilordner hver funksjon og egenskap til Skjerm til Bakgrunn. Penn = Skilpadde () #dette vil være pennen. # Selvfølgelig kan et hvilket som helst objektnavn tilordnes skilpadden og skjermen og endres i løpet av programmet.

Alle funksjonene til bakgrunnen og pennen kan brukes ved å kalle dem som i koden nedenfor:

Penn . sirkel ( 5 ) # for eksempel vil sirkelfunksjonen lage en sirkel som har verdien i parentes som en radius #settfargefunksjonen (både referert til skilpadden og bakgrunnen) bestemmer fargen Bakgrunn . setcolor ( "oransje" ) # ved å bruke ønsket fargenavn Bakgrunn . setcolor ( "FFFFFF" ) #o ved å skrive fargen i heksadesimal RGB

Numeriske typer

Heltall ( int) og flytende komma ( ) typer floathar en størrelse avhengig av maskinvaren og implementeringen av tolken, vanligvis 32 og 64 biter . longVilkårlig store heltall ( som blir standardalternativet for heltall som starter med Python 3.0) og komplekse tall ( ) er naturlig forventet complex.

Python har alle de viktigste logiske og aritmetiske operatorene mellom tall, inkludert eksponentiering. Den boolske typen ( bool) tilhører også tallkategorien.

Siden versjon 2.4 av Python er desimaltall () også tilgjengelig som et bibliotek [18]decimal , det vil si flyttall med ubegrenset presisjon, slik som de som er tilgjengelige i REXX eller Cobol , som ikke lider av avrundings- og stabilitetsproblemer som er typiske for flytende tall klassiske poeng .

Beholdere

Python anser generelt som beholdere objekter som gir mulighet for å iterere over et sett med elementer, og derfor kan brukes i kontekster som løkken forog funksjoner som sum, søk og sortering. Containere lar deg vanligvis holde heterogene data.

Når det gjelder selve standardbeholderne, kan de klassifiseres som sekvenser , sett og ordbøker . Beholderne følger en felles filosofi og deler de fleste metodene .

Sekvenser er ordnede beholdere, delingsmetoder basert på sortering, heltallsindeksering og oppretting av undersekvenser via slicing .

Lister ( ) er listutvidbare sekvenser, mens tupler ( tuple) er uforanderlige sekvenser. Alfanumeriske strenger ( og ) regnes også som sekvenser . Fra og med Python 3.0 er typene og forent, og typen vises , omtrent tilsvarende en binær streng. strunicodestrunicodebyte

Alle de klassiske strengoperasjonene som sammenkobling, formatering, søk, erstatt og så videre er gitt. Strenger i Python er uforanderlige sekvenser, slik at enhver operasjon som på en eller annen måte kan endre en streng, for eksempel å erstatte et tegn, faktisk returnerer en ny streng, slik den gjør i Java og C #.

Andre beholdere er ordbøker ( dict), kjent i andre sammenhenger som hashtabeller eller assosiative arrays . Det er en syntaks for å lage ordbøker, hvis elementer er spesifisert av et datapar atskilt med kolon ':'. Det første elementet i paret representerer indeksen, kalt "nøkkel", og det andre er dens tilsvarende verdi. Faktisk kalles hvert element i en ordbok også et "nøkkelverdi-par".

For eksempel oppretter følgende setning en ordbok identifisert som dizsammensatt av to elementer hvis nøkler er henholdsvis wikipediaog wikiquote, og med tilhørende heltallsverdier 40og 60:

diz = { 'wikipedia' : 40 , 'wikiquote' : 60 }

Nøklene i en ordbok er uforanderlige, mens verdien som tilsvarer hver tast kan endres gjennom en tilordning. Følgende instruksjon endrer verdien som tilsvarer "wikipedia", og bringer den til 4500:

diz [ 'wikipedia' ] = 4500

Fra og med versjon 2.7 av Python [19] støttes også sett ( setog ), dvs. uordnede sett med hashbare objekter . frozenset

Objektorientert organisasjon

Python - systemet er godt integrert med klassesystemet . Selv om basetyper ikke formelt sett er klasser, som for eksempel i C # , kan en klasse fortsatt arve fra dem. På denne måten er det mulig å utvide strenger, ordbøker og til og med heltall. Multippel arv støttes også [20] .

Omfattende type- og klasseintrospeksjonsfunksjoner støttes også . Typer og klasser er i seg selv objekter som kan utforskes og sammenlignes. Attributter administreres i en ordbok.

Syntaks

Python er designet for å være lett lesbar og skrivbar. Visuelt presenteres det på en lineær og ren måte, med få syntaktiske konstruksjoner sammenlignet med andre strukturerte språk som C , Perl eller Pascal .

For eksempel har Python bare to former for loop: forden itererer over elementer i en liste eller en iterator (tilsvarer foreachPerl eller PHP) og whileden går i loop så lenge det spesifiserte boolske uttrykket er sant. I utgangspunktet mangler den C-stil loops for, do whileog until, men alle disse kan uttrykkes med enkle ekvivalenter. På samme måte har den bare konstruksjonen if elif elsefor betingede valg, men den har verken switcheller goto.

Innrykk

Et uvanlig aspekt ved Python er metoden den bruker for å avgrense programblokker, noe som gjør den unik blant de mest populære språkene.

På språk avledet fra ALGOL som Pascal, C og Perl, er kodeblokkene angitt med parentes eller med nøkkelord; for eksempel C og Perl bruker { }mens Pascal bruker beginog end. På disse språkene er det bare en ren konvensjon for utviklere å rykke inn (dvs. "innrykke" fra venstre marg på siden) kildekoden inne i en blokk for å forbedre lesbarheten og tydeliggjøre strukturen til utførelsesflyten.

I stedet henter Python innrykksystemet sitt fra det mindre kjente Occam -programmeringsspråket : i stedet for å bruke parenteser eller nøkkelord, bruker den selve innrykk for å indikere nestede blokker i forbindelse med "kolon"-tegnet (:). I Python kan du bruke både en tabulering og et vilkårlig antall mellomrom, forutsatt at de selvfølgelig brukes på en måte som er kongruent med syntaksen til språket. Følgende eksempel klargjør dette ved å vise C- og Python-versjonen av funksjoner for beregning av faktorialet til et heltall.

Faktor i C:

faktoriell int ( int x ) { if ( x == 0 ) returner 1 ; ellers returner x * faktorial ( x -1 ); }

Faktor i Python:

def factorial ( x ): hvis x == 0 : return 1 else : return x * factorial ( x - 1 )

Til å begynne med kan denne måten å indikere blokker på og uttrykke syntaksen forvirre ideene til de som kommer fra andre språk, men så viser den seg å være svært fordelaktig, fordi den er kortfattet og forplikter til å skrive riktig innrykkede kilder, og dermed øke lesbarheten til kode.

Ulempen er at håndteringen av mellomrom og tabulatortegn kan være forskjellig fra en tekstredigerer til en annen, noe som tvinger deg til å være nøye med å rykke inn koden eller stole på de automatiske innrykkfunksjonene som nå finnes i de fleste programredigerere. Det kan også skje at du jobber med forskjellige kildekoderedigerere, på forskjellige datamaskiner, og dermed ender opp med kildekode som bruker tabulatorer og mellomrom på en blandet måte, og merker feilen først under kjøring.

Python tillater også noen snarveier for å skrive "flere" kode på samme linje. Hvis kolon (:) starter en innrykket blokk med bare én linje: vi kan flytte den etter ett mellomrom senere.

hvis b > a : print ( "b er større enn a" )

Selv om det ikke er veldig bra for puristene av Python-språket, er det fortsatt mulig å bruke "semikolon" (;) som i de fleste programmeringsspråk for å indikere at en instruksjon er ferdig, og for å starte en annen på samme linje.

a = b + 10 ; print ( "Hei verden" ); b = 243-23 ; _ _

Funksjonell programmering og avansert syntaks

En annen styrke ved Python er tilgjengeligheten av elementer som letter funksjonell programmering . Funksjoner regnes som objekter og kan derfor brukes som alle andre objekter, for eksempel ved å sette dem inn i samlinger eller bruke dem direkte som parametere for andre funksjoner. Funksjonelle programmeringselementer, sammen med spesifikke konstruksjoner for håndtering av containere, gjør det enda mer praktisk å jobbe med lister eller andre containertyper.

Slicings er en indekseringslignende konstruksjon som er i stand til å oppnå undersekvenser ved å spesifisere start-, slutt- og 'trinn'-indeksene.

tall = [ 1 , 2 , 3 , 4 , 5 ] partall = tall [ 1 :: 2 ] # eksempel på skjæring

Listeforståelsen er en konstruksjon hentet fra funksjonsspråket Haskell og tillater "fylling" av en liste - ved hjelp av en spesiell syntaks - som vi kan se i følgende eksempel der de første fem potensene av to er beregnet:

tall = [ 1 , 2 , 3 , 4 , 5 ] potenser_av_to = [ 2 ** n for n i tall ] # eksempel på listeforståelse

Generatorer , på den annen side, er spesielle objekter som er i stand til å bygge samlinger på en dynamisk måte, nyttige for å øke effektiviteten, spesielt tilstedeværelsen av iterasjoner på et stort antall elementer. Generatoruttrykk , i likhet med listeforståelser, er et raskt og effektivt verktøy for å lage generatorer . Yield- nøkkelordet lar deg lage generatorer med en syntaks som ligner veldig på en funksjon.

La oss gå videre til noen eksempler; generator uttrykk :

tall = [ 1 , 2 , 3 , 4 , 5 ] potenser_av_to = ( 2 ** n for n i tall ) # generator

Eller, for mer kontroll, som en vanlig funksjon, kan vi bruke nøkkelordet yield i stedet for return , for å gjøre funksjonen vår til en generator. På denne måten "lagrer" funksjonen sin tilstand, og gjenopptar deretter kjøringen av koden når verdien av neste avkastning hentes frem .

tall = [ 1 , 2 , 3 , 4 , 5 ] def potens_av_to ( tall ): for n i tall : gi 2 ** n gen = potens_av_to ( tall )

Bruken er identisk. Den neste funksjonen kalles som returnerer en ny verdi hver gang, og gjenopptar kjøring av kode fra nøkkelordet yield . Når verdiene er ferdige, oppstår et StopIterationError- unntak . Det er imidlertid ikke den eneste måten å samhandle med generatorene på, og du kan spore dataene som sendes til funksjonen på denne måten:

gen = ( 2 ** n for n i området ( 1 , 6 )) for x i gen : print ( x )

For å lage en liste fra en generator, bruk ganske enkelt anropslisten (gen):

gen = ( 2 ** n for n i området ( 1 , 6 )) print ( liste ( gen ))

Generatorer foretrekkes fremfor lister da de ikke tar opp minne, siden verdiene ganske enkelt beregnes fra tid til annen og ikke forblir i minnet. For dette er det tilrådelig å bruke for eksempel xrange (som er en generator) i stedet for range (som returnerer en liste) med svært store tall, for å sikre større hastighet

Det er også mulig å skrive if ... else-uttrykk på en enkelt linje, noe som er nyttig i kombinasjon med lambdas (se nedenfor).

import tilfeldig l = [ 1 , 2 ] a = tilfeldig . valg ( l ) print ( 'Riktig!' hvis a == 1 annet 'Feil!' )

Siden Python lar deg ha funksjoner som argumenter , er det også mulig å ha mer subtile funksjonelle konstruksjoner, for eksempel fortsettelse . [21] .

I Python er det nøkkelordet lambda, spesielt nyttig i sammenhenger der det er nødvendig å utføre små operasjoner som sannsynligvis bare vil bli utført i det området av koden:

>>> l = [ 1 , 2 , 3 , 4 , 5 ] # eller område (1,6) >>> print ( kart ( lambda x : x + 10 , l )) [ 11 , 12 , 13 , 14 , 15 ]

Denne bruken av kart er imidlertid omstridt, og det foretrekkes å bruke listeforståelser:

>>> l = [ 1 , 2 , 3 , 4 , 5 ] # eller område (1,6) >>> print ([ x + 10 for x i l ]) [ 11 , 12 , 13 , 14 , 15 ]

Imidlertid kan blokker lambdabare inneholde uttrykk , ikke setninger . De er derfor ikke den mest generelle måten å returnere en funksjon på. I stedet kan du bruke følgende teknikk som returnerer en funksjon hvis navn er definert i et lokalt omfang , det vil si en closure :

def multiple_adder ( x , y ): def adderer ( z ): returner z + x + y return ( x + y + adderer ( x + y )) # ville være (x + y) * 3

Dekoratører

En dekoratør er et hvilket som helst påkallelig Python-objekt som brukes til å legge til kode i begynnelsen eller slutten av en funksjon, metode eller klassedefinisjon, uten å endre koden internt. En dekoratør passerte objektet og returnerer det endrede objektet.

Dekoratører er delvis inspirert av Java-notasjon, har lignende syntaks og regnes som syntaktisk sukker . De bruker @som et nøkkelord:

@viking_chorus def menu_item (): print ( "spam" )

Dekoratører kan lenkes ved å plassere flere i tilstøtende linjer:

@invincible @favorite_color ( "Blue" ) def black_knight (): pass

og tilsvarer:

def black_knight (): pass black_knight = uovervinnelig ( favoritt_farge ( "Blå" ) ( black_knight ))

Standard dekorasjonsstruktur er:

def favorite_color ( color ): def decorator ( func ): def wrapper (): print ( color ) func () return wrapper return decorator

Kommentarer

Som andre programmeringsspråk kan du i Python legge igjen kommentarer i kodelinjer for bedre å forstå hva som skjer når du kjører programmet. I Python introduseres kommentarer (fra de aller første versjonene av programmeringsspråket) med "#"-symbolet for ikke å endre koden.

print ( "noe tilfeldig" ) #dette programmet skriver ut "noe tilfeldig" og ignorerer alt etter "#"-symbolet skriv ut ( "å gå head to head effekten av hashen forsvinner og koden påvirker programmet" )

Håndtering av unntak

Python støtter i stor grad og bruker unntakshåndtering som et middel til å rapportere og sjekke feiltilstander, inkludert unntak forårsaket av syntaksfeil.

Unntak tillater mer kortfattet og pålitelig feilkontroll enn mange andre mulige måter som vanligvis brukes til å rapportere feil eller unormale situasjoner. Unntakene er trådsikre ; de overbelaster ikke kildekoden som å se etter feilreturverdier, og de kan enkelt spre opp stabelen av funksjonskall når en feil må rapporteres på et høyere nivå i programmet.

Med unntakshåndtering erstattes forebyggende kontroller av en enklere mekanisme som lar deg utføre ønsket handling direkte og separat fange opp eventuelle unntak som kan oppstå. I tillegg til feilhåndtering, brukes unntak noen ganger i Python også for flytkontroll: for eksempel iterasjonsoperasjonen, og følgelig er sløyfen for,basert på en unntakssignalering.

Standard bibliotek

Python har et omfattende standardbibliotek , som gjør det egnet for mange bruksområder. I tillegg til standard bibliotekmoduler kan du legge til andre skrevet i C eller Python for å møte dine spesielle behov. Blant modulene som allerede er tilgjengelige er det for å skrive webapplikasjoner: MIME , HTTP og alle andre Internett-standarder støttes. Moduler er også tilgjengelige for å lage applikasjoner med et grafisk grensesnitt, for å koble til relasjonsdatabaser , for å bruke regulære uttrykk .

Standardbiblioteket er en av Pythons sterke sider. Faktisk er den kompatibel med alle plattformer, med unntak av noen få funksjoner, tydelig merket i dokumentasjonen som spesifikt for en bestemt plattform.

Programeksempler

Hei Verden!

Følgende Python-programeksempel (versjon 3.0) skriver ut teksten " Hello, world! ":

print ( "Hei, verden!" )

Følgende er det samme programmet som kjører med versjon 2.7 eller tidligere:

print "Hei verden!"

Opprette en socket, sende forespørsler og motta data

import stikkontakt #creations socket s = socket . stikkontakt () # servertilkobling (google) s . koble til (( "www.google.com" , 80 )) #the request request = request = "GET / HTTP / 1.1 \ n Vert: www.google.com \ n \ n " #sender kodede data s . send ( forespørsel . kode ()) #receive data (google hjemmeside) data = s . recv ( 2048 ) mens len ( data ) > 0 : print ( data ) data = s . recv ( 2048 )

Streng og inndataformatering

a = input ( 'Name:' ) b = input ( 'Etternavn:' ) c = input ( 'Alder:' ) print ( f "Navn = { a } \ n Etternavn = { b } \ n Alder = { c } " ) #men du kan også: skrive ut ( " Navn = {} \ n Etternavn = {} \ n Alder = {} " . format ( a , b , c ))

Binær RGB, Hex RGB

Følgende eksempel på et Python-program (versjon 3.8.5 [22] ) konverterer en inngang til en RGB -kodet farge med de nødvendige trinnene for røde, grønne og blå prosenter :

def RGB_bin (): import streng prosent1 = input ( "rød ( % d eks):" ) prosent2 = input ( "grønn ( % d ex):" ) prosent3 = input ( "blå ( % d eks):" ) print ( "Koder i RGB en farge med" + str ( percentage1 ) + " % av f rød," + str ( percentage2 ) + " % av f grønn og" + str ( percentage3 ) + " % av f blå ... " ) print ( str ( prosent1 ) + ": 100 = X: 256, så X =" + str ( prosent1 ) + "* 256 / 100." ) X = flyte ( int ( prosent1 ) * 256/100 ) _ _ print ( str ( percentage2 ) + ": 100 = Y: 256, så Y =" + str ( percentage2 ) + "* 256 / 100." ) Y = flyte ( int ( prosent2 ) * 256/100 ) _ _ print ( str ( percentage3 ) + ": 100 = Z: 256, så Z =" + str ( percentage3 ) + "* 256 / 100." ) Z = flyte ( int ( prosent3 ) * 256/100 ) _ _ X = bin ( int ( X )) Y = bin ( int ( Y )) Z = bin ( int ( Z )) binær_farge = ( str ( X ) + "" + str ( Y ) + "" + str ( Z )) print ( "Farge kodet med binære sifre:" + str ( binær_farge [ 2 :])) def RGB_hex (): prosent1 = input ( "rød ( % d eks):" ) prosent2 = input ( "grønn ( % d ex):" ) prosent3 = input ( "blå ( % d eks):" ) print ( "Koder i RGB en farge med" + str ( percentage1 ) + " % av f rød," + str ( percentage2 ) + " % av f grønn og" + str ( percentage3 ) + " % av f blå ... " ) print ( str ( prosent1 ) + ": 100 = X: 256, så X =" + str ( prosent1 ) + "* 256 / 100." ) R = flyte ( int ( prosent1 ) * 256/100 ) _ _ print ( str ( percentage2 ) + ": 100 = Y: 256, så Y =" + str ( percentage2 ) + "* 256 / 100." ) G = flyte ( int ( prosent2 ) * 256/100 ) _ _ print ( str ( percentage3 ) + ": 100 = Z: 256, så Z =" + str ( percentage3 ) + "* 256 / 100." ) B = flyte ( int ( prosent3 ) * 256/100 ) _ _ R = hex ( int ( R )) G = hex ( int ( G )) B = hex ( int ( B )) heksadesimal_farge = ( str ( R ) + "" + str ( G ) + "" + str ( B )) print ( "Farge kodet med heksadesimale sifre:" + str ( heksadesimal_farge [ 2 : 5 ]) + str ( heksadesimal_farge [ 7 : 10 ]) + str ( heksadesimal_farge [ 12 : 14 ]))

Utdataene fra kildekoden ovenfor er som følger:

======== START OM : D : \ Python \ Python \ Python38 - 32 \ Python3 .8.5 fra pc \ RGB . py ======= >>> RGB_bin () rød ( % dex ): 30 grønn ( % dex ): 40 blå ( % dex ): 20 Koding i RGB en farge med 30 % rødt , 40 % grønt og 20 % blått ... _ _ _ 30 : 100 = X : 256 , s eller X = 30 * 256/100 . 40 : 100 = Y : 256 , s eller Y = 40 * 256/100 . 20 : 100 = Z : 256 , s eller Z = 20 * 256/100 . Fargekodet med binære sifre : 1001100 0b1100110 0b110011 _

Definisjon av en klasse

I Python er det mulig å lage klasser gjennom en spesifikk setning ( class) som representerer det enkleste, men ikke eksklusive, alternativet for å definere nye datatyper. Spesielle funksjoner i Python er muligheten for multippel arv, definisjonen av attributter ved initialisering og ikke ved erklæring, den eksplisitte erklæringen av den refleksive parameteren i instansmetodene og overbelastning av funksjoner og operatører.

Den refleksive parameteren kalles konvensjonelt 'selv', men språket legger ingen begrensninger på valget. Det er heller ikke lagt begrensninger på definisjonen av attributter: attributter eksisterer fra det øyeblikket de er tildelt og tildelingen kan finne sted på konstruksjonstidspunktet (metode __init__, foretrekkes) eller innenfor andre metoder. I tillegg kan attributter legges til eksternt til klassen eller direkte til et objekt.

Python skiller mellom instans-, klasse- eller statiske metoder. Attributter kan være forekomst eller klasse i stedet. Støtten for informasjonsskjul er delvis, men integrert av egenskapsverktøyet som lar deg definere virtuelle attributter med ønskede tilgangsegenskaper.

I tillegg er det "spesielle" metoder knyttet til operatører og innebygde funksjoner. Redefinering av metoden __add__redefinerer for eksempel addisjonsoperatoren når den første operanden er av den definerte typen, mens __str__konverteringen omdefineres til streng. Metodeoverbelastning er ikke tillatt. Gjennom bruk av refleksjon og metaklasser er det også mulig å tilpasse definisjonen av klassene ytterligere.

For eksempel en Person-klasse, som bare har en enkel konstruktør og en metode som returnerer hele navnet. Det anbefales på det sterkeste å lage bare "ny stil"-klasser, dvs. klasser som arver (direkte eller indirekte) fra objekt [23] .

Fra og med Python 3.6 er det mulig å bruke en ny funksjon kalt "f-strenger" [24] . Ved å sette bokstaven f foran anførselstegnene som åpner erklæringen til en streng, aktiveres denne funksjonen. Takket være det er det mulig å inkludere variabler i en streng ved å sette inn navnet deres i krøllede parenteser. På denne måten gjør vi koden mye mer lesbar uten å måtte bruke en serie med + for å sette sammen variabler og tomme strenger. Videre, hvis vi ønsker å inkludere en variabel eller et ikke-strengobjekt, vil konverteringen skje automatisk, og lagrer TypeError-unntaket.

klasse Person ( objekt ): # Konstruktør av klassen def __init__ ( selv , fornavn , etternavn ): selv . navn = selvnavn . _ etternavn = etternavn def full_name ( self ): full = f 'Mr. { selv . etternavn } { selv . navn } ' returner full person = Person ( 'John' , 'Smith' ) print ( person . full_name ())

Utgangen som presenteres vil være følgende:Sig. Rossi Mario

Perfekte tall opp til n

Utdataene returnerer perfekte tall opp til n (skrives inn på trykk).

"" "Perfekte tall" "" def print_perfect ( n ): "" "Skriv ut perfekte tall opp til n" "" for i i området ( 2 , n + 1 ): sum = 0 for j i området ( 1 , i // 2 + 1 ): # Utover halvparten + 1 er det ikke flere divisorer hvis i % j == 0 : sum + = j # Legg til for å summere divisoren funnet #print (i, j , sum) # Skriver ut mellomverdier om nødvendig if sum == i : print ( i , end = "" ) print ( print_perfect ())

Merknader

  1. ^ Fra 2.6.4-distribusjonen README -filen: " Hva er Python egentlig? Python er et tolket, interaktivt objektorientert programmeringsspråk som er egnet (blant annet bruk) for distribuert applikasjonsutvikling, skripting, numerisk databehandling og systemtesting. Python sammenlignes ofte. til Tcl, Perl, Java, JavaScript, Visual Basic eller Scheme. "
  2. ^ Kilde: Arkivert kopi , på python.org . Hentet 27. oktober 2009 (arkivert fra originalen 17. desember 2009) .
  3. ^ Hvordan lager jeg en .pyc-fil? , på effbot.org . Hentet 28. mai 2020 .
  4. ^ Python 3 vs C gcc - Hvilke programmer er raskest? | Computer Language Benchmarks Game , på benchmarksgame-team.pages.debian.net . Hentet 28. mai 2020 .
  5. ^ Psyco-hjemmeside , på psyco.sourceforge.net . Hentet 28. mai 2020 .
  6. ^ PyPy - teamet, PyPy , på PyPy , 28. desember 2019. Hentet 28. mai 2020 .
  7. ^ Real Python, Python Bindings: Calling C or C ++ From Python - Real Python , på realpython.com . Hentet 28. mai 2020 .
  8. ^ Jython: Python for Java-plattformen
  9. ^ IronPython: Python-programmeringsspråket for .NET Framework
  10. ^ Python-programmeringsspråket for S60-mobiltelefoner
  11. ^ PyPy Arkivert 13. januar 2007 på Internet Archive .
  12. ^ Side der opplastede filer lagres , Repl.it.
  13. ^ SL4A på Google Code
  14. ^ 24.1. turtle - Turtle graphics - Python 3.3.7 dokumentasjon , på docs.python.org . Hentet 28. mai 2020 .
  15. ^ 8.17. kopi - Grunne og dype kopieringsoperasjoner - Python 2.7.18-dokumentasjon , på docs.python.org . Hentet 28. mai 2020 .
  16. ^ random - Generer pseudo-tilfeldige tall - Python 3.8.3-dokumentasjon , på docs.python.org . Hentet 28. mai 2020 .
  17. ^ 28.1. sys - Systemspesifikke parametere og funksjoner - Python 2.7.18-dokumentasjon , på docs.python.org . Hentet 28. mai 2020 .
  18. ^ 9.4. desimal - Desimal fast punkt og flytepunkt aritmetikk - Python 2.7.18 dokumentasjon , på docs.python.org . Hentet 28. mai 2020 .
  19. ^ 5. Innebygde typer - Python 2.7.18-dokumentasjon , på docs.python.org . Hentet 28. mai 2020 .
  20. ^ Multiple Inheritance , på Python ABC . Hentet 28. mai 2020 .
  21. ^ Fortsettelser gjort enkle og illustrerte
  22. ^ utgivelsesversjon 3.8.5 , på Python.org .
  23. ^ En ny stil for |-klassene Python-it.org # det italienske referansepunktet for Python-entusiaster , på python-it.org . Hentet 23. juni 2010 (arkivert fra originalen 6. august 2010) .
  24. ^ PEP 498 - Literal String Interpolation , på Python.org . Hentet 23. mai 2019 .

Bibliografi

  • Micha Gorelick, Ian Ozsvald, Python på full kraft. Høy ytelse praktisk programmering , Milan, Hoepli, 2015, s. 376, ISBN  9788820367015 .
  • Mark Lutz, Learning Python , Milan, New Techniques, 2011, s. 1097, ISBN  9788848125956 .
  • ( EN ) Luciano Ramalho, Fluent Python: Clear, Concise, and Effective Programming , O'Reilly Media, 2015, s. 792, ISBN  9781491946008 .

Relaterte elementer

Andre prosjekter

Eksterne lenker