1 00:00:00,000 --> 00:00:05,426 2 00:00:05,426 --> 00:00:06,800 ROSS RHEINGANS-YOO: Hei, jeg er Ross. 3 00:00:06,800 --> 00:00:08,570 Og dette er en CS50 seminar. 4 00:00:08,570 --> 00:00:12,100 Det vil ta deg fra programmering i C til programmering i Python. 5 00:00:12,100 --> 00:00:15,120 >> Python er et skriptspråk. 6 00:00:15,120 --> 00:00:17,870 Det er i stor grad som C i syntaks, men noen 7 00:00:17,870 --> 00:00:20,390 av de tekniske detaljene for hvordan det syntaks blir henrettet 8 00:00:20,390 --> 00:00:22,240 er litt annerledes. 9 00:00:22,240 --> 00:00:24,780 Det er mindre kraftig enn C på noen måter. 10 00:00:24,780 --> 00:00:28,130 Det er mindre uttrykksfulle for hvor på datamaskinen 11 00:00:28,130 --> 00:00:30,030 minne blir lagt ut, hvor det blir lagt ut, 12 00:00:30,030 --> 00:00:32,030 når det blir frihet, og disse slags ting. 13 00:00:32,030 --> 00:00:36,150 >> Det er mer nyttig enn C på noen måter, fordi det er lettere å programmere i. 14 00:00:36,150 --> 00:00:39,920 Språket er til en viss folk, mer intuitive. 15 00:00:39,920 --> 00:00:44,820 Og egentlig er målet for det å være raskere å programmere 16 00:00:44,820 --> 00:00:46,490 og potensielt tregere til å utføre. 17 00:00:46,490 --> 00:00:48,198 >> Nå hvis du tenker på tiden 18 00:00:48,198 --> 00:00:50,514 du har brukt på den siste Problemet satt skriving 19 00:00:50,514 --> 00:00:52,430 koden mot Hvor lang tid du bruker 20 00:00:52,430 --> 00:00:55,310 på den siste problem satt gjennomføring koden din, 21 00:00:55,310 --> 00:00:58,300 du kan tenke at språket som var dobbelt så rask til å skrive, 22 00:00:58,300 --> 00:01:02,170 og dobbelt så treg til å utføre, kan være en forbedring i forhold til C på noen måter. 23 00:01:02,170 --> 00:01:05,730 Gjerne når du prøver å skrive små programmer til å gjøre små ting, 24 00:01:05,730 --> 00:01:08,520 Python er et nyttig språk av valget. 25 00:01:08,520 --> 00:01:10,620 >> Og ved slutten av denne seminar, håper jeg du vil 26 00:01:10,620 --> 00:01:12,950 være i stand til å gjøre Valget i fremtidige prosjekter 27 00:01:12,950 --> 00:01:17,710 om hvilket språk er korrekt å bruke, ikke ideen 28 00:01:17,710 --> 00:01:21,405 at ett språk er mer korrigere hele tiden. 29 00:01:21,405 --> 00:01:23,030 Et par ting om hva seminaret er. 30 00:01:23,030 --> 00:01:25,910 Dette seminaret er ikke ment å lære deg Python fra bunnen av. 31 00:01:25,910 --> 00:01:28,310 Python er svært lik til C, og jeg antar 32 00:01:28,310 --> 00:01:34,056 at du er en CS50 student, eller noen med en tilsvarende kjennskap til C. 33 00:01:34,056 --> 00:01:36,700 >> Hvis du er CS50 student rundt problemet satt seks, 34 00:01:36,700 --> 00:01:38,866 Så du har ser mange ting i C, vil jeg gi deg 35 00:01:38,866 --> 00:01:40,740 de store forskjellene, og noen av tingene 36 00:01:40,740 --> 00:01:42,840 som gjør Python annerledes og spesiell og nyttig, 37 00:01:42,840 --> 00:01:45,256 men jeg har ikke tenkt å gå for hva et programmeringsspråk er 38 00:01:45,256 --> 00:01:46,920 og hvordan å skrive programmer. 39 00:01:46,920 --> 00:01:49,820 Imidlertid vil dette seminaret lærer du å skrive et Python-programmer 40 00:01:49,820 --> 00:01:52,310 Hvis du er en av de få gruppene. 41 00:01:52,310 --> 00:01:54,820 Igjen vil vi se på hvordan du vil implementere psets-- 42 00:01:54,820 --> 00:01:57,550 som bør være 1-6 i Python-- og gir pekere 43 00:01:57,550 --> 00:02:00,322 til offisiell dokumentasjon for fremtidig referanse. 44 00:02:00,322 --> 00:02:03,030 Den andre tingen som er viktig om hvordan denne talen er tildelt, 45 00:02:03,030 --> 00:02:05,360 denne videoen vil være online, courtesy of CS50, 46 00:02:05,360 --> 00:02:07,550 så du bør ikke føle deg som du trenger for å ta notater. 47 00:02:07,550 --> 00:02:11,180 Du kan alltid gå tilbake og se på det senere som en referanse. 48 00:02:11,180 --> 00:02:13,340 Tillegg lysbildene er tilgjengelig akkurat nå 49 00:02:13,340 --> 00:02:16,480 på dette området, noe som bør tar du gjør et Google doc. 50 00:02:16,480 --> 00:02:21,010 Det er en litt forkortet versjon av hva jeg viser på skjermen. 51 00:02:21,010 --> 00:02:24,850 >> En forsiktig forbeholdet før vi hoppe i, Python 3 52 00:02:24,850 --> 00:02:26,700 er et annet språk Python to. 53 00:02:26,700 --> 00:02:30,020 De ser mye det samme; det er veldig små tekniske forskjeller 54 00:02:30,020 --> 00:02:32,530 som vil føre til programmer skrevet i Python 2 55 00:02:32,530 --> 00:02:37,140 ikke å være i stand til å bli utført i Python tre miljøet. 56 00:02:37,140 --> 00:02:41,969 >> Den CS50 apparatet kommer med Python, som standard den bruker Python to. 57 00:02:41,969 --> 00:02:44,010 Du kan sjekke dette ved å typing i kommandolinjen 58 00:02:44,010 --> 00:02:51,310 python --version, som burde utgang 2.7.6 på den aktuelle maskinen. 59 00:02:51,310 --> 00:02:53,580 Prøv Python 3, som gjør arbeide i apparatet, 60 00:02:53,580 --> 00:02:58,500 hvis Python som standard 2.X.Y, enten på apparatet eller på dine egne maskiner. 61 00:02:58,500 --> 00:03:03,730 Du bør bytte Python tre når som helst i dette snakk om at jeg skriver Python. 62 00:03:03,730 --> 00:03:05,760 Hvis maskinen din er kjører to som standard, type 63 00:03:05,760 --> 00:03:09,770 Python 3 for å være i stand til å faktisk følge med og gjennomføre disse tingene. 64 00:03:09,770 --> 00:03:12,280 >> I tillegg vil jeg peke deg ved offisielle ressurser nå. 65 00:03:12,280 --> 00:03:16,082 docs.python.org/3--~~V forsiktig at det er et tre og ikke en 2-- 66 00:03:16,082 --> 00:03:17,030 har nyttige referanser. 67 00:03:17,030 --> 00:03:19,280 Opplæringen vil ta deg gjennom mye av de samme tingene 68 00:03:19,280 --> 00:03:21,460 som jeg gjør nå, bortsett fra i tekstform. 69 00:03:21,460 --> 00:03:23,725 Henvisning er nyttig som en referanse for språket, 70 00:03:23,725 --> 00:03:26,100 og Standard Library gir du noen av utvidelser 71 00:03:26,100 --> 00:03:27,770 med ekstra funksjonalitet. 72 00:03:27,770 --> 00:03:31,300 >> Så en aller første Python program. 73 00:03:31,300 --> 00:03:34,410 På venstre har vi standard C, på høyre side, har vi Python. 74 00:03:34,410 --> 00:03:36,780 Du har kanskje gjenkjent dette problemet, er det 75 00:03:36,780 --> 00:03:40,760 en av det første problemet sett i CS50, og disse 76 00:03:40,760 --> 00:03:42,677 løse det ved hjelp av den samme løsningen. 77 00:03:42,677 --> 00:03:45,010 Nå, grunnen til at vi er ser på disse ved siden av hverandre 78 00:03:45,010 --> 00:03:46,830 er slik at vi kan se på syntaktiske forskjeller. 79 00:03:46,830 --> 00:03:49,580 En av elefanter i rommet som du kanskje har lagt merke til høyre 80 00:03:49,580 --> 00:03:56,350 utenfor balltre, er at Python har ingen Hovedfunksjonen innpakning rundt koden. 81 00:03:56,350 --> 00:03:59,170 Så i C, skriver du en haug med filer, link du dem sammen, 82 00:03:59,170 --> 00:04:02,590 og programmet starter utførende på dette som kalles int main. 83 00:04:02,590 --> 00:04:04,930 >> I Python, du skriver en filen du, kjøre filen, 84 00:04:04,930 --> 00:04:07,882 programmet starter utførende på toppen av filen. 85 00:04:07,882 --> 00:04:09,590 Så det kommer til å starte ved toppen av filen 86 00:04:09,590 --> 00:04:11,280 gå ned til det å finne noe annet. 87 00:04:11,280 --> 00:04:14,440 Hvis den finner en funksjonsdefinisjon, det vil faktisk ikke utføre den koden, 88 00:04:14,440 --> 00:04:15,940 Det vil ganske enkelt definere funksjonen. 89 00:04:15,940 --> 00:04:18,459 Men her, da den første Programmet er n er lik 10, 90 00:04:18,459 --> 00:04:21,273 det første at dette programmet vil gjøre er å ta denne verdien av 10 91 00:04:21,273 --> 00:04:24,120 og sette det inn i en variabel kalt n. 92 00:04:24,120 --> 00:04:27,690 >> Snakker om den linjen, en av andre things-- sorry-- dette 93 00:04:27,690 --> 00:04:31,040 betyr at C-programmer, du vil skrive dem, 94 00:04:31,040 --> 00:04:34,899 du vil gjøre dem, noe som vil påberope noen klang kommandoer, 95 00:04:34,899 --> 00:04:36,690 og så får du kjøre en resulterende kjørbar. 96 00:04:36,690 --> 00:04:41,030 Python-programmer, du kjører tekst file-- dette mario.py kanskje 97 00:04:41,030 --> 00:04:44,900 være denne filen som jeg nettopp viste you-- du vil kjøre denne filen 98 00:04:44,900 --> 00:04:47,450 og du vil utføre, og innholdet i det 99 00:04:47,450 --> 00:04:50,390 vil bli utført av Python tolk. 100 00:04:50,390 --> 00:04:52,470 Du kan gjøre dette i din IDE. 101 00:04:52,470 --> 00:05:02,260 >> Så hvis jeg har en Hei-fil, som har rett og slett dette innholdet. 102 00:05:02,260 --> 00:05:04,840 Dette er faktisk Python 2, ikke Python tre, så ikke 103 00:05:04,840 --> 00:05:06,600 bekymre seg om syntaks for nå. 104 00:05:06,600 --> 00:05:14,230 Men jeg skal kjøre Python, på hello.py, og det går. 105 00:05:14,230 --> 00:05:18,890 >> En annen måte som jeg kan bruke Python som Jeg vil ikke forholde seg til så mye i denne talen, 106 00:05:18,890 --> 00:05:21,840 er hvis jeg bare skriver Python, det faller meg inn i et miljø hvor 107 00:05:21,840 --> 00:05:24,370 Jeg kan mate den Python linje for linje. 108 00:05:24,370 --> 00:05:31,260 Så her, hvis jeg skriver i print plass 'Hei, verden ". 109 00:05:31,260 --> 00:05:32,360 Skriv enter. 110 00:05:32,360 --> 00:05:37,430 Det vil spytte meg at sikkerhets resultatene at enkelte linje umiddelbart. 111 00:05:37,430 --> 00:05:38,470 >> Dette kan være nyttig. 112 00:05:38,470 --> 00:05:40,700 I dette foredraget vil jeg gjøre ting på lysbilder. 113 00:05:40,700 --> 00:05:43,940 Og så vil du være i stand til å følge sammen enten her, eller ved å skrive 114 00:05:43,940 --> 00:05:45,725 faktiske filene og deretter kjøre dem. 115 00:05:45,725 --> 00:05:48,340 116 00:05:48,340 --> 00:05:50,995 >> Men, kommer tilbake til dette kode, en annen ting 117 00:05:50,995 --> 00:05:53,230 at du kan ha noticed-- vel, det er 118 00:05:53,230 --> 00:05:55,980 to ting som du kanskje legge merke til om disse blokkene. 119 00:05:55,980 --> 00:05:59,280 Den første, heller mer dagligdagse, er at Python har ingen etterfølgende semikolon. 120 00:05:59,280 --> 00:06:02,630 >> Semikolon er valg overalt og ufarlig overalt. 121 00:06:02,630 --> 00:06:03,722 Du kan legge dem. 122 00:06:03,722 --> 00:06:06,430 Det kan hende at folk som skriver Python for en levende snicker på deg 123 00:06:06,430 --> 00:06:08,860 bak ryggen din, fordi de er ikke nødvendig. 124 00:06:08,860 --> 00:06:13,497 De er ofte et tegn på å bli holdt over fra C. Designerne av språket 125 00:06:13,497 --> 00:06:16,580 føler at det er mer tydelig på denne måten og at det ikke er nødvendig å erklære 126 00:06:16,580 --> 00:06:18,700 hver gang du avslutter en linje. 127 00:06:18,700 --> 00:06:21,799 >> En annen merkelig ting om dette n er den ikke har en type vedlagt. 128 00:06:21,799 --> 00:06:24,590 En av de magiske stykker av Python-- og jeg kommer til å kalle det magi, 129 00:06:24,590 --> 00:06:26,381 men det er meget tekniske grunner til at det 130 00:06:26,381 --> 00:06:28,560 works-- en av magiske stykker av Python 131 00:06:28,560 --> 00:06:32,700 er at variabler kan utvide eller krympe å inneholde hva data 132 00:06:32,700 --> 00:06:34,530 typene du ønsker dem til. 133 00:06:34,530 --> 00:06:35,580 >> Så dette er en 10. 134 00:06:35,580 --> 00:06:40,060 Hvis senere ned jeg tildelt denne n 0,5, ville det ta at 0,5. 135 00:06:40,060 --> 00:06:43,770 Uansett at det er en int her og flyte der, noe som bruker dette n 136 00:06:43,770 --> 00:06:47,057 vil, mer eller mindre, kunne tøffer sammen hvis det blir noen av disse. 137 00:06:47,057 --> 00:06:49,640 Med mindre det er noen svært reell Grunnen til at det ikke kan bruke data 138 00:06:49,640 --> 00:06:52,170 skriver at n har i dag, noe som medførte at det får 139 00:06:52,170 --> 00:06:54,490 kilt og kaste en feil, og disse slags ting. 140 00:06:54,490 --> 00:06:57,050 >> Men her, Python egentlig ikke om hva 141 00:06:57,050 --> 00:06:59,140 det er at jeg kommer til å holde fast i denne setning, som, ønsker du dette? 142 00:06:59,140 --> 00:06:59,840 Denne saken i det? 143 00:06:59,840 --> 00:07:00,640 Ja, det er en slags ting. 144 00:07:00,640 --> 00:07:01,810 Jeg vil holde det til slutt. 145 00:07:01,810 --> 00:07:04,740 Det vil være et problem senere, hvis noen som ønsker å bruke det slutt 146 00:07:04,740 --> 00:07:05,710 ikke kan håndtere det. 147 00:07:05,710 --> 00:07:08,500 Dette er en av de store Forskjellene mellom Python og C 148 00:07:08,500 --> 00:07:10,790 som gjør det enkelt å skrive svært store C-programmer 149 00:07:10,790 --> 00:07:15,120 og gjør det lettere å skrive svært liten Python program. 150 00:07:15,120 --> 00:07:19,564 >> Den for syntaks er ikke veldig forskjellige i hva det gjør. 151 00:07:19,564 --> 00:07:21,480 Det er litt annerledes i hvordan det er uttrykt. 152 00:07:21,480 --> 00:07:25,370 Så dette er en veldig, det som kalles Pytonske, måte å skrive det. 153 00:07:25,370 --> 00:07:28,969 for rad i serien (n), er dette rekke tall fra 0 til n, 154 00:07:28,969 --> 00:07:31,010 inkluderende på bunnen og eksklusivt på toppen. 155 00:07:31,010 --> 00:07:34,790 Slik at det er fra 0 til n-1, som er nøyaktig hva C-kode gjør, 156 00:07:34,790 --> 00:07:38,690 bortsett fra at det er mye enklere å se på kanskje. 157 00:07:38,690 --> 00:07:42,710 >> Den aktuelle blokken er ikke satt av ved tannregulering, 158 00:07:42,710 --> 00:07:44,540 i stedet er det satt av av denne innrykk. 159 00:07:44,540 --> 00:07:47,580 Slik at alle disse linjer er fire plasser over til høyre, 160 00:07:47,580 --> 00:07:50,410 eller som om en elefant bredde. 161 00:07:50,410 --> 00:07:54,570 Og de er de som er kommer til å bli henrettet i dette for. 162 00:07:54,570 --> 00:07:57,020 Hvis jeg rotet opp innrykk på dette og jeg 163 00:07:57,020 --> 00:08:01,420 presse som print tilbake til den opprinnelige innrykk, 164 00:08:01,420 --> 00:08:04,320 at print vil forlate for loop. 165 00:08:04,320 --> 00:08:08,560 I motsetning til C, der her jeg faktisk må flytte som lukket spenne rundt. 166 00:08:08,560 --> 00:08:11,820 >> Det betyr at du ikke får feil som hoppe ut på deg fordi du 167 00:08:11,820 --> 00:08:13,580 sette en spenne på feil sted. 168 00:08:13,580 --> 00:08:16,460 Det betyr at du får feil som hoppe ut på deg fordi du 169 00:08:16,460 --> 00:08:17,620 innrykket en linje galt. 170 00:08:17,620 --> 00:08:19,290 Så det gjør innrykk super forsiktig. 171 00:08:19,290 --> 00:08:22,123 Forhåpentligvis du var super forsiktig med innrykk uansett, 172 00:08:22,123 --> 00:08:25,300 og slik at dette ikke er så mye mer en byrde. 173 00:08:25,300 --> 00:08:28,762 >> Men en grunnleggende regel for Python, og vi vil ha et par av disse 174 00:08:28,762 --> 00:08:30,970 at vi vil gå gjennom gjennom I løpet av foredraget, 175 00:08:30,970 --> 00:08:33,840 er å prøve naturlig syntaks før du ser noe opp. 176 00:08:33,840 --> 00:08:37,610 Så dette syntaks, for dette nummeret i serien, 177 00:08:37,610 --> 00:08:41,460 er veldig karakteristisk når det gjelder stil. 178 00:08:41,460 --> 00:08:45,260 Mange ting i Python vi får se tar dette form. 179 00:08:45,260 --> 00:08:47,420 >> Og så hvis du kommer opp med et nytt objekt som du 180 00:08:47,420 --> 00:08:50,870 tror du bør kunne iterere over dette, i dette formatet, 181 00:08:50,870 --> 00:08:53,720 viser seg det sannsynligvis støtter dette formatet. 182 00:08:53,720 --> 00:08:56,990 Vi kommer ikke til å gå super dypt i de tekniske årsakene til at det er sant. 183 00:08:56,990 --> 00:09:00,167 >> Men det er en nyttig intuisjon å ha når du nærmer Python-programmer, 184 00:09:00,167 --> 00:09:01,750 at denne saken er bare kommer til å fungere. 185 00:09:01,750 --> 00:09:03,020 Prøv det. 186 00:09:03,020 --> 00:09:06,480 Boot opp kommandolinjen Tolk, se om det fungerer, 187 00:09:06,480 --> 00:09:09,827 gå videre med ting, før du engang trenger å åpne opp Google og si: 188 00:09:09,827 --> 00:09:11,660 hva er syntaksen for denne tingen? 189 00:09:11,660 --> 00:09:14,740 Massevis av Python du kunne oppdage bare ved å prøve. 190 00:09:14,740 --> 00:09:19,005 >> Dette er enda mer hvis lik til C da de fors er. 191 00:09:19,005 --> 00:09:20,380 Legg merke til at det er ingen parentes. 192 00:09:20,380 --> 00:09:23,490 Parentesene er, igjen, ufarlig, men unødvendig. 193 00:09:23,490 --> 00:09:25,750 Det er et kolon ved enden akkurat som for looper, 194 00:09:25,750 --> 00:09:30,800 og igjen er de relative blokkene innrykket i stedet satt av bukseseler. 195 00:09:30,800 --> 00:09:33,080 Det annet er at den opprinnelige nivå av innrykk, 196 00:09:33,080 --> 00:09:35,930 og dens relevant blokk rykket inn igjen. 197 00:09:35,930 --> 00:09:41,720 De fungerer nøyaktig som de gjør i C. 198 00:09:41,720 --> 00:09:44,520 >> Dette er faktisk svært mye den samme. 199 00:09:44,520 --> 00:09:49,430 Igjen, mister print ett tegn ut av printf Du passerer noen strenger. 200 00:09:49,430 --> 00:09:51,520 Det viser seg strenger kan enten være merket av 201 00:09:51,520 --> 00:09:53,562 med apostrof eller doble anførselstegn. 202 00:09:53,562 --> 00:09:55,270 Det er ingen forskjell, bortsett fra at innsiden 203 00:09:55,270 --> 00:09:57,722 av apostrof du kan bruke doble anførselstegn med svikte, 204 00:09:57,722 --> 00:09:59,430 snarere enn å måtte slippe dem alle. 205 00:09:59,430 --> 00:10:01,480 Og inne i doble anførselstegn, du kan bruke enkle anførselstegn med svikte 206 00:10:01,480 --> 00:10:02,420 uten å måtte slippe dem. 207 00:10:02,420 --> 00:10:04,253 Hvis du ønsket å blande dem, kan du sikkert 208 00:10:04,253 --> 00:10:06,100 slå opp på nettet hvordan du gjør det. 209 00:10:06,100 --> 00:10:09,581 >> Du vil merke at over her, Jeg har gått på slutten = denne tingen. 210 00:10:09,581 --> 00:10:12,580 Dette er et eksempel på en valgfri argument, som er en av de ting 211 00:10:12,580 --> 00:10:14,990 at Python støtter at gjør det ganske nyttig. 212 00:10:14,990 --> 00:10:18,240 Så print har faktisk mye av argumenter, som vanligvis 213 00:10:18,240 --> 00:10:20,140 satt til standardinnstillingene verdi, men her har jeg 214 00:10:20,140 --> 00:10:21,924 bestemte seg for å overstyre den som heter slutten. 215 00:10:21,924 --> 00:10:24,340 Grunnen til at jeg må overstyre den med en tom streng 216 00:10:24,340 --> 00:10:26,756 er at print i Python, etter standard skriver ut en ny linje 217 00:10:26,756 --> 00:10:28,630 etter ting som du fortalte det også. 218 00:10:28,630 --> 00:10:31,462 >> Så dette hash faktisk kommer til å skrive ut en hash i en ny linje. 219 00:10:31,462 --> 00:10:34,670 Og hvis jeg ikke vil at hasj for å skrive ut en ny linje etter det, så må jeg si 220 00:10:34,670 --> 00:10:35,340 ikke ut en. 221 00:10:35,340 --> 00:10:37,980 222 00:10:37,980 --> 00:10:43,690 Men, likevel så, den siste tingen som Dette programmet mangler at man har er 223 00:10:43,690 --> 00:10:44,960 en inkluderer på toppen. 224 00:10:44,960 --> 00:10:48,120 Utskriften er bakt inn i Python så i utgangspunktet at det er ingen header eller modul 225 00:10:48,120 --> 00:10:49,869 at du trenger å inkluderer, men hvis ønsket 226 00:10:49,869 --> 00:10:52,029 til å omfatte andre ting i et Python-skript, 227 00:10:52,029 --> 00:10:55,320 Jeg ville gjøre det i en svært lik format-- ordene er bare litt annerledes. 228 00:10:55,320 --> 00:10:58,840 229 00:10:58,840 --> 00:11:01,360 >> Jeg nevnte at vi trenger ikke en hoved her, 230 00:11:01,360 --> 00:11:03,372 fordi Python starter utførende på toppen. 231 00:11:03,372 --> 00:11:05,080 Hvis jeg ønsket å vikle dette i en funksjon, I 232 00:11:05,080 --> 00:11:07,667 ville gjøre det som dette-- jeg vil si funksjonsnavn def, 233 00:11:07,667 --> 00:11:10,500 argumenter kan gå inn her og vi vil se noen av dem senere, tykktarm, 234 00:11:10,500 --> 00:11:13,040 og deretter igjen, denne Hele satt av blokk 235 00:11:13,040 --> 00:11:16,810 er det som er operativt blokk for den aktuelle funksjonen. 236 00:11:16,810 --> 00:11:18,560 Så dette er definisjonen av funksjonen. 237 00:11:18,560 --> 00:11:21,587 Og det er en erklæring, deretter ned Herfra kan jeg bare ringe funksjon. 238 00:11:21,587 --> 00:11:23,920 Og igjen, programmet tolk, som starter på toppen, 239 00:11:23,920 --> 00:11:25,280 vil se dette er definisjonen. 240 00:11:25,280 --> 00:11:27,960 Det vil ikke gjennomføre dette før det komme hit, og da er det like, oh 241 00:11:27,960 --> 00:11:30,860 nå har du kalte det, jeg tror jeg skal kjøre den. 242 00:11:30,860 --> 00:11:33,850 >> En ting som er veldig vanlig å se i Python-filer, 243 00:11:33,850 --> 00:11:36,700 spesielt Python-filer som frigis til offentligheten 244 00:11:36,700 --> 00:11:41,650 og utviklet by-- og utviklet og vedlikeholdt, er noe av dette skjemaet. 245 00:11:41,650 --> 00:11:44,540 Dette er basically-- slik fordi Python, starter du på toppen 246 00:11:44,540 --> 00:11:50,310 og deretter kjøre ned til bunnen, Jeg hvis jeg bare hadde Mario kalt ut her, 247 00:11:50,310 --> 00:11:54,190 da helst jeg tatt denne filen i en annen fil, fordi jeg ønsket å bruke 248 00:11:54,190 --> 00:11:58,580 er Mario-funksjon, som andre ville filen har også denne samtalen til Mario i det. 249 00:11:58,580 --> 00:12:01,000 Og når jeg kjørte denne filen, det ville kalle Mario. 250 00:12:01,000 --> 00:12:04,520 >> Så det er mulig at jeg bare ønsker å kjøre dette hvis jeg har faktisk 251 00:12:04,520 --> 00:12:07,290 henrettet denne filen. 252 00:12:07,290 --> 00:12:11,520 Og så jeg kan bryte dette i en idiom som dette, hvor jeg sier, 253 00:12:11,520 --> 00:12:14,820 hvis navnet på denne henrettelsen miljø er hoved, 254 00:12:14,820 --> 00:12:16,200 så jeg ønsker å gjøre disse tingene. 255 00:12:16,200 --> 00:12:18,710 Ellers noen andre kan use-- inkluderer min function-- 256 00:12:18,710 --> 00:12:22,510 filen min, og bare for å få tilgang til disse funksjonene 257 00:12:22,510 --> 00:12:25,552 uten å måtte kjøre de tingene som jeg ønsker å kjøre i denne filen. 258 00:12:25,552 --> 00:12:27,260 Dette er, igjen, valgfritt men svært vanlig. 259 00:12:27,260 --> 00:12:30,450 260 00:12:30,450 --> 00:12:33,840 >> Disse tingene er entirely-- er akkurat det samme mellom C og Python, 261 00:12:33,840 --> 00:12:35,100 i hvert fall i tre. 262 00:12:35,100 --> 00:12:38,610 Jeg tror i 2, divisjon operatør noen ganger gir deg tilbake flyter når 263 00:12:38,610 --> 00:12:41,450 du operert ints, og enten du ønsket det, eller du ikke. 264 00:12:41,450 --> 00:12:44,777 Men pluss, minus, og tider fungerer akkurat som du forventer, 265 00:12:44,777 --> 00:12:46,110 unntatt over litt flere typer. 266 00:12:46,110 --> 00:12:49,740 Så du kan mangedoble flåter på ints, og disse slags ting. 267 00:12:49,740 --> 00:12:52,480 >> sett fungerer akkurat det samme. 268 00:12:52,480 --> 00:12:54,310 Du kan bruke to like tegn. 269 00:12:54,310 --> 00:12:59,000 inequals-- større enn, mindre enn, disse slags things-- 270 00:12:59,000 --> 00:13:02,580 har de betydninger som du er kjent med dem. 271 00:13:02,580 --> 00:13:05,770 >> Hvor C bruker disse operatørene, Python bruker litt mer engelsk 272 00:13:05,770 --> 00:13:06,390 lesbare seg. 273 00:13:06,390 --> 00:13:09,348 Så i stedet for to,-tegn, du bokstavelig skriver ordet "og", "eller" 274 00:13:09,348 --> 00:13:10,740 eller ikke." 275 00:13:10,740 --> 00:13:13,420 Som i ditt if-- i din betinget utsagn, 276 00:13:13,420 --> 00:13:17,670 Vi så tidligere at dette syntaks i C tilsvarer dette syntaks i Python. 277 00:13:17,670 --> 00:13:21,010 Og det er ikke mye annerledes der, med unntak av en liten bit 278 00:13:21,010 --> 00:13:24,780 tegnsetting rundt sidene. 279 00:13:24,780 --> 00:13:28,890 Igjen, der C ville ellers hvis bruker Python elif, 280 00:13:28,890 --> 00:13:33,960 men disse er for det meste overflaten nivåendringer. 281 00:13:33,960 --> 00:13:38,450 >> Iterasjon som dette er ofte skrevet i denne idiom i Python. 282 00:13:38,450 --> 00:13:42,350 Du kan produsere denne typen ting med en stund sløyfe på utsiden 283 00:13:42,350 --> 00:13:46,387 hvis du ville, men du absolutt ikke må. 284 00:13:46,387 --> 00:13:48,970 Og igjen, hvis du ønsket skrive ut elementer i en matrise 285 00:13:48,970 --> 00:13:50,560 du kan gjøre det på denne måten. 286 00:13:50,560 --> 00:13:52,927 En av de morsomme tingene om Python skjønt, 287 00:13:52,927 --> 00:13:54,760 er at du ikke trenger å bruke dette paradigmet, 288 00:13:54,760 --> 00:13:57,290 og du kan bruke en litt mer elegant en. 289 00:13:57,290 --> 00:13:59,370 Du sier for en i ær. 290 00:13:59,370 --> 00:14:02,980 >> Så heller enn å gå her og kjører over indeksene, 291 00:14:02,980 --> 00:14:05,630 og deretter trekke ut enkeltelementer, 292 00:14:05,630 --> 00:14:08,644 du fortelle for å faktisk bare kjøre over elementene selv. 293 00:14:08,644 --> 00:14:11,060 Og så uansett hva du gjør innsiden kan operere direkte 294 00:14:11,060 --> 00:14:13,260 på elementene, som er ganske morsomt. 295 00:14:13,260 --> 00:14:16,710 Og vi vil see-- vi skal bruke at idiom igjen og igjen 296 00:14:16,710 --> 00:14:18,050 som vi går gjennom koden. 297 00:14:18,050 --> 00:14:20,091 >> Dette er igjen et eksempel av noe som jeg vil 298 00:14:20,091 --> 00:14:23,300 kalle Python magi, selv om det er svært tekniske årsaker til at det fungerer. 299 00:14:23,300 --> 00:14:26,340 Og det er tekniske ting som trenger å være sant om matrise for 300 00:14:26,340 --> 00:14:28,340 for å jobbe bak kulissene. 301 00:14:28,340 --> 00:14:31,390 Saken er at de fleste typer som du forventer at dette skal fungere 302 00:14:31,390 --> 00:14:36,610 har hatt dette implementert for du i den innebygde språk. 303 00:14:36,610 --> 00:14:40,030 >> En annen ting som det ville være hyggelig hvis dette har fungert på alle språk, 304 00:14:40,030 --> 00:14:45,460 men det er noen grunner til at det ikke kan, skrive ut denne strengen ganger dette nummeret. 305 00:14:45,460 --> 00:14:48,860 Slår ut i Python, dette gjør akkurat hva du vil, som er bare moro, 306 00:14:48,860 --> 00:14:52,840 og betyr at vi faktisk kan redusere dette programmet, igjen mario.c. 307 00:14:52,840 --> 00:14:57,150 Snarere enn itera mye, kan vi bare si, jeg vil ha litt antall plasser, 308 00:14:57,150 --> 00:15:01,120 Jeg vil antall hashes, og noen hashes på slutten. 309 00:15:01,120 --> 00:15:02,640 Og igjen, vi bruker dette formatet. 310 00:15:02,640 --> 00:15:05,340 >> Her er vi passerer i en variabel på denne måten. 311 00:15:05,340 --> 00:15:08,050 Igjen, trenger vi ikke å si hvilken type variabel er det, 312 00:15:08,050 --> 00:15:11,322 og den eneste gangen vi vil få feil er under kjøring. 313 00:15:11,322 --> 00:15:13,030 Når noen forsøker å passere noe i, 314 00:15:13,030 --> 00:15:14,860 det vil komme inn i funksjonen helt fint. 315 00:15:14,860 --> 00:15:18,240 Hvis vi kile her, fordi dette ikke er ting som du kan lage serier over, 316 00:15:18,240 --> 00:15:22,100 Jeg får en runtime error der, og jeg må feilsøke det på den måten. 317 00:15:22,100 --> 00:15:25,050 Men i mellomtiden, jeg har ikke å være veldig forsiktig med hva 318 00:15:25,050 --> 00:15:32,800 blir sendt på, så lenge som i selve gjennomføring av det hele fungerer veldig renslig. 319 00:15:32,800 --> 00:15:35,080 >> Jeg kan selv gjøre dette litt renere 320 00:15:35,080 --> 00:15:41,770 ved hjelp av en spesiell innebygd funksjon på strenger, er som Høyre Begrunn. 321 00:15:41,770 --> 00:15:45,250 Dette er bare en nyttig funksjon liggende rundt i biblioteket. 322 00:15:45,250 --> 00:15:47,660 Det er i dokumentasjonen hvis du går og ser etter den. 323 00:15:47,660 --> 00:15:51,650 Og jeg sier, vel jeg kommer til å ha denne strengen, noen antall hashes, 324 00:15:51,650 --> 00:15:56,390 og jeg vil gjerne høyre rettferdig it-- pad den ut med mellomrom for å være denne lengden. 325 00:15:56,390 --> 00:16:00,584 >> Igjen, dette er i dokumentasjon, som bringer us-- 326 00:16:00,584 --> 00:16:03,500 Jeg skal faktisk klikker gjennom these-- som bringer oss til vårt andre regelen 327 00:16:03,500 --> 00:16:06,990 for Python-- standard bibliotek funksjons metoder er dine venner. 328 00:16:06,990 --> 00:16:09,880 Og det er ofte verdt mens å gå på jakt etter jeg lurer på 329 00:16:09,880 --> 00:16:12,310 hvis det er en ting som bare gjør dette. 330 00:16:12,310 --> 00:16:13,830 Det er sannsynligvis. 331 00:16:13,830 --> 00:16:15,990 Hvis du ønsker å pad ut en streng, hvis du hadde 332 00:16:15,990 --> 00:16:17,470 gjerne benytte iden halvparten av en streng, hvis du hadde 333 00:16:17,470 --> 00:16:20,370 å søke gjennom en streng, hvis du ønsker å knuse et par ting 334 00:16:20,370 --> 00:16:22,420 sammen med en streng med komma mellom dem, 335 00:16:22,420 --> 00:16:24,640 det er standard bibliotek funksjoner for å gjøre dette. 336 00:16:24,640 --> 00:16:27,190 >> Og det gjør livet ditt enklere hvis du bruker dem 337 00:16:27,190 --> 00:16:29,240 i stedet for å rulle ut alt på egen hånd 338 00:16:29,240 --> 00:16:31,650 i fem linjer med kode her, fem linjer med kode her. 339 00:16:31,650 --> 00:16:34,430 Som virkelig starter på legge opp til fast tid. 340 00:16:34,430 --> 00:16:37,430 >> En av de interessante tingene om hvordan dette blir kalt. 341 00:16:37,430 --> 00:16:39,980 Du vil merke at det er en prikk ting. 342 00:16:39,980 --> 00:16:43,490 Jeg har noen objekt til venstre, og da jeg ringte en prikk en funksjon. 343 00:16:43,490 --> 00:16:49,780 Dette er en av de paradigmer som Python bruker for å feste metoder til objekter. 344 00:16:49,780 --> 00:16:54,410 Vi skal snakke om hva dette er meget kort i enden, 345 00:16:54,410 --> 00:16:58,510 men vet at vi både kan operere på ting ved å ta den tingen å si prikk 346 00:16:58,510 --> 00:17:01,690 uansett, eller ved å ringe en funksjon som tar 347 00:17:01,690 --> 00:17:04,339 som objekt og noen andre argumenter. 348 00:17:04,339 --> 00:17:07,450 >> Så disse er begge måter som ting blir gjort i Python. 349 00:17:07,450 --> 00:17:09,780 Og om en bestemt funksjonaliteten er implementert 350 00:17:09,780 --> 00:17:14,230 i denne stilen, eller dette stilen er noe du 351 00:17:14,230 --> 00:17:19,990 bør se opp til du får en hang for hvilken det er sannsynlig å falle inn. 352 00:17:19,990 --> 00:17:22,660 Det er en mer eller mindre sammenhengende filosofien bak Python 353 00:17:22,660 --> 00:17:24,930 at du absorbere det meste ved å skrive mye i det. 354 00:17:24,930 --> 00:17:28,190 På et tidspunkt, som en av disse noe skal gjennomføres som 355 00:17:28,190 --> 00:17:29,470 blir naturlig. 356 00:17:29,470 --> 00:17:32,420 For nå, det er bare noe du lærer som du finne ut 357 00:17:32,420 --> 00:17:34,140 hver enkelt ting. 358 00:17:34,140 --> 00:17:36,420 >> Så standard bibliotek funksjonene er dine venner, 359 00:17:36,420 --> 00:17:41,320 og de lar deg skrive ting som ta opp så mye plass egentlig kort tid, 360 00:17:41,320 --> 00:17:42,040 virkelig elegant. 361 00:17:42,040 --> 00:17:45,670 Og dette er faktisk trolig mer leselig, vil jeg si, enn C-program 362 00:17:45,670 --> 00:17:46,780 der borte. 363 00:17:46,780 --> 00:17:49,730 For ikke å nevne det faktum som er så Kort sagt kan du passe en hel elefant 364 00:17:49,730 --> 00:17:52,250 i rommet som vi har spart. 365 00:17:52,250 --> 00:17:56,270 >> En annen ting, er dette en implementering av mario som er prikk C, som jeg tror 366 00:17:56,270 --> 00:17:57,890 er den korteste du kan få det. 367 00:17:57,890 --> 00:18:00,757 Det har ikke get int, men det harde koder verdien av 10 368 00:18:00,757 --> 00:18:02,090 på samme måte som dette gjør. 369 00:18:02,090 --> 00:18:06,080 Det viser seg at denne og klokker inn på 84 tegn, mens Python er 64. 370 00:18:06,080 --> 00:18:11,490 Og dette er uendelig mer lesbar enn denne søpla her. 371 00:18:11,490 --> 00:18:14,610 Så Python er mer effektiv i verdensrommet. 372 00:18:14,610 --> 00:18:17,260 Det er litt mindre effektiv i tid, men ikke med mye. 373 00:18:17,260 --> 00:18:18,890 >> Lister er en viktig ting i Python. 374 00:18:18,890 --> 00:18:21,540 375 00:18:21,540 --> 00:18:24,587 Vi har ikke sett dem, men de operere mye som arrays gjøre i C. 376 00:18:24,587 --> 00:18:27,170 Så her kan du erklære dem, du kan sende dem til en ting. 377 00:18:27,170 --> 00:18:29,810 Nå rutene har en utvalg av disse tingene. 378 00:18:29,810 --> 00:18:33,480 Igjen, vi har ikke erklært som type, men hvis vi noen gang prøver å bruke det, 379 00:18:33,480 --> 00:18:36,260 noe som du forventer å arbeide på en rekke heltall 380 00:18:36,260 --> 00:18:40,130 kommer til å jobbe med en rekke heltall. 381 00:18:40,130 --> 00:18:42,030 >> Dette er en ting som du absolutt ikke kan 382 00:18:42,030 --> 00:18:47,390 do i C, fordi minne det er så hender på, 383 00:18:47,390 --> 00:18:48,950 men er veldig lett å gjøre i Python. 384 00:18:48,950 --> 00:18:55,310 Hvis jeg vil ha min rekke å bli større, kan jeg legge et element til det, og det er greit. 385 00:18:55,310 --> 00:18:57,150 >> Hva som skjer bak kulissene? 386 00:18:57,150 --> 00:18:59,150 Tolken vil gå ut og få litt minne, 387 00:18:59,150 --> 00:19:00,860 og kanskje det vil få en litt ekstra minne, 388 00:19:00,860 --> 00:19:03,090 så jeg vet ikke, så jeg har ikke til realloc hver gang. 389 00:19:03,090 --> 00:19:04,897 Men hvor mye har mer minne trenger det? 390 00:19:04,897 --> 00:19:06,730 Dette er ikke beslutninger at du har å gjøre, 391 00:19:06,730 --> 00:19:10,540 disse er avgjørelser som de tolk kommer til å gjøre. 392 00:19:10,540 --> 00:19:12,270 >> Her ser vi utvalg kan ta to argumenter, 393 00:19:12,270 --> 00:19:16,430 men det er fortsatt kommer til å være inkluderende av toppen så vi legger en der. 394 00:19:16,430 --> 00:19:21,970 Dette er et uttrykk som er en enda mer smart måte å skrive ting som dette. 395 00:19:21,970 --> 00:19:25,980 Det kalles liste forståelse, og her er hva vi sier 396 00:19:25,980 --> 00:19:32,560 er jeg ønsker å sette inn i squared for hver verdi av jeg i dette området. 397 00:19:32,560 --> 00:19:35,770 Denne saken til høyre kan være en annen array, og denne tingen på venstre 398 00:19:35,770 --> 00:19:40,740 være en hvilken som helst spesiell funksjon som ville ta i jeg som en variabel 399 00:19:40,740 --> 00:19:42,250 og gi meg ut noen resultat. 400 00:19:42,250 --> 00:19:43,480 >> Hva jeg skal gjøre er, Jeg kommer til å konstruere 401 00:19:43,480 --> 00:19:46,200 en matrise som er alle disse tingene for hver verdi i dette området. 402 00:19:46,200 --> 00:19:48,960 403 00:19:48,960 --> 00:19:55,670 Og dette er super elegant, super kort, og det er helt klart hva det betyr. 404 00:19:55,670 --> 00:19:59,190 Dette er en av de things-- dette er igjen, 405 00:19:59,190 --> 00:20:03,860 én of-- svært illustrerende for den grunner til at folk som Python. 406 00:20:03,860 --> 00:20:05,900 Hvis du liker programmering som dette, så Python 407 00:20:05,900 --> 00:20:07,830 er et språk du kanskje har lyst til å lære. 408 00:20:07,830 --> 00:20:10,950 >> Og igjen, det er teknisk grunner til at dette fungerer. 409 00:20:10,950 --> 00:20:14,730 Men så langt som vi er opptatt av, vi mer eller mindre ikke bryr seg. 410 00:20:14,730 --> 00:20:18,500 >> Så hvis du ønsker å skrive ut lister, noen av de samme idiomer er nyttige. 411 00:20:18,500 --> 00:20:20,940 For jeg i dette området, vi kunne indeksen gjennom alle de tingene 412 00:20:20,940 --> 00:20:23,140 og deretter skrive dem ut. 413 00:20:23,140 --> 00:20:24,650 Og du vil se len her. 414 00:20:24,650 --> 00:20:27,150 Hvis du noensinne har ønsket å få lengden av matrisen, som er 415 00:20:27,150 --> 00:20:31,150 veldig lett i Python, det er veldig vanskelig i C. 416 00:20:31,150 --> 00:20:33,720 Dette vil skrive ut nøyaktig hva du forventer det til. 417 00:20:33,720 --> 00:20:36,986 Vi kan også, som vi har sett før, iterere over elementene i matrisen 418 00:20:36,986 --> 00:20:39,860 direkte, og deretter bare snakke om dem, snarere enn å ha indeksen 419 00:20:39,860 --> 00:20:43,190 tilbake i matrisen hver gang. 420 00:20:43,190 --> 00:20:45,990 >> Og dette er en ting som du kan gjøre. 421 00:20:45,990 --> 00:20:49,984 Så i C, hvis du ber om noe som dette, ville print si, 422 00:20:49,984 --> 00:20:51,150 det er en rekke heltall. 423 00:20:51,150 --> 00:20:53,456 Det er definitivt ikke en string, jeg kan ikke skrive det ut. 424 00:20:53,456 --> 00:20:54,830 Python mer eller mindre ikke bryr seg. 425 00:20:54,830 --> 00:20:57,496 Det er som, er det en måte at jeg kunne slå dette til en streng? 426 00:20:57,496 --> 00:20:58,500 Ja, jeg vil gjøre det. 427 00:20:58,500 --> 00:21:01,600 Og så jeg skal bare skrive det ut. 428 00:21:01,600 --> 00:21:03,640 Dette betyr at du kan gjøre ting like-- disse 429 00:21:03,640 --> 00:21:06,530 er de fleste av de harde delene spill av femten skrevet 430 00:21:06,530 --> 00:21:08,930 veldig kort i Python. 431 00:21:08,930 --> 00:21:11,320 >> Du vil se at det er litt of-- her 432 00:21:11,320 --> 00:21:14,441 Jeg har kastet et heltall til en streng, og jeg må gjøre det manuelt. 433 00:21:14,441 --> 00:21:16,190 Og jeg kommer til å legge den til en annen streng, 434 00:21:16,190 --> 00:21:17,590 eller på annen måte Python blir forvirret. 435 00:21:17,590 --> 00:21:19,840 Men om når du er tilsetning av en streng til et helt tall, 436 00:21:19,840 --> 00:21:22,630 Jeg er vel å få en heltall tilbake eller en streng tilbake? 437 00:21:22,630 --> 00:21:24,480 Men igjen, hvis du bare kalle str på en ting, 438 00:21:24,480 --> 00:21:27,240 og det kan i noen mulig verden bli konvertert til en streng, 439 00:21:27,240 --> 00:21:30,390 det vil trolig være omdannes til en streng. 440 00:21:30,390 --> 00:21:33,120 >> Her ser vi bruk av nestet liste forståelse 441 00:21:33,120 --> 00:21:38,690 til venstre, noen indeksering, som er akkurat som du ville bli vant til det, 442 00:21:38,690 --> 00:21:40,060 og noen skriver ut av ting. 443 00:21:40,060 --> 00:21:42,560 Igjen har vi definert noen funksjoner og vi kaller dem ned 444 00:21:42,560 --> 00:21:45,820 i hoved når vi faktisk får filen. 445 00:21:45,820 --> 00:21:52,004 avkastning fungerer akkurat som du ville forvente fra arbeid med C. Finn, 446 00:21:52,004 --> 00:21:54,420 vi kan sette opp ting som dette-- her er listen forståelse 447 00:21:54,420 --> 00:21:59,245 det er et oppdrag til en variabel, og vi kan faktisk gjøre det enda enklere. 448 00:21:59,245 --> 00:22:01,870 Vi trenger ikke å skrive søk, fordi innebygd i språket 449 00:22:01,870 --> 00:22:04,230 er hvis denne saken er i denne matrisen. 450 00:22:04,230 --> 00:22:05,680 Return true, ellers returnerer false. 451 00:22:05,680 --> 00:22:08,830 Så det er helheten av funn. 452 00:22:08,830 --> 00:22:12,230 >> Helheten av slag innebærer ringer sortere, 453 00:22:12,230 --> 00:22:15,462 som er-- det er implementeringer av dette er innebygd i visse C-biblioteker. 454 00:22:15,462 --> 00:22:17,170 Hvis du ønsker dette slags baklengs, du 455 00:22:17,170 --> 00:22:20,450 kan overstyre dette valgfritt argument i revers med en sann. 456 00:22:20,450 --> 00:22:23,350 457 00:22:23,350 --> 00:22:27,860 Og hvis du ønsker å sortere i løpet strenger, er det innebygd i tillegg. 458 00:22:27,860 --> 00:22:31,950 >> Så dette er ikke å si at disse er ting som du trenger å gjøre hver dag, 459 00:22:31,950 --> 00:22:34,280 men ideen er at dette er filosofien til Python, 460 00:22:34,280 --> 00:22:37,530 at alle disse tingene som du ville slags ønsker å gjøre er innebygd. 461 00:22:37,530 --> 00:22:42,410 Og de fleste vanlige funksjoner, så sort, lengde, uansett, 462 00:22:42,410 --> 00:22:44,380 støtter mest logisk fornuftige innspill. 463 00:22:44,380 --> 00:22:49,020 Du kaller len på en rekke samme Måten du kaller len på en snor. 464 00:22:49,020 --> 00:22:55,785 Du multiply-- du sortere strenger på samme måte som du sortere arrays. 465 00:22:55,785 --> 00:22:58,930 466 00:22:58,930 --> 00:23:00,740 >> De fleste standard funksjoner at folk bygge, 467 00:23:00,740 --> 00:23:03,000 og de fleste tredjeparts biblioteker som folk 468 00:23:03,000 --> 00:23:06,980 bygge, fordi de er emulere utformingen av standard bibliotek, 469 00:23:06,980 --> 00:23:10,190 kan kalles på alt som du er liker, hvorfor ikke dette bare fungere, 470 00:23:10,190 --> 00:23:12,800 i C. Mer eller mindre, det vil fungere i Python 471 00:23:12,800 --> 00:23:15,930 fordi folk jobber bak til figuren ut hva en ting er og deretter operere 472 00:23:15,930 --> 00:23:17,510 riktig på det. 473 00:23:17,510 --> 00:23:22,760 Så igjen, teknisk bakgrunn, men det gjør livet lettere som programmerere. 474 00:23:22,760 --> 00:23:26,820 >> Så her er fil I / O. fil I / O har mange små ting som gjør det komplisert, 475 00:23:26,820 --> 00:23:29,890 og så er det ressurser på nettet, men i et nøtteskall, 476 00:23:29,890 --> 00:23:33,010 du kaller åpen på en fil navn med en spesiell type. 477 00:23:33,010 --> 00:23:37,640 Så det er å lese, lese og skrive, skrive eller legge. 478 00:23:37,640 --> 00:23:41,790 Du leser et visst antall figurer ut og du skrive ut disse, 479 00:23:41,790 --> 00:23:42,595 du får Hello! 480 00:23:42,595 --> 00:23:43,970 Jeg mener, i likhet med denne filen hadde Hello! 481 00:23:43,970 --> 00:23:46,480 I det, ring til å lese, og hva du får tilbake 482 00:23:46,480 --> 00:23:49,520 er en streng som har alle av resten av matrisen, 483 00:23:49,520 --> 00:23:50,860 eller alle av resten av filen. 484 00:23:50,860 --> 00:23:53,805 485 00:23:53,805 --> 00:23:56,055 Hvis du ringer lese igjen, du er på slutten av filen, 486 00:23:56,055 --> 00:23:58,138 og slik at du ikke får noe og så du vil lukke. 487 00:23:58,138 --> 00:24:02,510 Igjen, dette er .close fremfor tett i filen, slik det ville være i C. 488 00:24:02,510 --> 00:24:07,190 Dette er mer eller mindre fordi f er et ting, og du ønsker for f å lukke. 489 00:24:07,190 --> 00:24:12,092 Men grunnleggende fil I / O er ikke spesielt komplisert. 490 00:24:12,092 --> 00:24:15,300 Igjen, hvis du ønsker å åpne en fil, hvis du ønsker å lese en bestemt linje, 491 00:24:15,300 --> 00:24:17,870 du kan få ut av denne line-- det innebygde moduler for det. 492 00:24:17,870 --> 00:24:19,995 Hvis du ønsker å skrive en ting, kan du skrive dette. 493 00:24:19,995 --> 00:24:23,412 Hvis du ønsker å skrive ut individuelle biter, kan du skrive dem. 494 00:24:23,412 --> 00:24:25,620 Og hvis du ønsker å veksle over linjene i en fil 495 00:24:25,620 --> 00:24:29,557 individuelt, slik vi gjorde i et stykke fra for noen uker siden, kan du gjøre det til. 496 00:24:29,557 --> 00:24:32,140 Igjen, de fleste objekter som du vil å være i stand til å iterere over 497 00:24:32,140 --> 00:24:33,780 støtte itera over dem. 498 00:24:33,780 --> 00:24:37,430 I Monty Python, er en fil kanskje en ting som Jeg ønsker å iterere over linje for linje. 499 00:24:37,430 --> 00:24:39,138 Hvis det var en ordbok av ord, og jeg var 500 00:24:39,138 --> 00:24:42,181 prøver å få de individuelle ordene ut, da, i denne sløyfen, 501 00:24:42,181 --> 00:24:44,180 linje det kommer til å være hvert ord i tur og denne 502 00:24:44,180 --> 00:24:47,880 kommer til å bli henrettet for hver linje i filen frem til slutten av filen. 503 00:24:47,880 --> 00:24:52,280 Og igjen, hvis jeg skrevet ut hver linje, linjene kommer med nye linjer, 504 00:24:52,280 --> 00:24:54,740 så jeg sette slutten tilbake til noe slikt. 505 00:24:54,740 --> 00:24:56,580 Da jeg skulle få innholdet i filen min. 506 00:24:56,580 --> 00:25:03,610 507 00:25:03,610 --> 00:25:07,480 >> Den andre tingen som opererer i noen måter som lister, og på noen måter 508 00:25:07,480 --> 00:25:11,870 som noe vesentlig kraftigere, 509 00:25:11,870 --> 00:25:16,170 er ordbøker som er virkelig kult å bruke, men er i utgangspunktet hasj 510 00:25:16,170 --> 00:25:17,670 tabeller i forkledning. 511 00:25:17,670 --> 00:25:23,330 Du opprette en bruker nøyaktig to tegn, som er kjempebra 512 00:25:23,330 --> 00:25:25,959 Hvis du prøvde å implementere hash table for ditt problem sett, 513 00:25:25,959 --> 00:25:27,250 du vet mye smerte som kan være. 514 00:25:27,250 --> 00:25:29,390 Men folk har gjort det, og gjort det så bra, 515 00:25:29,390 --> 00:25:32,260 at du ikke trenger å bekymre deg for det lenger. 516 00:25:32,260 --> 00:25:35,180 >> Deretter kan du sette inn enkelte ting. 517 00:25:35,180 --> 00:25:38,110 Hash tables-- eller ordbøker ikke spesielt 518 00:25:38,110 --> 00:25:40,240 bryr seg hva du lagrer i dem. 519 00:25:40,240 --> 00:25:44,210 Så hvis noen oppføringer er tall, og noen oppføringer er lister, 520 00:25:44,210 --> 00:25:47,360 hvis noen oppføringer er andre ordbøker, og noen oppføringer er strenger, 521 00:25:47,360 --> 00:25:49,930 Python ikke mye omsorg. 522 00:25:49,930 --> 00:25:53,460 >> Igjen, hvis du går inn i det ventet en streng og hva du får tilbake 523 00:25:53,460 --> 00:25:56,269 er en matrise, som er problemet. 524 00:25:56,269 --> 00:25:58,810 Og kanskje det er feil av hvem Trodde det var å sette ting 525 00:25:58,810 --> 00:26:00,476 i ordboken, kanskje det var deg. 526 00:26:00,476 --> 00:26:02,350 Hvis det var noen annet, forhåpentligvis de var 527 00:26:02,350 --> 00:26:04,520 veloppdragen om hva skulle i ordlisten 528 00:26:04,520 --> 00:26:07,420 og har ikke gitt noen fallgruver for deg å falle i. 529 00:26:07,420 --> 00:26:10,890 >> Men de vanlige funksjonene vil gi deg tilbake veloppdragne ting. 530 00:26:10,890 --> 00:26:13,500 Så de sier dette returer sikkerhets en ordbok av strenger, 531 00:26:13,500 --> 00:26:15,860 så alt du kommer å komme seg ut av en streng. 532 00:26:15,860 --> 00:26:20,710 Hvis du gjør noe av dette, og det turer deg opp, vel, som kan være på deg. 533 00:26:20,710 --> 00:26:25,542 Python sikkert gir deg nok tau til å henge deg selv, hvis du vil. 534 00:26:25,542 --> 00:26:28,250 Nå kan vi skrive ut individuelle elementer av dette og dette returer 535 00:26:28,250 --> 00:26:29,935 akkurat det du forventer. 536 00:26:29,935 --> 00:26:32,810 Nøyaktig hva du forventer, antar jeg, er en setning som jeg bruker mye, 537 00:26:32,810 --> 00:26:35,070 men det er mer eller mindre hvordan Python fungerer. 538 00:26:35,070 --> 00:26:39,880 Hvis du ber om en ting som ikke er det vil Python kaste ut en feil 539 00:26:39,880 --> 00:26:43,194 og det vil slutte deg ut av det programmet du var i. 540 00:26:43,194 --> 00:26:45,360 Det vil faktisk skrive ut mer informasjon enn det, 541 00:26:45,360 --> 00:26:49,110 det vil peke you-- det vil legge til en linje, og så. 542 00:26:49,110 --> 00:26:52,190 >> Og, igjen, kanskje vi ønsker å iterere over ordbøker 543 00:26:52,190 --> 00:26:54,410 og finne alle tingene i den. 544 00:26:54,410 --> 00:26:57,440 Her er vi gjentar løpet to ting samtidig. 545 00:26:57,440 --> 00:27:03,040 Og så vil vi gjøre det med en nøkkel, verdi, men deretter skrive ut alle disse. 546 00:27:03,040 --> 00:27:06,300 >> Og hvis vi ønsket å cast-- hvis vi faktisk kjørte denne, 547 00:27:06,300 --> 00:27:10,840 vi ville ha noen problemer på grunn on-- når vi gikk inn med David, 548 00:27:10,840 --> 00:27:13,920 det kunne ikke add-- hvis vi ikke kastet det til en streng først, 549 00:27:13,920 --> 00:27:17,802 Vi kunne ikke legge til at matrisen strenger mot en streng. 550 00:27:17,802 --> 00:27:19,760 Men hvis vi kaste det for en streng, får vi noe 551 00:27:19,760 --> 00:27:22,590 som dette, som er kanskje hva vi ønsker å lese. 552 00:27:22,590 --> 00:27:27,000 553 00:27:27,000 --> 00:27:30,500 >> Og dette er stavekontroll. 554 00:27:30,500 --> 00:27:32,460 Vi leser i ting. 555 00:27:32,460 --> 00:27:35,770 Så vi kan lese i enkelte ord som linjer. 556 00:27:35,770 --> 00:27:38,240 Vi hogge av den siste ting, så colon minus 1 557 00:27:38,240 --> 00:27:41,651 chomps av det siste som we-- det siste tegnet av en streng. 558 00:27:41,651 --> 00:27:42,150 Vi vil si. 559 00:27:42,150 --> 00:27:44,730 OK, hver og en av disse får satt inn i denne ordboka, 560 00:27:44,730 --> 00:27:45,810 tilordning til en verdi på en. 561 00:27:45,810 --> 00:27:48,006 Vi gjør ikke spesielt bryr seg om at man, 562 00:27:48,006 --> 00:27:51,130 men det er bare det å si, nåvel, denne tingen jeg skal sette i ordlisten. 563 00:27:51,130 --> 00:27:53,182 Fordi senere hva vi er kommer til å gjøre er at vi er 564 00:27:53,182 --> 00:27:55,390 kommer til å si, vel, hvis det er i ordlisten i det hele tatt. 565 00:27:55,390 --> 00:27:57,650 >> Igjen, denne sjekken for medlemskap er opp drifts 566 00:27:57,650 --> 00:28:00,940 ved hjelp av en helt annen algoritme enn det vil i en liste, 567 00:28:00,940 --> 00:28:05,709 men vi kaller det på samme måte, som er noe av det Python sukkerbelegg 568 00:28:05,709 --> 00:28:07,250 ting slik at de er lettere å bruke. 569 00:28:07,250 --> 00:28:10,230 Og igjen, vi har sett ting som dette før. 570 00:28:10,230 --> 00:28:12,940 Dette er i utgangspunktet finne, eller det er akkurat det samme syntaks 571 00:28:12,940 --> 00:28:16,480 som finne, men opererer over et helt annen struktur. 572 00:28:16,480 --> 00:28:20,170 Og vi ikke særlig omsorg. 573 00:28:20,170 --> 00:28:25,540 Så de er de tingene som du ble bedt om å iverksette for stavekontroll. 574 00:28:25,540 --> 00:28:29,278 På denne prisen, vi kommer til å få mer eller mindre alle de psets gjort. 575 00:28:29,278 --> 00:28:31,474 >> PUBLIKUM: Slik at utgangspunktet bare kommer tilbake 576 00:28:31,474 --> 00:28:34,852 som stavet feil hvis det ikke matche noe i ordboken? 577 00:28:34,852 --> 00:28:36,060 ROSS RHEINGANS-YOO: Ja, ja. 578 00:28:36,060 --> 00:28:38,964 579 00:28:38,964 --> 00:28:40,880 Og så er dette en tilpasning av et oppgavesettet 580 00:28:40,880 --> 00:28:43,150 som ber deg om å gjøre akkurat det. 581 00:28:43,150 --> 00:28:46,357 >> PUBLIKUM: Hvorfor er linjen minus 1 er det? 582 00:28:46,357 --> 00:28:48,190 ROSS RHEINGANS-YOO: So når du itera 583 00:28:48,190 --> 00:28:50,300 over en fil ber om ved linjer, linjene 584 00:28:50,300 --> 00:28:53,900 kommer med en ny linje karakter ved slutten av it minus 1 585 00:28:53,900 --> 00:28:55,260 er bare å handle dem av. 586 00:28:55,260 --> 00:28:59,549 Og dette er en spesielt fleksibel måte å indeksere inn i ting. 587 00:28:59,549 --> 00:29:01,590 Så hvis du har en streng, og du vil, vel jeg er 588 00:29:01,590 --> 00:29:05,340 kommer til å starte på karakteren tre og jeg kommer til å gå til slutten. 589 00:29:05,340 --> 00:29:07,140 3 kolon vil gjøre det for deg. 590 00:29:07,140 --> 00:29:10,570 Hvis du er som, ønsker jeg å starte på begynner og gå til den siste minus 1 591 00:29:10,570 --> 00:29:12,400 karakter, tykktarm minus 1. 592 00:29:12,400 --> 00:29:14,940 Og hvis du ønsket å gå fra tredje til minus første, 593 00:29:14,940 --> 00:29:16,570 så du vil si 3 minus 1. 594 00:29:16,570 --> 00:29:19,464 595 00:29:19,464 --> 00:29:22,400 >> I tillegg, hvis du ønsker å indeksere inn i ting teller fra baksiden, 596 00:29:22,400 --> 00:29:24,470 du bare indeksen på med minus tall. 597 00:29:24,470 --> 00:29:26,980 Og fordi, der C ville eksplodere eller kanskje 598 00:29:26,980 --> 00:29:31,090 mate deg annet minne du ikke har tilgang til, hører du kan si minus 1 599 00:29:31,090 --> 00:29:34,104 betyr det siste, men en tegn i en streng. 600 00:29:34,104 --> 00:29:36,950 601 00:29:36,950 --> 00:29:43,590 >> Moduler er version-- er analoger til bibliotek i C 602 00:29:43,590 --> 00:29:45,119 og er nyttig for mange ting. 603 00:29:45,119 --> 00:29:46,910 Mange ting du hadde liker å gjøre i Python, 604 00:29:46,910 --> 00:29:50,040 foruten enkel manipulering av variabler, 605 00:29:50,040 --> 00:29:52,290 du ønsker å koble inn større bibliotek med større 606 00:29:52,290 --> 00:29:55,910 grensesnitt og mer muligheter for samspill 607 00:29:55,910 --> 00:29:57,195 med andre deler av verden. 608 00:29:57,195 --> 00:29:58,910 sys er en av dem med en haug med verktøy 609 00:29:58,910 --> 00:30:01,159 som er nyttige for samspill med selve systemet 610 00:30:01,159 --> 00:30:05,050 og vil importere den som import sys. 611 00:30:05,050 --> 00:30:07,820 >> Det finnes mer dokumentasjon fra det, som du kan gå her, 612 00:30:07,820 --> 00:30:11,490 eller du kan finne på Google ved googling Python sys. 613 00:30:11,490 --> 00:30:12,640 Du skriver i skriv. 614 00:30:12,640 --> 00:30:15,140 Den første linken kommer til å være dokumentasjonen i Python 2, 615 00:30:15,140 --> 00:30:19,260 den andre linken kommer til å være dokumentasjon Python tre. 616 00:30:19,260 --> 00:30:24,830 >> Og hvis vi skrev ut en fil som så som dette-- Hvis spesielt, vi er 617 00:30:24,830 --> 00:30:27,910 ser på som opererer på kommandolinjeargumenter, 618 00:30:27,910 --> 00:30:30,040 som vi lærte å gjøre veldig tidlig i denne klassen. 619 00:30:30,040 --> 00:30:32,190 Dette er ikke vanskelig. Du kan få ut argv, 620 00:30:32,190 --> 00:30:34,565 som er en av de ting som er implementert av sys. 621 00:30:34,565 --> 00:30:37,210 Det er ikke innebygd i grunnpakken, men igjen, du 622 00:30:37,210 --> 00:30:40,080 kan forlenge den ved å importere den funksjonaliteten fra sys. 623 00:30:40,080 --> 00:30:41,090 Du vil kalle det sys. 624 00:30:41,090 --> 00:30:42,611 samme det. 625 00:30:42,611 --> 00:30:43,360 Her er det argv. 626 00:30:43,360 --> 00:30:45,193 Det er faktisk ikke noe argc i sys, fordi du 627 00:30:45,193 --> 00:30:47,880 kan få det så lett ved å ringe len. 628 00:30:47,880 --> 00:30:55,390 Vi så skrives det ut, så vi kjørte på vår terminal echo-args.py. 629 00:30:55,390 --> 00:30:58,360 Vi får tilbake en matrise, som er dette første argumentet. 630 00:30:58,360 --> 00:31:02,240 Igjen, dette er argv 0, som er navn på ting som ble kalt. 631 00:31:02,240 --> 00:31:04,870 Hvis vi kalte det med ekstra argumenter, ville vi få dem tilbake. 632 00:31:04,870 --> 00:31:07,687 633 00:31:07,687 --> 00:31:09,770 Dette er en måte å få kommandolinjeargumenter. 634 00:31:09,770 --> 00:31:13,440 Hvis du ønsker flagg der du slår spesielle ting på eller overstyring 635 00:31:13,440 --> 00:31:16,050 en bestemt standard, argparse er din venn. 636 00:31:16,050 --> 00:31:21,550 Og igjen du finne at online på python argparse på Google. 637 00:31:21,550 --> 00:31:24,300 >> Det er et par av verktøy moduler som du finner deg selv ved hjelp 638 00:31:24,300 --> 00:31:27,630 og igjen, hvis du bruker litt tid av dette språket importere jsons 639 00:31:27,630 --> 00:31:33,300 for å lese inn og ut av json filer, ikke så komplisert. 640 00:31:33,300 --> 00:31:37,139 Du åpner opp en fil, kalt deg json.load på denne fila og du får tilbake en ting. 641 00:31:37,139 --> 00:31:37,930 Hva er det? 642 00:31:37,930 --> 00:31:40,329 Det er en json objekt. 643 00:31:40,329 --> 00:31:42,370 Hvor som json har array, Python har arrays. 644 00:31:42,370 --> 00:31:44,420 Hvor som json har assosiative matriser, Pythons 645 00:31:44,420 --> 00:31:48,810 ordbøker, strenger, og tall, og så videre. 646 00:31:48,810 --> 00:31:53,560 Du ønsker å dumpe det ut, du åpne opp en ny fil, du kaller dump, 647 00:31:53,560 --> 00:31:57,590 og laster og dumper for å gå inn og ut av strenger. 648 00:31:57,590 --> 00:32:02,120 >> Tilsvarende blir pickle kalt i utgangspunktet det samme grensesnittet. 649 00:32:02,120 --> 00:32:04,740 Det er litt mer nyttig hvis du dumping Python stedene. 650 00:32:04,740 --> 00:32:08,370 Så hvis du noen gang ønsket å spare en versjon av dagens status 651 00:32:08,370 --> 00:32:11,930 av en variabel for en fremtidig kjøre av programmet, 652 00:32:11,930 --> 00:32:14,740 pickle er Pythons bibliotek for å gjøre det. 653 00:32:14,740 --> 00:32:19,140 >> Hvis du har noen form for variabel som kan skrives ut 654 00:32:19,140 --> 00:32:21,990 i like ord og tegn og bytes-- som dette ordlisten, 655 00:32:21,990 --> 00:32:24,230 vi kunne skrive ned, vi kunne skrive det ned som 656 00:32:24,230 --> 00:32:26,670 som en json objekt, som var bokstavelig disse tegnene. 657 00:32:26,670 --> 00:32:29,420 Og så ville det være svært enkelt for et menneske å åpne den opp-- åpne opp 658 00:32:29,420 --> 00:32:30,889 og lese den. 659 00:32:30,889 --> 00:32:33,180 Hvis vi gjorde ikke spesielt bryr seg om mennesker som leser det, 660 00:32:33,180 --> 00:32:38,490 vi kunne pakke enda mer effektivt inn i skjemaer som kunne senere pakkes ut 661 00:32:38,490 --> 00:32:42,860 eller som kan senere bli oppblåst. 662 00:32:42,860 --> 00:32:46,740 Og dette sparer 80% av plass at objektene kanskje 663 00:32:46,740 --> 00:32:49,390 ta hvis du skrev dem ut longhand. 664 00:32:49,390 --> 00:32:52,384 >> Du kaller pickle veldig mye samme måte-- dump, last, 665 00:32:52,384 --> 00:32:53,800 og så får du tingene dine tilbake. 666 00:32:53,800 --> 00:32:56,880 Så hvis du skriver veldig korte Python-programmer som 667 00:32:56,880 --> 00:32:59,952 ønsker å spare staten, og deretter lese dem tilbake senere, ting som dette 668 00:32:59,952 --> 00:33:00,660 er dine venner. 669 00:33:00,660 --> 00:33:02,640 Som du kan veldig lett dumpe dem som json. 670 00:33:02,640 --> 00:33:04,550 De fleste Python objekter kan dumpe ut json 671 00:33:04,550 --> 00:33:11,310 hvis det er noe håp om at strukturelt de kunne være representert på den måten. 672 00:33:11,310 --> 00:33:14,410 >> Dette er bare toppen av den isfjell på moduler som er nyttige. 673 00:33:14,410 --> 00:33:19,510 Så sys, os, multi, er slags grunnleggende arbeidshester for ting 674 00:33:19,510 --> 00:33:23,120 vi trenger å samhandle med filsystemet os., 675 00:33:23,120 --> 00:33:28,764 som os.isfile, os.isdirectory, os.makefile, disse er dine venner. 676 00:33:28,764 --> 00:33:30,930 Hvis du ønsker å samhandle med en bestemt filtype, 677 00:33:30,930 --> 00:33:32,190 json, sylte, csv. 678 00:33:32,190 --> 00:33:37,160 Hvis du ønsker å samhandle med web sider, urllib for å få http 679 00:33:37,160 --> 00:33:41,370 sider. bs4-- BeautifulSoup-- det er et fantastisk parser for html. 680 00:33:41,370 --> 00:33:47,047 Du kjøre den på en html og du få dette nestet rekke objekt nå, 681 00:33:47,047 --> 00:33:49,630 som du kan bla i løpet lookin, med som bare leter etter 682 00:33:49,630 --> 00:33:52,380 hvis, er, i, som er fantastisk. 683 00:33:52,380 --> 00:33:55,920 >> Det er en haug med pakker for running-- 684 00:33:55,920 --> 00:33:57,960 for å gjøre spesielt MATHY ting. 685 00:33:57,960 --> 00:34:01,790 Så hvis du ønsker å formere seg, invertere, forvandle matriser, 686 00:34:01,790 --> 00:34:05,690 numpy blir brukt av folk alle over hele verden for det. 687 00:34:05,690 --> 00:34:09,620 scipy er enda mer nyttig verktøy i den retningen. 688 00:34:09,620 --> 00:34:13,980 sklearn-- maskinlæring, naturlig språk prosessering, 689 00:34:13,980 --> 00:34:17,880 super nyttig ting, får implementert i Python hele tiden. 690 00:34:17,880 --> 00:34:21,469 >> Og igjen, det tar litt lengre tid å write-- beklager, 691 00:34:21,469 --> 00:34:26,199 tar litt lengre tid å kjøre, men grunnen til at reelle ingeniører tendens 692 00:34:26,199 --> 00:34:29,900 bruk Python er fordi du har en tendens til å være blokkert av deg å skrive koden, snarere 693 00:34:29,900 --> 00:34:32,699 enn datamaskinen kjører koden. 694 00:34:32,699 --> 00:34:35,860 Så hvis du kommer til å skrive en Programmet, som mange andre mennesker 695 00:34:35,860 --> 00:34:37,699 skal bruke forever, som Linux, du 696 00:34:37,699 --> 00:34:41,900 kanskje skrive det i C. Hvis du var kommer til å skrive en beregning motor, 697 00:34:41,900 --> 00:34:46,124 du kan skrive i Python hvis du trengte å endre det hver par måneder. 698 00:34:46,124 --> 00:34:48,540 Noen vil skrive det i C fordi de er sånn. 699 00:34:48,540 --> 00:34:51,100 700 00:34:51,100 --> 00:34:54,050 >> Så vi har sett import sys som en måte å få ting 701 00:34:54,050 --> 00:34:57,070 for å få modulen inn i programmet. 702 00:34:57,070 --> 00:35:00,370 Du kan også importere det som et kallenavn, hvis du ønsker. 703 00:35:00,370 --> 00:35:03,660 Igjen multiprosessering er en smerte å skriver ut hver gang, så importerer som mp 704 00:35:03,660 --> 00:35:05,900 og deretter når du bruke det i programmet, 705 00:35:05,900 --> 00:35:09,732 vil du si mp.process, eller hva har du. 706 00:35:09,732 --> 00:35:12,670 Hvis du vil importere bare en eneste ting, 707 00:35:12,670 --> 00:35:19,450 så urllib har noe som heter forespørsel, så du kan bare importere det. 708 00:35:19,450 --> 00:35:22,610 Senere vil du ikke påberope det som urllib.request, men like forespørsel 709 00:35:22,610 --> 00:35:24,590 av seg selv. 710 00:35:24,590 --> 00:35:30,110 >> Og du kan importere alt fra en modul hvis du ønsker. 711 00:35:30,110 --> 00:35:34,820 Dette er tidvis ikke en god idea-- dette vanligvis ikke en god ide, faktisk. 712 00:35:34,820 --> 00:35:39,080 Fordi du very-- fordi hvis noe ved at modulen har et navn som du 713 00:35:39,080 --> 00:35:41,640 ønsket å bruke et annet sted i programmet, kan du ikke. 714 00:35:41,640 --> 00:35:44,127 >> Og det er ikke alltid opplagt at det er tilfelle. 715 00:35:44,127 --> 00:35:46,460 For å være sikker på at hva du gjorde var trygg, 716 00:35:46,460 --> 00:35:47,920 du trenger å åpne opp modulen og se alt 717 00:35:47,920 --> 00:35:50,295 av navnene som ender opp i det-- alle funksjoner, 718 00:35:50,295 --> 00:35:53,010 alle variablene som lever i den modulen, 719 00:35:53,010 --> 00:35:57,040 fordi du bringer alle dem inn i din lokale navnerommet. 720 00:35:57,040 --> 00:35:58,680 >> Så folk gjør dette. 721 00:35:58,680 --> 00:36:01,322 Det er generelt anbefalt at du ikke gjør dette. 722 00:36:01,322 --> 00:36:03,280 Men folk gjør dette hele tiden fordi de er 723 00:36:03,280 --> 00:36:05,180 lat og ikke ønsker å skrive ut mp. 724 00:36:05,180 --> 00:36:06,310 noe, noensinne. 725 00:36:06,310 --> 00:36:09,560 726 00:36:09,560 --> 00:36:13,310 >> Alt dette snakket om moduler bringe meg rundt til en kort tale 727 00:36:13,310 --> 00:36:15,930 om hvordan du utformer programmer i Python. 728 00:36:15,930 --> 00:36:19,860 Det første trinnet er å sjekke for å se om noen andre allerede har gjort ting, 729 00:36:19,860 --> 00:36:22,160 eller gjort 90% av ting. 730 00:36:22,160 --> 00:36:26,010 Sjansen er at de sannsynligvis har, og du bør gå får sine ting og kjøre den. 731 00:36:26,010 --> 00:36:28,900 Eller skrive en wrapper rundt det å tilpasse den til ditt formål. 732 00:36:28,900 --> 00:36:31,250 Det er først etter at har mislyktes som du hadde da 733 00:36:31,250 --> 00:36:35,529 gå på og write-- begynne å tenke på hvordan du ville sette denne tingen sammen. 734 00:36:35,529 --> 00:36:37,320 Det er massevis av ting der ute, og at 735 00:36:37,320 --> 00:36:39,180 en av de mest nyttige ting om Python. 736 00:36:39,180 --> 00:36:40,930 Som språket er elegant, språket 737 00:36:40,930 --> 00:36:43,800 er enkel å bruke, men også fordi det er så elegant og enkel å bruke, 738 00:36:43,800 --> 00:36:47,420 folk har brukt det i et lang tid og det er en masse ting 739 00:36:47,420 --> 00:36:52,520 der ute som du kan sele til eget bruk. 740 00:36:52,520 --> 00:36:58,457 >> Så forrige regel Python er, noen andre allerede har sannsynligvis skrevet 741 00:36:58,457 --> 00:37:00,290 en modul for det, noen andre har allerede 742 00:37:00,290 --> 00:37:02,980 sannsynligvis skrevet et bibliotek for det. 743 00:37:02,980 --> 00:37:06,579 Før du prøver å gjøre en ting, se for å se om det er blitt gjennomført. 744 00:37:06,579 --> 00:37:07,370 Det er ikke så vanskelig. 745 00:37:07,370 --> 00:37:11,960 Alle modulene som jeg legger opp før, med kanskje ett unntak, 746 00:37:11,960 --> 00:37:15,220 kommer forhåndsinstallert på alle standard Python-installasjonen. 747 00:37:15,220 --> 00:37:17,769 Og så med en oppfordring til importere uansett, du 748 00:37:17,769 --> 00:37:19,852 har all denne funksjonaliteten på fingertuppene. 749 00:37:19,852 --> 00:37:24,660 750 00:37:24,660 --> 00:37:28,920 >> Begynner å bryte opp dette snakke, er det et par ting 751 00:37:28,920 --> 00:37:32,770 at jeg har igjen som svarte bokser og liksom glattet over, 752 00:37:32,770 --> 00:37:37,217 og det er noen hvite løgner at jeg har fortalte at på grunn av ærlighet, 753 00:37:37,217 --> 00:37:39,050 Jeg skal i hvert fall punktet her, selv om jeg ikke vil 754 00:37:39,050 --> 00:37:43,980 gå super dypt inn alle av dem og deres tekniske forklaringer. 755 00:37:43,980 --> 00:37:46,010 >> Mange av de tingene som jeg har kalt magi 756 00:37:46,010 --> 00:37:48,980 er hva andre mennesker vil kalle objektorientert programmering. 757 00:37:48,980 --> 00:37:52,470 Så det er mange things-- så variabler er svært ofte ikke 758 00:37:52,470 --> 00:37:56,540 enkle bytes sitter i, hukommelse, men er meget komplisert 759 00:37:56,540 --> 00:38:01,910 objekter som har intern staten om funksjoner og mye 760 00:38:01,910 --> 00:38:05,570 skjulte variabler, masse skjult funksjonalitet som 761 00:38:05,570 --> 00:38:09,480 lar deg gjøre dem om til strenger, som lar deg iterere over dem. 762 00:38:09,480 --> 00:38:12,260 Og hvis du writing-- og den grunn at de 763 00:38:12,260 --> 00:38:15,710 har alt dette rik funksjonalitet er fordi people-- 764 00:38:15,710 --> 00:38:17,740 arkitektene bak language-- har gått 765 00:38:17,740 --> 00:38:22,420 gjennom og for hver standard objekt, sette i funksjonalitet 766 00:38:22,420 --> 00:38:26,970 å si dette er hvordan dette er hvordan dette kommer til å operere 767 00:38:26,970 --> 00:38:28,470 hvis noen ønsker å iterere over det. 768 00:38:28,470 --> 00:38:31,240 >> Så alt som noen kanskje muligens ønsker å iterere over, 769 00:38:31,240 --> 00:38:34,529 har logikk skrevet i manuelt på hvordan du er 770 00:38:34,529 --> 00:38:36,070 ment å iterere over dette objektet. 771 00:38:36,070 --> 00:38:40,274 Alt som du kan tenke deg dumpet i en streng er logisk skrevet. 772 00:38:40,274 --> 00:38:43,440 Dette er den funksjonen du ringe hvis du ønsker å dumpe dette ut til en streng. 773 00:38:43,440 --> 00:38:45,273 Dette er grunnen til at du kan kalle len på ting, dette 774 00:38:45,273 --> 00:38:49,900 er grunnen til at du kan ringe for i, er dette Derfor kan du ringe hvis du er i på alt 775 00:38:49,900 --> 00:38:53,490 at du ønsker å, fordi de alle bærer med seg, 776 00:38:53,490 --> 00:38:55,380 teknisk kunnskap til å gjøre det. 777 00:38:55,380 --> 00:38:58,170 778 00:38:58,170 --> 00:39:00,432 >> Dette er noe som jeg er super ikke tenkt å gå inn. 779 00:39:00,432 --> 00:39:03,140 Men for ting på listen er subtilt forskjellig fra C stil for looper, 780 00:39:03,140 --> 00:39:06,160 og du kan lese alt om det på Internett hvis du er interessert. 781 00:39:06,160 --> 00:39:08,930 Det er en mørk side til alle av dette, som jeg nevnte, 782 00:39:08,930 --> 00:39:10,359 så det er to ting. 783 00:39:10,359 --> 00:39:13,400 Den første er at denne objektorientert programmering gir mye overhead 784 00:39:13,400 --> 00:39:16,080 til tilfeldige ting, slik at du ender opp med å bruke mye mer minne; 785 00:39:16,080 --> 00:39:18,640 du ender opp med å bruke litt mer tid enn du ellers ville. 786 00:39:18,640 --> 00:39:21,300 Den other-- men mer lumske mørk side til dette 787 00:39:21,300 --> 00:39:24,047 er, hvis ting bare handle som du vil at de skal 788 00:39:24,047 --> 00:39:27,130 uten at du må tenke super hardt om hvorvidt dette bør være en int 789 00:39:27,130 --> 00:39:29,713 eller hvorvidt det skal være en flyte, kan det være at over her 790 00:39:29,713 --> 00:39:34,240 du produserer en int, men over her tror, ​​men de vil always-- beklager, 791 00:39:34,240 --> 00:39:36,555 det kan være at her du lage en dupp, 792 00:39:36,555 --> 00:39:39,430 men når du kommer til den andre delen av programmet, du tenker, 793 00:39:39,430 --> 00:39:41,150 nåvel, men de vil alltid passere meg en int. 794 00:39:41,150 --> 00:39:43,608 Og hvis de ikke gjør det, er det mulig at du kilt et sted, 795 00:39:43,608 --> 00:39:47,600 hvis du prøver å bruke det til å indeksere inn i en matrise, eller hva har du. 796 00:39:47,600 --> 00:39:51,050 >> Så en av de virkelige nyttige ting om C er 797 00:39:51,050 --> 00:39:54,219 det tvinger deg til å tenke virkelig hardt før du gjør any-- 798 00:39:54,219 --> 00:39:56,510 før du tar noen variable inn i eksistens, som hva 799 00:39:56,510 --> 00:39:58,764 er den type av denne variabel. 800 00:39:58,764 --> 00:40:00,680 Og det kommer til å ha som type for all tid. 801 00:40:00,680 --> 00:40:02,410 >> Dette er ikke sant Python, og faktisk, du 802 00:40:02,410 --> 00:40:04,740 can-- hvis du bare liksom går av øret, 803 00:40:04,740 --> 00:40:07,690 og du gjør noen beslutninger en måte på ett sted, 804 00:40:07,690 --> 00:40:09,870 og noen beslutninger én måte på andre plass 805 00:40:09,870 --> 00:40:12,960 uten å sette nok ting bak scenene i den andre plassen 806 00:40:12,960 --> 00:40:16,170 å fange ting riktig, du kan få noen svært merkelige feil. 807 00:40:16,170 --> 00:40:19,200 Og programmet kan fortsette å kjøre i svært lang tid, fordi det er 808 00:40:19,200 --> 00:40:23,200 gjøre mye arbeid å si, vel denne tingen kunne operere på denne måten, 809 00:40:23,200 --> 00:40:25,070 så jeg kommer til å kjøre på den måten. 810 00:40:25,070 --> 00:40:30,300 >> Og faktisk, at den presser fremover gjennom en rekke små feil 811 00:40:30,300 --> 00:40:33,260 betyr at ofte når en feil er faktisk dårlig 812 00:40:33,260 --> 00:40:38,720 og du faktisk ønsker å fikse det, det ender opp miles away-- programmet 813 00:40:38,720 --> 00:40:41,780 ender opp med å stoppe miles away fra når du hadde din feil. 814 00:40:41,780 --> 00:40:46,590 Og så en ting som vi ønsker programmer for å gjøre, sometimes-- én ting 815 00:40:46,590 --> 00:40:48,910 at vi ønsker programmer å gjøre når vi er debugging 816 00:40:48,910 --> 00:40:54,160 er mislykkes høyt og mislykkes svært raskt når noe går galt. 817 00:40:54,160 --> 00:40:55,510 >> Python er veldig dårlig på det. 818 00:40:55,510 --> 00:40:58,820 Python er veldig flinke til å ikke sviktende og rulle fremover 819 00:40:58,820 --> 00:41:00,320 gjennom uventede ting. 820 00:41:00,320 --> 00:41:02,820 Så dette er nyttig for når du skriver små programmer. 821 00:41:02,820 --> 00:41:07,110 Når du får komplisert bugs det noen ganger 822 00:41:07,110 --> 00:41:09,300 tar lang tid å erte dem ut. 823 00:41:09,300 --> 00:41:12,210 >> Så det er en mørk side til alle av dette, som det bare virker. 824 00:41:12,210 --> 00:41:13,860 Det fungerer akkurat som du forventer at det skal. 825 00:41:13,860 --> 00:41:18,320 Bortsett fra at når det ikke gjør det, vil du ende opp på et helt annet sted 826 00:41:18,320 --> 00:41:21,530 og prøver å finne ut hvor det var at du gikk galt. 827 00:41:21,530 --> 00:41:25,180 >> Søppelrydding er-- så en ting som du vil legge merke til 828 00:41:25,180 --> 00:41:28,110 er at noen av disse tingene som Jeg har tatt inn existence-- 829 00:41:28,110 --> 00:41:34,114 disse arrays, disse ordbøker, disse objekter, disse files-- aldri bli frigjort. 830 00:41:34,114 --> 00:41:36,030 Det var ingen samtale til fri i noen av denne talen. 831 00:41:36,030 --> 00:41:40,340 Og som var på C-siden, fordi vi fikk aldri inn i disse tingene. 832 00:41:40,340 --> 00:41:42,220 >> Men i Python-side, er det ikke en gratis. 833 00:41:42,220 --> 00:41:43,970 Ting blir automatisk frigjort når Python 834 00:41:43,970 --> 00:41:45,386 mener du ikke ser på dem. 835 00:41:45,386 --> 00:41:49,640 Det er veldig bra ikke frigjør ting som du kan fortsatt muligens bli å se på, 836 00:41:49,640 --> 00:41:54,262 men dette betyr at hvis du var kommer til å fordele denne store tingen, 837 00:41:54,262 --> 00:41:55,970 og du er som, oh Jeg er ferdig med det nå, 838 00:41:55,970 --> 00:42:00,360 det er vanskelig å fortelle Python at du er ferdig med det nå. 839 00:42:00,360 --> 00:42:02,986 >> Du kan noen ganger sette denne variabelen for å være ingen, 840 00:42:02,986 --> 00:42:05,110 og deretter håper at til slutt søppelinnsamler 841 00:42:05,110 --> 00:42:06,720 kommer gjennom og renser den ut. 842 00:42:06,720 --> 00:42:10,177 Men igjen, trenger du ikke har kontroll over den. 843 00:42:10,177 --> 00:42:13,510 Og en av grunnene til at folk bruker C for virkelig performance kritiske ting, 844 00:42:13,510 --> 00:42:16,570 er denne evnen til å virkelig vite når minnet er tildelt 845 00:42:16,570 --> 00:42:19,369 og når det er frigjort, og har mye kontroll over si: 846 00:42:19,369 --> 00:42:20,910 Jeg bruker ikke mer minne enn jeg trenger. 847 00:42:20,910 --> 00:42:23,632 Som er noe som Python er ikke så gode på. 848 00:42:23,632 --> 00:42:25,090 PUBLIKUM: Kan jeg stille deg et spørsmål? 849 00:42:25,090 --> 00:42:29,800 Hva mente du med mislykkes høyt? 850 00:42:29,800 --> 00:42:32,070 >> ROSS RHEINGANS-YOO: Så hvis noe som går galt 851 00:42:32,070 --> 00:42:34,950 og du er i debugging modus, vil du veldig ofte 852 00:42:34,950 --> 00:42:38,510 vil at programmet skal fortelle deg hvor det har gått galt, 853 00:42:38,510 --> 00:42:42,360 og ikke bare stille slutte å kjøre. 854 00:42:42,360 --> 00:42:45,085 Men du hadde faktisk det å skrive ut ut all slags informasjon om 855 00:42:45,085 --> 00:42:46,972 lignende, her var dette. 856 00:42:46,972 --> 00:42:53,957 Dette skjedde Hvis du skriver ut en wen-- hvis du kjører en web server-- 857 00:42:53,957 --> 00:42:55,390 >> PUBLIKUM: [uhørbart] 858 00:42:55,390 --> 00:42:59,800 >> ROSS RHEINGANS-YOO: Ja, hvis du kjører en web server, 859 00:42:59,800 --> 00:43:02,680 det er noen ganger dårlig hvis du er alltid forkaster feil, 860 00:43:02,680 --> 00:43:04,530 og du sier, vel som ikke fungerte. 861 00:43:04,530 --> 00:43:05,300 Jeg kommer til å stoppe. 862 00:43:05,300 --> 00:43:07,680 Jeg skal bare ignorere det og holde det gående på. 863 00:43:07,680 --> 00:43:11,260 Fordi da kan du komme i hundre av disse feilene og ikke se dem. 864 00:43:11,260 --> 00:43:13,910 >> Det ville sikkert være nyttig for debugging formål 865 00:43:13,910 --> 00:43:20,327 hvis hver gang webserveren gjort en feil, du hadde holdbare registreringer av det. 866 00:43:20,327 --> 00:43:22,910 Kanskje du vil at programmet å stoppe, slik at disse postene 867 00:43:22,910 --> 00:43:25,471 Ikke bli begravd under ting. 868 00:43:25,471 --> 00:43:26,970 Men igjen, det er i debugging mode. 869 00:43:26,970 --> 00:43:31,280 >> Ofte er i produksjonsmodus, jo verden er litt annerledes. 870 00:43:31,280 --> 00:43:36,380 Og i små skript som jeg kjører, hvor ting som jeg sa å gjøre 871 00:43:36,380 --> 00:43:40,680 kan være bare en liten bit av fra hva jeg vil at det skal gjøre, 872 00:43:40,680 --> 00:43:44,010 da liksom presser gjennom feil er noe du kanskje ønsker. 873 00:43:44,010 --> 00:43:49,410 Og i slike tilfeller, i hvert fall Python virkelig tjener sine starter. 874 00:43:49,410 --> 00:43:54,617 >> Den siste tingen som jeg ikke snakke i dette-- at jeg ikke snakker om 875 00:43:54,617 --> 00:43:57,700 men kan være veldig rasende første gang du har en av disse feilene, 876 00:43:57,700 --> 00:44:00,491 og andre og tredje og fjerde gang du har ett disse feilene. 877 00:44:00,491 --> 00:44:03,490 Python, nevnte jeg at den bruker white space 878 00:44:03,490 --> 00:44:06,700 å fortelle deg hvilket nivå av innrykk og hva funksjonell blokk du er i, 879 00:44:06,700 --> 00:44:08,840 den behandler faner og mellomrom annerledes. 880 00:44:08,840 --> 00:44:12,780 Så hvis du fanen over fire, og deretter neste linje har fire plasser, 881 00:44:12,780 --> 00:44:16,910 selv om de viser seg som den samme beløpet i editor, 882 00:44:16,910 --> 00:44:20,160 Python ikke behandle dem det samme. 883 00:44:20,160 --> 00:44:23,610 >> Faktisk behandler Python faner og områder som olje og vann. 884 00:44:23,610 --> 00:44:25,050 De er bare forskjellige ting. 885 00:44:25,050 --> 00:44:27,264 Det er ingen spesiell lengde som en fane er, 886 00:44:27,264 --> 00:44:30,180 så det er ikke som en fane tilsvarer 8 mellomrom, og slik at du ville komme rundt det 887 00:44:30,180 --> 00:44:30,860 den veien. 888 00:44:30,860 --> 00:44:34,110 Som, når den sier, hva nivå av hvite området jeg er på, 889 00:44:34,110 --> 00:44:37,240 det er faktisk på jakt etter en mønster av mellomrom og faner. 890 00:44:37,240 --> 00:44:43,050 Og så, den beste måten å håndtere dette er å alltid bruke mellomrom hele tiden. 891 00:44:43,050 --> 00:44:47,510 >> Og faktisk, i Cloud9 IDE og CS50 IDE, 892 00:44:47,510 --> 00:44:50,610 dine Tab nøkkelinnsatser fire områder i stedet 893 00:44:50,610 --> 00:44:53,800 av en fane, som er super nyttig. 894 00:44:53,800 --> 00:44:57,074 Men igjen, hvis du skrev en Python program med faner som ville være fint, 895 00:44:57,074 --> 00:44:58,990 det er bare hvis noen gikk inn og prøvde å legge 896 00:44:58,990 --> 00:45:02,655 en eneste linje i programmet som hadde fire plasser for hver kategori, 897 00:45:02,655 --> 00:45:03,280 det ville bryte. 898 00:45:03,280 --> 00:45:07,800 Og det ville bryte på en måte som egentlig ikke er synlig. 899 00:45:07,800 --> 00:45:12,390 Selv om selve feilen melding om at det kaster 900 00:45:12,390 --> 00:45:15,610 har å gjøre med nytt rykke forventes ikke her, 901 00:45:15,610 --> 00:45:18,700 or-- hvis det er snakk om innrykk og det ser ut som det er galt, 902 00:45:18,700 --> 00:45:22,090 er det sannsynligvis fordi det er en fane-space problem. 903 00:45:22,090 --> 00:45:24,154 De er fortsatt meget irriterende å feilsøke. 904 00:45:24,154 --> 00:45:26,070 Den største helhet i denne talen, som jeg ikke 905 00:45:26,070 --> 00:45:29,740 komme til fordi det er virkelig en komplisert, subtil emne, 906 00:45:29,740 --> 00:45:34,760 og var ikke nødvendig å gjøre noe av de tingene vi har gjort så langt, 907 00:45:34,760 --> 00:45:37,140 er et konsept kalt tupler. 908 00:45:37,140 --> 00:45:41,280 De er der mye som arrays at du ikke kan endre. 909 00:45:41,280 --> 00:45:44,700 De blir brukt over alt fordi de er nyttige for mange ting 910 00:45:44,700 --> 00:45:46,300 at arrays er ikke nyttig for. 911 00:45:46,300 --> 00:45:49,890 >> Men hvis du ønsker å lage en matrise, og Da lover tolken at du 912 00:45:49,890 --> 00:45:53,140 aldri kommer til å ønske å endre det thing-- faktisk, hvis du ønsker å endre, 913 00:45:53,140 --> 00:45:56,800 du vil lage en ny en med den nye Verdiene i it de er tupler. 914 00:45:56,800 --> 00:45:58,800 Snarere enn å produsere dem med hakeparenteser, 915 00:45:58,800 --> 00:46:00,341 du produserer dem med runde parentes. 916 00:46:00,341 --> 00:46:05,074 Hvorfor ville du bruke disse tingene, er litt av et spørsmål. . 917 00:46:05,074 --> 00:46:06,990 Det eneste som jeg vil si om det er deg 918 00:46:06,990 --> 00:46:10,680 kan bruke tupler som indeksene for ordbøker. 919 00:46:10,680 --> 00:46:15,010 Du kan ikke bruke arrays som indeksene for ordbøker. 920 00:46:15,010 --> 00:46:18,970 Og hvorfor er, igjen, teknisk og Jeg har ikke tenkt til å kjøre inn i den. 921 00:46:18,970 --> 00:46:23,140 >> Den PSet at jeg ikke har rørt på i denne talen er pset6. 922 00:46:23,140 --> 00:46:25,837 Så her er hvordan du 'D implementere a-- her er 923 00:46:25,837 --> 00:46:28,140 hvordan du ville gjennomføre pset6 i Python. 924 00:46:28,140 --> 00:46:32,680 Med tanke på Python design syklus, det første 925 00:46:32,680 --> 00:46:34,760 som du gjør når du er skrive programmer er sjekk 926 00:46:34,760 --> 00:46:38,030 for å se om noen har gjort det allerede. 927 00:46:38,030 --> 00:46:42,152 >> Faktisk, hvis du vil å serve-- Apache 50 928 00:46:42,152 --> 00:46:44,110 gjør omtrent dette, bortsett fra at det ikke kommer 929 00:46:44,110 --> 00:46:45,840 standard installert på Linux-maskiner. 930 00:46:45,840 --> 00:46:50,490 Python gjør, og Python enkel HTTP Server gjør også. 931 00:46:50,490 --> 00:46:54,717 Hvis du noen gang på en Linux-maskin, eller Cloud9 IDE utenfor CS50 932 00:46:54,717 --> 00:46:57,550 og du ønsker å tjene denne aktuelle katalog til en bestemt port, 933 00:46:57,550 --> 00:47:04,610 python-m SimpleHTTPServer port serverer det. 934 00:47:04,610 --> 00:47:07,190 Du kan også importere den enkle http server 935 00:47:07,190 --> 00:47:11,240 og det har mye funksjonalitet hvis du ønsker å tilpasse den, eller endre den, 936 00:47:11,240 --> 00:47:15,860 eller kjøres it utnytte det til kjøre dine egne servertjenester. 937 00:47:15,860 --> 00:47:18,032 >> Så det er Python i et nøtteskall. 938 00:47:18,032 --> 00:47:20,280 Og dette har vært CS50. 939 00:47:20,280 --> 00:47:21,980 Takk skal du ha. 940 00:47:21,980 --> 00:47:23,468