Baixe o app para aproveitar ainda mais
Prévia do material em texto
UNIVERSIDADE FEDERAL DE ALAGOAS Instituto de Computação Ciência da Computação Linguagem Python Conceitos de Linguagem de Programação Caio Barbosa Vieira da Silva Luiz Matheus Carvalho Maceió - 2015 Identificadores ou nomes de variáveis: Os identificadores não tem limite de tamanho e são sensíveis a caixa(Case is significant). Palavras especiais e reservadas: As palavras especiais são usadas como palavras reservadas. Palavras reservadas em Python: False class finally is return None continue for lambda try True def from nonlocal while and del global not with as elif if or yield assert else import pass break except in raise Tipo de variáveis: Literais são notações para valores constantes de alguns tipos embutidos. Há três tipos de literais numéricos: inteiros, números de ponto flutuante e números imaginários. É curioso observar que não existem números complexos como literal, porém é possível forma através de um número de ponto flutuante e um imaginário. Literais inteiros são descritos com a definição léxica mostrada na Figura 1 e não existe limite de tamanho para inteiros literais. Obviamente a memória é um limite. Além disso, Booleanos são um subtipo de inteiros. pg. 2 Figura 1: Definição léxica de um inteiro. Figura 2: Definição léxica de um número ponto flutuante Na Figura 1 e Figura 2 são descritos a definição léxica do número de ponto flutuante e imaginário. Strings literais são descritos pela definição léxica da Figura 4. Bytes são descritos na Figura 5. Tipos nativos: • str / unicode - Uma cadeia de caracteres imutável. • list – Lista heterogênia mutável. • tuple – Tupla imutável. • set / fronzenset – Conjunto não ordenado, não contém elementos duplicados. • dict – Conjunto associativo. • int - Número de precisão fixa, é transparentemente convertido para long caso não caiba em um int. • float – Ponto flutuante • complex – Número complexo. • bool – Booleano. • none – Representação de null. • notImplemented – Tipo de retorno de comparações entre inteiros. Permite a definição dos tipos de dados próprios, através de classes. Instâncias são construídas invocando a classe, e as classes são instância da classe type. Métodos são definidos como funções anexadas à classe, e a sintaxe instancia.método(argumento) é um atalho para Classe.método(instância, argumento) e os métodos devem referenciar explicitamente a referência para o objeto incluindo o parâmetro self como o primeiro argumento do método. pg. 3 Figura 3: Definição léxica de um número imaginário Figura 4: Definição léxica de uma string literal. Figura 5: Definição léxica de uma Byte literal. Callable Types são tipos que são usados em chamadas de função e com atributos especiais, como: • “__name__” – nome da função. • “__qualname__” – caminho de um escopo de método global para uma classe. • “__doc__” – documentação da função. Vinculação: Vinculação de atributos a variáveis A vinculação é dinâmica. Vinculação de tipos A vinculação de tipos é dinâmica. Vinculações de armazenamento e tempo de vida Em Python todos os dados são objetos. Objetos Python são dinâmicos de heap explícitos. Python utiliza o garbage collection para liberar espaços do que não tem mais uso. Escopo Um bloco é um pedaço de texto de um programa Python que é executado como uma unidade. Um módulo, corpo de função e a definição de uma classe são blocos. Comandos digitados de forma interativa é um bloco. Um arquivo script e comando script também são blocos. A String passada para as funções eval e exec são blocos de código. Um bloco de código é executado em um execution frame. Um frame contem algumas informações administrativas e determina onde e como a execução contínua depois da execução do bloco de código terminar. Se a variável é definida em um bloco, o seu escopo inclui esse bloco. Se a definição de um nome ocorre em um bloco de função, o alcance se estende a todos os blocos contidos na definição da função. A menos que o bloco contido introduz uma vinculação diferente para o nome. Com isso podemos dizer que Python possui escopo estático. O escopo de nome definido no bloco de uma classe é limitado ao bloco da classe. Ele não existe para o bloco de código dos métodos. O conjunto de todos os escopos visíveis a um bloco de código é chamado de ambiente do bloco. Quanto o nome está vinculado a um bloco, então é uma variável local desse bloco a menos que seja declarado como nonlocal. Se o nome está vinculado ao nível de módulo, então é uma variável global, ou seja, Python possui escopo global. Constantes nomeadas Python não possui constantes. Ambiente de referenciamento O ambiente de referenciamento é composto pelas variáveis declaradas em seu escopo local mais a coleção de todas as variáveis de seus escopo ancestrais visíveis. pg. 4 Matrizes: Uma matriz pode ser criada em Python utilizando a estrutura de dado list. Cada linha ou coluna da matriz é do tipo list. O limite inferior padrão para matrizes é 0. Os índices das matrizes são números inteiros, ou seja, podemos usar números positivos e negativos. Quando utilizamos números positivos estamos acessando a matriz do início para fim e quando utilizamos números negativos estamos acessando do final para o início. A título de exemplo, suponha que criamos uma matriz i x i. Então para acessar a sua primeira linha poderia fazer matriz[0] ou matriz[-i] e para acessar a sua última linha poderia fazer matriz[-1] ou matriz[j – 1]. As matrizes multidimensionais são mapeadas para uma dimensão na ordem principal de linha. Vinculação de índices e categorias de matrizes Matriz dinâmica de heap pois ela podem ser aumentada pelo método append e é armazenada no heap. Inicialização de matrizes Uma matriz pode ser inicializada fornecendo seus valores quando ela é declarada ou depois de ser declarada utilizando o método append. Outra possibilidade é utilizar List Comprehensions que se assemelha muito com o que acontece em linguagens funcionais como Haskell por exemplo. Operação de matrizes Python permite atribuição de matrizes (na realidade é apenas mudança de referência) e permite concatenação de matrizes por meio do operador + e a possibilidade de verificar se um elemento faz parte da list com o uso do operador in que retorna um valor booleano. Comparação de matrizes pode ser feita usando o operador is ou ==. O operador is verifica se as duas referenciam o mesmo objeto enquanto == verifica se o valor dos elementos são iguais. Existe o tipo tupla que permite o uso de matrizes imutáveis. Matrizes retangulares e irregulares Python permite matrizes irregulares. Fatias Fatias podem ser feitas usando o limite inferior e superior separados por : dentro de colchetes que são precedidos pelo nome da matriz. Esse intervalo é fechado a esquerda e aberto a direita. Matrizes associativas Em Python as matrizes associativas são chamadas de dictionary. As chaves são strings e os valores são referências de objetos. pg. 5 Registros Não possui registros, é toda orientada a objeto. Uniões Não possui uniões. Ponteiros e Referências Python apenas trabalha com Referências. Verificação de Tipos É possível verificar tipos em Python utilizando o isinstance. Tipagem Forte Segundo sua documentação, Python é uma linguagem de tipagem forte. Porém, de acordo com a definição de Sebesta, não é uma linguagem de tipagem forte. Um indício disso é que ela aceita fazer coerções e possui tipagem dinâmica. pg. 6
Compartilhar