Buscar

CLP trabalho1

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

Continue navegando