O professor para comparar o desempenho das lista, usa os códigos:
for _ in range(100): np_array *= 2
for _ in range(100): py_list = [x * 2 for x in py_list]
Como esses códigos funcionam e qual o uso do underscore?
O professor para comparar o desempenho das lista, usa os códigos:
for _ in range(100): np_array *= 2
for _ in range(100): py_list = [x * 2 for x in py_list]
Como esses códigos funcionam e qual o uso do underscore?
Olá, Lucas! Como vai?
Utilizando o array da biblioteca Numpy é possível realizar operações matemáticas diretas.
Então, no trecho for _ in range(100): np_array *= 2
, o computador está repetindo a operação np_array *= 2
100 vezes.
E a operação np_array *= 2
significa que ele está pegando cada elemento do np_array
e multiplicando por 2.
Vamos imaginar que o elemento np_array[10] = 5
. No final do for, esse mesmo elemento terá o valor np_array[10] = 5 * 2^100
Em resumo, np_array *= 2
faz (de forma um oculta) um loop em cada elemento do array e sobrescreve cada elemento pela dobro do que tinha lá anteriormente.
Já as listas do Python não têm essa mesma funcionalidade. Então, é necessário fazer um loop em cada elemento da lista e ir sobrescrever pelo o que tinha lá vezes dois, daí o trecho de código py_list = [x * 2 for x in py_list]
.
Nesse trecho, ele faz um loop em cada elemento da lista py_list
(através da variável x*) e atribui aquele elemento `x2`, ou seja, o dobro do que tinha anteriormente.
Então, fica claro que é muito mais simples trabalhar com array da Numpy do que com as listas do próprio Python. Além de mais simples, os arrays do Numpy apresentam melhor performance, como mostra o professor nessa aula.
Quanto ao uso do underscore, deve-se apenas ao nome da variável em que esta sendo atribuído os valores de 0 a 99. Poderia ser qualquer outro nome... No entanto, no Python, pelo o que li em outros fóruns, o underscore sugere por convenção que quer descartar o valor que normalmente seria guardado em uma variável...
Espero ter ajudado :)