ROSS Rheingans-Yoo: Ola, eu son Ross.
E este é un seminario CS50.
El leva-lo de programación en C para programación en Python.
>> Python é unha linguaxe de script.
É en gran parte como C na sintaxe, aínda que algúns
dos detalles técnicos de como que a sintaxe é executado
son lixeiramente diferentes.
É menos potente que C nalgúns aspectos.
É menos expresivo para onde exactamente no seu ordenador
memoria e colocar a fóra, como é colocado para fóra,
cando está liberdade, e estes tipos de cousas.
>> É máis útil que C nalgúns aspectos, porque é máis fácil programar en.
O idioma é, en certa persoas, máis intuitiva.
E realmente, o obxectivo é que que sexa máis rápido para programar
e potencialmente máis lento para realizar.
>> Agora, se pensar sobre a cantidade de tempo
gastou no seu último conxunto de problemas de escritura
seu código contra a cantidade de tempo que gasta
no seu último problema definir a execución do seu código,
vostede imaxinaria que a linguaxe que foi dúas veces máis rápido para escribir,
e dúas veces máis lento para executar, pode ser unha mellora sobre C nalgúns aspectos.
Certamente, cando estás a escribir pequenos programas para facer cousas pequenas,
Python é unha linguaxe útil de elección.
>> E ao final da presente seminario, eu espero que
ser capaz de facer o elección en proxectos futuros
sobre cal a linguaxe é correcta de usar, non a idea
unha lingua que é máis corrixir o tempo.
Algunhas cousas sobre o que o seminario é.
Este seminario non pretende ensinar-lle Python a partir de cero.
Python é moi semellante a C, e eu estou supondo
que é un estudante CS50, ou alguén cunha familiaridade semellante con C.
>> Se é estudante CS50 en torno a problemas axuste 6,
Entón ve unha morea de cousas en C, eu vou che dar
as principais diferenzas, e algunhas das cousas
que fan Python diferente e especial e útil,
pero eu non estou indo a ir o que é unha linguaxe de programación
e como escribir programas.
Con todo, este seminario vai ensinar a escribir programas en Python
se vostede é un destes poucos grupos.
Unha vez máis imos ver como podería aplicar psets--
que debe ser en 1-6 Python-- e proporcionar punteiros
a documentación oficial para referencia futura.
A outra cousa que é importante sobre como esta conversa é asignado,
este vídeo será en liña, cortesía de CS50,
para que non debe sentirse como precisa para tomar notas.
Sempre poderá ir cara atrás e ollar para el máis tarde como referencia.
Ademais, os diapositivas están dispoñibles no momento
neste lugar, que debería levalo facer un doc Google.
É unha versión lixeiramente abreviada do que estou mostrando na pantalla.
>> Unha excepción coidado antes nós ir, Python 3
é unha lingua distinta do Python 2.
Eles parecen moito a mesma; ten diferenzas técnicas moi lixeiras
que vai facer que programas escrito en Python 2
non poder ser executado no ámbito Python 3.
>> O aparello ven con CS50 Python, por defecto usa Python 2.
Podes comprobar que dixitación na súa liña de comandos
--version python, que debe saída 2.7.6 no dispositivo actual.
Probe Python 3, que fai funcionar no dispositivo,
se patróns Python para 2.X.Y ou por o aparello ou nas súas propias máquinas.
Ten que substituír Python 3 en calquera momento nesta conversación que escribo Python.
Se a súa máquina é executando 2 por defecto, tipo
Python 3, a fin de ser capaz de efectivamente seguimento e realizar estas cousas.
>> Ademais, eu vou sinala-lo en recursos oficiais agora.
docs.python.org/3--~~V coidado que iso é un 3 e non un 2--
ten referencias útiles.
Tutorial ha levalo a través moito das mesmas cousas
que eu estou facendo agora, a non ser en forma de texto.
Referencia é útil como un referencia para a linguaxe,
ea Biblioteca defecto dá vostede algunhas das extensións
cunha funcionalidade adicional.
>> Así, nun primeiro programa Python.
Á esquerda temos C estándar, á dereita, temos Python.
Pode recoñecer este problema, que é
un dos primeiro problema CS50 en conxuntos, e estes
resolver-lo coa mesma solución.
Agora, a razón que somos mirando para estes mosaico
é así que podemos ver diferenzas sintácticas.
Un dos elefantes no cuarto que pode ter notado dereita
fóra do pau, é que Python non ten principal función embrulho en torno ao código.
Así, en C, escribir unha morea de arquivos, liga-los xuntos,
eo programa comeza a executar a esa cousa chamada int main.
>> En Python, escribe un ficheiro que, executar o ficheiro,
o programa inicia a execución na parte superior do ficheiro.
Por iso, vai comezar na parte superior do ficheiro
ir para abaixo ata atopar outra cousa.
Se atopar unha definición de función, non vai realmente realizar este código,
simplemente ha definir a función.
Pero aquí, cando o primeiro programa é n igual a 10,
o primeiro que este programa vai facer é levar ese valor de 10
e configurar-lo nunha variable chamada n.
>> Falando desa liña, un dos outra coisas- sorry-- este
significa que programas en C, vai escribilo los,
vai facelos, que será invocar algúns comandos clang,
e entón vai realizar un resultando executable.
Programas en Python, que corre o texto file-- este pode mario.py
ser este ficheiro que mostre você-- realizar o ficheiro
e vai executar, eo contido do mesmo
será executado por o intérprete Python.
Podes facelo no seu IDE.
>> Entón, se eu teño un arquivo Ola, que simplemente ten este contido.
Este é de feito o Python 2, non Python 3, polo que non
se preocupar coa sintaxe para agora.
Pero eu vou correr Python, en hello.py, e é executado.
>> Outra forma que eu poida usar Python que Non vou tratar con tanta cousa nesta conversa,
é se eu só escribir Python, el me cae nun ambiente onde
Podo alimento-lo liña por liña Python.
Entón, aquí, se eu escribir espazo de impresión 'Ola, mundo ".
Escribe entrar.
El me vai cuspir iso de volta os resultados aquela liña individuo inmediatamente.
>> Isto é pode ser útil.
Nesta charla vou facer as cousas en diapositivas.
E entón vai ser capaz de seguir ao longo de ambos aquí, ou por escrito
arquivos reais e, a continuación, executa-los.
>> Pero volvendo ao presente código, outra cousa
que pode ter noticed-- ben, hai
dúas cousas que podes aviso sobre estes bloques.
O primeiro, un pouco máis mundano, é que o Python non ten punto e coma final.
>> Semicolons son opcionais en todas partes e inofensivo en todas as partes.
Pode engadila los.
Pode facer as persoas que escriben Python para unha risadinha de estar en ti
detrás das costas, porque eles non son necesarios.
Son frecuentemente un sinal de que está a ser realizado durante de C. Os deseñadores da linguaxe
sinto que é máis claro deste xeito e que non é necesario declarar
cada vez que termine unha liña.
>> Outra cousa estraña sobre este n é que non ten un tipo de anexo.
Unha das pezas máxicas de Python-- e eu vou chamalo de maxia,
pero hai moito motivos técnicos para iso
un dos works-- pezas máxicas de Python
é que as variables poden ampliar ou encoller para conter todos os datos
tipo que desexa que eles.
>> Polo tanto, esta é a 10.
Máis tarde abaixo Eu lle atribúe a este n 0.5, levaría que 0,5.
Non importa o que é un int aquí e flotar alí, calquera cousa que usa este n
vai, máis ou menos, ser capaz de engole xunto se queda un deses.
A menos que haxa algún moi real polo que non pode usar os datos
escriba que n ten actualmente, en que punto vai estar
entalado e lanzar un erro, e estes tipos de cousas.
>> Pero aquí, Python realmente non lle importa o que
que é o que eu vou ir neste sentenza, como, quere isto?
Esta cousa en que?
Si, é un tipo de cousas.
Vou poñelas no final.
Vai ser un problema máis tarde, se alguén que quere usar este efecto
non pode tratar con isto.
Esta é unha das principais diferenzas entre Python e C
que fai máis doado para escribir grandes programas en C
e fai máis doado para escribir programa moi pequeno Python.
>> A sintaxe para non é moi diferente no que fai.
É un pouco diferente en como é expreso.
Polo tanto, este é un moi, o que se chama Pythonic, modo de escribilo.
para liña na gama (N), esta é a gama de números de 0 a N,
incluso na parte inferior e exclusiva na parte superior.
Polo tanto, é de 0 a n-1, que é o que o código C está facendo,
agás que é moito máis fácil mirar para quizais.
>> O bloque en cuestión é non partiu por chaves,
en vez diso el defínese off por este recuar.
Entón, todas esas liñas son catro espazos para a dereita,
ou como sobre un ancho de elefante.
E estes son os que son será executado no presente para.
Se eu romper a recuar sobre iso e eu
empuxe que volve para imprimir o descenso de inicio,
que vai deixar a impresión de loop.
En contraste con C, onde realmente aquí que mover esa cinta pechada arredor.
>> Isto significa que non obter erros que saltan en ti porque
poñer unha cinta no lugar incorrecto.
Isto significa que obter erros que saltan en ti porque
atrás unha liña incorrecta.
Por iso, fai recortes super coidadosa.
Esperemos que estaba sendo super- coidado co seu descenso de calquera xeito,
e por iso este non é que moito máis de un fardo.
>> Pero unha regra básica para Python, e nós imos ter un par destes
que nós imos pasar a través o curso da conversación,
é tratar sintaxe naturais antes de ollar calquera cousa.
Polo tanto, esta sintaxe, para este número no rango,
é moi distinto en canto a estilo.
Moitas cousas en Python veremos tomar este formulario.
>> E entón se vir cara arriba cun novo obxecto que
creo que ten que ser capaz de iterado sobre iso, neste formato,
Acontece que, probablemente, soporta ese formato.
Non estamos indo a ir no fondo de super- os motivos técnicos polos que iso é verdade.
>> Pero é unha intuición útil ter cando está achegando programas Python,
que esa cousa é só ir ao traballo.
Proba-o.
Arrincar a liña de comandos Interpreter, ver se funciona,
seguir adiante coas cousas, antes de aínda que abrir Google e dicir:
o que é a sintaxe para esta cousa en particular?
Lotes de Python que podería descubrir só tentando.
>> Este caso é aínda máis semellante a C, a continuación, as Fors son.
Teña en conta que non hai ningunha parénteses.
Os parénteses son, de novo, inofensivo, pero innecesario.
Hai dous puntos no extremo así como o de loops,
e, de novo, os bloques son relativos recuado no canto de detonar por chaves.
Este resto é para o orixinal nivel de retirada,
eo seu bloque en cuestión recuado novo.
Aqueles traballos exactamente como eles fan en C.
>> Isto é realmente moi moi mesmo.
Unha vez máis, impresión perde un personaxe fóra de printf Vostede pasa algunhas cordas.
Acontece cordas tanto pode ser marcada fóra
por comiñas simples ou dobres.
Non hai diferenza, agás que dentro
de aspas pode usar comiñas dobres con abandono,
en vez de ter que escapar todos eles.
E dentro de comiñas dobres, vostede pode usar comiñas simples con abandono
sen ter que escapar deles.
Se quería mesturar Los, pode certamente
mirar para arriba en liña como facelo.
>> Vai notar que aquí, Eu xa pasou a finais = esta cousa.
Este é un exemplo dun opcional argumento, que é unha desas cousas
que soporta Python que fai moi útil.
Así impresión realmente ten unha morea de argumentos, que son xeralmente
definida para o seu estándar valor, pero aquí eu teño
decidiu substituír o nome final.
A razón que eu teño que substituílo con unha secuencia baleira
é que de impresión en Python, por estándar, imprime unha nova liña
despois a cousa que dixo iso tamén.
>> Polo tanto, este hash é realmente indo imprimir un hash nunha nova liña.
E se eu non quere hash para imprimir unha nova liña tras iso, entón eu teño que dicir
non imprimir un.
Pero, aínda así, a unha última cousa que este programa está en falta que se ten é
unha inclusión na parte superior.
Imprimir é cocida en Python entón basicamente que non hai ningún cabeceira ou módulo
que precisa inclúen, aínda que se quería
para incluír outras cousas nun guión Python,
Eu faría iso nun format-- moi semellante as palabras son só un pouco diferente.
>> Eu mencionar que Non precisa de un principal aquí,
porque o Python comeza execución na parte superior.
Se eu quería involucrar isto en función, I
podería facelo como eu isto-- diría def nome da función,
argumentos pode entrar aquí e nós imos ver algúns dos máis tarde, dous puntos,
e despois, de novo, Toda bloque partiu
é o que é o operativo bloquear para esa función.
Polo tanto, esta é a definición da función.
E hai unha declaración, a continuación, para abaixo aquí, eu só podo chamar a función.
E, de novo, o programa intérprete, comezando na parte superior,
vai ver que é a definición.
Non se levará a cabo ata que este chegar aquí, e entón é como, oh
agora chamou, eu creo que eu debería executalo.
>> Unha cousa que é moi común ver en arquivos Python,
especialmente arquivos Python que son liberados para o público
e desenvolvido e desenvolvido e por-- mantida, é algo deste xeito.
Isto é así porque basically-- Python, comezar na parte superior
e entón executar ata o fondo, Eu se eu só tiña Mario chamou aquí,
a continuación, en calquera momento eu incluído o ficheiro en outro arquivo, porque eu quería usar
é función de Mario, que sería outro ficheiro tamén teñen esta chamada para Mario nel.
E cando eu execute o ficheiro, el chamaría Mario.
>> Polo tanto, é posible que só quere facer este realmente
executado este ficheiro en particular.
E así que podo romper iso nun Idioma como este, onde digo,
o nome desta execución ambiente é o principal,
entón eu quero facer estas cousas.
Se non, alguén pode use-- incluír o meu function--
meu arquivo, e só para obter o acceso a esas funcións
sen ter que realizar as cousas que quero realizar neste arquivo.
Isto é, de novo, opcional pero moi común.
>> Esas cousas son entirely-- son exactamente o mesmo entre C e Python,
seguramente en tres.
Creo que en 2, o operador de división ás veces dá-lo de volta cando flutúa
vostede operador ints, e quere quería que vostede ou non.
Pero máis, menos, e os tempos funcionan exactamente como esperaría,
excepto durante pouco máis tipos.
Entón pode multiplicar por Carrozas ints, e este tipo de cousas.
>> conxunto funciona exactamente da mesma.
Podes usar dous sinais de igual.
inequals-- maior que, menor que, estes tipos de coisas-
teñen os significados que está familiarizado con eles.
>> Onde C usa eses operadores, Python usa un pouco máis Inglés
aqueles lexible.
Entón, en vez de dous, ampersands, vostede literalmente escribir a palabra "e", "ou"
ou non."
Como no seu se-- na súa instrucións condicionais,
Vimos anteriormente que esta sintaxe en C corresponde a esta sintaxe en Python.
E hai non moi diferente alí, con excepción de un pouco
de puntuación en torno aos lados.
Unha vez máis, en que C sería máis se, Python usa Elif,
pero estes son principalmente cambios de nivel de superficie.
>> Iteración como este é a miúdo escrita nesta lingua en Python.
Pode fabricar este tipo de cousa cun loop while no exterior
se quere, pero certamente non ten que.
E, de novo, se quería o imprimir elementos dunha matriz
pode facelo deste xeito.
Unha das cousas divertidas sobre Python, porén,
é que non precisa para usar este paradigma,
e pode usar un un pouco máis elegante.
Vostede di que para un en Ary.
>> Entón, en vez de ir aquí e correndo ao longo dos índices,
e, a continuación, tirando para fóra elementos individuais,
dicir a verdade só para a atropelar os propios elementos.
E entón o que está facendo interior pode operar directamente
sobre os elementos, o que é moi divertido.
E nós imos see-- usaremos que idioma novo e de novo
como nós camiñamos través de código.
>> Isto é, de novo, un exemplo de algo que eu vou
Python chamar máxica, aínda que existan razóns técnicas moito porque traballa.
E hai cousas que técnicos Debe ser verdade sobre array en orde
para este traballo nos bastidores.
A cousa é que a maioría dos tipos que esperar que iso funcione
ter esta aplicada para na lingua embutido.
>> Outra cousa que sería bo se iso funcionou en todas as linguas,
pero hai algunhas razóns polo que non pode, imprimir esta cadea veces este número.
Acontece que en Python, iso fai exactamente o que desexa, que é só diversión,
e significa que podemos, en realidade, reducir este programa, novo mario.c.
No canto de iteración moito, podemos só dicir, eu quero un pouco número de espazos,
Quero o número de hash, e algúns hash ao final.
E, de novo, usamos este formato.
>> Aquí, nós estamos pasando en unha variable dese xeito.
Unha vez máis, non precisamos de dicir que tipo de variable é,
ea única vez que vai obter erros é en tempo de execución.
Cando alguén intenta para pasar algo en,
que vai vir para a función moi ben.
Se calzar aquí, porque este non é o O que se pode crear rangos máis,
Vou coller un erro de execución alí, e eu vou ter que depurá lo desa forma.
Pero, con todo, eu non teño de ser moi coidadoso sobre o que
pásase en tanto tempo como no real execución todo funciona moi limpa.
>> Podería ata facelo un pouco máis limpo
usando unha función interna, en particular, en cordas, o que é xustificado á dereita.
Esta é só unha función útil mentindo ao redor da biblioteca.
É na documentación se ir e ollar para el.
E digo, ben, eu vou ter esa secuencia, algún número de hash,
e gustaríame xustificar dereito pad ele-- Lo con espazos para ser ese lonxitude.
>> De novo, isto é na documentación, que trae US--
En realidade, eu vou facer clic these-- o que nos leva á nosa segunda regra
á biblioteca estándar Python-- métodos de función son os seus amigos.
E é moitas veces vale o seu tempo para ir á procura de pregúntome
se hai unha cousa que só fai iso.
Hai probablemente é.
Se desexa almofada unha secuencia de caracteres, se
quere aproveitar a volta metade dunha corda, se
quere buscar a través dunha corda, se desexa eliminar un par de cousas
cunha corda comas entre eles,
existen biblioteca estándar funcións para facelo.
>> E iso fai a súa vida máis doado se usalos
en vez de rolar para fóra todo por conta propia
en cinco liñas de código aquí, cinco liñas de código aquí.
Isto realmente comeza en engadir ata tempo real.
>> Unha das cousas interesantes sobre como este é chamado.
Vai notar que hai unha cousa de punto.
Eu teño algún obxecto á esquerda, e, a continuación, liguei para unha función nun punto.
Este é un dos paradigmas que Python usa métodos para a fixación de obxectos.
Imos falar sobre o que este é moi brevemente, ao final,
pero sabemos que podemos ambos operan en cousas por tomar esa cousa dicindo dot
o que quere, ou por teléfono unha función que leva
ese obxecto e algúns outros argumentos.
>> Entón, estas son as dúas formas que as cousas están feitas en Python.
E se un determinado función é aplicada
neste estilo ou este estilo é algo que
que ollar para arriba ata conseguir un xeito para os que un que é probable que se enmarcan.
Hai un máis ou menos cohesionada filosofía detrás Python
que absorben principalmente escribindo unha morea nel.
Nalgún momento, o que un deses algo será aplicado como
pasa a ser natural.
De momento, é só algo aprende como descubrir
cada cousa individual.
>> Entón biblioteca estándar funcións son os seus amigos,
e elas permiten que escriba cousas que ocupar ese espazo moi pronto,
realmente elegante.
E este é, en realidade, probablemente máis lexible, eu diría, que o programa C
por alí.
Sen esquecer o feito de que é tan suma, pode caber un elefante enteiro
no espazo que temos gardado.
>> Outra cousa, esta é unha implementación de Mario que é punto C, que eu creo que
é o máis curto que pode obterse.
Non ten o get int, pero el duro códigos valor de 10
do mesmo xeito que esta non.
Acontece que este aquí reloxos en 84 caracteres, mentres que Python é de 64.
E iso é infinitamente máis lexible que ese lixo aquí.
Así Python é máis eficiente no espazo.
É un pouco menos eficiente o tempo, pero non por moito.
>> As listas son unha cousa importante en Python.
Non vimos eles, pero eles operan como matrices facer en C.
Entón aquí, pode declaralo los, pode paso-los en algo.
Agora cadrados detén un matriz destas cousas.
Unha vez máis, non declarados como tipo, pero sempre tentar usalo,
algo que esperar traballar sobre unha matriz de números enteiros
vai traballar unha matriz de números enteiros.
>> Iso é unha cousa que Absolutamente non pode
facer en C, xa que o memoria é tan mans,
pero é moi fácil de facer en Python.
Se quero a miña matriz para ser maior, podo engadir un elemento a el e el está ben.
>> O que está a suceder nos bastidores?
O intérprete vai para fóra, e obter un pouco de memoria,
e quizais vai ter un pouco de memoria extra,
entón eu non, entón eu non teño para realloc á vez.
Pero canto máis ter memoria que necesita?
Isto non son decisións que ten que facer,
estas son decisións que os intérprete vai facer.
>> Aquí vemos gama pode levar dous argumentos,
pero aínda vai ser incluida o principio para que engadir un alí.
Esta é unha expresión, que é unha aínda máis xeito intelixente de escribir cousas como esta.
É chamado de lista de comprensión, e aquí o que estamos dicindo
é que me gustaría poñer en i cadrado para cada valor de i nesta gama.
Esa cousa á dereita podería ser outro array, e esta cousa da esquerda
ser calquera función específica que levaría en i como unha variable
e me dar un resultado.
>> O que eu vou facer é, Eu estou indo a construír
unha matriz que se todas esas cousas para cada valor nese intervalo.
E iso é super elegante, super curto, e é moi claro o que iso significa.
Esta é unha das máis coisas- este é novo,
un de-- moi emblemático da razóns que persoas como Python.
Se che gusta de programación como este, entón Python
é unha linguaxe que desexa aprender.
>> E, de novo, hai técnica razóns polo que isto funciona.
Pero, tanto como nós estamos preocupados, nós máis ou menos non me importa.
>> Entón, se quere imprimir listas, algunhas das mesmas expresións son útiles.
Para i neste intervalo, poderíamos Índice través de todas as cousas
e, a continuación, imprimir-los todos para fóra.
E vai ver len aquí.
Se xa quixo comezar a lonxitude da matriz, que é
moi fácil en Python, é moi difícil en C.
Isto imprimir exactamente o que esperar que el.
Poderiamos tamén, como vimos antes, iterado sobre os elementos en array
directamente, e despois é só falar eles, en vez de ter o índice
de volta á matriz de cada vez.
>> E iso é algo que se pode facer.
Así, en C, se pedir algo como este, impresión diría,
iso é un array de enteiros.
Isto definitivamente non é un corda, eu non podo imprimir lo.
Python máis ou menos non lle importa.
É como si existe unha forma que eu podería transformar isto nun fío?
Si, eu vou facer iso.
E entón eu vou só imprimir iso.
Isto significa que pode facer cousas como-- estes
son a maioría das partes duras do xogo de quince anos, por escrito
moi brevemente en Python.
>> Verá que non hai un pouco de-- aquí
Eu lanzou un enteiro para unha cadea, e eu teño que facelo manualmente.
E eu estou indo a engadir Lo a outra cadea,
ou doutra forma Python queda confuso.
Pero se cando está engadindo unha cadea para un enteiro,
son eu supor para obter un enteiros de volta ou unha secuencia de volta?
Pero, de novo, se só chamar str nunha cousa,
e poderían, de calquera posible mundo pode converter nunha secuencia de caracteres,
probablemente será convertida nunha cadea.
>> Aquí vemos o uso de aniñada comprensión da lista
na parte esquerda, algúns de indexación, que é exactamente como estaría afeito con iso,
e algúns a impresión de cousas.
Unha vez máis, definimos algúns funcións e imos chamalos abaixo
na principal cando nós realmente obter o ficheiro.
retorno funciona exactamente como quere espera de traballar con C. Buscar,
podemos configurar cousas como isto-- aquí está lista de comprensión
hai unha asignación a unha variable, e podemos realmente facelo aínda máis fácil.
Non necesitamos escribir investigación, porque built-in para o idioma
é se esa cousa é nesa matriz.
Voltar true, senón retornar falso.
Entón esta é a totalidade do achado.
>> A totalidade da especie implica chamar especie,
é-- que hai implementacións desta construído en certas bibliotecas C.
Se desexa deste especie de atrás,
pode substituír ese opcional argumento en sentido inverso cunha certa.
E se quere clasificar máis cordas, que é built-in tamén.
>> Polo tanto, este non é para dicir que estes son cousas que ten que facer todos os días,
pero a idea é que este é a filosofía do Python,
que todas estas cousas que desexa tipo de querer facer son built-in.
E a maioría das funcións estándar, tan tipo, lonxitude, calquera que sexa,
Soporta a entrada de máis loxicamente sensato.
Chama len nunha disposición a mesma forma chama len nunha corda.
Vostede multiply-- clasificar cordas Do mesmo xeito clasificar matrices.
>> A maioría das funcións estándar que as persoas constrúen,
e máis third-party bibliotecas que a xente
construír, porque están emulando o deseño da biblioteca estándar,
pode ser chamado en todo o que é como, por que non esta só traballar,
en C. Máis ou menos, só pode traballar en Python
porque as persoas traballan detrás figura o que é unha cousa e despois operar
de forma adecuada sobre el.
Entón, de novo, a formación técnica, pero fai a nosa vida máis fácil como programadores.
>> Entón aquí está o ficheiro I / O. arquivo E / ten moitos pequenas cousas que fan máis complicado,
e por iso hai recursos en liña, pero en poucas palabras,
chama aberta nun ficheiro nome con un tipo particular.
Así que é ler, ler e escribir, escribir ou engadir.
Le un certo número de caracteres fóra e imprimir eses,
terá Ola!
Quero dicir, como este ficheiro tivo Ola!
Nel, chame para ler, eo que vai recibir de volta
é unha cadea que ten todo do resto da matriz,
ou a totalidade do resto do ficheiro.
Se conectar a ler de novo, está ao final do ficheiro,
e así non pode algo e así vai pechar.
De novo, isto é, en vez de .close arquivo de preto, como sería en C.
Isto é máis ou menos porque é un f cousa, e desexa f para pechar.
Pero ficheiro básico E / S non é particularmente complicada.
De novo, se quere abrir un ficheiro, se desexa ler unha fileira particular,
pode saír de particular linha-- hai built-ins para iso.
Se desexa escribir un cousa, pode escribir isto.
Se desexa escribir out individual mordidas, pode escribir aqueles.
E se quere iteración sobre as liñas dun ficheiro
individualmente, como fixemos en unha peza de hai unhas semanas, pode facelo.
Unha vez máis, a maioría dos obxectos que desexa quere ser capaz de interactuar sobre
soporte a iteración sobre eles.
En Pythons, un arquivo é quizais algo que Gustaríame iterado liña por liña.
Se fose un dicionario de palabras e eu estaba
tentando facer que os individuo palabras para fóra, a continuación, dentro deste loop,
liña que será cada palabra de cada vez e este
será executado para cada liña no arquivo ata que o fin do ficheiro.
E, de novo, se eu impreso cada liña, as liñas veñen con novas liñas,
así que eu estou definindo a final de volta a unha cousa como esta.
Entón eu ía estar o contido do meu arquivo.
>> A segunda cousa que actúa en algunhas formas, como listas, e nalgúns aspectos
como algo substancialmente máis poderoso,
son dicionarios, que son realmente legal de usar, pero son basicamente de hash
mesas disfrazado.
Crear un usando exactamente dous personaxes, o que é impresionante
se intentou aplicar o táboa de hash para o seu conxunto de problemas,
sabe moita dor que pode ser.
Pero a xente fixeron , E fixo tan ben,
que non ten que preocupar máis.
>> A continuación, pode introducir cousas individuais.
Tables-- Hash ou dicionarios particularmente non
importa o que está a garda en si.
Polo tanto, algunhas entradas son números, e algunhas entradas son listas,
algunhas entradas son outros dicionarios, e algunhas entradas son cadeas,
Python non fai moito coidado.
>> De novo, se entrar nel esperando unha corda eo que recibe de volta
é unha matriz, iso é problema seu.
E quizais a culpa é de quen Pensei que era poñer as cousas
no dicionario, quizais que era vostede.
Se iso era alguén outra cousa, espero que eran
ben comportado sobre o que ía no dicionario
e non deixou ningunha trampas para que poida caer.
>> Pero as funcións estándar será darlle de volta as cousas ben moza.
É o que din iso volve copia dun dicionario de cordas,
entón todo o que está indo para saír é unha cadea.
Se fai algunha deste e viaxes lo, así, iso pode estar en ti.
Python certamente lle dá o suficiente corda para aforcar, se desexa.
Agora podemos imprimir individuo elementos deste e iso volve
exactamente o que esperar.
Exactamente o que esperar, eu creo, é unha frase que eu estou usando un monte,
pero iso é máis ou menos como Python funciona.
Se pedir unha cousa que non é el, Python vai tirar un erro
e que vai desistir de ti para fóra de calquera programa que estaba.
Realmente vai imprimir máis información do que iso,
vai apuntar vocę-- vai engadir unha liña, e así.
>> E, de novo, quizais queremos iterado sobre dicionarios
e atopar todas as cousas nel.
Aquí estamos interactuar sobre dúas cousas á vez.
E así imos facelo cunha chave, o valor, pero, a continuación, imprimir todo isto.
>> E se quixésemos cast-- se realmente foi este,
teriamos problemas porque on-- cando fomos con David,
non podería add-- se non o fixésemos lanzalo para unha cadea en primeiro lugar,
non poderiamos engadir que matriz de cadeas nunha cadea.
Pero se nós expulsalo lo para un secuencia, temos algo
como este, que é quizais o que nós queremos ler.
>> E este é o Speller.
Acabamos de ler nas cousas.
Así, podemos ler en palabras individuais como liñas.
Nós cortar a última cousa, entón colonos menos 1
chomps fóra o último que nós-- o último carácter dunha cadea.
Imos dicir.
OK, cada un deles recibe inserida neste dicionario,
cartografía de un valor de 1.
Nós particularmente non se preocupan ese,
pero é só alí para dicir, oh ben, esta cousa que eu vou poñer no dicionario.
Porque despois de que nós somos vai facer é que estamos
vai dicir, ben, se é no dicionario de todo.
>> Unha vez máis, esta verificación para adhesión é ata operativo
usando un diferente algoritmo que vai nunha lista,
pero chamalo do mesmo xeito, que é un pouco dese revestimento de azucre Python
cousas de xeito que xa son máis fáciles de usar.
E, de novo, vimos cousas así antes.
Este é basicamente atopar, ou é exactamente a mesma sintaxe
como atopar, pero está operando ao longo dun estrutura totalmente diferente.
E nós particularmente non me importa.
Polo tanto, estas son as cousas que foron convidados a aplicar para ortográfico.
A este ritmo, imos chegar máis ou menos todo Serie de exercicios feito.
>> Audiencia: Así que basicamente só volve
grafado incorrectamente como se iso non acontecer combinar algo no dicionario?
ROSS Rheingans-Yoo: Si, si.
E así, esta é unha adaptación dun conxunto de problemas
que lle pide para facer exactamente isto.
>> Audiencia: Por que a liña non ser un alí?
ROSS Rheingans-Yoo: Entón, cando está interactuando
sobre un ficheiro pedindo por liñas, as liñas
veñen con un carácter de nova liña a finais de ele-- salvo 1
é só para facer a compra aqueles fóra.
E isto é especialmente flexible forma de indexar as cousas.
Entón se ten unha secuencia de caracteres, e desexa, así, eu son
comeza en carácter tres e eu estou indo a ir ata o final.
3 colonos vai facelo por vostede.
Se vostede é como eu quero comezar polo comezando e ir ao último menos 1
carácter, dous puntos menos 1.
E se quixese ir de do terceiro ao primeiro negativo,
entón diría 3 menos 1.
>> Ademais, se quere indexar en cousas desde a parte traseira,
só no índice con números negativos.
E por onde C explotaría ou que
alimento-lo outra memoria que non ten acceso, escoitar que pode dicir menos 1
significa o final, pero un carácter nunha secuencia.
>> Os módulos son version-- son análogos de bibliotecas en C
e son útiles para unha morea de cousas.
Unha morea de cousas que quere facer en Python,
ademais de simple manipulación de variables,
quere chamar ao bibliotecas máis grandes, con maior
interfaces e máis capacidades para interactuar
con outras partes do mundo.
sys é un destes con unha morea de ferramentas
que son útiles para interactuar co propio sistema
e Import-lo como sys importación.
>> Hai máis de documentación que, o que podería ir aquí,
ou pode atopar en Google por googling sys Python.
Escribe entrar.
O primeiro enlace será a documentación en Python 2,
o segundo enlace vai ser o Python 3 documentación.
>> E se escribimos para fóra un ficheiro que mirou como isto-- Se en particular, estamos
mirando para operar sobre argumentos de liña de comandos,
como aprendemos a facer moi a principios desta clase.
Isto non é difícil. Pode saír argv,
que é unha desas cousas que é aplicado pola sys.
Non é built-in para o paquete base, pero, de novo,
pode estendela lo por medio da importación que a funcionalidade de sys.
Vai chamalo sys.
o que quere.
Aquí hai argv.
Non hai realmente ningunha argc en sys, porque
pode obterse tan facilmente chamando len.
Nós, entón, impresa que fóra, entón nós correu na nosa echo-args.py terminal.
Nós volver dunha matriz, que é este primeiro argumento.
Unha vez máis, esta é argv 0, que é a nome da cousa que foi chamado.
Se nós Chamámolas con adicional argumentos, teriamos os de volta.
Esta é unha forma de comezar argumentos de liña de comandos.
Se quere bandeiras Where You Turn sobre cousas particulares ou substitución
un determinado nivel, argparse é o seu amigo.
E unha vez máis cre que en liña en python argparse en Google.
>> Hai un par de utilidade módulos que está a usar
e, de novo, se gastar moito tempo desta lingua importación jsons
para a lectura de dentro e fóra de JSON arquivos, non é complicado.
Abre un ficheiro, chamado json.load naquel arquivo e recibe de volta unha cousa.
Que cousa é esa?
É un obxecto JSON.
Onde ten que JSON matriz, o Python ten arrays.
Onde ten que JSON arrays asociativos, Python de
dicionarios, cordas, e números, e así por diante.
Quere botan iso, abrir un novo ficheiro, vostede chama de despejo,
e cargas e lixeiras para entrar e saír das cordas.
>> Do mesmo xeito, se chama pickles basicamente do mesmo interface.
É útil se lixeiramente máis está desaloxo obxectos Python.
Entón, se vostede sempre quixo para salvar unha versión do estado actual
dunha variable para un futuro realizar o seu programa,
pickles é Python de biblioteca para facelo.
>> Se ten calquera tipo de variable que se pode escribir para fóra
en palabras como e personaxes e bytes-- como este dicionario,
poderiamos escribir para abaixo, nós podería escribilo como
como un obxecto JSON, que foi literalmente estes personaxes.
E entón sería moi doado para un ser humano para abrilo up-- abrir
e lelo.
Se non o fixésemos particularmente se preocupan polos seres humanos ler,
poderiamos embalar aínda máis eficiente en formas que podería máis tarde ser desembalado
ou que podería máis tarde ser inflado.
E iso aforra un 80% do espazo que os obxectos poderían
tomar se escribiu los longhand.
>> Chama pickles moi o mesmo maneira-- despejo, carga,
e entón tome as súas cousas de volta.
Entón, se está escribindo moito programas en Python curtas que
quere gardar estado, e logo ler los de volta máis tarde, cousas como esta
son os seus amigos.
Que podería moi despejo-los facilmente como JSON.
A maioría dos obxectos Python pode despexar o JSON
se hai algunha esperanza de que estruturalmente poderían ser representadas desa forma.
>> Estes son só a punta do iceberg en módulos que son útiles.
Entón sys, os, multiprocessamento, son tipo de burros de carga básicas para as cousas
necesitamos interactuar con o sistema operativo do sistema de ficheiros.,
como os.isfile, os.isdirectory, os.makefile, estes son os seus amigos.
Se quere interactuar con un determinado tipo de ficheiro,
JSON, pickles, CSV.
Se quere interactuar con web páxinas, o urllib para http
páxinas. bs4-- BeautifulSoup-- é un analizador marabilloso para html.
Executa-lo nun html e obter ese obxecto matriz aniñada agora,
que pode atravesar máis lookin como con só buscando
se, é, en, o que é fantástico.
>> Hai unha morea de paquetes para running--
para facer particularmente Mathy cousas.
Entón, se quere multiplicar, inverter, transformar matrices,
numpy é usado por persoas todo o mundo por iso.
scipy é aínda máis útil ferramentas nesa dirección.
aprendizaxe de máquina sklearn--, procesamento de linguaxe natural,
Super material útil, recibe aplicado en Python todo o tempo.
>> E, de novo, leva un pouco máis tempo para write-- sorry,
leva un pouco máis para ser executado, pero a razón que os enxeñeiros reais tenden
uso Python é porque tende a ser bloqueada en escribir o código, no canto
que o seu ordenador executar o código.
Entón, se está indo a escribir un programa, que moitas outras persoas
vai utilizar para sempre, como o Linux,
pode escribilo lo C. Se fose vai escribir un motor de computación,
pode escribir en Python se precisaba para mudalo cada dous meses.
Algunhas persoas escriben-no en C, porque son así.
>> Entón vimos import sys como unha forma de facer as cousas
de obtención de módulo no seu programa.
Tamén pode Import-lo como un apelido, se desexa.
Novo multiprocessamento é unha dor de escriba cada vez, polo que importar como mp
e, a continuación, en calquera momento usalo no programa,
vai dicir mp.process, ou o que ten.
Se desexa importación só unha única cousa,
así urllib ten unha cousa chamada solicitude, para que poida simplemente importar que.
Máis tarde, non vai invocala la como urllib.request, pero só como solicitude
por si só.
>> E pode importar todo a partir dun módulo se desexa.
Este non é un bo ocasionalmente idea-- Isto xeralmente non é unha boa idea, en realidade.
Porque very-- porque se algo nese módulo ten un nome que
quería usar noutro lugar no seu programa, non pode.
>> E non sempre é evidente que ese é o caso.
Co fin de asegurarse de que o que estaba facendo era seguro,
precisa abrir-se o módulo para ver todo
dos nomes que acaban en há-- todas as funcións,
todas as variables que viven nese módulo,
porque está traendo todo Los no seu espazo de nomes local.
>> Entón, as persoas fan iso.
Recoméndase xeralmente que non faga iso.
Pero a xente fan isto todos tempo, porque son
preguiceiro e non quere escribir mp.
nada, nunca.
>> Toda esa conversa sobre módulos traia-me en torno a unha pequena charla
de como deseñar programas en Python.
O primeiro paso é comprobar a ver se calquera outra persoa xa teña feito a cousa,
ou feito o 90% da cousa.
Probablemente, eles probablemente teñen, e deben ir buscar as súas cousas e realizar ese.
Ou escribir un envoltorio en torno a el para adaptalo á súa finalidade.
É só despois que non que desexa, a continuación,
dalle comezar a pensar sobre write-- como ía poñer esa cousa xuntos.
Hai unha morea de cousas aí fóra, e iso é
un dos máis útil cousas sobre Python.
Como a linguaxe é elegante, o idioma
é fácil de usar, pero tamén porque é tan elegante e doado de usar,
as persoas teñen usado para unha moito tempo e non hai unha morea de cousas
aí que pode aproveitar para o seu propio uso.
>> Así última regra de Python é, alguén persoa xa foi probablemente escrito
un módulo para que, alguén xa ten
probablemente escrito unha biblioteca para iso.
Antes de facer unha cousa, ollar para ver se xa foi aplicado.
Non é tan difícil.
Todos os módulos que engada superior antes, quizais cunha única excepción,
vén preinstalado en todos os instalación estándar do Python.
E así, cunha chamada a importar o que quere,
ten todas as funcións ao seu alcance.
>> Comezando a pechar este conversa, hai algunhas cousas
que eu deixei como caixas negras e tipo de encuberto,
e hai algunhas mentiras brancas que teño dixo que por unha cuestión de honestidade,
Vou polo menos no punto aquí, aínda que eu non vou
Super ir profundamente en todos eles e as súas explicacións técnicas.
>> Unha morea de cousas que eu teño chamado de maxia
é o que as outras persoas chamarían programación orientada a obxecto.
Entón hai moitas coisas- polo tanto as variables non son moi frecuentemente
bytes simple sentado, memoria, pero son moi complicadas
obxectos que teñen interno Estado sobre as funcións e os lotes
variables ocultas, de lotes de funcionalidade oculta, que
permite que transformalos en cordas, que lle permite interactuar sobre eles.
E se está writing-- ea razón que
ten toda esa funcionalidade rica é porque os pessoas--
os arquitectos da language-- ir
través e para cada nivel obxecto, poñer en función
Dicir isto é como este é como isto vai funcionar
se alguén quere iterado sobre el.
>> Entón, todo o que alguén podería posiblemente querer repetir,
foi escrito en lóxica manualmente sobre o xeito no que é
debería interactuar sobre ese obxecto.
Todo o que podería posiblemente querer despexado nunha secuencia lóxica ten escrito.
Esta é a función que chama se quere botan isto para unha cadea.
É por iso que pode chamar len sobre as cousas, este
É por iso que pode chamar para dentro, este é por que pode chamar a par de todo
que ía querer, porque aqueles todos están cargando con eles,
o know-how técnico para facelo.
>> Isto é algo que eu son Super non vai entrar.
Pero a cousa na lista é sutilmente diferente do estilo C para loops,
e pode ler todo sobre iso en internet, se está interesado.
Hai un lado escuro de todos a iso, que mencionei,
entón hai dúas cousas.
A primeira é que orientou este obxecto programación engade moita sobrecarga
para cousas aleatorias, así acaba utilizando-se moito máis memoria;
acaba usando un pouco máis tempo do que faría doutro xeito.
O outro-- pero o máis insidiosa lado escuro a esta
é que, se as cousas simplemente actuar como queira que
sen ter que pensar super difícil sobre se este debe ser un int
ou se debería haber un flotador, pode ser que ata aquí
produce un int, pero aquí pensar, pero eles van always-- sorry,
pode ser que aquí produce un flotador,
pero cando comeza a segunda parte do seu programa, está a pensar,
oh ben, pero pase o meu sempre un int.
E se non o fan, é posible que entalado nalgún lugar,
se tentar usar isto para índice nunha matriz, ou o que ten.
>> Entón, un do real cousas útiles sobre C é
forza-lo a pensar realmente duro antes de facer any--
antes que traia calquera variable á existencia, como o que
é o tipo desta variable.
E terá que tipo de todos os tempos.
>> Isto non é certo Python, e de feito,
can-- se é só tipo de vai de oído,
e tomar algunhas decisións unha forma nun lugar,
e algunhas decisións un xeito no outro lugar
sen poñer material suficiente atrás as escenas noutro lugar
para incorporarse as cousas correctamente, Pode obter algúns erros moi estraños.
E o programa pode continuar a executar para un tempo moi longo, porque é
facendo unha chea de traballo para dicir, ben esta cousa podería funcionar dese xeito,
entón eu vou correr dese xeito.
>> E, de feito, o feito de que empuxa transmitir a través de unha chea de pequenos erros
significa que, moitas veces, cando de feito, un erro é mala
e realmente quere resolve-lo, el acaba millas away-- o programa
acaba parando millas de distancia desde cando tiña o seu erro.
E así unha cousa que queremos programas para facer, unha cousa sometimes--
que queremos programas Que facer cando estamos depurando
é fallar e fallan moi alto rapidamente cando algo dá mal.
>> Python é moi malo niso.
Python é moi bo en non fallando e rolando cara diante
a través de cousas inesperadas.
Polo tanto, este é útil para cando está escribindo pequenos programas.
Cando estar complicado erros que ás veces
Leva moito tempo para provocalo-los.
>> Polo tanto, hai un lado escuro de todos deste, como simplemente funciona.
Simplemente funciona como esperar que el.
Só que cando iso non acontece, acaba nun lugar diferente
e tentando descubrir onde que foi o que deu errado.
>> A recollida de lixo é-- así unha cousa que vai notar
é que calquera destas cousas que Eu trouxo en existence--
esas matrices, estes dicionarios, estes obxectos, estes files-- nunca se liberou.
Non houbo chamada libre en calquera esa conversa.
E iso foi o lado do C o porque nunca entrou isto.
>> Pero en Python-banda, non é libre.
As cousas están automaticamente liberado cando Python
pensas que non está mirando para eles.
É realmente bo non liberando cousas que tamén se pode posiblemente estar a ollar para,
pero iso significa que se fose vai reservar este gran cousa,
e é como, oh Eu son feito con el agora,
é difícil dicir Python que se fai con iso agora.
>> Ás veces pode definir esa variable a ser ningún,
e, a continuación, espero que, finalmente, o colector de lixo
vén a través de e limpa-lo.
Pero, de novo, non ten control sobre iso.
E unha das razóns que as persoas empregan C para realmente rendemento cousas críticas,
É esta capacidade de realmente sabe cando a memoria é alocada
e cando é liberado, e teñen unha morea de control sobre dicindo:
Eu estou usando non máis memoria do que eu teño.
Que é algo que Python non é tan grande no.
Audiencia: Podo facer unha pregunta?
O que entende por falla en voz alta?
>> ROSS Rheingans-Yoo: Entón se algo está a suceder de malo
e está na depuración xeito, faría moi frecuentemente
Quere que o seu programa para lle dicir onde exactamente está mal,
e non só discretamente deixar de correr.
Pero, en realidade, para imprimir fóra todo tipo de información sobre
como, aquí estaba presente.
Esa cousa aconteceu Se está imprimindo un wen-- se está executando un server-- web
>> Audiencia: [inaudível]
>> ROSS Rheingans-Yoo: Si, si está executando un servidor web,
ás veces é malo se está sempre descartar erros,
e está dicindo, ben que non funcionou.
Vou deixar.
Eu só vou ignorar lo e perder a suceder.
Porque entón pode poñerse en centos deses erros e non ve-los.
>> Sería certamente útil para fins de depuración
cada vez que o seu servidor web fixo unha erro, tiña rexistros duradeiros que iso.
Quizais aínda quere que o programa para parar, para que estes rexistros
Non sexa enterrado baixo cousas.
Pero, de novo, iso é o modo de depuración.
>> Moitas veces, o modo de produción, o mundo é un pouco diferente.
E en pequenos scripts que estou correndo, onde o único que dixo para facer
pode ser só un pouco fóra do que me gustaría que faga,
a continuación, tipo de empurrar a través de erros é algo que pode querer.
E, nestes casos, certamente Python realmente gaña seus comezos.
>> A última cousa que eu non falar isto-- en que eu non falar
pero pode ser realmente irritante o primeiro xa que ten un deses erros,
ea segunda e terceira e cuarta xa que ten un deses erros.
Python, eu mencionen que usa o espazo en branco
para lle dicir o nivel de recuar e cales bloques funcional que está,
trata tabulacións e espazos de forma diferente.
Entón, se guía sobre catro, e, a continuación, a seguinte liña ten catro espazos,
mesmo se elas aparecen como o mesma cantidade no seu editor,
Python non tratalos da mesma.
>> En realidade, trátase Python guías e espazos como aceite e auga.
Son só cousas distintas.
Non hai especial lonxitude que é unha ficha
polo que non é como unha guía é igual a 8 espazos, e así que ía estar en torno a ela
dese xeito.
Como, cando se di, o que nivel de espazo baleiro estou,
está realmente buscando un patrón de espazos e tabulacións.
E así, o mellor xeito de tratar con isto é a utilización de espazos sempre todo o tempo.
>> E, de feito, no Cloud9 IDE e do CS50 IDE,
a tecla tab insercións catro espazos no canto
unha guía, que é super útil.
Aínda novo, se escribiu un Python programa con guías que sería bo,
é só se alguén entrou e intentou engadir
unha soa liña ao seu programa que tiña catro espazos para cada guía,
ía romper.
E ía romper de forma que realmente non é visible.
Aínda que o erro real mensaxe que lanza
ten que ver co novo guión non espera aquí,
ou-- se está falando guións e parece que está mal,
probablemente é porque hai un problema tab-espazo.
Eles aínda están enfurecido para depurar.
A maior en toda Nesta charla, o que eu non fixen
chegar porque é realmente un complicado, tema sutil,
e non era necesario facer ningunha das cousas que fixemos ata agora,
son un concepto chamado tuplas.
Eles están aí moi parecido ao matrices que non pode modificar.
Son utilizados en todo o lugar, porque son útiles para moitas cousas
matrices que non son útiles para.
>> Pero se quere facer unha matriz, e a continuación, o intérprete prometer que
non vai querer modificar ese coisa-- en realidade, se quere modificar,
vai facer un novo co novo valores en ele-- estes son tuplas.
No canto de producir los con corchetes,
vostede producir los con parénteses.
Por que usaría esas cousas, é un pouco de unha pregunta. .
O único que eu vou dicir sobre iso é que
pode usar como tuplos índices de dicionarios.
Non pode usar matrices como índices de dicionarios.
E por que é, de novo, técnica e Non vou executar para el.
>> O pset que non toquei en nesta conversa é pset6.
Entón aquí está como 'd aplicar um-- aquí
Como podería aplicar pset6 en Python.
Tendo en conta o Python ciclo de deseño, o primeiro
que fai cando está programas de escritura de verificación é
a ver se alguén ten feito isto xa.
>> En realidade, se quere para serve-- Apache 50
fai aproximadamente, salvo que non ven
estándar instalado en máquinas Linux.
Python fai, eo Python servidor http simple fai tan ben.
Se está sempre nunha máquina Linux, ou fóra Cloud9 IDE de CS50
e desexa servir a esta corrente directorio para un porto particular,
python-m SimpleHTTPServer porto serve iso.
Tamén pode importar servidor http simple
e ten unha morea de funcionalidade se quere personalizar-lo, ou cambia-lo,
ou son executados ele-- aproveitala la para realizar os seus propios servizos de servidor.
>> Entón, iso é Python en poucas palabras.
E iso foi CS50.
Grazas.