é óbvio que o primeiro comentário vai ser alguém falando Ah se você quer performance você não devia usar Python que que a gente vai fazer aqui a gente vai pegar um Array tendo os números 1 2 3 4 A gente vai fazer um loop por esse Array percorrer esse Array e criar um segundo Array que vai ter o quadrado dos números do primeiro Array Então a gente vai ter 1 4 9 16 só isso e eu quero saber qual o jeito mais rápido de fazer isso em Python por que que eu tô fazendo isso para mostrar que ser Python é uma completa bagunça você não necessariamente sabe o que tá acontecendo CR aqui nossas funçõe zinhas eu tenho o meu time eu tenho o Square using loop que vai ser o nosso for loop é muito simples ele vai iterar todos os números no Array e ele vai fazer o quadrado do número e adicionar esse quadrado ao resultado o nosso loop no while aqui embaixo faz efetivamente a mesma coisa ele tem um resultado aqui a gente tem uma variável auxiliar que é o i só para saber aonde a gente tá no Array a gente vai incrementando o nosso I mais 1 e no resultado a gente vai adicionando o quadrado do item esse código faz exatamente a mesma coisa você qual que é mais rápido vamos rodar aqui com 5 milhões de itens do item um até os item 5 milhões aqui a gente tá usando o nosso timet para ver o tempo eu tenho o loop time eu tenho Wi time tá meio ruim né for e aqui a gente vai printar os tempos 3 2 1 o for levou menos da metade do tempo que o Wi Por que que isso aconteceu porque no for tem menos operações que estão acontecendo com python perc e mais operações estão acontecendo dentro do próprio C como a gente sabe né usando esse Python um Python meio que roda C por debaixo dos panos e acontece que quando a gente faz um for em cima do nosso Array o for tá passando esse trabalho de iteração pro C então essa parte aqui de iterar o loop ela é bastante rápida o que o Python tá fazendo em Python mesmo é esse result pon append aqui no Wi a gente tem mais coisa sendo feita em Python porque o result pon append também está sendo feito em Python Então não é isso daqui e isso daqui é a mesma operação efetivamente só que a gente tem esse i mais igual a 1 isso daqui no nosso for tá sendo feito em C enquanto no nosso Wi isso aqui tá sendo feito no Python e a gente tem a comparação zinha aqui que também tá sendo feita no Python Então se a gente fizer isso daqui ó se eu pegar uma variável nada a ver jogar aqui e eu fizer isso daqui nada a ver também jogar aqui e eu fizer uma comparação e menor que Len Array agora a gente tem o mesmo número de operações no for e o mesmo número de operações no Python no while mais ou menos então se eu rodar o meu código agora a gente vê que de fato o for e o while agora estão com uma velocidade extremamente parecida porque agora a gente tá fazendo as operações lentas né essa soma e essa comparação aqui em ambos tanto no for quanto no while por is que usar for é um pouquinho mais rápido nesse caso is que a gente não tá contente só com isso Vamos explorar outras opções a gente tem fora a gente tem o Wi mas o que a gente tá efetivamente fazendo é criando um Array de resultados um loop para criar um Array em Python a gente tem aqui a nossa belíssima list comprehension agora de novo como o Python é meio bagunça list comprehension não é implementado tradicionalmente via de um for ou via um w loop a implementação dela é direto em C então penso eu que isso daqui vai ser um pouco mais rápido do que o for vamos ver o que que o nosso micro benchmark aqui Vai resultar temos aqui o while levou c o for levou 2 e o list comprehension levou um TR list comprehension é bem mais rápido do que tanto for quanto o Wi para esse caso e só para não ficar de fora né Vamos usar o list comprehension das linguagens que não tem list comprehension que seria um list map lambda isso aqui é efetivamente um list que a gente construiu assim como se a gente não tivesse um list comprehension para usar vamos rodar o nosso código e o resultado que a gente tem é que o nosso map foi um pouquinho mais devagar do que o for que que isso mostra pra gente isso mostra pra gente que list comprehension É de fato outra coisa que a implementação subjacente é totalmente diferente da implementação de um Forum de um map isso tud é muito bacana só que no Python tem também outra forma de fazer isso daqui que é meio que pular o Python totalmente a gente vai jogar tudo isso daqui pro você aqui em cima ó vamos importar o numpy e vamos usar uma função do numpy que é o numpy Square você clica aqui você vai ver a implementação do Square não tem implementação você não vai conseguir ver assim ISO que tudo vai acontecer dentro do C só o que a gente precisa é em vez de passar um Array normal vamos passar um numpy Array para dentro dessa função vamos sobrescrever aqui o nosso Array usando o numpy p arrange e vamos aqui medir o tempo do nosso numpy para ver quanto que vai demorar então ó a gente tem um numpy Array criado por numpy arrange a gente tem aqui Um Square que é uma função interna do próprio numpy Obrigatoriamente pra gente elevar todos os números ao quadrado A gente vai ter que percorrer todos os números do Array então não tem nenhuma mágica aqui sendo feita por debaixo dos planos que é muito diferente desse fora aqui e vamos ver com qual velocidade que vai rodar isso daqui e o que a gente tem é algo totalmente desproporcional o i level 0. 49 L comprehension leva 0. 14 map leva 0.
23 e numpy leva 0. 006 como que a gente fez um loop rápido em Python A gente jogou tudo nas costas do C A gente não usou o Python então se você quiser ir rápido no Python a melhor coisa que você pode fazer é usar o mínimo de Python possível e o máximo de c e só por entretenimento vamos pegar e vamos colocar namba e jit annotations Just in Time em todas as nossas funções se você não sabe o que que é namba namba é um Just in Time compiler para Python que vai transformar Python direto paraa Machine code isso que faz as coisas serem mais rápidas essencialmente porque a gente não tá usando Python na verdade a gente não tá nem usando C A gente tá jogando tudo isso daqui direto para Machine code e vamos ver quanto tempo vai demorar né se a gente consegue bater esse 0. 06 aqui e rodando aqui a gente não conseguiu na verdade a gente conseguiu melhorar a performance de quase tudo o Wi foi para 0.
05 Mas a gente não conseguiu bater o nosso 0.