ROSS RHEINGANS-Yoo: Saluton, mi estas Ross. Kaj tiu estas CS50 seminario. Ĝi prenos vin de programado en C programming en Python. Python estas scripting lingvo. Ĝi estas plejparte kiel C en sintakso, kvankam iuj de la teknikaj detaloj de ke sintakso gets ekzekutita estas iomete malsamaj. Ĝi estas malpli potenca ol C kelkmaniere. Ĝi estas malpli esprima por kie ĝuste en via komputilo memoro gets elspezata, kiom gets elspezata, kiam alvenas libereco kaj tiuj specoj de aferoj. Ĝi estas pli utila ol C kelkmaniere, ĉar ĝi estas pli facile plani en. La lingvo estas, al iu personoj, pli intuicia. Kaj vere, la celo estas por ĝin esti rapida por plani kaj potenciale malrapidaj por ekzekuti. Nun, se vi pensas pri la kvanto de tempo vi pasigis en via lasta problemo aro skribo via kodo kontraŭ la kvanto de tempo vi elspezas sur via lasta problemo fiksita ekzekuti via kodo, oni kredus imagi ke la lingvo kiuj estis duoble rapida skribi, kaj duoble malrapida ekzekuti, povus esti plibonigo super C en kelkaj manieroj. Certe kiam vi provas skribi malgrandaj programoj fari malgrandajn aĵojn, Python estas utila lingvo de elekto. Post paso de tiu seminario, mi esperas ke vi povos fari la elekto en estontaj projektoj pri kiu lingvo estas ĝentile uzi, ne la ideo ke unu lingvo estas pli korekti la tutan tempon. Kelkajn aferojn pri kio la seminario estas. Tiu seminario ne celas instrui vin Python de nulo. Python estas tre similaj al C, kaj Mi supozas ke vi estas CS50 studento, aŭ iu kun simila familiareco kun C. Se vi estas CS50 studento ĉirkaŭ problemo aro 6, Do vi vidas multe da aferoj en C, Mi donos al vi la gravaj diferencoj, kaj iuj de la aĵoj kiuj faras Python malsamajn kaj speciala kaj utila, sed mi ne tuj iri por kio programlingvo estas kaj kiel skribi programojn. Tamen, tiu seminario instruos vi skribi Python programoj se vi estas unu el tiuj malmultaj grupoj. Denove ni rigardu kiom vi devus apliki psets-- kiuj devus esti 1-6 en Python-- kaj provizas ligoj al oficiala dokumentaro por estonteco referenco. La alia afero, ke estas gravaj pri kiel ĉi diskuto estas atribuita, tiu video estos rete, ĝentileco de CS50, tiel vi devus ne sentas vi bezonas preni notoj. Vi ĉiam povas iri reen kaj rigardi ĝin poste kiel aludo. Aldone la diapozitivojn estas havebla nun ĉe tiu loko, kiu devus preni vin fari Google Doc. Estas iomete mallongigita versio kion mi montras sur la ekrano. Unu zorgema averto antaŭ Ni salti en, Python 3 estas malsama lingvo de Python 2. Ili aspektas multe la sama; estas tre malpeza teknikaj diferencoj kiu kaŭzos programoj skribita en Python 2 ne povi esti ekzekutita en la Python 3 medion. La CS50 aparaton venas kun Python, implicite uzas Python 2. Vi povas kontroli tion per tajpado en via komandlinio python --version, kiu devus eligo 2.7.6 sur la aktuala aparato. Provu Python 3, kiu faras labori en la aparaton, se Python implicite 2.X.Y, ĉu sur la aparato aŭ sur via propra maŝinoj. Vi devus anstataŭi Python 3 aùton en tiu diskuto, ke mi skribas Python. Se via maŝino estas kurante 2 defaŭlte, tipo Python 3 por povi reale sekvi kune kaj ekzekuti tion. Aldone, mi atentigi vin ĉe oficiala rimedojn nun. docs.python.org/3--~~V zorgema ke tio estas 3 kaj ne 2-- havas utilaj referencoj. Lernilo prenos vin tra multe de la samaj aferoj ke mi faras nun, krom en teksto formo. Referenco estas utila kiel Referenco por la lingvo, kaj la Norma Biblioteko donas vi iuj de la etendoj kun aldonaj funcionalidad. Do tre unuan Python programo. Sur la maldekstra havas norma C, sur la dekstra, ni havas Python. Vi eble rekonis tiun problemon, ĝi estas unu el la unua problemo aroj en CS50, kaj ĉi tiuj solvi ĝin uzante la saman solvon. Nun, la kialo kiun ni estas rigardante tiujn flank Estas do ni povas rigardi sintaksaj diferencoj. Unu el la elefantoj en la ĉambro ke vi eble rimarkis dekstra la batilon, estas ke Python havas nenian ĉefa funkcio kroĉas ĉirkaŭ la kodon. Do en C, vi skribas faskon de dosierojn, vi ligas ilin kune, kaj la programo komenciĝas ekzekutinte ĉe tiu afero nomata int main. En Pitono, vi skribos dosieron vi, ekzekuti la dosieron, la programo komenciĝas ekzekutinte ĉe la supro de la dosiero. Do ĝi estas tuj komenci ĉe la supro de dosiero iri malsupren ĝis ĝi trovas ion alian. Se ĝi trovas funkcio difino, ĝi ne reale ekzekuti tiu kodo, ĝi simple difini la funkcion. Sed ĉi tie, kiam la unua programo estas n egalas 10, la unua kiu ĉi programo faros estas preni tiun valoron de 10 kaj starigis ĝin en variablo nomis n. Parolante pri tiu linio, unu el aliaj things-- sorry-- ĉi signifas ke C programoj, vi skribas ilin, vi faros ilin, kiu alpreĝi iuj tin komandojn, kaj tiam vi devos kuri rezultanta plenumebla. Python programoj, vi kuras la teksto file-- ĉi mario.py eble esti tiu dosiero, kiun mi ĵus montris you-- vi kuros ke dosiero kaj vi ekzekuti, kaj la enhavo de ĝi lanĉiĝos per la Python interpretisto. Vi povas fari tion en via IDE. Do se mi havas Saluton dosiero, kiu simple havas ĉi enhavon. Tiu estas fakte Pitono 2, Ne Python 3, do ne zorgi pri la sintakso nun. Sed mi kuros Python, sur hello.py, kaj ĝi kuras. Alia vojo ke mi povas uzi Python kiu Mi ne agos kun tiel en tiu diskuto, estas kvazaŭ mi ĵus tajpas Python, ĝi drops min en medion kie Mi povas nutri ĝin Python linion por linio. Do jen, se mi tajpas en print spaco 'saluton, mondo'. Tajpu eniri. Ĝi kraĉis min ke apogi la rezultojn ke individua linio tuj. Jen povas esti utila. En tiu ĉi prelego mi faros aferojn sur diapozitivoj. Kaj tiel vi povos sekvi kune aŭ tien, aŭ skribante fakta dosieroj kaj tiam ekzekuti ilin. Sed, revenanta al tiu kodo, alia aĵo ke vi havu noticed-- bone, ekzistas du aĵoj kiuj vi eble rimarkos pri tiuj blokoj. La unua, prefere pli sekulara, estas ke la Python havas; fina punktokomo. Punktokomojn estas laŭvolaj ĉie kaj sendanĝera ĉie. Vi povas aldoni ilin. Ĝi povus igi homojn kiuj skribas Python por vivteni snicker ĉe vi malantaŭ via dorso, ĉar ili ne estas necesaj. Ili estas ofte signo de estanta tenita super de C. La diseñadores de la lingvo sentas ke ĝi estas pli klara cxi tiu vojo kaj ke ĝi ne estas necesa por deklari ĉiufoje kiam vi finos la linion. Alia stranga afero pri tiu n estas ne havi tipon alfiksis. Unu el la magio pecoj de Python-- kaj mi tuj vokos ŝin magio, sed estas tre teknikaj kialoj kial ĝi works-- unu el la magio pecojn de Python estas ke variabloj povas pligrandigi aŭ ŝrumpi enhavi ajn datumoj tipoj vi dezirus ilin. Do tiu estas 10. Se poste malsupren mi asignita al tiu n 0,5, necesus ke 0.5. Ne gravas ke temas pri int tie kaj flosi tie, ion kiu uzas ĉi n havos, pli aŭ malpli, povos chug kune se ĝi alvenas iun el tiuj. Krom se ekzistas tre reala tial ĝi ne povas uzi la datumojn tajpu ke n aktuale havas, ĉe kiu punkto ĝi ricevos wedged kaj ĵeti eraro, kaj tiuj specoj de aferoj. Sed ĉi tie, Pitono ne vere gravas kio ĝi estas ke mi tuj algluita en ĉi frazo, kiel, vi volas tion? Tiu afero en tiu? Jes, ĝi estas speco de afero. Mi persistos en la fino. Estos problemo poste, se iu kiu volas uzi tiucele ne povas pritrakti ĝin. Tiu estas unu el la gravaj diferencoj inter Python kaj C ke faciligas skribi tre grandajn C programoj kaj faciligante skribi tre malgrandaj Python programo. La cxar sintakso estas ne tre malsama en kion ĝi faras. Ĝi estas iomete malsama en kiel ĝi estas esprimita. Do temas pri tre, kio konas Pythonic, maniero skribi ĝin. por vico en gamo (n), tio estas la gamon de nombroj de 0 al n, inkluziva sur la fundo kaj ekskluziva sur la supro. Do estas de 0 ĝis n-1, kio estas ĝuste kion la C-kodo estas faranta, se gxi estas multe pli facile rigardi eble. La koncernajn bloko estas ne ekiris de streĉaj, anstataŭe ĝi ekiris per ĉi deŝovon. Do ĉiuj tiuj linioj estas kvar spacoj super al dekstre, aŭ kiel pri elefanto larĝa. Kaj tiuj estas tiuj, kiuj estas tuj estos ekzekutita en tiu por. Se mi fuŝas la deŝovon sur ĉi kaj mi puŝi ke presaĵo reen al la originalo deŝovon, ke presaĵo lasos la por buklo. En kontrasto al C, kie tie mi efektive bezonas movi ke fermitaj krampoj ĉirkaŭ. Tio signifas ke vi ne ricevas eraroj ke salti tra vi ar vi metis stegon en malĝusta loko. Ĝi signifas ke vi ricevas eraroj ke salti tra vi ar vi dentado linion erara. Do ĝi faras muescas súper zorgema. Espereble vi esti súper zorgema kun via deŝovon ĉiuokaze, kaj tiel ĉi tio ne estas ke multe pli de ŝarĝo. Sed baza regulo por Python, kaj ni havas paron de tiuj ke ni iros tra tra la kurso de la diskuto, estas provi natura sintakso antaŭ rigardante ion supren. Do tiu sintakso, por tiun numeron en gamo, estas tre distingaj en terminoj de stilo. Multaj aferoj en Python ni vidos prenante tiu formo. Kaj do se vi venis kun nova objekto, kiujn vi pensi vi devus povi persisti super tiu, en tiu formato, rezultas probable apogas tiun formaton. Ni ne tuj iru super profunda en la teknikaj kialoj kial tio estas vera. Sed ĝi estas utila intuicio havi kiam vi alproksimiĝas Python programoj, ke tiu afero estas nur tuj labori. Provu ĝin. Praŝargi la komandlinio Interpretisto, vidi se ĝi funkcias, pluiru kun aĵoj, antaŭ vi eĉ bezonas malfermi Google kaj diru, kio estas la sintakson por tiu aparta afero? Amasoj de Python vi povis malkovri nur provanta. Tiu se estas eĉ pli simila al C tiam la fors estas. Notu ke ekzistas neniu krampoj. La krampoj estas, denove, sendanĝera sed nenecesa. Tie estas dupunkto fine samkiel la por bukloj, kaj denove, la relativa blokoj estas dentado anstataŭ ekiris per krampoj. Tiu alia estas je la originala nivelo de deŝovon, kaj lia rilata bloko dentado denove. Tiuj laboro ĝuste kiel ili faras en C. Tiu estas efektive tre multe la sama. Denove, presi perdas unu karakteron for de printf Vi pasas iun kordoj. Rezultas kordoj povas ĉu esti markita for per sola citaĵoj aŭ duobla citaĵoj. Ne estas diferenco, krom ke ene de sola citaĵoj vi povas uzi citiloj kun forlasi, prefere ol devi eskapi cxiujn. Kaj ene de citiloj, vi povas uzi solan citaĵoj kun forlasos sen devi eskapi ilin. Se vi volas miksi ili, vi certe povas rigardi supren rete kiel fari tion. Vi rimarkos ke tien, Mi pasis en fino = tiu afero. Tiu estas ekzemplo de laŭvola argumento, kiu estas unu el tiuj aferoj ke Python subtenas ke lasas sufiĉe utila. Do print reale havas multajn argumentoj, kiuj estas kutime fiksita al la defaŭltaj valoro, sed tie mi havas decidis nuligi la nomita fino. La kialo ke mi devas nuligi ĝin kun malplena kordo estas ke presaĵo en Python, de Defaŭlte, presas el nova linio post la afero, kiun vi rakontis ĝin ankaŭ. Do tiu krado estas efektive tuj elprinti hash en nova linio. Kaj se mi ne volas hash elprinti nova linio post ĝi, tiam mi devas diri Ne printi unu. Sed, ankoraŭ tiel, la lasta afero ke tiu programo mankas ke oni estas oni inkludas en la kolizias. Presi estas bakita en Python do esence ke ekzistas neniu surskribo aŭ modulo ke vi bezonas inkluzivi, kvankam se volis inkluzivi aliajn aferojn en Python skripton, Mi farus en tre simila format-- la vortoj estas nur iomete malsama. Mi menciis ke ni ne bezonas ĉefaj tie, ĉar la Python startas plenumiĝi ĉe la supro. Se mi volis enpaki tiu en funkcio, mi farus ĝin kiel this-- mi dirus def funkcio nomo, argumentoj povus iri tien kaj ni vidu kelkajn el tiuj postaj, dupunkto, kaj tiam denove, tiu tuta ekiris bloko Estas kio estas la operacia bloki por tiu funkcio. Do tiu estas la difino de la funkcio. Kaj estas deklaro, poste malsupren tie, mi povas simple nomas la funkcio. Kaj denove, la programo interpretisto, komencante ĉe la supro, vidos ĉi estas la difino. Ĝi ne agos ĉi ĝis ĝi alvenos, kaj tiam ĝi estas kiel, oh nun vi jam alvokis ŝin, mi konjektas min devus ekzekuti ĝin. A afero, ke estas tre komuna vidi en Python dosierojn, speciale Python dosieroj estas liberigitaj al publiko kaj evoluinta by-- kaj evoluinta kaj subtenis, estas io de tiu formo. Tiu estas tiel ĉar basically-- Python, vi komenci ĉe la supro kaj tiam vi ekzekuti malsupren al la fundo, Mi se mi nur havis Mario kriis tie, tiam ajn mi inkludis tiun dosieron en alia dosiero, ĉar mi volis uzi estas Mario funkcio, ke aliaj dosier volus ankaŭ havas tiun alvokon al Mario en ĝi. Kaj kiam mi kuris ke dosiero, ĝi nomos Mario. Do estas eble ke mi nur volas kuri ĉi se mi havas reale ekzekutitaj tiu aparta dosiero. Kaj tial mi povas enpaki ĉi en idiomo kiel tiu, kie mi diras, se la nomo de tiu ekzekuto medio estas ĉefa, tiam mi volas fari tion. Alie iu alia povas use-- inkluzivi mian function-- mian dosieron kaj nur akiri aliro al tiuj funkcioj sen devi kuri tion ke mi volas ekzekuti en tiu dosiero. Jen, denove, nedeviga sed tre komunaj. Tiuj aferoj estas entirely-- estas ĝuste la sama inter C kaj Python, certe en 3. Mi pensas en 2, la divido operatoro kelkfoje donas vin reen flosas kiam vi operaciita ints, kaj aŭ vi deziris ke aŭ vi ne faris. Sed plie, minuso, kaj tempoj labori ĝuste kiel vi atendus, escepti super iomete pli tipoj. Do vi povas multobligi flosoj ints, kaj tiuj specoj de aferoj. aro funkcias ĝuste la sama. Vi povas uzi du egalajn signojn. inequals-- granda ol, malpli ol, tiajn things-- havas la signifojn kiuj vi konas ilin. Kie C uzas tiujn operatoroj, Pitono uzas iomete pli Esperanta legebla ones. Do anstataŭ du, ampersands, vi laŭvorte tajpu la vorton "kaj", "aŭ," aŭ ne." Kiel en via if-- en via kondiĉa deklaroj, Ni vidis antaŭe ke tiu sintakso en C respondas al tiu sintakso en Python. Kaj tie ne estas multe malsama tie, krom iomete de interpunkcio flankojn. Denove, kie C farus alie se, Python uzas elif, sed tiuj plejmulte surfaca nivelo ŝanĝojn. Ripeto kiel tiu estas ofte skribitajn en tiu idiomaĵo en Python. Vi povas fabriki tian afero kun dum buklo sur la ekstera se vi volas, sed vi certe ne devas. Kaj denove, se vi volis la elprinti elementoj de tabelo en vi plenumadu ĝin tiamaniere. Unu el la amuzaj aferoj pri Pitono kvankam, estas ke vi ne bezonas uzi tiun paradigmon, kaj vi povas uzi iomete pli eleganta. Vi diras por en ARY. Do anstataŭ cxirkauxpelataj kaj alveturante la indicoj, kaj tiam tirante eksteren individuaj elementoj, vi diru la por reale nur alveturi la elementoj mem. Kaj tiam kion ajn vi faras ene povas funkcii rekte sur la elementoj, kiu estas sufiĉe amuza. Kaj ni vidos Konsideru ni uzos ke idiomo multfoje marŝante en kodo. Jen, denove, ekzemplo de iu kiun Mi timige voki Python magio, kvankam ekzistas tre teknikaj kialoj kial ĝi funkcias. Kaj estas teknika proprajxon bezonas esti vera pri tabelo por por ĉi labori malantaŭ la scenoj. La afero estas ke la plimulto de tipoj kion vi atendus ĉi labori havis tiun implementado por vi en la enkonstruita en lingvo. Alia afero ke estus agrable se tiu laboris en ĉiu lingvo, Sed estas iuj kialoj kial ĝi ne povas, presi ĉi ŝnuro fojojn tiun nombron. Rezultas en Python, ĉi faras ĝuste kion vi ŝatus, kio estas nur amuza, kaj signifas, ke ni povas reale redukti tiun programon, denove mario.c. Prefere ol ripetanta multajn, ni povas nur diru, mi volas iun numeron de spacoj, Mi volas la nombro de hashes, kaj iuj hashes fine. Kaj denove, ni uzas ĉi tiun formaton. Tie, ni pasante en ŝanĝiĝema tiamaniere. Denove, ni ne bezonas diri kio tipo de variablo estas: Kaj la nura tempo ni akiri eraroj estas en tempo de ekzekuto. Kiam iu provas pasi ion, ĝi venos en la funkcio nur fajna. Se ni wedge tie ĉar tio ne estas la afero ke vi povas krei rangoj super, Mi ricevos runtime eraro tie, kaj mi devos elpurigi tiel. Sed dume mi ne havas esti tre zorgema pri kio gets pasis en, tiel longe kiel en la reala ekzekuto ĉion funkcias tre pure. Mi povus eĉ fari tiun iom purigisto uzante apartan prafunkcio sur kordoj, kiu estas Dekstra Justify. Tiu estas nur utila funkcio kuŝanta ĉirkaŭ la biblioteko. Ĝi estas en la dokumentado se vi iros serĉi ĝin. Kaj mi diras, bone mi tuj havi tiu ŝnuro, kelkaj nombro de hashes, kaj mi ŝatus dekstra pravigi it-- kuseneto aferon per spacoj esti ĉi longo. Denove, tio estas en la dokumentaro, kiu alportas us-- Mi vere klaku tra these-- Kiu alportas nin al nia dua regulo por Python-- norma biblioteko funkcio metodoj estas viaj amikoj. Kaj ĝi estas ofte valoras via tempo iri serĉanta Mi scivolas se estas io ke simple faras tion. Tie probable estas. Se vi ŝatus kuseneto el ĉeno, se vi estus ŝatas preni la dorson duono de kordo, se oni kredus deziras traserĉi kordo, se Vi ŝatus rompi kelkajn aferojn kune kun kordo kun komoj inter ili, ekzistas norma biblioteko funkcioj por fari tion. Kaj ĝi faras vian vivon pli facile se vi uzas ilin anstataŭ elrulanta ĉion sur via propra en kvin linioj de kodo tie, kvin linioj de kodo tie. Tio vere komenciĝas je sumigi al reala tempo. Unu el la interesaj aferoj pri kiel ĉi gets vokis. Vi rimarkos ke estas punkto ion. Mi havas kelkajn objekto maldekstre kaj tiam mi vokis skalara funkcio. Tiu estas unu el la paradigmas ke Pitono uzas por kupli metodoj por objektoj. Ni parolos pri kion tiu estas tre brevemente fine, sed scias ke ni povas ambaŭ operacii sur aferoj prenante tion dirante skalara ajn, aŭ nomante funkcio kiu prenas ke objekto kaj iuj aliaj argumentoj. Tiuj estas ambaŭ manieroj aĵoj get farita en Python. Kaj ĉu apartan funcionalidad implementada en ĉi tiu stilo aŭ tiun stilo estas iu kiu vi devus serĉi ĝis vi ricevas hang por kiu ĝi estas probable fali en. Ekzistas pli aŭ malpli kohera filozofio malantaŭ Pitono ke vi sorbas plejparte skribante multon en ĝi. En iu punkto, kiun el cxi tiuj io estos implementado kiel iĝas natura. Por nun, estas nur io vi lernos kiel vi povas diveni, ĉiu individua afero. Do norma biblioteko funkcioj estas viaj amikoj, kaj ili lasos vin skribi aferojn cxi tiun multan spacon vere malmulta, vere elegante. Kaj jen estas vere probable pli legebla, mi dirus, ke la C programon tie. Ne mencii la fakton kiu estas tiel mallonga povos persvadi tutaĵo elefanto en la spaco kiu ni ŝparis. Alia afero, tiu estas implementación de mario jen punkto C, kiu miaopinie Estas la plej mallonga vi povas akiri ĝin. Ĝi ne havas la get int, sed malfacile kodojn la valoro de 10 la sama maniero kiun ĉi tiu faras. Rezultas ke ĉi tiu horloĝoj en ĉe 84 karakteroj, dum Python estas 64. Kaj estas senfine pli legebla ol tiu rubo tie. Do Python estas pli efika en spaco. Ĝi estas iomete malpli efika en tempo, sed ne por tre. Listoj estas grava afero en Python. Ni ne vidis ilin, sed ili funkcii multe kiel arrays faros en C. Do jen, vi povas deklari ilin, vi povas pasi ilin en ion. Nun kvadratoj tenas tabelo de tiuj aferoj. Denove, ni ne deklaris kiel tipo, sed se ni iam provas uzi ĝin, io ke vi atendus por labori sur tabelo de entjeroj tuj labori sur tabelo de entjeroj. Jen kion vi absolute ne povas fari en C, ĉar la memoro estas do manojn sur, sed estas tre facile fari en Python. Se mi volas mian tabelo esti pli granda, mi povas append elementon al ĝi kaj ĝi estas bone. Kio okazas malantaŭ la scenoj? La interpretisto iros eksteren kaj ricevi iun memoron, kaj eble ricevos iomete de kroma memoro, do mi ne tiel mi ne havas al realloc ĉiufoje. Sed des pli memoro faras ĝi bezonas? Tiu ne estas decidoj ke vi devas fari, tiuj estas decidoj kiuj la interpretisto tuj faros. Tie ni vidas gamo povas preni du argumentojn, sed ĝi estas ankoraŭ iranta esti inkluziva de la supro do ni aldonas 1 tie. Tio estas idiomaĵo, kiu estas eĉ pli ruza maniero skribi aĵojn kiel tiu. Ĝi nomiĝas listo kompreno, kaj tie kion ni dirante estas mi ŝatus meti en i kvadrato por ĉiu valoro de i en tiu gamo. Tion en la dekstra povus esti alia tabelo, kaj tion en la maldekstra esti ajna aparta funkcio kiu portus en i kiel ŝanĝiĝema kaj donu al mi iun rezulton. Kion mi tuj faros estas, Mi tuj konstrui tabelo jen ĉio de tion por ĉiu valoro en tiu gamo. Kaj tiu estas súper eleganta, super mallonga, kaj ĝi estas tre klara kion ĝi signifas. Jen unu el la things-- ĉi estas pli, unu of-- tre emblemático de la kialoj ke homoj kiel Python. Se vi ŝatas programado tiel, tiam Pitono estas lingvo vi eble ŝatas lerni. Kaj cetere, jen estas teknika kialoj por tio funkcias. Sed koncerne ni koncernis, Ni pli aŭ malpli ne zorgas. Do se vi volas presi lertaj, iuj de la samaj idiomoj estas utilaj. Por i en tiu gamo, ni povis indekso tra ĉiuj aferoj kaj tiam presi ilin ĉiuj ekstere. Kaj vi vidos len tie. Se vi iam volis la longo de la tabelo, kiu estas tre facila en Python, ĝi estas tre malfacila en C. Tiu estus presi precize kion vi atendus ĝin. Ni povis ankaŭ, kiel ni vidis antaŭe, persisti super la elementoj en tabelo rekte, kaj tiam nur paroli pri ilin, anstataŭ havi la indekso reen en la tabelo ĉiufoje. Kaj tio estas io kion vi povas fari. Do en C, se vi petos ion kiel tiu, presi dirus, ke estas tabelo de entjeroj. Tio sendube ne kordo, mi ne povas presi ĝin. Python pli aŭ malpli ne zorgas. Estas kiel, estas tie ke mi povis turni ĉi en al ĉeno? Jes, mi faros tion. Kaj tiel mi nur presi ke eksteren. Tiu signifas ke vi povas fari aferojn like-- tiuj estas la plejmulto de la malmolaj partoj de ludo dekkvinjara skribita tre brevemente en Python. Vi vidos ke estas iomete of-- tie Mi jxetis entjero al ŝnuro, kaj mi devas fari tion permane. Kaj mi tuj aldonu al alia ŝnuro, aŭ alie Python gets konfuzita. Sed ĉu kiam vi estas aldonante ŝnuro al entjero, mi supozas akiri entjera dorso aŭ kordo reen? Sed denove, se vi nur voki str sur aĵo, kaj ĝi povis en ajna ebla mondo estos igita ŝnuro, vi, eble igita ŝnuro. Ĉi tie, oni vidas uzon de nestitaj listo kompreno maldekstre, iuj indeksado, kiu Estas precize kiel vi estus kutimiĝis, kaj iuj presi el aferojn. Denove, ni difinis iuj funkcioj kaj ni vokos ilin malsupren en ĉefaj kiam ni reale preni la dosieron. reveno laboras ĝuste kiel oni kredus atendi de laboranta kun C. Trovu, ni povas starigi aĵojn kiel this-- jen lerta kompreno Tie estas asigno al variablo, kaj ni povas reale fari ĝin eĉ pli facila. Ni ne bezonas skribi serĉo, ĉar enkonstruita Lingvoprezento estas se tiu afero estas en ĉi tabelo. Reiri vera, alie reveno falsa. Do jen la tuto de trovaĵo. La tuteco de la varo engaĝas nomante varon, kiu is-- ekzistas implementaciones de tiu konstruita en certa C bibliotekoj. Se vi ŝatus tiun ia dorsdirekte vi povas nuligi ĉi nedeviga argumento en reverso kun sincera. Kaj se vi ŝatus ordigi super kordoj, kiuj estas konstruita-je ankaŭ. Do tiu estas ne diri tiuj estas aferoj, kiujn vi devas fari ĉiun tagon, sed la ideo estas ke ĉi estas la filozofio de Python, ke cxio tio, kio vi estus ia volas fari estas enkonstruita. Kaj plej normaj funkcioj, tiel varon, longo, kio ajn, apogi plej logike saĝa enigo. Vi nomas len sur tabelo la sama vojo vi nomas len sur ŝnuro. Vi multiply-- vi ordigi kordoj la sama maniero vi ordigi tabeloj. Plej normaj funkcioj ke homoj konstruu, kaj plej triaj bibliotekoj kiuj personoj konstrui, ĉar ili estas emulando la dezajno de la norma biblioteko, povas tuŝi ĉiun ke vi estas kiel, kial ne ĉi nur labori, en C. Pli aŭ malpli, ĝi funkcios en Python ĉar homoj labori malantaŭ figuro el kio io estas kaj tiam funkcii taŭge sur ĝi. Do denove, teknikan fonon, sed faras nian vivon pli facila kiel programistoj. Do jen dosiero / S. file / S havas multajn etulojn kiuj faras ĝin komplika, kaj do ekzistas rimedoj rete, sed en malmultaj vortoj, vi nomas malfermitaj sur dosiero enoficigas kun aparta tipo. Do tio estas legi, legi kaj skribi, skribi aŭ append. Vi legis certan nombron de karakteroj ekstere kaj vi presi tiuj, vi ricevos Saluton! Mi volas diri, kiel la dosiero havis Saluton! En ĝi, voki legi, kaj kion vi reiros estas ĉeno kiu havas ĉiuj de la resto de la tabelo, aŭ ĉiuj de la resto de la dosiero. Se vi nomas relegi, vi estas ĉe la fino de la dosiero, kaj tiel vi ne ricevas ion kaj tiel vi fermi. Denove, tio estas .close anstataŭ fermi dosieron, kiel estus en C. Ĉi tio estas pli aŭ malpli ĉar f estas afero, kaj vi ŝatus pro f fermi. Sed baza dosiero mi / O estas ne aparte komplika. Denove, se vi volas malfermi dosieron, se Vi ŝatus legi apartan linion, vi povas akiri el aparta line-- ekzistas enkonstruita ins por tio. Se vi ŝatus skribi aferon, vi povas skribi tion. Se vi ŝatus skribi individuajn pikoj, vi povas skribi tiujn. Kaj se vi ŝatus persisti super la linioj de dosiero individue, kiel ni faris en peco de kelkaj semajnoj, vi povas fari tion por. Denove, plej celoj kiuj oni kredus ŝati povi persisti super subteno ripetanta super ili. En Pythons, dosiero estas eble io kion Mi ŝatus iteracii linion por linio. Se estis vortaron de vortoj kaj mi provante atingi tiujn individuajn vortoj eksteren, tiam, ene de ĉi maŝo, linio ĝi tuj estu ĉiu vorto laŭvice kaj ĉi tuj estos ekzekutita por ĉiu linio en la dosieron ĝis la fino de la dosiero. Kaj denove, se mi presas el ĉiu linio, la linioj venas kun novaj linioj, do mi opcio la fino malantaŭo al io tia. Tiam mi akirus la enhavon de mia dosiero. La dua afero kiu operacias en kelkmaniere kiel lertaj, kaj kelkmaniere kiel ion substance pli potenca, estas vortaroj, kiuj estas vere malvarmeta uzi sed estas esence hash tabloj maskita. Vi kreas unu uzante precize du gravuloj, kiu estas timinda se vi klopodis realigi la hash tablo por via problemo aro, vi scias multe doloro kiu povas esti. Sed homoj faris ĝin, kaj faris tiel bone, ke vi ne devas maltrankviliĝu pri tio plu. Tiam vi povas enmeti individuaj aferoj. Hash tables-- aŭ vortaroj ne aparte zorgi kion vi stokante en ili. Do se iuj elementoj estas nombroj, kaj iuj elementoj estas lertaj, se iuj elementoj estas aliaj vortaroj, kaj kelkaj enskriboj estas ŝnuroj, Pitono ne multe zorgo. Denove, se vi eniros en gxin atendante kordo kaj kion vi ricevas reen estas tabelo, kiu estas via problemo. Kaj eble estas kulpo de kiu ajn pensis ke estis metanta aferojn en la vortaro, eble tio estis vi. Se kiu estis iu alie, espereble ili bonkonduta pri kio tuj en la vortaro kaj ne lasi neniun enfaliloj cxar vi povus fali. Sed la normo funkcioj donu vin bonkonduta aferojn. Do ili diras ĉi revenoj malantaŭeniri vortaro de kordoj, tiam ĉio vi tuj eliri estas ĉeno. Se vi faras iujn de ĉi kaj vojaĝoj vin, nu, tio eble estos sur vi. Python certe donas sufiĉan ŝnuro pendi mem, se vi ŝatus. Nun ni povas presi individuajn elementoj de ĉi tiu kaj revenoj precize kion vi atendus. Precize kion vi atendus, mi supozas, Estas frazo kiu mi uzas multe, sed tio estas pli aŭ malpli kiom Pitono funkcias. Se vi petos ion kio ne ĝi, Python faros elĵetas eraro kaj gxi forlasis vin el ajn programo vi estis en. Ĝi malebligos reale presi pli da informoj ol tio, gxi devos atentigi you-- ĝi malebligos aldonu linion, kaj do. Kaj, denove, eble ni volas persisti super vortaroj kaj trovi ĉion en ĝi. Jen ni estas ripetanta super du aferojn samtempe. Kaj tiel ni faros ĝin per ŝlosilo, valoro, sed poste presi ĉiuj el tiuj. Kaj se ni volis cast-- se ni efektive kuris ĉi, ni havus iun problemon ĉar on-- kiam ni eniris kun David, ĝi povis add-- se ni ne jxetu gxin al ĉeno unua, ni ne povis aldoni ke tabelo de kordoj sur ŝnuro. Sed se ni jxetis gxin al kordo, ni akiras ion kiel tiu, kiu estas eble kion ni ŝatus legi. Kaj tiu estas literumanto. Ni ĵus legis en aferoj. Do ni povas legi en individuajn vortojn kiel linioj. Ni detranĉus la lasta afero, tiel dupunkto minus 1 chomps for la lasta afero ke we-- la lasta karaktero de kordo. Ni diros. OK, ĉiu de tiuj ricevas enmetita en tiun vortaro, mapado al valoro de 1. Ni ne aparte zorgas pri tio, sed ĝi estas nur tie por diri, ho bone, tion mi metos en la vortaro. Ĉar poste, kion ni estas tuj faros estas ni intencas diri, nu, se ĝi estas en la vortaro ajn. Denove, tiu ĉeko por membreco estas supren mastruma uzante tute malsaman algoritmo ol ĝi volo en lerta, sed ni nomas ĝin la sama vojo, kiun Estas iom de tiu Python sukero tavoleto aferojn tiel ke ili estas pli facile uzi. Kaj denove, ni vidis aferojn tiel antaŭe. Tiu estas esence trovi, aŭ ĝi estas precize la sama sintakso kiel trovi, sed estas funkcianta super tute malsama strukturo. Kaj ni ne aparte gravas. Do tiuj estas la aferoj kiujn vi estis demanditaj implementar por literumanto. Ĉe tiu rapideco, ni tuj ricevas pli aŭ malpli ĉiujn psets farita. Publiko: Por ke resume nur venas reen kiel malĝuste literumita se ne kongrui io en la vortaro? ROSS RHEINGANS-Yoo: Jes, jes. Kaj do, tio estas adapto de problemo aro kiu petas vin fari ĝuste tion. Publiko: Kial la linio minus 1 tie? ROSS RHEINGANS-Yoo: Do kiam vi ripetanta super dosiero petante por linioj, la linioj veni kun nova linio karaktero fine de it-- la minus 1 Estas ĝuste al butiko tiuj for. Kaj tio estas precipe flekseblaj maniero de indeksante en aferoj. Do se vi havas ĉenon, kaj vi ŝatus, bone mi estas tuj starti je karaktero tri kaj mi tuj iros al la fino. 3 dupunkto faros tion por vi. Se vi estas kiel mi volas komenci je la komencante kaj iri al la fina minuso 1 karaktero, dupunkto minus 1. Kaj se vi volas iri el la tria por la minus unua, tiam vi dirus 3 minus 1. Aldone, se vi volas indekso en aferoj rakontante de la dorso, vi nur indekso kun minus nombroj. Kaj ĉar, kie C eksplodus aŭ eble pasxtos aliaj memoro vi ne havis aliro al, aŭdi vi povas diri minus 1 signifas la lasta sed 1 karaktero en ĉeno. Moduloj estas version-- estas analogaj al bibliotekoj en C kaj estas utila por multaj aferoj. Multon oni kredus ŝatas fari en Python, krom simplaj manipulado de variabloj, vi volas enganchar en la grandaj bibliotekoj kun pli granda interfacoj kaj pli kapabloj por interagi kun aliaj partoj de la mondo. sys estas unu el tiuj kun aro da iloj kiuj estas utilaj por interagi kun la sistemo mem kaj importi ĝin kiel importado sys. Ekzistas pli dokumentado de ke, kion vi povus iri tien, aŭ vi povus trovi en Google per googling Python sys. Vi tajpas eniri. La unua ligo estas iranta esti la dokumentado en Python 2, la dua ligilo tuj esti la dokumentado Python 3. Kaj se ni skribis el dosieron kiu rigardis kiel this-- Se en aparta, ni estas rigardante funkcianta sur komandlinio argumentoj, kiel ni lernis fari tre frue en tiu klaso. Tio ne malfacila. Vi povas eliri argv, kiu estas unu el tiuj aferoj kiuj estas implementado por sys. Ĝi ne estas korpigita al la bazo pako, sed denove, vi povas plilongigi ĝin per importanta ke funcionalidad de sys. Vi nomas ĝin sys. ajn. Tie ekzistas argv. Ekzistas fakte neniu argc en sys, ĉar vi povas akiri ĝin tiel facile nomante len. Ni tiam presita ke ekstere, tiam ni kuris sur nia fina stacio echo-args.py. Ni reiros tabelo, kiu Estas ĉi tiu unua argumento. Denove, tio estas argv 0, kio estas la nomo de la afero kiu got nomis. Se ni nomas ĝin kun aldona argumentoj, ni akirus tiujn reen. Tio estas unu maniero akiri komandliniajn argumentojn. Se vi volas flagoj kie vi turnas aparta aferojn sur aŭ override aparta defaŭlta, argparse estas via amiko. Kaj cetere vi trovas ke enreta ĉe python argparse ĉe Google. Estas paro de utileco moduloj ke vi trovas vin uzanta kaj denove, se vi elspezas ajnan tempon de tiu lingvo importanta jsons por legi en kaj el JSON dosieroj, ne ke komplikaj. Vi malfermu dosieron, nomita json.load en tiu dosiero kaj vi revenas aferon. Kio estas tiu aĵo? Ĝi estas JSON objekto. Kie tiu JSON havas tabelo, la Python havas arrays. Kie tiu JSON havas asociaj tabeloj, Python vortaroj, kordoj, kaj nombroj, kaj tiel plu. Vi volas renversi ke ekstere, vi malfermi novan dosieron, vi nomas Escorial, kaj ŝarĝoj kaj forĵetas al eniros kaj eliros el kordoj. Simile, piklaĵo gets vokis en esence la sama interfaco. Ĝi estas iomete pli utila se vi dumpingo Python objektoj. Do se vi iam volis savi version de la aktuala stato de variablo por estonteco kuri vian programon, pekli estas Python biblioteko por fari tion. Se vi havas ia ajn variablo kiu povas esti skribita ekster en kiel vortoj kaj karakteroj kaj bitokoj kiel tiu vortaro, ni povis noti, ni skribu ilin kiel kiel JSON objekto, kiu estis laŭvorte tiujn karakterojn. Kaj tiam estus tre facila por homa malfermi ĝin up-- malfermiĝi kaj legis ĝin. Se ni ne aparte zorgi pri homoj legas ĝin, ni povis paki eĉ pli kompetente en formoj kiuj povus poste esti malpakis aŭ kiu povus poste esti ŝveligitaj. Kaj ĉi savas 80% de la spaco kiu via objektoj povus preni se vi skribis ilin longhand. Vi nomas piklaĵo tre multe la sama bare Escorial, ŝarĝo, kaj tiam vi ricevos vian aferojn reen. Do se vi skribas tre mallonga Python programoj kiuj volas savi stato, kaj tiam legi ilin reen poste, aferoj tiel estas viaj amikoj. Ke vi povis tre facile forĵeti ilin kiel JSON. Plej Python objektoj povas renversi la JSON se estas neniu espero, ke strukture ili povus esti prezentita tiel. Tiuj estas nur la pinto de la glacimonto sur moduloj, kiuj estas utilaj. Do sys, os, multiprocesamiento, estas ia baza workhorses por aĵoj ni devas interagi kun la dosiersistemon os., kiel os.isfile, os.isdirectory, os.makefile, tiuj estas viaj amikoj. Se vi volas interagi kun aparta dosiertipo, JSON, piklaĵo, CSV. Se vi volas interagi kun ttt paĝoj, la urllib por interesigi http paĝoj. bs4-- BeautifulSoup-- Estas mirinda parser por html. Vi kuri ĝin sur html kaj vi ricevas tiun nestitaj tabelo objekto nun, kiun vi povas kruci super Lookin, kun kiel nur serĉanta se, estas, en, kiu estas mirinda. Ekzistas aro da pakaĵojn por running-- por fari aparte mathy aferojn. Do se vi volas multipliki, inversigi, transformas matricoj, numpy estas uzita de personoj ĉiuj trans la mondo pro tio. scipy estas eĉ pli utilaj iloj en tiu direkto. sklearn-- maŝino lernado, natura lingvo prilaborado, súper utilaj aĵoj, ricevas implementado en Python tutan tempon. Kaj denove, prenas iomete plu al write-- bedaŭras, prenas iomete pli longe kuri, sed la kialo ke reala inĝenieroj emas uzo Python estas ĉar vi tendencas esti blokita sur vin skribi la kodon, prefere ol via komputilo kuri la kodon. Do se vi iras por skribi programo, kiun multaj aliaj personoj tuj uzos eterne, kiel Linukso, vi povus skribi ĝin en C. Se vi estus tuj skribos kalkulado motoron, vi povus skribi en Python se vi bezonas ŝanĝi ĝin ĉiu paro monatoj. Iuj homoj devus skribi ĝin en C ĉar ili estas tiel. Do ni vidis importado sys kiel maniero de prenanta aferojn akiri modulon en via programo. Vi povas ankaŭ importi ĝin alnomo, se vi ŝatus. Denove multiprocesamiento estas doloro tajpi ĉiun fojon, tiel importi kiel mp kaj tiam anytime vi uzi gxin en la programon, vi diros mp.process, aŭ kio havas vin. Se vi ŝatus importado nur ununura afero, tiel urllib havas ion nomita peto, do vi povas simple importi ke. Poste, vi ne alpreĝi ĝin urllib.request, sed nur kiel peto per sin. Kaj vi povas importi ĉiun de modulo se vi ŝatus. Tiu estas foje ne bona idea-- Tio kutime ne estas bona ideo, fakte. Ĉar vi very-- ĉar se io en tiu modulo havas nomon ke vi volis uzi aliloke en via programo, vi ne povas. Kaj ne estas ĉiam evidenta ke tio estas la kazo. Por certigi ke kion vi faris estis sekura, vi devas malfermi la modulo kaj vidi ĉiujn de la nomoj kiuj finas en there-- ĉiujn la funkcioj, ĉiuj variabloj kiuj vivas en tiu modulo, ĉar vi estas alportanta ĉiujn ilin en via loka nomspaco. Do homoj faras tion. Ĝi estas ĝenerale rekomendita ke vi ne faru tion. Sed homoj faras ĉi ĉiuj la tempo ĉar ili estas maldiligenta kaj ne volas tajpi el mp. io, iam. Ĉiuj ĉi diskuto pri moduloj elirigu min ĉirkaŭe al mallonga diskuto sur kiom vi desegni programojn en Python. La unua paŝo estas kontroli ĉu ajnulo jam faris la aferon, aŭ faris 90% de la afero. Ŝancoj estas ili probable havas, kaj vi iru akiri sian aferon kaj kuri tion. Aŭ skribi wrapper ĉirkaŭ ĝi adapti ĝin al via celo. Ĝi estas nur post tio havas maltrafis ke vi estus tiam iru kaj write-- komenci pensanta pri kiamaniere vi metus ĉi aferon kune. Ekzistas multaj aĵoj tie, kaj tio estas unu el la plej utilaj aferojn pri Python. Kiel la lingvo estas eleganta, la lingvo estas facile uzi, sed ankaŭ ĉar estas tiel eleganta kaj facile uzeblan, personoj estis uzante gxin kiel longa tempo kaj ekzistas multe da taskoj tie ke vi povas jungi por via propra uzo. Do lasta regulo de Python estas, iu intertempe jam probable verkita modulon por tio, iu alia havas jam verŝajne skribita biblioteko por tio. Antaŭ vi provu fari ion, rigardi ĉu ĝi estas realigita. Ĝi ne estas tiel malfacila. Ĉiuj de la moduloj kiuj mi arangxis antaŭe, kun eble unu escepto, venas pre-instalita en ĉiu norma Python instalado. Kaj tial kun alvoko al importi ajn, vi havas ĉiuj de tiu funcionalidad ĉemane. Komencante por envolver supren ĉi diskuto, ekzistas malmultaj aferoj ke mi lasis kiel nigraj skatoloj kaj ia glosada super, kaj estas kelkaj blankaj kuŝas ke mi havas sciigis ke pro honesteco, Mi timige almenaŭ punkto je tie, eĉ se mi ne iri súper profunde en ĉiuj el ili kaj ilia teknika klarigoj. Multa la aferoj ke mi nomas magio kion aliaj homoj vokus objektema programado. Do estas multaj things-- tiel variabloj estas tre ofte ne simpla bajtoj sidis, memoro, sed estas tre komplika objektoj kiuj havas internajn stato pri funkcioj kaj terenoj de kaŝitaj variabloj, Multa kaŝita funcionalidad, kiu Lasas vin turni ilin en kordoj, kiu permesas persisti super ili. Kaj se vi writing-- kaj la kialo ke ili havas ĉiujn ĉi riĉaj funcionalidad Estas ĉar la people-- la arkitektoj de la language-- irinta per kaj por ĉiu normo objekto, metas en la funkciaro diri jen kiel tio estas kiamaniere tiu tuj funkcii se iu volas persisti super ĝi. Do ĉio ke iu povus eble volas persisti super, estas logiko skribita en permane sur kiel vi estas supozis persisti super tiu objekto. Ĉio ke vi povus eble volas forĵetitaj en ŝnuro havas logikon skribita. Jen la funkcio kiun vi nomas se vi volas renversi ĉi ekstere al ĉeno. Jen kial vi ne povas voki len sur aĵoj, tiu Tial vi povas peti en, tiu estas kial vi povas nomi, se en ĉio sur ke vi dezirus, ĉar tiuj ĉiuj estas portantinoj kun ili, la teknikan scii-kiel fari tion. Tiu estas iu kiu mi estas súper ne tuj eniros en. Sed por io en listo estas subtile malsama C stilo por bukloj, kaj vi povas legi ĉion pri tiu sur la interreto, se vi estas interesata. Estas malluma flanko al ĉiuj de tiu, kiun mi menciis, do ekzistas du aferojn. La unua estas ke tiu objektema programado aldonas multan superkape al hazarda aferojn, do vi finas uzante multe pli memoro; Vi fini uzante malgrandan pli tempo ol vi farus alie. La alia lando sed la pli insida malluma flanko al tiu estas, se aferoj nur agi kiel vi volas ilin sen vi devi pensi súper malfacile pri ĉu tio devus esti int aŭ ĉu devus esti kaleŝego, ĝi eblus ke tien vi produkti int sed tien vi pensi sed ili devos always-- bedaŭras, ĝi povus esti ke tie vi produkti kaleŝego, sed kiam vi atingos la dua parto de via programo, vi pensas, Oh bone, sed ili devos ĉiam pasas min int. Kaj se ili ne, ĝi estas ebla ke vi wedged ie, se vi provas uzi tiun indeksi en tabelo, aŭ kio havas vin. Do unu el la reala utilajn aferojn pri C estas ĝi igas vin pensi vere forte antaux vi fari any-- antaŭ vi alportos ajna variablo en ekziston, kiel kion Estas la tipo de tiu variablo. Kaj ĝi tuj havis ke tipo de ĉiuj tempoj. Tio estas ne vera Python, kaj fakte, vi can-- se vi estas nur ia preterirantan orelon, kaj vi fari iujn decidojn unu vojo en unu loko, kaj iuj decidoj unu vojo en la alia loko sen meti sufiĉan materialon malantaŭ la scenoj en la alia loko kapti aferojn taŭge, vi povas akiri kelkaj tre strangaj eraroj. Kaj la programo povas Lasi ruliĝi por tre longa tempo, ĉar ĝi estas faranta multan laboron diri, bone tiu afero povus funkcii tiel, do mi tuj kuri tiel. Kaj fakte, la fakto kiu pelas plusendu tra multaj malgrandaj eraroj signifas ke, ofte, kiam Eraro estas fakte malbona kaj vi vere volas ripari ŝin, finu mejloj away-- la programo finas haltante mejlojn for de kiam vi havis vian eraron. Kaj tiel unu afero ke ni ŝatus programojn por fari, sometimes-- unu afero ke ni ŝatus programoj fari kiam ni elpurigi estas malsukcesos laŭte kaj malsukcesi tre rapide kiam iu eliras malbone. Python estas tre malbona en tiu. Python estas tre bona en ne malsukcesanta kaj ruliĝante antaŭen tra neatenditaj aferoj. Do tiu estas utila ĉar kiam vi skribas malgrandajn programojn. Kiam vi ricevas komplika cimoj ĝi kelkfoje prenas longan tempon por inciteti ilin. Do ekzistas malhela flanko al ĉiuj de tio, kiel ĝi ĝuste funkcias. Ĝi nur funkcias kiel vi atendus ke ĝi. Krom ke kiam lin faras ne, vi finas supren en tute malsama loko kaj provi elkompreni kie ĝi estis ke vi iris malbone. Garbage kolekto is-- tiel unu afero, ke vi rimarkos estas ke neniu el tiuj aferoj kiu Mi enportis en existence-- tiuj aroj, tiuj vortaroj, tiuj objektoj, tiuj files-- neniam akiri liberiĝita. Ekzistis neniu alvoko al libera en ajna de tiu diskuto. Kaj kio estis sur la C-flanko, ĉar ni neniam alvenis en tion. Sed en Python-flanko, estas ne libera. Aĵoj akiri aŭtomate liberigita kiam Pitono pensas vi ne rigardante ilin. Ĝi estas vere bona ne liberigante proprajxon vi eble ankoraŭ eble estos rigardante, sed tio signifas, ke se vi estus tuj rezervu tiu granda afero, kaj vi estas kiel, oh Mi faris kun gxi nun, ĝi estas malfacila diri Pitono ke vi faris kun gxi nun. Vi povas iam metita tiu variablo estos neniu, kaj tiam esperas ke fine la rubo kolektilo venas tra kaj purigas gxin. Sed denove, vi ne havi kontrolon super tiu. Kaj unu el la kialoj ke homoj uzas C por vere okupas kritika aferojn, Estas ĉi kapablo vere scias kiam memoro estas asignita kaj kiam ĝi estos liberigita, kaj havas multajn kontrolo super dirante: Mi uzas ne pli memoro ol mi bezonas. Kiu estas io kiu Pitono ne ke granda en. Spektantaro: Ĉu mi vi demandon? Kion vi volis diri per malsukcesos laŭte? ROSS RHEINGANS-Yoo: Do ​​se io tuj erara kaj vi estas en elpuriganta mode, vi farus tre ofte volas vian programon rakonti kie precize ĝi okazis, kaj ne nur silente ĉesi kuri. Sed oni kredus reale ĝi presi el ĉiaj informoj pri kiel, tie estis tiu. Tiu afero okazis Se vi videbligi a wen-- se vi uzas TTT server-- Spektantaro: [inaudible] ROSS RHEINGANS-Yoo: Yeah, se vi uzas retservilo, ĝi estas kelkfoje malbone se vi estas ĉiam forĵetante eraroj, kaj vi diras, bone ke ne funkciis. Mi tuj halti. Mi simple tuj ignori kaj gardi okazas. Ĉar tiam vi povas akiri en centojn de tiuj eraroj kaj ne vidi ilin. Ĝi certe estus utila por elpuriganta celoj se ĉiu tempo via retservilo faris eraro, vi havis durable notoj pri tio. Eble vi eĉ deziras la programo halti, tiel ke tiuj rekordoj Ne akiras entombigita sub aferojn. Sed denove, tio estas en elpuriganta manieron. Ofte en produktado maniero, La mondo estas iom malsama. Kaj en etaj skriptoj kiuj Mi kuras, kie la afero, kiun mi diris al fari povus esti nur iomete for el kio mi ŝatus ĝin fari, tiam ia puŝanta tra eraroj estas io vi eble volas. Kaj en tiuj kazoj, certe Python vere perlaboras liaj komencoj. La lasta afero kiun mi ne parolas en this-- ke mi ne paroli pri sed povas esti vere exasperante la unua tempo vi havas unu el ĉi tiuj eraroj, kaj la dua kaj tria kaj kvara tempo vi havas unu tiuj eraroj. Python, mi menciis ke ĝi uzas blankan spacon al vi kiujn nivelo de deŝovon kaj kion funkcia bloko vi estas en, ĝi traktas taboj kaj spacoj malsame. Do se vi langeto super kvar, kaj tiam la sekva linio havas kvar spacoj, eĉ se ili montras supren kiel la saman kvanton en via redaktilo, Pitono ne traktas ilin same. Fakte, Pitono traktas langetoj kaj spacoj kiel oleo kaj akvo. Ili estas nur malsamaj aferoj. Ne estas aparta longa kiu langeto estas, do ĝi ne estas kiel langeto egalas 8 spacoj, kaj tiel vi akirus ĉirkaŭ ĝi tiamaniere. Kiel, kiam ĝi diras, kion nivelo de blanka spaco mi estas ĉe, ĝi estas efektive serĉanta desegnon de spacoj kaj klapetoj. Kaj do, la plej bona maniero trakti tiun estas ĉiam uzi spacoj tutan tempon. Kaj fakte, en la Cloud9 IDE kaj la CS50 IDE, via Tab ŝlosilo inserta kvar spacoj anstataŭe de pestaña, kiu estas super utila. Kvankam denove, se vi skribis Pitono programo kun langetoj estus bonege, ĝi estas nur se iu eniris kaj provis aldoni unu linion al via programo kiu havis kvar spacoj por ĉiu langeto, ĝi rompus. Kaj rompigxus en maniero ke vere ne estas videbla. Kvankam la fakta eraro mesaĝon ke ĝi ĵetas devas vidi kun nova indent ne atendis tie, or-- se ĝi parolas pri skriptoj kaj ĝi aspektas kiel ĝi estas erara, ĝi estas probable ĉar Tie estas langeto-spaco problemo. Ili ankoraŭ exasperante elpurigi. La plej granda aro en tiu diskuto, kiun mi ne atingi ĉar estas vere komplika, subtila temo, kaj ne estis necese fari ajnan de la aferoj ni faris ĝis nun, estas koncepto nomita opoj. Ili estas tie multe kiel la arrays ke vi ne povas modifi. Ili kutimiĝas tuta loko ĉar ili estas utilaj por multaj eventoj ke tabeloj ne estas utilaj por. Sed se vi ŝatus fari tabelo, kaj tiam promesos la interpretisto ke vi estas neniam tuj volas modifi ke thing-- fakte, se vi volas modifi, vi faros nova kun la nova valoroj en it-- tiuj estas opoj. Prefere ol produkti ilin kun kvadrataj krampoj, vi produktas ilin per rondaj krampoj. Kial vi uzus tion, Estas iomete de demando. . La sola afero kiun mi diru pri kiu vi povas uzi opoj kiel indeksoj por vortaroj. Vi ne povas uzi tabeloj kiel indeksoj por vortaroj. Kaj kial estas, denove, teknika kaj Mi ne tuj kuri en ĝin. La pset ke mi ne tuŝis en tiu ĉi diskuto estas pset6. Do jen kiel vi 'D efektivigu a-- jen kiel vi volus apliki pset6 en Python. Konsiderante la Python dezajno ciklo, la unua afero ke vi faras kiam vi estas skribo programoj estas ĉeko vidi se iu estas farita jam. Fakte, se vi volas al serve-- Apache 50 faras proksimume tion, se gxi ne venas norma instalita sur Linukso maŝinoj. Python faras, kaj la Pitono simpla http servilo faras tiel. Se vi estas iam sur Linukso maŝino, aŭ la Cloud9 IDE ekster CS50 kaj vi ŝatus servi tiu fluo dosierujo al aparta haveno, python-m SimpleHTTPServer haveno servas tiu. Vi povas ankaŭ importi la simpla http servilo kaj ĝi estas atingis multajn funkciojn se vi volas personecigi ĝin, aŭ ŝanĝi ĝin, aŭ ili kuros it-- jungi ĝin al kuri vian propran servilon servoj. Do jen Python en malmultaj vortoj. Kaj tiu estis CS50. Dankon.