17.04.2013 Views

Aula passada Listas 1 Listas 2 Tuplos list comprehension list ...

Aula passada Listas 1 Listas 2 Tuplos list comprehension list ...

Aula passada Listas 1 Listas 2 Tuplos list comprehension list ...

SHOW MORE
SHOW LESS

Create successful ePaper yourself

Turn your PDF publications into a flip-book with our unique Google optimized e-Paper software.

<strong>Aula</strong> <strong>passada</strong><br />

<strong>Listas</strong> 2<br />

<strong>Listas</strong><br />

<strong>Tuplos</strong><br />

<strong>Aula</strong> <strong>passada</strong>. . .<br />

Sequências<br />

Funções puras e modificadores<br />

João Pedro PEDROSO Introdução à Programação - minor<br />

<strong>Aula</strong> <strong>passada</strong>. . .<br />

Sequências<br />

Funções puras e modificadores<br />

Referências a <strong>list</strong>as, aliases<br />

>>> a = [1,2,3]<br />

>>> b = a<br />

>>> b[1] = "IP"<br />

>>> a<br />

[1, ’IP’, 3]<br />

Cloning de <strong>list</strong>as<br />

>>> a = [1,2,3]<br />

>>> b = a[:]<br />

>>> b[1] = "IP"<br />

>>> a<br />

[1, 2, 3]<br />

<strong>list</strong> <strong>comprehension</strong><br />

<strong>Tuplos</strong><br />

<strong>Listas</strong> em compreensão<br />

Alguns idiomas úteis<br />

João Pedro PEDROSO Introdução à Programação - minor<br />

<strong>Aula</strong> <strong>passada</strong>. . .<br />

Sequências<br />

Funções puras e modificadores<br />

<strong>Tuplos</strong><br />

<strong>Listas</strong> em compreensão<br />

Alguns idiomas úteis<br />

Um idioma muito utilizado para produzir <strong>list</strong>as á o seguinte:<br />

initialize a result variable to be an empty <strong>list</strong><br />

loop<br />

create a new element<br />

append it to result<br />

return the result<br />

Pode ser substituído por uma <strong>list</strong>a em compreensão:<br />

>>> my<strong>list</strong> = [1,2,3,4,5]<br />

>>> your<strong>list</strong> = [item ** 2 for item in my<strong>list</strong>]<br />

>>> print(your<strong>list</strong>)<br />

[1, 4, 9, 16, 25]<br />

Exemplo do livro:<br />

def primes_upto(n):<br />

result = [num for num in range(2,n) if is_prime(num)]<br />

return result<br />

<strong>Aula</strong> <strong>passada</strong>. . .<br />

Sequências<br />

Funções puras e modificadores<br />

Funções puras e modificadores<br />

João Pedro PEDROSO Introdução à Programação - minor<br />

Funções puras não modificam as variáveis que lhes são <strong>passada</strong>s<br />

como argumentos.<br />

Funções puras também não têm efeitos laterais, tais como imprimir um<br />

valor ou fazer input de dados.<br />

Neste contexto, funções que não tenham estas caraterísticas (coma<br />

função definida de seguida) são classificadas como modificadoras:<br />

def doubleStuff(aList):<br />

for position in range(len(aList)):<br />

aList[position] = 2 * aList[position]<br />

things = [2, 5, 9]<br />

new_things = doubleStuff(things)<br />

print(things)<br />

Esta função altera o valor que lhe é passado!<br />

João Pedro PEDROSO Introdução à Programação - minor<br />

<strong>Listas</strong> 1<br />

<strong>Tuplos</strong><br />

<strong>Aula</strong> <strong>passada</strong>. . .<br />

Sequências<br />

Funções puras e modificadores<br />

<strong>Tuplos</strong><br />

<strong>Listas</strong> em compreensão<br />

Alguns idiomas úteis<br />

conjuntos ordenado de valores, cada um dos quais identificado por um<br />

índice;<br />

Operações com <strong>list</strong>as: semelhantes a operações com strings;<br />

<strong>list</strong>as são mutáveis<br />

atribuição a um elemento: e.g., a[2] = 7<br />

remoção de elementos de uma <strong>list</strong>a:<br />

>>> a = [1,2,3,4,5]<br />

>>> del a[1]<br />

>>> a<br />

[1, 3, 4, 5]<br />

>>> del a[1:3]<br />

>>> a<br />

[1, 5]<br />

inserção/substituição/remoção de elementos de <strong>list</strong>as:<br />

>>> a = [1,2,3]<br />

>>> a[1:1] = [’a’,’b,’]<br />

>>> a<br />

[1, ’a’, ’b,’, 2, 3]<br />

>>> a[2:4] = []<br />

>>> a<br />

[1, ’a’, 3]<br />

João Pedro PEDROSO Introdução à Programação - minor<br />

<strong>Aula</strong> <strong>passada</strong>. . .<br />

Sequências<br />

Funções puras e modificadores<br />

Sintaxe:<br />

a = (1,2,3,4,5)<br />

<strong>Tuplos</strong>: como <strong>list</strong>as, mas imutáveis<br />

Com <strong>list</strong>as: Com tuplos:<br />

>>> s = [1,2,3,4,5]<br />

>>> s[2] = 999<br />

>>> s<br />

[1, 2, 999, 4, 5]<br />

