Aprendendo Python: do zero ao herói

Em primeiro lugar, o que é Python? De acordo com seu criador, Guido van Rossum, Python é:

“Linguagem de programação de alto nível e sua filosofia básica de design é tudo sobre legibilidade de código e uma sintaxe que permite aos programadores expressar conceitos em algumas linhas de código”.

Para mim, o primeiro motivo para aprender Python foi que, de fato, é um belo linguagem de programação. Era realmente natural codificar nele e expressar meus pensamentos.

Outro motivo é que podemos usar a codificação em Python de múltiplas formas: a ciência dos dados, o desenvolvimento web e a aprendizagem de máquinas, todos brilham aqui. Quora, Pinterest e Spotify usam o Python para o desenvolvimento de backend em sua web. Então vamos aprender um pouco sobre isso.

O básico

1. Variáveis

Você pode pensar em variáveis ??como palavras que armazenam um valor. Simples assim.

Em Python, é realmente fácil definir uma variável e definir um valor para ela. Imagine que deseja armazenar o número 1 em uma variável chamada “one”. Vamos fazer isso:

Quão simples era isso? Você acabou de atribuir o valor 1 à variável “um”.

E você pode atribuir qualquer outro valor a qualquer outra variável que você deseja. Como você vê na tabela acima, a variável ” dois ” armazena o número inteiro 2 e ” algum número ” armazena 10.000 .

Além de números inteiros, também podemos usar booleans (True / False), strings, float e tantos outros tipos de dados.

2. Fluxo de controle: declarações condicionais

Se ” usa uma expressão para avaliar se uma declaração é Verdadeira ou Falso. Se for True, ele executa o que está dentro da declaração “if”. Por exemplo:

2 é maior que 1 , então o código ” impressão ” é executado.

A declaração ” else ” será executada se a expressão ” if ” for falsa .

1 não é superior a 2 , então o código dentro da instrução ” else ” será executado.

Você também pode usar uma declaração ” elif “:

3. Looping / Iterator

Em Python, podemos iterar em diferentes formas. Eu falarei sobre dois: enquanto e para .

Enquanto Looping: enquanto a declaração é True, o código dentro do bloco será executado. Então, esse código imprimirá o número de 1 a 10 .

O loop while precisa de uma “condição de loop. “Se permanecer verdadeiro, continua iterando. Neste exemplo, quando num é 11 a condição de loop é igual à False .

Outro bit básico de código para melhor entendê-lo:

A condição de loop é True portanto, mantém a iteração – até configurá-la como False .

Para Looping : você aplica a variável ” num ” ao bloco e a instrução ” for ” itera para você. Este código irá imprimir o mesmo que enquanto o código: 1-10.

Vejo? É tão simples. O intervalo começa com 1 e vai até o 11 elemento ( 10 é o 10 elemento).

Lista: Coleção | Array | Estrutura de dados

Imagine que deseja armazenar o número inteiro 1 em uma variável. Mas talvez agora você queira armazenar 2. E 3, 4, 5 …

Tenho outra maneira de armazenar todos os números inteiros que eu quero, mas não em milhões de variáveis ? Você adivinhou – existe de fato uma outra maneira de armazená-los.

List é uma coleção que pode ser usada para armazenar uma lista de valores (como esses inteiros que você deseja). Então, vamos usá-lo:

É muito simples. Criamos uma matriz e armazenamos no my_integer .

Mas talvez você esteja perguntando: “Como posso obter um valor dessa matriz?”

Grande pergunta. List tem um conceito chamado índice . O primeiro elemento obtém o índice 0 (zero). O segundo recebe 1, e assim por diante. Você entendeu a ideia.

Para torná-lo mais claro, podemos representar a matriz e cada elemento com seu índice. Eu posso desenhar:

Usando a sintaxe Python, também é fácil de entender:

Imagine que você não deseja armazenar inteiros. Você só quer armazenar cordas, como uma lista dos nomes dos seus familiares. O meu seria algo assim:

Funciona da mesma forma que números inteiros. Agradável.

Acabamos de saber como funcionam os índices das Lists . Mas eu ainda preciso mostrar-lhe como podemos adicionar um elemento à estrutura de dados da List (um item para uma lista).

