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.