<strong>Tuplos</strong> com um elemento:<br />

>>> tup = (5,)<br />

>>> print(type(tup))<br />

<br />

<strong>Tuplos</strong> vazios:<br />

>>> z = ()<br />

>>> type(z)<br />

<br />

<strong>list</strong> <strong>comprehension</strong><br />

<strong>Tuplos</strong><br />

<strong>Listas</strong> em compreensão<br />

Alguns idiomas úteis<br />

>>> t = (1,2,3,4,5)<br />

>>> t[2] = 999<br />

Traceback (most recent call last):<br />

File "", line 1, in <br />

TypeError: ’tuple’ object does not support item assignment<br />

João Pedro PEDROSO Introdução à Programação - minor<br />

<strong>Aula</strong> <strong>passada</strong>. . .<br />

Sequências<br />

Funções puras e modificadores<br />

ints = [8,23,45,12,78]<br />

0 8<br />

for (idx,val) in enumerate(ints): 1 23<br />

print(idx,val)<br />

2 45<br />

3 12<br />

4 78<br />

<strong>Aula</strong> <strong>passada</strong>. . .<br />

Sequências<br />

Funções puras e modificadores<br />

Função pura equivalente<br />

def doubleStuff(a_<strong>list</strong>):<br />

new_<strong>list</strong> = []<br />

for value in a_<strong>list</strong>:<br />

new_elem = 2 * value<br />

new_<strong>list</strong>.append(new_elem)<br />

return new_<strong>list</strong><br />

things = [2, 5, 9]<br />

new_things = doubleStuff(things)<br />

print(things)<br />

Esta função:<br />

Cria um novo objecto new_<strong>list</strong><br />

Inicializa-o<br />

<strong>Tuplos</strong><br />

<strong>Listas</strong> em compreensão<br />

Alguns idiomas úteis<br />

João Pedro PEDROSO Introdução à Programação - minor<br />

Devolve uma referência para o novo objecto<br />

Não altera a <strong>list</strong>a things<br />

João Pedro PEDROSO Introdução à Programação - minor


<strong>Aula</strong> <strong>passada</strong>. . .<br />

Sequências<br />

Funções puras e modificadores<br />

Funções puras e modificadores<br />

Como escolher?<br />

Tudo o que pode ser feito com modificadores também pode ser feito<br />

com funções puras<br />

Algumas linguagens de programação só permitem funções puras<br />

Programas que têm apenas funções puras são normalmente de mais<br />

rápida implementação e menos sujeitos a erros<br />

Mas...<br />

modificadores por vezes são convenientes, e em alguns casos<br />

programas funcionais são menos eficientes<br />

Recomendação (estilo de programação funcional):<br />

1 Sempre que isso for razoável, escrever funções puras<br />

2 Quando há uma vantagem clara nisso, recorrer a modificadores<br />

<strong>Aula</strong> <strong>passada</strong>. . .<br />

Sequências<br />

Funções puras e modificadores<br />

Noções estudadas esta semana<br />

João Pedro PEDROSO Introdução à Programação - minor<br />

função modificadora função que altera os seus argumentos (ou produz outro<br />

efeito lateral); nota: só tipos mutáveis é que podem ser<br />

alterados<br />

objeto aquilo a que uma variável se pode referir<br />

padrão (pattern) sequência de instrução com aplicabilidade em<br />

situações diferentes; uma das principais atividades de um<br />

cientista da computação é a sua identificação<br />

função pura função que altera não os seus argumentos, nem produz<br />

nenhum efeito lateral<br />

efeitos laterais alteração do estado de um programa, feita pela chamada a<br />

uma função, se não consistir na leitura do seu valor de<br />

retorno; são produzidos por modificadores<br />

<strong>list</strong>a imbricada <strong>list</strong>a que é o elemento de outra <strong>list</strong>a<br />

João Pedro PEDROSO Introdução à Programação - minor<br />

<strong>Aula</strong> <strong>passada</strong>. . .<br />

Sequências<br />

Funções puras e modificadores<br />

Noções estudadas esta semana<br />

aliases múltiplas variáveis que se referem ao mesmo objeto<br />

clone copia de um objeto, com o mesmo conteúdo do original<br />

delimitador carater utilizado para indicar onde uma string deve ser<br />

dividida<br />

índice variável inteira que indica um elemento numa <strong>list</strong>a<br />

elemento um dos valores numa sequência; pode ser selecionado com<br />

o operador []<br />

<strong>list</strong>a coleção de objetos, cada um dos quais pode ser identificado<br />

por um índice; tipos “compatíveis” podem ser convertidos<br />

para <strong>list</strong>as com <strong>list</strong>(x) (tal como com int(x), float(x),<br />

etc.)<br />

percorrer uma <strong>list</strong>a: aceder sequencialmente a cada um dos seus<br />

elementos<br />

Próximas aulas<br />

mutável tipo de dados composto, a cujos elementos se pode atribuir<br />

novos valores<br />

Dicionários<br />

Ficheiros<br />

João Pedro PEDROSO Introdução à Programação - minor<br />

<strong>Aula</strong> <strong>passada</strong>. . .<br />

Sequências<br />

Funções puras e modificadores<br />

Outras estruturas de dados em Python.<br />

João Pedro PEDROSO Introdução à Programação - minor

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!