O método mais comum para adicionar um novo valor a uma List é append . Vamos ver como isso funciona:

append é super simples. Você só precisa aplicar o elemento (por exemplo, ” The Effective Engineer “) como o parâmetro de append .

Bem, o suficiente sobre Lists . Vamos falar sobre outra estrutura de dados.

Dicionário: estrutura de dados chave-valor

Agora, sabemos que as Lists são indexadas com números inteiros. Mas e se não quisermos usar números inteiros como índices? Algumas estruturas de dados que podemos usar são numéricas, string ou outros tipos de índices.

Vamos aprender sobre a estrutura de dados do Dictionary . Dictionary é uma coleção de pares de valores-chave. Aqui está o que parece:

A chave é o índice apontando para o valor . Como acessamos o valor do Dictionary ? Você adivinhou – usando a chave . Vamos tentar:

Eu criei um Dictionary sobre mim. Meu nome, apelido e nacionalidade. Esses atributos são as chaves do Dictionary .

À medida que aprendemos a acessar a List usando o índice, também usamos índices ( chaves no contexto do Dictionary ) para acessar o valor armazenado no Dictionary .

No exemplo, eu imprimi uma frase sobre mim usando todos os valores armazenados no Dictionary . Muito simples, certo?

Outra coisa legal sobre o Dictionary é que podemos usar qualquer coisa como valor. No Dictionary Eu criei, eu quero adicionar a chave “idade” e minha idade inteira real nele:

Aqui temos um valor de chave (idade) (24) par usando a corda como a chave e número inteiro como o valor.

Como fizemos com as Lists , vamos aprender como adicionar elementos a um Dictionary . A chave apontando para um O valor é uma grande parte do que o Dictionary é. Isso também é verdade quando falamos sobre a adição de elementos:

Nós apenas precisamos atribuir um valor a um Dictionary chave . Nada complicado aqui, certo?

Iteração: Looping Through Data Structures

Conforme aprendemos no Python Basics , a iteração da List é muito simples. Nós Python Os desenvolvedores costumam usar For looping. Vamos fazer isso:

Então, para cada livro na estante, nós ( podemos fazer tudo com ele ) imprimi-lo. Muito simples e intuitivo. Isso é Python.

Para uma estrutura de dados hash, também podemos usar o loop for , mas aplicamos a key :

Este é um exemplo de como usá-lo. Para cada key no dictionary , print a key eo seu value correspondente.

Outra maneira de fazê-lo é usar o método iteritems .

Nós nomeamos os dois parâmetros como key e value , mas não é necessário. Podemos nomeá-los qualquer coisa. Vamos ver isso:

Podemos ver que usamos o atributo como parâmetro para a key do Dictionary , e ele funciona corretamente. Ótimo!

Classes e Objetos

Um pouco da teoria:

Os objetos são uma representação de objetos do mundo real, como carros, cães ou motos. Os objetos compartilham duas características principais: dados e comportamento .

Os carros têm dados, como número de rodas, número de portas e capacidade de assento Eles também exibem comportamento : eles podem acelerar, parar, mostrar o quanto de combustível e muitas outras coisas.

Identificamos dados como atributos e comportamentos como métodos em programação orientada a objetos. Novamente:

Dados ? Atributos e Comportamento ? Métodos

E uma classe é o plano a partir do qual os objetos individuais são criados. No mundo real, muitas vezes encontramos muitos objetos com o mesmo tipo. Como carros. Toda a mesma marca e modelo (e todos têm um motor, rodas, portas, etc.). Cada carro foi construído a partir do mesmo conjunto de planos e tem os mesmos componentes.

Modo de programação Python orientado a objetos: ON

Python, como uma linguagem de programação orientada a objetos, possui esses conceitos: classe e objeto .

Uma classe é um modelo, um modelo para seus objetos.

Então, novamente, uma classe é apenas um modelo, ou uma maneira de definir atributos e comportamento (como falamos na seção de teoria). Como exemplo, uma classe de veículo tem seus próprios atributos que definem quais objetos são veículos. O número de rodas, tipo de tanque, capacidade de assento e velocidade máxima são todos os atributos de um veículo.

