Começando a programar em Python – Parte 2

Começando a programar em Python – Parte 2

7 de julho de 2019 0 Por Ramos de Souza Janones
Powered by Rock Convert

Na primeira parte deste nosso série sobre Python, nós fizemos uma introdução sobre variáveis, constantes e types. Nós vamos continuar fazendo referencias à types, pointeiros, e coleção de types!

Em outras linguagens de programação você tem uma noção sobre tipos de valores, ou value types. Em Python, estes conceitos não existem. Em vez disso, apenas temos tipos de referência. Por mais que eu queira mergulhar, existe esse pré-requisito que é comum a todas as linguagens orientadas a objetos, mas é um dos conceitos mais difíceis de entender chamados de ponteiros.

Vamos às preliminares, no bom sentido…

A última vez falamos sobre memória e como ela é organizada em blocos, bytes e bits. Eu gostaria de expandir isso aqui e dar algumas representações visuais de como a memória funciona.

Vamos criar uma string que contenha o valor Hello. Nada de especial, já fizemos isso antes.

Eu lhe disse no artigo anterior que a memória contém o valor. Se pudéssemos olhar para essa memória, ficaria assim:

Leia também:  

Aposto que você está perguntando o que é o \0 no final da string! Isso é chamado de terminador nulo. A barra diz ao programa para se preparar para um comando e o zero não significa nada. É assim que os valores das strings são armazenados e deixam o programa saber quando a string é finalizada enquanto ainda permite que espaços sejam usados.

Os números são um pouco diferentes:

Os números são armazenados como números binários. O binário é fácil de entender, comece em 1 na extremidade direita do bloco de memória e siga seu caminho para a esquerda, multiplicando o valor atual por 2 todas as vezes. Se você está familiarizado com placas gráficas ou cartões de memória, é por isso que vemos o 8-bit (Atari, NES), o 16-bit (Sega Genesis, SNES), 32-bit (PlayStation), 64-bit (Nintendo 64) e assim por diante.

Em binário, se uma posição for 0, ela está desativada, é falsa. Se uma posição for 1, ela será ativada ou verdadeira. Com base nessa lógica, precisamos apenas contar as posições com um 1 nelas. Você consegue descobrir o número na imagem acima?

Agora, este é um grupo de 8 bits de memória, isto é, é um byte completo de memória. Anteriormente, eu disse que cada caractere em uma string era de 2 bytes, o que significa que usamos 16 bits para armazenar um caractere. 16-bits em binário nos dá o valor máximo de 128. No entanto, quando falamos de posições, sempre começamos com 0. Então, 16-bits dá-lhe uma gama completa de 0-127. Se você está se perguntando como podemos obter caracteres fora desse intervalo, eu indicarei a tabela ASCII, onde você poderá ver os valores por si mesmo. Você até verá os caracteres ocultos, como o terminador nulo / 0, conforme mostrado acima.

A memória armazena valores em três locais: memória estática, pilha e “heap”.

Curso completo de Games, inclusive Realidade Aumentada.Powered by Rock Convert

Memória estática e memória de pilha são acessadas rapidamente, no entanto, acessar coisas do “heap” é lento (no tempo do computador).

Embora possa não parecer lento para você, o que pode demorar um milissegundo ou menos para ser carregado a partir da pilha, pode levar 10 ms para ser carregado a partir do heap.

Na maioria das linguagens de programação, você poderia escolher onde uma variável é instanciada por seu tipo. No Python, o interpretador examina seu código e faz suposições sobre onde a variável deve ser armazenada na memória por seu escopo. É muito cedo para falar sobre o escopo, mas prometo que vamos falar sobre isso em um artigo futuro.

Sem mais delongas, vamos nos aprofundar na linguagem Python.

Types e Pointeiros

Tipos de referência usam ponteiros para armazenar valores na memória. Antes de aprofundarmos sobre como usar, precisamos antes falar sobre os ponteiros.

Se você observar um programa em C típico, verá ponteiros usados ​​em todos os lugares.


// same as var age = 21 except this is a pointer in C
char *name[]= "Ramos";

Esta miha caixa de código tá muito ruim, reprodução:

// same as var age = 21 except this is a pointer in C

char *name[]= “Ramos”;

Quando usamos char *name = “Ramos";fazemos um ponteiro usando *. Isso diz ao sistema, me dê um endereço onde eu possa armazenar esse valor na memória. O sistema então diz “OK, você pode usar o bloco 3 para o seu valor. ”Você então salva "Ramos"no bloco 3 (sem aspas, é claro).

Se você perguntasse pelo valor do nome usando printf(name); só veria o endereço, que pode ser algo como 0x03 ou algo semelhante. Esta é a representação hexadecimal desse bloco de memória. Se você quer o valor Ramos, então você precisa usarprintf(*name);(ambas as instruções de impressão estão em C).

Em C, se você quisesse alterar o valor de qualquer lugar que usasse &name, que diz para pegar o endereço desse valor e fazer algo com ele. À medida que o valor muda, você pode usá-lo imediatamente com o novo valor referenciando*name.

Por outro lado, o Python analisa suas variáveis ​​e faz tudo já com * para você. Isso torna o trabalho de todos os programadores mais fácil. Como ele lida com tudo isso para você, não é preciso se preocupar tanto com a criação de vazamentos de memória. No entanto, você ainda precisa se preocupar com algo conhecido como condições, que abordaremos mais adiante.

O motivo pelo qual falo destes tipos de referência é por causa dos tipos mais avançados que abordaremos na próxima parte desta série. Só quero que você conheça como os tipos de referência funcionam antes de começarmos.

