Prof. Natalia Castro Fernandes Mestrado em Telecomunicações – UFF 2º semestre/2012 Relembrando... Tipos primitivos Simples (int, long, float, complex, string) Compostos Listas Tuplas Dicionários Conjuntos Definidos pelo usuário Classes Tuplas Sequências imutáveis de elementos Funcionalidades semelhantes às listas Definição de uma tupla >>>T = (1,2,3) >>>T[0] 1 Tupla vazia () Parênteses são opcionais, se não provocar ambiguidade (10) inteiro Se tiver apenas um elemento, é (10,) Tupla preciso colocar uma vírgula após o 10, Tupla elemento. Função tuple Transforma um elemento em uma tupla >>>tuple (“abcd”) (‘a’, ‘b’, ‘c’, ‘d’) >>>tuple([1,2,3]) (1,2,3) Utilização das tuplas Estruturas que demandam valores imutáveis Chaves de dicionários Funções com números variáveis de argumentos Formatação de texto Formatação de texto Formatação Usado para criar strings misturando texto e valores de variáveis Formato String_template % valor String_template contém texto e indicadores de variáveis %s string %d decimal Mais detalhes sobre formatação em %f float http://docs.python.org/library/string.html etc. Exemplo “Decimal %d” % 10 Decimal 10 “Decimal %d float %f” % (10,10) Decimal 10 float 10.0000 “%s tirou nota %d” % (‘João’, 10) João tirou nota 10 Módulo string Auxilia a manipulação de strings Principais funções da classe string String.find(substring) Retorna o índice da primeira aparição de substring em string String.join(sequência_de_strings) Retorna uma sequência de strings em uma string, utilizando como separador o valor de String Ex: “/”.join((‘1’, ‘2’, ‘3’)) Módulo string String.replace(velho, novo) Substitui todas as instâncias de velho por novo em String String.split(separador) Retorna uma lista com as partes de String separadas de acordo com separador Ex: >>>a = “Frase de teste para entender o split” >>>a.split(‘ ‘) [“Frase”, “de”, “teste”, “para”, “entender”, “o”, “split”] Exercício Imagine que você está fazendo um teste que observe o que está acontecendo na rede através do comando ifconfig. O resultado do ifconfig é armazenado em uma string, mas você precisa apenas no número de pacotes que entraram e saíram da placa de rede. Faça uma programa que extraia esses dados do resultado de ifconfig e os guarde em uma lista [recebido, enviado]. Obs.: A saída do ifconfig é da seguinte forma: natalia@Natalia-UFF:~$ ifconfig eth0 Link encap:Ethernet HWaddr 14:da:e9:98:4f:1a inet addr:200.20.11.31 Bcast:200.20.11.255 Mask:255.255.255.0 inet6 addr: fe80::16da:e9ff:fe98:4f1a/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:322333 errors:0 dropped:0 overruns:0 frame:0 TX packets:12809 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:37321973 (37.3 MB) TX bytes:1750252 (1.7 MB) Interrupt:41 Base address:0xa000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:1034 errors:0 dropped:0 overruns:0 frame:0 TX packets:1034 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:151975 (151.9 KB) TX bytes:151975 (151.9 KB) Dicionários Estruturas semelhantes às listas, mas que: Não tem ordem O índice (ou chave) pode ser de qualquer tipo imutável Formato { chave1:conteúdo1, ... chaveN:conteúdoN} O conteúdo associado a uma chave pode ser alterado A chave não pode ser alterada Ex: dicionario[chave]=“Novo valor” Novos valores podem ser acrescentados pela adição de uma chave ainda não definida Listas x Dicionários Ex: Criando uma agenda com listas Criar duas listas, nome e telefone, que armazenam o nome e o telefone no mesmo índice Para acrescentar “Joao” com telefone “5019”: nome+= “Joao” telefone+=“5019” Para encontrar o telefone de “Joao”: Tel = telefone[nome.index[“Joao”]] i=0 i=1 i=2 Nome tel Joao Maria Jose 5019 2030 1818 Adiciona elemento no fim da lista Função de listas que diz o índice dado o valor buscado Listas x Dicionários Ex: Criando uma agenda com dicionários Criar um dicionário cuja chave é o nome e o conteúdo é o telefone Para acrescentar “Joao” com telefone “5019”: telefone[“Joao”] = “5019” Para encontrar o telefone de “Joao”: Tel = telefone[“Joao”] i=0 i=1 i=2 Nome tel Joao Maria Jose 5019 2030 1818 Exemplos Função dict Usada para criar dicionários Argumentos Lista de tuplas (chave, conteúdo) Ou sequência de itens no formato chave=valor Nesse caso, as chaves TEM que ser strings sem aspas Formatação de strings Para usar dicionários para formatar strings, usar a chave do dicionário entre parênteses, após o % >>> dic = { "Joao":"a", "Maria":"b" } >>> s = "%(Joao)s e %(Maria)s“ >>> s % dic 'a e b' Uso do for Comando for pode ser usado para iterar sobre todas as chaves de um dicionário Classe dict Principais métodos A=Dicionario.copy() Gera um novo dicionário com os mesmos pares chave:conteúdo Atenção: O conteúdo não é copiado, mas sim referenciado >>> x = {"Joao":[1,2], "Maria":[3,4]} >>> y = x.copy() >>> y ["Pedro"]=[5,6] >>> x ["Joao"] += [3] >>> print x {'Joao': [1, 2, 3], 'Maria': [3, 4]} >>> print y {'Pedro': [5, 6], 'Joao': [1, 2, 3], 'Maria': [3, 4]} Classe dict Dicionario.clear() Remove todos os elementos do dicionário Atenção: Método clear >>> x = { "Joao":"a", "Maria":"b" } >>> y = x >>> x.clear() >>> print x,y {} {} Atribuição de dicionário vazio >>> x = { "Joao":"a", "Maria":"b" } >>> y = x >>> x = {} >>> print x,y {} {'Joao': 'a', 'Maria': 'b'} Classe dict fromkeys(lista,valor) Retorna um novo dicionário com as chaves em listas associadas à valor Valor vale, por default, None Exemplos >>> {}.fromkeys([2,3]) {2: None, 3: None} >>> dict.fromkeys(["Joao","Maria"],0) {'Joao': 0, 'Maria': 0} >>>dict.fromkeys([(["Joao","Maria"]) {'Joao': None, 'Maria': None} Classe dict get(chave,valor) Obtém o conteúdo de chave Não causa erro caso chave não exista: retorna valor Se valor não for especificado, chaves inexistentes retornam None Classe dict Dicionario.has_key(chave) Retorna True se a chave existe no Dicionário e False, caso não exista Dicionario.items() Retorna uma lista com todos os pares chave/conteúdo do dicionário Dicionario.keys() Retorna uma lista com todas as chaves do dicionário Dicionario.values() Retorna uma lista com todos os valores do dicionário Classe dict Dicionario.pop(chave) Retorna o valor de chave e remove o par chave/valor do dicionário Dicionario.popitem() Retorna e remove um par chave/valor aleatório do dicionário Classe dict Dicionario.update(Dicionario2) Atualiza Dicionário com as chaves de Dicionario2 Atenção: Apresenta as mesmas questões da cópia de conteúdo que o update Classe dict Funções embutidas len(dicionario) Retorna o tamanho do dicionário key in dicionario Retorna True se a key pertence ao dicionário key not in dicionario Retorna True se a key não pertence ao dicionário Exercício Imagine que você está fazendo um teste que observe o que está acontecendo na rede através do comando ifconfig. O resultado do ifconfig é armazenado em uma string, mas você precisa apenas no número de pacotes que entraram e saíram da placa de rede. Faça uma programa que extraia esses dados do resultado de ifconfig e os guarde em uma lista [recebido, enviado]. Essa lista deve ser inserida em um dicionario cuja chave é o nome da interface. Obs.: A saída do ifconfig é da seguinte forma: natalia@Natalia-UFF:~$ ifconfig eth0 Link encap:Ethernet HWaddr 14:da:e9:98:4f:1a inet addr:200.20.11.31 Bcast:200.20.11.255 Mask:255.255.255.0 inet6 addr: fe80::16da:e9ff:fe98:4f1a/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:322333 errors:0 dropped:0 overruns:0 frame:0 TX packets:12809 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:37321973 (37.3 MB) TX bytes:1750252 (1.7 MB) Interrupt:41 Base address:0xa000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:1034 errors:0 dropped:0 overruns:0 frame:0 TX packets:1034 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:151975 (151.9 KB) TX bytes:151975 (151.9 KB)