Com isso em mente, vejamos a sintaxe do Python para as classes :

Definimos aulas com uma declaração de classe – e é isso. Fácil, não é?

Os objetos são instâncias de uma classe . Criamos uma instância nomeando a classe.

Aqui o car é um objeto (ou instância) do Vehicle da classe .

Lembre-se de que nossa classe de veículos tem quatro atributos : número de rodas, tipo de tanque, capacidade de assento e velocidade máxima. Definimos todos esses atributos ao criar um objeto de veículo. Então, aqui, definimos nossa classe para receber dados quando o inicia:

Usamos o método init . Nós o chamamos de método de construtor. Então, quando criamos o objeto do veículo, podemos definir esses atributos . Imagine que amamos o Tesla Model S, e queremos criar esse tipo de objeto . Possui quatro rodas, funciona com energia elétrica, tem espaço para cinco lugares e a velocidade máxima é de 250 km / hora (155 mph). Vamos criar este objeto:

Quatro rodas + elétrico “tipo tanque” + cinco lugares + 250 km / hora de velocidade máxima.

Todos os atributos são definidos. Mas como podemos acessar os valores desses atributos? Nós enviamos uma mensagem ao objeto perguntando sobre eles . Nós chamamos isso de método . É o comportamento do objeto . Vamos implementá-lo:

Esta é uma implementação de dois métodos: number_of_wheels e set_number_of_wheels . Chamamos isso de getter & setter . Como o primeiro obtém o valor do atributo e o segundo define um novo valor para o atributo.

Em Python, podemos fazer isso usando @property ( decorators ) para definir getters e setters . Vamos ver isso com o código:

E podemos usar esses métodos como atributos:

Isso é um pouco diferente dos métodos de definição. Os métodos funcionam como atributos. Por exemplo, quando configuramos o novo número de rodas, não aplicamos dois como um parâmetro, mas configuramos o valor 2 para o number_of_wheels . Esta é uma maneira de escrever pythonic getter e setter código.

Mas também podemos usar métodos para outras coisas, como o método ” make_noise “. Vamos ver isso:

Quando chamamos esse método, ele simplesmente retorna uma string VRRRRUUUUM .

Encapsulamento: ocultando informações

O encapsulamento é um mecanismo que restringe o acesso direto aos dados e métodos dos objetos. Mas, ao mesmo tempo, facilita a operação nesses dados (métodos dos objetos).

“O encapsulamento pode ser usado para ocultar membros de dados e os membros funcionam. Sob esta definição, o encapsulamento significa que a representação interna de um objeto é geralmente oculta de fora da definição do objeto. “- Wikipedia

Toda a representação interna de um objeto está escondida do lado de fora. Somente o objeto pode interagir com seus dados internos.

Primeiro, precisamos entender como public variáveis ??e métodos de instância public e non-public funcionam.

Variáveis ??de instância pública

Para uma classe Python, podemos inicializar uma public instance variable dentro do nosso método de construtor. Vamos ver isso:

Dentro do método construtor:

Aqui, aplicamos o valor first_name como um argumento para a public instance variable .

Dentro da classe:

Aqui, não precisamos aplicar o first_name como argumento e todos os objetos de instância terão um class attribute inicializado com TK .

Legal. Já aprendemos que podemos usar public instance variables e class attributes . Outra coisa interessante sobre a parte public é que podemos gerenciar o valor da variável. O que eu quero dizer com isso? Nosso object pode gerenciar seu valor de variável: Get e Set valores variáveis.

Mantendo a classe Person em mente, queremos definir outro valor para sua variável first_name :

Aqui vamos nós. Nós simplesmente estabelecemos outro valor ( kaio ) para a variável de instância first_name e atualizou o valor. Simples assim. Uma vez que é uma variável public , podemos fazer isso.

Variável de instância não pública

Não usamos o termo “privado” aqui, uma vez que nenhum atributo é realmente privado em Python (sem uma quantidade de trabalho geralmente desnecessária). – PEP 8

Como public instance variable , podemos definir a non-public instance variable tanto dentro do método do construtor como dentro da classe. A diferença de sintaxe é: para non-public instance variables , use um sublinhado ( _ ) antes do nome da variable .

