‫Vamos aprender sobre as diferentes maneiras que podemos realmente importar esses módulos, até agora, nós só
‫aprendemos sobre importação, mas às vezes as coisas podem ficar muito agitadas.
‫Por exemplo, podemos realmente ter outro pacote dentro de outro pacote.
‫Se, por exemplo, eu criar uma nova pasta aqui e disser novo pacote python, chamaremos mais.
‫Clique em Shopping, OK, você vê que eu iniciei outro pacote dentro de um pacote que tem seu próprio
‫arquivo.
‫E vamos mover isso agora para fazer a mudança do refrator e vamos movê-lo para dentro da pasta more shopping,
‫digamos mais.
‫Compras.
‫Eu clico em OK, você verá que movi este módulo para cá, portanto, tenho um pacote dentro de um pacote.
‫E a maneira como acessaríamos isso é simplesmente dizer mais sobre compras.
‫Ponto de compras, carrinho de compras.
‫E vamos copiar isso e fazer o mesmo aqui.
‫E agora, quando clico em executar.
‫Você verá que ainda funciona, mas está ficando um pouco louco.
‫Você pode imaginar como temos cada vez mais pacotes que constantemente temos que fazer neste ponto, neste ponto, e
‫isso está ficando um pouco.
‫Muito longo e feio.
‫Então, como podemos melhorar isso?
‫Bem, uma maneira de fazer isso de uma maneira mais limpa é fazer algo assim, em vez de
‫dizer importar, dizemos a partir disso.
‫Parte, eu quero importar a função, então aqui estou dizendo, ei, de pacote, nome, pacote, nome, módulo,
‫importação, qualquer função que eu quiser.
‫Em nosso caso, queremos importar a função de compra.
‫Então você vê aqui, eu posso apenas fazer isso e no meu código.
‫Posso simplesmente correr como se fosse parte deste arquivo principal.
‫Se eu executar isso.
‫Você verá que ainda funciona.
‫Incrível, então isso é definitivamente mais limpo e podemos fazer isso com o utilitário também.
‫Posso dizer de importação de utilitário e realmente importar os dois arquivos ou as duas funções.
‫Então isso é multiplicar.
‫E se quisermos outra função, podemos apenas adicionar uma vírgula e dizer dividir.
‫Agora podemos imprimir Apple.
‫Ou pela Apple, além de dividir.
‫Digamos cinco por dois.
‫E também podemos multiplicar.
‫E certifique-se de que é uma vírgula aqui, porque é uma função assim, então se eu executar isso, você verá
‫isso.
‫Aqui vamos nós.
‫Isso também funciona.
‫Portanto, esta é uma maneira muito boa de limpar seu casaco.
‫Você também pode fazer algo assim onde diz from package, name, package, name.
‫Em seguida, importe o módulo inteiro, digamos que eu queira importar o módulo do carrinho de compras, posso dizer import, portanto,
‫pacote dot package ou você poderia ter feito apenas um pacote e importar o carrinho de compras
‫do módulo real.
‫Então agora eu acessaria como este carrinho de compras pontilhado.
‫E isso vai funcionar também.
‫Agora, o motivo pelo qual você pode querer fazer isso em vez do que tínhamos antes, é que às vezes você
‫pode obter colisões nomeadas.
‫Deixe-me mostrar a você, digamos que eu tenha uma impressão e então aqui usamos a função max, que nos dá uma função embutida,
‫damos a ela um iterador e ele encontra o máximo para nós para que se eu executar isso, você
‫verá que o máximo nesta lista é três.
‫Bem, imagine em nossa função de utilidade, temos um vamos dizer em vez de dividir ou adicionamos um máximo que
‫simplesmente diz.
‫Retorna e opa.
‫Bem, se eu voltar para o meu DCPI principal.
‫E.
‫Obtenha Max como minha função e clico em executar.
‫Bem, você vê, eu recebo um aí.
‫Eu entendo que Max leva zero argumentos posicionais, mas foi dado, mas um foi dado porque agora Max não
‫significa o que pensávamos que queríamos dizer, pelo menos neste arquivo importamos Max e bem.
‫Max tem uma função totalmente diferente agora, então podemos realmente substituir as funções existentes, então, usando
‫algo como este carrinho de compras, nos certificamos de que temos apenas um caso que poderíamos ter denominado
‫colisão.
‫Mas todas as propriedades ou todos os métodos que a arte de compra possui estão conectados a um carrinho de compras.
‫Portanto, em vez de ter várias funções que podem ser substituídas, tenho apenas um namespace.
‫E, a propósito, este também é um dos motivos pelos quais eu não recomendo fazer algo assim, você
‫pode realmente fazer o import star.
‫E o que isso diz é, ei, do módulo de utilitário, importe tudo.
‫E quando você faz isso.
‫Você verá que mais uma vez pegamos um ar porque ele importa o máximo também, e como nem sabemos o que
‫está sendo importado no momento, não podemos ver.
‫Temos que ir ao arquivo para ver.
‫Quando tivermos um ar assim, ficaremos tipo, o que está acontecendo?
‫Eu pensei, Max está trabalhando e é por causa dessa linha.
‫Portanto, é sempre bom ser explícito e dizer exatamente o que você deseja importar.
‫Mas vamos remover o Max por enquanto, mas como você pode ver, os módulos podem ser importantes de maneiras diferentes.
‫Minha recomendação é sempre ser explícito e dizer exatamente o que deseja importar.
‫E o formato geralmente segue usando a instrução import seguida pelo módulo do pacote ou importando o módulo, ou você pode fazer
‫a instrução from para fornecer o pacote, o pacote de suporte e o módulo se quiser, ou você pode fazer
‫um módulo e dizer import e a função específica ou o próprio módulo em si, muitas maneiras
‫de fazê-lo dependendo da sua necessidade.
‫A principal lição aqui é que os módulos e pacotes nos ajudam a ter boas práticas de engenharia e construir grandes
‫projetos de forma organizada, mas ainda assim ter todos esses arquivos conversando entre si.
‫Certo, isso foi muito, vamos aprender mais no próximo vídeo.