Quando você armazena um valor como Ramosem um ponteiro em C, você coloca cada letra em uma parte separada da memória. Tudo o que você realmente sabe é onde R está; quando termina o nulo/0 informa ao computador quando parar de iterar por partes da memória e retornar o valor que tiver. Pense nisso como um combo de um botão no Street Fighter. Falarei mais sobre isso quando chegarmos aos tipos de Collections.

Collection Types

Collection types são types que contêm uma coleção de itens. Existem dois tipos principais: listas e dicionários. Algumas linguagens de programação se referem a listas como arrays ou matrizes. Se você precisar traduzir o código entre um exemplo em outra linguagem de programação e o Python, saiba que eles se referem à mesma teoria que é apresentada.

  1. Lists (ou Listas) (Vamos manter o vocabulário em inglês, que é fundamental escrevermos os códigos em inglês, e é importante que se acostume com o inglês técnico – e é mais fácil para este que escreve este tutorial, explicar) Lists contêm elementos ordenados que são endereçáveis ​​pelo seu índice. O índice é definido pelo número de itens do início da lista. Se definimos uma lista como:my_list = ["eggs", "milk", "butter", "cheese"] podemos recuperar cada um desses valores usando ‘my_list[0]’, o que nos daria o valor  de eggs sendo o 0 o início da lista. Usando essa lógica, se quiséssemos pegar o valor de “butter” na lista, usaríamos my_list[2]porque fica à 2 posições de “eggs”. Se quisermos mudar o valor armazenado em uma lista, poderíamos usar my_list[2] = "Sugar"isso mudaria de “butter” para “Sugar” em nossa lista. Em C isso faz um pouco mais de sentido. Quando armazenamos Ramosem uma string em C, na verdade criamos uma matriz de caracteres (daí o tipo char). Se disséssemos name[0], apenas retornaria R porque era o 0 das partes de memória desde o início da matriz. Se você for fora do array, terá problemas. Na maioria das vezes o computador vai te salvar dizendo “index out of range” ou algo semelhante a isso. Se você se deparar com este problema enquanto o seu programa está sendo executado, ele irá falhar. Sendo mais especifico para o Python, você pode usar slice da seguinte forma: my_list[1:3], que retornará o segundo e terceiro itens da lista. Você também pode usar intervalos abertos com os seguintes exemplos: my_list[:2]retorna tudo do início ao segundo item da lista,my_list[1:] inicia no segundo elemento e continua até o final. A maneira como isso pode ser entendido é: my_list[<start position>:<stop position — 1>] Você também pode usar números negativos para excluir valores no final. my_list[:-2]retorna tudo menos os dois últimos elementos da lista. As listas podem conter qualquer tipo de variável, então[True', 'three', 3], que é um booleano, uma string e um número, ainda é uma lista válida.
  2. Dictionaries (ou dicionário de dados) — Vou dar uma dica sobre por que isso é chamado como é. Os dicionários são semelhantes aos arrays, pois contêm valores de um tipo comum, mas são diferentes porque não são ordenados. Eles contêm um índice, mas o índice geralmente é um valor de sequência. Com isso em mente, você pode estar pensando em uma palavra no dicionário seguida de sua definição. É assim que funciona! Você pode definir um dicionário usando o seguinte: my_dictionary = {"Ramos": "Ramos da Informática", "Aprendendo Python", "Determinado a aprender Python", "Nasa": "Ground control to major Tom"} O: separa a chave do valor. Podemos obter o valor de qualquer um deles usando: my_dictionary["Ramos"] Você pode definir o valor em um dicionário usando a mesma sintaxe que uma lista usando apenas a chave para definir o valor. O Python não se preocupa em garantir que os valores sejam do mesmo tipo, por exemplo: my_dictionary["Ramos"] = "Ramos da Informática" é permitido. my_dictionary["Ramos"] = 2 também é permitido. Você pode declarar e instanciar dicionários usando my_dictionary = {}.

Dicionários e listas são usados ​​extensivamente em Python. Você precisa ter cuidado com as listas para permanecer dentro dos limites de seus elementos. Se você tentar acessar um valor que não existe em um dicionário, receberá um erro do tipo KeyValue .

Em resumo

Neste tutorial aprendemos um pouco sobre types, collection types, e um pouco mais sobre memória.

O que vem a seguir…

No próximo artigo, nós vamos falar sobre operators e None. Logo depois vamos deixar estas preliminares, que não estão sendo muito agradáveis e vamos à parte mais divertida: a programação e vamos ter muitos vídeos no meu Canal do Youtube.Onde vamos tratar, além do Python, de Javascript também.

VOCÊ ESTÁ NAS SEÇÕES: Programação » Python

React Native Do Zero Ao Profissional: crie apps para Android e IOSPowered by Rock Convert
Siga os bons!

Ramos de Souza Janones

Janones, é um empreendedor brasileiro apaixonado por empreendedorismo e tecnologia. Ao longo dos anos trabalhando com o desenvolvimento de softwares desktop desde a linguagem Clipper, passando pelo Delphi e atualmente com Java.

Optou pela formação de Publicidade e Marketing por sua segunda empresa de tecnologia ter participado do "boom" da internet nos anos 90 e na procura de melhorar seus conhecimentos em negócios.

Em razão da principal formação e profundos conhecimentos em programação e banco de dados, é capaz de realizar o desenvolvimento de aplicativos web, desktop e mobile com maior criatividade e inovação que profissionais de desenvolvimento com uma formação única e mais especifica, dedicada somente ao desenvolvimento de softwares.

Com toda sua experiência com empresas de software, sua formação e paixão por negócios escreveu o livro "Marketing para Empresas e Profissionais de Software", publicado pela editora carioca Ciência Moderna em 2012. Além de outros livros sobre programação.




Frontend Do Zero Ao Profissional