As variáveis ??de instância “Privadas” que não podem ser acessadas, exceto do interior de um objeto, não existem em Python. No entanto, há uma convenção seguida pela maioria dos códigos Python: um nome prefixado com um sublinhado (por exemplo, _spam ) deve ser tratado como uma parte não pública da API (seja uma função, um método ou um membro de dados) “- Python Software Foundation

Aqui está um exemplo:

Você viu a variável de emailemail ? É assim que definimos uma non-public variable :

Podemos acessar e atualizá-lo. Non-public variables são apenas uma convenção e devem ser tratadas como uma parte não pública da API.

Então usamos um método que nos permite fazer isso dentro da nossa definição de classe. Vamos implementar dois métodos ( email e update_email ) para compreendê-lo:

Agora, podemos atualizar e acessar non-public variables usando esses métodos. Vamos ver:

  1. Iniciamos um novo objeto com first_name TK e email tk@mail.com
  2. Impresso no email acessando a non-public variable com um método
  3. Tentei definir um novo emailemail para fora da nossa classe
  4. Precisamos tratar non-public variable non-public parte non-public da API
  5. Atualizado a non-public variable com nosso método de instância
  6. Sucesso! Podemos atualizá-lo dentro da nossa classe com o método auxiliar

Método público

Com public methods , também podemos usá-los fora da nossa classe:

Vamos testá-lo:

Ótimo – podemos usá-lo sem nenhum problema.

Método não público

Mas, com non-public methods , não podemos fazê-lo. Vamos implementar a mesma classe Person , mas agora com um show_age non-public method usando um sublinhado ( _ ).

E agora, tentaremos chamar este non-public method com nosso objeto:

Podemos acessar e atualizá-lo. Non-public methods são apenas uma convenção e devem ser tratados como uma parte não pública da API.

Aqui está um exemplo de como podemos usá-lo:

Aqui temos um _get_age non-public method e um public method show_age . O show_age pode ser usado pelo nosso objeto (fora de nossa classe) e o _get_age usado apenas dentro da nossa definição de classe (no método show_age ). Mas novamente: como uma questão de convenção.

Sumário de encapsulamento

Com o encapsulamento, podemos garantir que a representação interna do objeto seja escondida do lado de fora.

Herança: comportamentos e características

Certos objetos têm algumas coisas em comum: seu comportamento e características.

Por exemplo, herdei algumas características e comportamentos de meu pai. Eu herdei seus olhos e cabelos como características, e sua impaciência e introversão como comportamentos.

Na programação orientada a objetos, as classes podem herdar características comuns (dados) e comportamento (métodos) de outra classe.

Vamos ver outro exemplo e implementá-lo em Python.

Imagine um carro. Número de rodas, capacidade de assentos e velocidade máxima são todos os atributos de um carro. Podemos dizer que um A classe ElectricCar herda esses mesmos atributos da classe regular de automóveis .

Nossa classe de carro implementada:

Uma vez iniciado, podemos usar todas as instance variables criadas. Agradável.

Em Python, aplicamos uma parent class child class como um parâmetro. Uma classe ElectricCar pode herdar da nossa classe Car .

Simples assim. Não precisamos implementar qualquer outro método, porque esta classe já possui (herdada da classe Car ). Vamos provar isso:

Bonita.

É isso aí!

Aprendemos muitas coisas sobre o básico do Python:

  • Como as variáveis ??Python funcionam
  • Como as instruções condicionais de Python funcionam
  • Como o loop de Python (while & for) funciona
  • Como usar Listas: Coleção | Array
  • Coleção de chave-valor do dicionário
  • Como podemos iterar através dessas estruturas de dados
  • Objetos e aulas
  • Atributos como dados de objetos
  • Métodos como comportamento de objetos
  • Usando Python getters e setters & decorador de propriedades
  • Encapsulamento: esconder informações
  • Herança: comportamentos e características

Parabéns! Você completou esse denso conteúdo sobre o Python.

A partir de mais histórias e postagens sobre a minha jornada aprendendo e masterizando programação, siga minha publicação The Renaissance Developer .

Divirta-se, continue aprendendo e continue com a codificação.

Meu Instagram , Twitter , Github e LinkedIn . ?