Dette er en Python wrapper for TA-LIB basert på Cython i stedet for SWIG. Fra hjemmesiden: TA-Lib er mye brukt av handelsprogramvareutviklere som krever å utføre teknisk analyse av finansielle markedsdata. Inkluderer 150 indikatorer som ADX, MACD, RSI, Stochastic, Bollinger Bands, etc. Lysestake mønster anerkjennelse Open-source API for CC, Java, Perl, Python og 100 Managed De originale Python bindingene bruker SWIG som dessverre er vanskelig å installere og arent så effektive som de kunne være. Derfor bruker dette prosjektet Cython og Numpy til å binde seg effektivt til TA-Lib-produserende resultater 2-4 ganger raskere enn SWIG-grensesnittet. Installer TA-Lib eller Les dokumentene I likhet med TA-Lib, gir funksjonsgrensesnittet en lett innpakning av de eksponerte TA-Lib-indikatorene. Hver funksjon returnerer et output-array og har standardverdier for parametrene, med mindre det angis som søkeordargumenter. Vanligvis vil disse funksjonene ha en innledende tilbakekallingsperiode (et nødvendig antall observasjoner før en utgang genereres) satt til NaN. Alle de følgende eksemplene bruker funksjonen API: Beregn et enkelt glidende gjennomsnitt av de lukkede prisene: Beregning av bollinger-bånd, med triple eksponentielt glidende gjennomsnitt: Beregning av momentum av de nære prisene, med en tidsperiode på 5: Abstrakt API Hurtigstart Hvis du allerede kjent med bruk av funksjonen API, bør du føle deg hjemme ved hjelp av abstrakt API. Hver funksjon tar samme innspill, passert som en ordbok med Numpy-arrays: Funksjoner kan enten importeres direkte eller instantiated etter navn: Derfra er anropsfunksjoner i utgangspunktet det samme som funksjonen API: Lær om mer avansert bruk av TA-Lib her . Støttede indikatorer Vi kan vise alle TA-funksjonene som støttes av TA-Lib, enten som en liste eller som en dikt sortert etter gruppe (for eksempel Overlap Studies, Momentum Indicators, etc): Function GroupsSpyder - Python IDE Måned 16. september 2013 Hans Fangohr. University of Southampton, Storbritannia, 2013 Spyder har utviklet seg til et ganske modent og veldig produktivt verktøy her, jeg prøver å gi en opplæring. Denne dokumentasjonen er motivert av kurs i Python og beregningsmodellering for studenter ved University of Southampton (se historisk notat for flere detaljer). Denne bloggoppføringen er integrert i Spyder som veiledning. Når Spyder har startet, kan den nyeste versjonen av denne opplæringen finnes under Help - gt Spyder-veiledning. Få hallo verdensfilen inn i Spyder-editorens vindu ved å enten Last ned hello. py og lagre som hei. py. (Du laster ned filen ved å høyreklikke på koblingen i nettleseren din, velg deretter Lagre mål som eller Lagre nedlasting som), og åpne deretter filen hello. py via Fil-menyen, og velg deretter Åpne. Vi uttrykker dette som File - gt Open kort. klikk på hei. py for å se kildekoden i webleseren, og kopier deretter hele koden naviger til redigeringsvinduet i spyder og lim inn koden. Lagre filen så hello. py. For å utføre programmet, velg Kjør - gt Kjør (eller trykk F5), og bekreft Kjørinnstillinger om nødvendig. Du bør se utdata som: eller (den bestemte banen vil avhenge av hvor du har lagret filen, men dette er automatisk lagt inn av Spyder): Hvis så, har du bare kjørt ditt første Python-program - godt utført. Før vi fortsetter, vennligst IPython-konsollen kan gjøre litt mer enn standard Python-konsollen, og vi foreslår at du bruker den som standardkonsoll her. I IPython tolk-økten som vi nettopp har startet, kan du bruke Run-gtRun (som før) til å utføre hello. py, og du bør se: Python leser fillinjen etter linje, ignorerer kommentarer når det kommer over def søkeordet, det vet at en funksjon er DEFined i denne og den neste (en eller flere) linjer. I hello. py-filen oppretter Python dermed et funksjonsobjekt med navn hei. Alle innrykkede linjer etter def hei (): tilhører funksjonen kroppen. Vær oppmerksom på at funksjonsobjektet bare er opprettet på dette punktet i filen, men funksjonen er ennå ikke kalt (dvs. ikke utført). når Python kommer over kommandoer (unntatt def. og noen andre søkeord) som er skrevet i venstre kolonne, vil den utføre disse umiddelbart. I hej. py-filen er dette bare linjebeskrivelsen hei () som faktisk vil ringe (dvs. utføre) funksjonen med navn hei. Hvis du fjerner linjen hallo () fra programmet og kjører hele filen igjen (ved å trykke på F5, eller velg run - gt-run), vil ingenting bli skrevet ut (fordi funksjonen hallo er definert, men ikke kalt, dvs. ikke utført) . Nå bør du vite hvordan du utfører et Python-program som du har i redigeringsvinduet i Spyder ved hjelp av Python Console, og den mer sofistikerte IPython Console. Hvis du nettopp begynner å lære Python, er dette sannsynligvis et godt poeng å komme tilbake til tekstbokskurset og se på mer grunnleggende eksempler. Neste avsnitt gir mer detaljert informasjon om hvordan du kan utføre deler av koden i redigeringsprogrammet i Python-konsollen, og dermed oppdatere deler av definisjonene i redigeringsprogrammet. Dette er en mer avansert teknikk, men kan være veldig nyttig. (Du kan også være interessert i muligheten til å utføre stykker (såkalt quotcellsquot) kode som er skilt av avgrensere - se snarveier for nyttige funksjoner.) Når du har utført hello. py-programmet, er funksjonsobjektet hallo definert og kjent ved Python-spørringen. Vi kan dermed kalle funksjonen fra Python-spørringen: Ring hello () - funksjonen fra Python-prompten, dvs. skriv hei () i Python Shell-vinduet (Python-spørringen viser som gtgtgt. Eller som Hvis vi bruker IPython-økten der spørsmålet kan være et positivt heltallnummer.), og trykk på returknappen. Du bør oppdage at hello () - funksjonen utføres igjen, dvs. Hello World skrives ut igjen. Funksjonsanropet til Python-spørringen sammen med utgangen skal se slik ut: Kan du se hvordan dette skiller seg fra å gjennomføre hele programmet igjen Når vi utfører hele programmet (ved å trykke på F5), går Python gjennom filen, skaper heifunksjonen objekt (overstyrer det forrige objektet), når hovedprogrammet og kaller funksjonen. Når vi kaller hallo () fra Python-spørringen, kaller vi bare funksjonsobjektene hallo som er definert i (I) Python-konsollen da vi kjørte hele hei. py-filen tidligere (ved å trykke F5). Dette blir tydeligere over tid, og også når vi jobber med litt større eksempler. Du vil kanskje gå tilbake til denne opplæringen på et litt senere stadium. Python gir en funksjon som viser alle kjente objekter (i gjeldende navnrom). Det kalles dir (). Når du skriver inn dir () ved spørringen, får du en liste over kjente objekter. Ignorer alt som begynner med en understreking for nå. Kan du se hei på listen (Hvis du får en lang liste over definerte objekter, kan Spyder ha gjort noen enkel import for deg allerede. For å adressere dette kan du: Så kjør dir () som foreslått ovenfor.) En gang en objektet er synlig i det nåværende navneplasset (som det er hei i dette eksempelet), kan vi bruke hjelpefunksjonen som følger for å lære om det: Skriv hjelp (hei) ved Python-spørringen. Du bør se utgang slik: Hvor går Python ta informasjonen fra noen av det (som antall innspill argumenter og navn på disse variablene her har vi ingen inngangsargumenter) Python kan finne gjennom å inspisere sine objekter, ytterligere informasjon kommer fra dokumentasjonsstrengen som er gitt for funksjonsobjektet hei. Dokumentasjonsstrengen er den første strengen umiddelbart under linjen def hei ():. Spyder-miljøet gir også et panel øverst til høyre (som standard) som er objektinspektøren. Hvis du skriver hei inn i den tomme linjen i Objektinspektør-vinduet, vil den også gi hjelpestrengen. I redigeringsvinduet, bytt funksjonen hallo slik at den skriver ut Good Bye World i stedet for Hello World. Trykk F5 (for å utføre hele programmet) og kontroller at utgangen av programmet nå er: Hva har skjedd når du trykket på F5 er dette: Python har gått gjennom hei. py-filen og opprettet et nytt funksjonsobjekt hallo (overstyrer funksjonen objekt hei vi hadde definert før) og deretter utført funksjonen. Vi må starte med en klart definert tilstand. For å gjøre dette, må du endre funksjonen hallo () tilbake slik at den skriver ut Hello World (dvs. bruk den opprinnelige hello. py-filen), trykk deretter F5 for å kjøre hele programmet og kontroller at det skriver ut Hello World. Ring funksjonen hallo () fra kommandoprompten (som beskrevet i Ringe eksisterende funksjonsobjekter fra kommandolinjen). Du bør se Hello World trykt. Endre nå funksjonsdefinisjonen slik at den vil skrive ut Laters World. og lagre filen (men IKKE utfør programmet, det vil si IKKE trykk F5 ennå). Ring funksjonen hallo () fra ledeteksten igjen. Du bør oppdage at teksten som skrives ut, heter Hello World. som her Hvorfor er dette, fordi hello funksjonen objekt i Python tolk er den gamle som skriver ut Hello World. Så langt har vi endret filen hallo. py (og erstattet Hello World der med Laters World) i redigeringsprogrammet, men dette har ikke påvirket objektene som tidligere er opprettet i Python-tolken. Her er to muligheter til å bruke vår modifiserte versjon av hei-funksjonen: Alternativ 1: Kjør hele filen hei. py igjen ved å trykke F5: dette skaper et nytt funksjonsobjekt hei (og overstyrer den gamle). Du bør oppdage at hvis du trykker på F5, og deretter hilsen () ved spørringen, skrives den nye teksten Laters World ut. Alternativ 2: velg regionen du har endret (i dette tilfellet hele funksjonen hallo. Start fra linjen def hei (): ned for å returnere Ingen. Og velg deretter Run - gt Run-valg. Dette vil oppdatere heiobjektet i tolken uten å måtte utføre hele hello. py-filen: Hvis vi nå skriver hei (). Vi ser oppdateringsresponsen: Muligheten til å utføre deler av koden for å oppdatere noen objekter i tolken (i eksemplet ovenfor, oppdaterte vi funksjonen objekt hei), er til stor nytte når du utvikler og feilsøker flere komplekse koder, og når du lager objekterdata i tolkesesjonen tar du tid. For eksempel ved å bare endre funksjonene (eller klassobjektene osv.) som vi faktisk utvikler eller feilsøker, vi kan fortsette å bruke data strukturer etc som er definert i tolk økten. For å undervise Python programmering og beregningsmodellering, anbefaler vi at (i) bruke IPython i stedet for den normale Python tolken og (ii) ikke bruke noen praktisk import. Han aksepterer IPython som de-facto-standarden og bidrar til å bedre forstå navneområder. Spyder forsøker å hjelpe mer avanserte brukere ved å importere et antall moduler inn i hovednavnet. Skriv vitenskapelig i kommandoprompten for å se detaljene. Denne oppførselen kan endres i fremtidige Spyder-utgivelser. Selv om denne enkle importen er svært nyttig for mer erfarne programmører, kan de være forvirrende (om ikke villedende) for nybegynnere. Vi anbefaler derfor å angre denne importen for å oppfylle våre krav skisser over og til (i) bytte til en IPython konsoll. og (ii) utstede tilbakestillingskommandoen for å tilbakestille navneplassen. Begge trinnene forklares mer detaljert i neste avsnitt. I konsollvinduet (nederst til høyre hjørne som standard) ser du som standard en melding med tre større enn tegn, dvs. gtgtgt. Dette viser at vi bruker konsollen - i utgangspunktet en vanlig Python tolk økt (med litt ekstra funksjonalitet fra Spyder). I stedet vil vi gjerne bruke et interaktivt Python-skall, kort IPython fra ipython-prosjektet. For å gjøre dette, velg Tolker - gt Åpne en IPython-konsoll. Du bør se i det konsolske vinduet et nytt skall vises, og IPython-meldingen i 1: skal vises. Navnet mellomrom kan slettes i IPython ved hjelp av tilbakestillingskommandoen. Skriv tilbakestilling og trykk på retur, og bekreft med y: Vi diskuterer dette litt lenger, men du kan hoppe over følgende hvis du ikke er interessert: Etter å ha utstedt tilbakestillingskommandoen, bør vi bare ha noen objekter definert i navneområdet i den økten . Vi kan liste dem alle med kommandoen dir (): Endelig, hvis du liker å hoppe over bekreftelsestrinnet til tilbakestillingskommandoen, kan brukeren bruke tilbakestill - f istedenfor tilbakestilling. I tillegg til syntaksen som håndheves av Python, er det flere konvensjoner angående oppsettet av kildekoden, spesielt stilveiledningen for Python-kildekoden vet som quotPEP8quot. Mye Spyders atferd kan konfigureres gjennom sine Preferanser. Hvor dette befinner seg i menyen, avhenger av operativsystemet ditt: På Windows og Linux, gå til Verktøy - velg Innstillinger på Mac OS, gå til Python - gt Preferences Gå til Preferences - gt IPython console - gt Oppstart og velg avmerkingsboksen ved siden av Åpne en IPython-konsoll ved oppstart. Klikk deretter OK-knappen. Neste gang Spyder starter, vil den vise IPython-konsollen automatisk. Gå til Preferences - gt Editor - gt-kode IntrospectionAnalyse og velg avmerkingsboksen ved siden av Style analysis (PEP8) For å unngå magi når konsollen startes, gå til Preferanser - g Console - gt Avanserte innstillinger - til PYTHONSTARTUP erstatning og velg Standard PYTHONSTARTUP script (og start Spyder på nytt). (Denne magien, kjører blant annet kommandoen for kommende import divisjon.) Standardinnstillingene kan endres for dette i neste store utgivelse. For å unngå å importere alle objekter fra pylab og numpy inn i det nåværende navneplasset i IPython Console, gå til Preferences - gt IPython Console - gt Graphics og fjern markeringen av avmerkingsboksen ved siden av Laster automatisk Pylab og NumPy-moduler og avmarker også Aktiver støtte. Standardinnstillingene kan endres for dette i neste store utgivelse. Gjennom Preferences - gt IPython-konsoll - ge Avanserte innstillinger-ikke bruk symbolsk matte kan vi aktivere IPythons symbolske python-modus. Dette vil tillate pent gjengitt sympyoutgang (latex-stil) og importerer også noen sympotiske objekter automatisk når IPython-konsollen starter, og rapporterer hva den har gjort. Vi kan da bruke variablene x. y. for eksempel slik: F5 kjører den nåværende bufferen F9 kjører den nåværende uthevede koden av kode: dette er veldig nyttig for å oppdatere definisjoner av funksjoner (si) i tolkøkten uten å måtte kjøre hele filen igjen CTRL ltRETURNgt kjører gjeldende celle ( menyen kjører Run - gt Kjør celle). En celle er definert som koden mellom to linjer som starter med avtalt tag. SHIFT ltRETURNgt kjører gjeldende celle og forflytter markøren til neste celle (menyoppføring Run - gt Kjør celle og forhånd). Celler er nyttige for å utføre et stort filecodesegment i mindre enheter. (Det er litt som en celle i en IPython-notatbok, idet koden av koden kan kjøres uavhengig.) ALT ltCURSOR UPgt flytter nåværende linje opp. Hvis flere linjer er uthevet, blir de flyttet sammen. ALTltCURSOR DOWNgt fungerer tilsvarende flytende linje (r) ned. Høyreklikk på en funksjonsmetode i kilden, åpner et nytt redigeringsvindu som viser definisjonen av den funksjonen. SHIFTCTRLALTM maksimerer gjeldende vindu (eller endrer størrelsen tilbake til normal hvis den trykkes i et maksimert vindu) SHIFTCTRLF aktiverer søket over alle filene. På Mac OS X: CMD vil øke skriftstørrelsen i redigereren, CMD - redusere. Fungerer også i IPython Console. Skriftstørrelsen for objektutforskeren, Python-konsollen osv. Kan settes individuelt via Preferanser - get Objekt Explorer osv. Jeg kunne ikke finne en måte å endre skriftstørrelsen i variabelforskeren. CTRLSPACE autocompletes kommandoer, funksjonsnavn, variable navn, metoder veldig nyttige. CMDer (på Mac OS X) og CTRLer (ellers) i redigeringsvinduet lagrer filen som for tiden blir redigert. Dette tvinger også forskjellige advarsels triangler i venstre kolonne av redigereren til å bli oppdatert (ellers oppdaterer de hver 2. til 3 sekunder som standard). CMD-er (på Mac OS X) og CTRL (ellers) i IPython-konsollvinduet lagrer den nåværende IPython-sesjonen som en HTML-fil, inkludert eventuelle tall som kan vises inline. Dette er nyttig som en rask måte å registrere hva som er gjort i en økt. (Det er ikke mulig å laste denne lagrede posten tilbake i sesjonen. Hvis du trenger funksjonalitet som dette, se etter IPython Notebook.) CMDi (på Mac OS X) og CTRLi (ellers) når du trykker på mens markøren er på en gjenstand , åpner dokumentasjon for objektet i objektinspektøren. Dette er innstillingene som definerer hvordan koden i redigeringsprogrammet utføres hvis vi velger Kjør - gt Kjør eller trykk F5. Som standard vises innstillingsboksen første gang vi prøver å kjøre en fil. Hvis vi vil endre innstillingene til enhver tid, kan de bli funnet under Run - gt Configure eller ved å trykke F6. Det er tre valg for tolken å bruke, hvorav jeg diskuterer de to første. La oss anta at vi har et program hello. py i redaktøren som leser Dette er standardforslaget, og generelt et godt valg. Velge Utfør i gjeldende Python - eller IPython-tolkinnstilling under Run - gt Konfigurere betyr at når utførelsen av hello. py er fullført, kan vi samhandle med tolken der programmet kjørte, og vi kan bruke den praktiske IPython tolken for dette (heller enn standard Python tolk). Vi kan inspisere og samhandle med objekter som utførelsen av vårt program opprettet, for eksempel jeg og hallo (). Dette er generelt veldig nyttig for inkrementell koding, testing og feilsøking: vi kan ringe hei () direkte fra tolkprompten, og trenger ikke å utføre hele hei. py for dette (selv om vi endrer funksjonen hallo) trenger vi å utføre bufferen, eller i det minste funksjonsdefinisjonen, for å gjøre den nye versjonen av hei () synlig for tolken, enten ved å utføre hele bufferen eller via Run - gt Run Selection.) Men kjører koden i editoren i Nåværende tolk betyr også at koden som kjører kan se andre (globale) objekter som ble definert i tolkøkten. Denne utholdenheten av gjenstander er lett glemt og vanligvis ikke nødvendig når man arbeider med små programmer (selv om det kan være av stor verdi av og til). Disse objektene kan komme fra tidligere utførelse av kode, fra interaktivt arbeid i tolken, eller fra praktisk import som fra import av pylab (Spyder kan gjøre noen av disse bekvemmelighetsimportene automatisk). Denne synligheten av objekter i tolkens globale navnrom til koden vi utfører kan også resultere i kodende feil hvis koden utilsiktet er avhengig av disse objektene. Her er et eksempel: forestill deg at vi kjører koden hello. py. Deretter er variabelen i kjent i tolken som en global variabel. Vi rediger hello. py kilden og ved et uhell slette linjen jeg 42 vi kjører bufferen som inneholder hello. py igjen. På dette punktet vil heis (i) ikke mislykkes fordi tolken har et objekt med navn jeg definerte, selv om dette ikke er definert i hello. py-kilden. På dette tidspunktet kan vi lagre hello. py og (falsk) tro at den skulle utføres riktig. Men kjører det i en ny python tolk økt (eller via python hei. py. Si) ville det føre til en feil, fordi jeg ikke er definert. Problemet oppstår fordi koden bruker en gjenstand (her i) uten å opprette den. Dette påvirker også import av moduler: Hvis vi hadde importert pylab ved IPython-ledeteksten, så ser programmet vårt når det utføres i denne IPython tolkøkten. Hvis du vil vite hvordan vi kan dobbeltsjekke at koden vår ikke er avhengig av slike eksisterende objekter, kan du se hvordan du dobbeltklikker at koden kjøres korrekt, kvitterer egenkvoten. Å velge Utfør i ny dedikert Python tolk under Run - gt Configure starter en ny Python tolk hver gang hei. py programmet utføres. Den største fordelen med denne modusen over Execute i nåværende Python eller IPython tolk er at vi kan være sikre på at det ikke er noen globale objekter definert i denne tolk som kommer fra feilsøking og gjentatt kjøring av koden vår: hver gang vi kjører koden i redigeringsprogrammet , python tolken der koden kjører, startes på nytt. Dette er et trygt alternativ, men gir mindre fleksibilitet og kan ikke bruke IPyton-tolken. Forutsatt at du har valgt for koden din til å utføre i nåværende Python eller IPython tolk. så har du to alternativer for å sjekke at koden vår har egen funksjon (dvs. det er ikke avhengig av udefinerte variabler, ikke-importerte moduler og kommandoer etc.) Alternativt, hvis du vil være hos den nåværende IPython tolken, kan du bruke IPythons magic reset kommando som vil fjerne alle objekter (som jeg i eksempelet ovenfor) fra det nåværende navnene, og deretter utføre koden i redigeringsprogrammet. Når du har fullført et stykke kode, dobbeltkjekker at det kjøres uavhengig av hverandre ved hjelp av et av alternativene som er forklart i Hvordan dobbeltkrysses koden kjøres korrekt, siterer egenkvoten. Når flere filer åpnes i redigereren, er de tilhørende fanene øverst i vinduet ordnet i alfabetisk rekkefølge av filnavnet fra venstre til høyre. På venstre side av fanene er det som ikon som viser Bla gjennom faner hvis musen svinger over den. Det er nyttig å hoppe til en bestemt fil direkte, hvis mange filer er åpne. Miljøvariabler kan vises fra konsollvinduet (nederst til høyre i standardoppsett). Klikk på Alternativer-ikonet (verktøytipset er Valg), og velg deretter Miljøvariabler. All tilpasning lagret på disk kan tilbakestilles ved å ringe spyder fra kommandolinjen med bryteren - reset. dvs. en kommando som spyder-reset. Høyreklikk på arrayer i variabeloppdageren gir muligheter til å plotte og analysere disse videre. Dobbeltklikk på et ordboksobjekt åpner et nytt vindu som viser ordlisten pent. Formentlig finnes det annen skjult evne til noen andre datatyper. Det er noen konvensjoner som antas når det gjelder dokumentasjonsstrenger skrevet i omstrukturert tekst. Hvis vi følger disse retningslinjene, kan vi skaffe smukt formaterte dokumentasjonsstrenger i Spyder. For eksempel, for å få vår gjennomsnittlige () funksjon se slik ut i Spyder Object Explorer: Vi må formatere dokumentasjonsstrengen som følger. Det som betyr noe her er at ordet Parameter brukes, og understreket. Linjen a. tallet viser oss at typen av parameteren a er nummer. I den neste linjen, som er innrykket, kan vi skrive en mer utvidet forklaring hva denne variabelen representerer, hvilke forhold de tillatte typene må oppfylle etc. Det samme for alle parametere, og også for den returnerte verdien. Ofte er det en god ide å inkludere et eksempel som vist. Aktivering av feilsøkingsmodus (Debug - gt Debug) starter IPython debugger (ipdb) i IPython-konsollen. Dette betjenes som normalt, men redigeringsvinduet fremhever linjen som skal utføres, og variabeloppdageren viser variabler i den nåværende konteksten av punktet for programgjennomføring. (Den viser bare numeriske variabler, det vil si ikke funksjonsobjekter etc.) Nøkkelkommandoer i IPython debugger er indivduale tastetrykk: s til Trinn i gjeldende setning. Hvis dette er et funksjonsanrop, gå inn i den funksjonen. n gå til neste setning. Hvis den nåværende setningen er en funksjon, må du ikke gå inn i den funksjonen, men utføre den helt før du returnerer kontrollen til den interaktive debugger-spørringen. r fullfør alle setninger i gjeldende funksjon og returner fra den funksjonen før du returnerer kontrollen. p Print gjør det mulig å vise verdier av variabler, for eksempel p x vil skrive ut verdien av variabelen x. Legg merke til at i ipdb, kan du også endre verdier av variabel. For eksempel, for å endre en verdifull x. du kan si ipdb gt x 42 og debuggeren vil fortsette med x være bundet til 42. Du kan også ringe til funksjoner og gjøre mange andre ting. For å forlate feilsøkingsmodusen kan du skrive utgang eller velge fra menyen Feilsøkingsfeil Feilsøking - gt Avslutt I IPython-konsollen kan vi ringe feilsøking rett etter at et unntak er opphevet: Dette vil starte IPython feilsøkingsmodus og tillater inspeksjon av lokale variabler på det punktet hvor unntaket fant sted som beskrevet ovenfor. Dette er mye mer effektivt enn å legge ut utkast til koden og kjører det igjen. Hvis du bruker dette, kan du også bruke kommandoene opp og ned som navigerer inspeksjonspunktet opp og ned i bunken. (Opp stakken betyr at funksjonene som har kalt den aktuelle funksjonen, er motsatt.) Forutsatt at vi bruker en IPython-konsoll med versjon gt 1.0.0, kan vi bestemme om tall som er opprettet med matplotlibpylab, vil vise inline. det vil si inne i IPython-konsollen, eller om de skal vises i et nytt vindu. Alternativ 1 er praktisk å lagre en oversikt over den interaktive økten (delen Snarveier for nyttige funksjoner viser en snarvei for å lagre IPython-konsollen til en html-fil). Alternativ 2 tillater interaktivt å zoome inn i figuren, manipulere det litt, og lagre figuren til forskjellige filformater via menyen. Kommandoen for å få tallene til å vises inline i IPython-konsollen er matplotlib inline. Kommandoen for å få figurer vises i sitt eget vindu (som teknisk er en QT-vindtur) er matplotlib qt. Spyder-innstillingene kan brukes til å tilpasse standardoppførelsen (spesielt Preferanser - Gå IPython Console - gt Graphics - gt Aktiver støtte for å bytte til inline-plotting). Nylige innlegg KategorierAn introduksjon til Pythonlister Fredrik Lundh August 2006 Oversikt160 Listetypen er en beholder som inneholder en rekke andre objekter i en gitt rekkefølge. Listetypen implementerer sekvensprotokollen, og lar deg også legge til og fjerne objekter fra sekvensen. Opprette lister160 For å lage en liste, sett et antall uttrykk i firkantede parenteser: Denne konstruksjonen kalles 8220list-display8221. Python støtter også beregnede lister, kalt 8220list comprehensions8221. I sin enkleste form har en listeforståelse følgende syntaks: hvor uttrykket er evaluert en gang, for hvert element i sekvensen. Uttrykkene kan være alt du kan sette alle slags objekter i lister, inkludert andre lister og flere referanser til et enkelt objekt. Du kan også bruke det innebygde listetyperobjektet til å lage lister: Sekvensen kan være noen form for sekvensobjekt eller iterbar, inkludert tupler og generatorer. Hvis du passerer i en annen liste, gjør listefunksjonen en kopi. Legg merke til at Python oppretter en enkelt ny liste hver gang du utfører uttrykket. Intet mer, intet mindre. Og Python lager aldri en ny liste hvis du tilordner en liste til en variabel. For informasjon om hvordan du legger til elementer i en liste når you8217ve har opprettet den, se Endre lister nedenfor. Å få tilgang til lister160 Lister implementerer standard sekvensgrensesnitt len (L) returnerer antall elementer i listen, Li returnerer elementet i indeks i (det første elementet har indeks 0), og Li: j returnerer en ny liste, som inneholder objektene mellom jeg og j. Hvis du sender inn en negativ indeks, legger Python lengden på listen til indeksen. L-1 kan brukes til å få tilgang til det siste elementet i en liste. For normal indeksering, hvis den resulterende indeksen ligger utenfor listen, hever Python et IndexError-unntak. Skiver behandles som grenser i stedet, og resultatet vil ganske enkelt inneholde alle elementer mellom grenser. Lister støtter også skive-trinn: Looping Over Lists160 In-statement-setningen gjør det enkelt å sløyfe over elementene i en liste: Hvis du trenger både indeksen og elementet, bruk oppføringsfunksjonen: Hvis du bare trenger indeksen, bruk rekkevidde og len. Listobjektet støtter iteratorprotokollen. For å eksplisitt lage en iterator, bruk den innebygde iter-funksjonen: Python gir ulike snarveier for vanlig listeoperasjoner. For eksempel, hvis en liste inneholder tall, gir den innebygde summen verdien summen: Hvis en liste inneholder strenger, kan du kombinere strengen til en enkelt lang streng ved hjelp av joinstrengsmetoden: Python gir også innebygd operasjon til søk etter elementer, og sortere listen. Disse operasjonene er beskrevet nedenfor. Endre lister160 Listetypen lar deg også tilordne til enkelte elementer eller skiver og slette dem. Vær oppmerksom på at operasjoner som endrer listen, vil endre den på plass. Dette betyr at hvis du har flere variabler som peker til samme liste, blir alle variabler oppdatert samtidig. For å lage en egen liste kan du bruke snitt eller listefunksjonen til å raskt lage en kopi: Du kan også legge til elementer i en eksisterende sekvens. Vedleggsmetoden legger til et enkelt element til slutten av listen, utvidelsesmetoden legger til elementer fra en annen liste (eller en hvilken som helst sekvens) til slutten, og sett inn et element på en gitt indeks, og flytt de gjenværende elementene til høyre. Hvis du vil sette inn elementer fra en annen liste eller en rekkefølge på et annet sted, bruk skikkende syntaks: Du kan også fjerne elementer. Del-setningen kan brukes til å fjerne et enkelt element, eller for å fjerne alle elementer som er identifisert av et stykke. Pop-metoden fjerner et enkelt element og returnerer det, mens fjerne søker etter et element, og fjerner det første matchende elementet fra listen. Del-setningen og popmetoden gjør stort sett det samme, bortsett fra at pop returnerer det fjernede elementet. Til slutt kan listetypen raskt reversere rekkefølgen på listen. Omvendt er raskt, så midlertidig reversering av listen kan ofte øke hastigheten hvis du må fjerne og sette inn en haug med elementer i begynnelsen av listen: Merk at for-in-setningen opprettholder en intern indeks, som økes for hver krets iterasjon. Dette betyr at hvis du endrer listen du går over, vil indeksene gå ut av synkronisering, og du kan ende opp med å hoppe over elementer, eller behandle det samme elementet flere ganger. For å omgå dette kan du løse over en kopi av listen: Alternativt kan du opprette en ny liste og legge til det: Et vanlig mønster er å bruke en funksjon til hvert element i en liste, og erstatte elementet med returverdien fra funksjonen: Ovenstående kan bedre skrives med enten den innebygde kartfunksjonen eller som en listeforståelse: For enkle funksjonsanrop er kartløsningen mer effektiv, siden funksjonobjektet bare må hentes en gang . For andre konstruksjoner (for eksempel uttrykk eller samtaler til objektmetoder) må du bruke tilbakekalling eller lambda til å pakke inn operasjonen i slike tilfeller, listenforståelsen er mer effektiv og vanligvis også lettere å lese. Igjen, hvis du trenger både elementet og indeksen, bruk enumerere. Du kan bruke listetypen til å implementere enkle datastrukturer, for eksempel stabler og køer. Listen type isn8217t er optimalisert for dette, så dette fungerer best når strukturer er små (vanligvis noen få hundre elementer eller mindre). For større strukturer trenger du kanskje en spesialisert datastruktur, for eksempel collections. deque. En annen datastruktur som en liste fungerer bra i praksis, så lenge strukturen er rimelig liten, er en LRU (minst nylig brukt) beholder. Følgende setninger flytter et objekt til slutten av listen: Hvis du gjør det ovenfor hver gang du får tilgang til et element i LRU-listen, flyttes de sist brukte elementene til begynnelsen av listen. (for a simple cache implementation using this approach, see Caching .) Searching Lists160 The in operator can be used to check if an item is present in the list: To get the index of the first matching item, use index . The index method does a linear search, and stops at the first matching item. If no matching item is found, it raises a ValueError exception. To get the index for all matching items, you can use a loop, and pass in a start index: Moving the loop into a helper function makes it easier to use: To count matching items, use the count method: Note that count loops over the entire list, so if you just want to check if a value is present in the list, you should use in or, where applicable, index . To get the smallest or largest item in a list, use the built-in min and max functions: As with sort (see below), you can pass in a key function that is used to map the list items before they are compared: Sorting Lists160 The sort method sorts a list in place. To get a sorted copy, use the built-in sorted function: An in-place sort is slightly more efficient, since Python does not have to allocate a new list to hold the result. By default, Python8217s sort algorithm determines the order by comparing the objects in the list against each other. You can override this by passing in a callable object that takes two items, and returns -1 for 8220less than8221, 0 for 8220equal8221, and 1 for 8220greater than8221. The built-in cmp function is often useful for this: Alternatively, you can specify a mapping between list items and search keys. If you do this, the sort algorithm will make one pass over the data to build a key array, and then sort both the key array and the list based on the keys. If the transform is complex, or the list is large, this can be a lot faster than using a compare function, since the items only have to be transformed once. Python8217s sort is stable the order of items that compare equal will be preserved. Printing Lists160 By default, the list type does a repr on all items, and adds brackets and commas as necessary. In other words, for built-in types, the printed list looks like the corresponding list display: To control formatting, use the string join method, combined with either map or a list comprehension or generator expression. To print a list of string fragments to a file, you can use writelines instead of write . Performance Notes160 The list object consists of two internal parts one object header, and one separately allocated array of object references. The latter is reallocated as necessary. The list has the following performance characteristics: The list object stores pointers to objects, not the actual objects themselves. The size of a list in memory depends on the number of objects in the list, not the size of the objects. The time needed to get or set an individual item is constant, no matter what the size of the list is (also known as 8220O(1)8221 behaviour). The time needed to append an item to the list is 8220amortized constant8221 whenever the list needs to allocate more memory, it allocates room for a few items more than it actually needs, to avoid having to reallocate on each call (this assumes that the memory allocator is fast for huge lists, the allocation overhead may push the behaviour towards O(nn)). The time needed to insert an item depends on the size of the list, or more exactly, how many items that are to the right of the inserted item (O(n)). In other words, inserting items at the end is fast, but inserting items at the beginning can be relatively slow, if the list is large. The time needed to remove an item is about the same as the time needed to insert an item at the same location removing items at the end is fast, removing items at the beginning is slow. The time needed to reverse a list is proportional to the list size (O(n)). The time needed to sort a list varies the worst case is O(n log n), but typical cases are often a lot better than that. Last Updated: November 2006
403 - Forbudt Feil Hvis du er webansvarlig for dette nettstedet, logg deg inn på Cpanel og sjekk feilloggene. Du finner den eksakte grunnen til denne feilen der. Vanlige årsaker til denne feilen er: Feil filkatalogstillatelser: Under 644. For at filer skal leses av webserveren, må deres tillatelser være lik eller over 644. Du kan oppdatere filtillatelser med en FTP-klient eller gjennom cPanels File Manager. Restriktiv Apache-direktiver inne i. htaccess-filen. Det er to Apache-direktiver som kan forårsake denne feilen - Avvis fra og Valg - Indexes. Det er to vanligste måter å velge en Forex-megler på: 1) Forenklet eller lat måte mdash som er å lese megler vurderinger, og basert på stjerner og tilbakemelding, gjør et valg. Det vil imidlertid ikke være noen garanti for at en 5-stjernes mægler vil være det beste valget for dine handelsbehov, eller at anmeldelsene du har lest var faktisk ekte (dessverre, det er virkeligheten av online anmeldelser innsending). 2) Profesjonell måte mdash som ...
Comments
Post a Comment