Capa
Seções
NOTÍCIAS

DOWNLOAD

ANÁLISES

COMPRAS

BOLETIM

WIRED NEWS

IDG NOW!

PC WORLD

AJUDA

COLUNISTAS


 digite + enter


30/03/2000
APRENDA A PROGRAMAR - CAPÍTULO 5
Luciano Ramalho

Funções como objetos

Acabamos de fazer uma afirmação importante, que vale a pena repetir: Python permite criar funções que são tratadas da mesma forma que outros objetos da linguagem, como números e listas. Para entender as implicações disso, é bom reforçar o nosso entendimento de como Python lida com os objetos que criamos. Para tanto, vamos deixar as funções um pouco de lado e voltar a brincar com listas:

>>> l = [10,20,30,40]

Acabamos de criar uma lista "l" com quatro elementos. Essa é a forma sucinta de dizer o que ocorreu. Uma descrição bem melhor é a seguinte: criamos uma lista com quatro elementos e associamos a variável "l" a esta lista. A letra "l" é apenas uma etiqueta que identifica a lista; é importante notar que a lista existe mesmo antes de receber uma etiqueta.

Comprove:

>>> m = l
>>> m
[10, 20, 30, 40]
>>>

Agora associamos m a l, ou melhor, à lista associada a l. Nosso objeto-lista agora tem duas etiquetas. Podemos usar qualquer uma delas para se referir a ele, tanto que, ao digitarmos m, o interpretador mostra a mesma lista. Podemos também acessar e modificar um item específico da lista:

>>> m[2]
30
>>> m[2] = 55
>>> m
[10, 20, 55, 40]
>>>

Agora digite l e veja o resultado:

>>> l
[10, 20, 55, 40]
>>>

O que aconteceu com o l? Absolutamente nada! Ele continua sendo uma mera etiqueta colada em nosso objeto-lista. Mudamos a lista através da etiqueta m, mas tanto m quanto l referem-se à mesma lista, como você acabou de comprovar.

O mesmo ocorre com funções. Ao interpretar o código def dobro(x): return x * 2, Python cria um objeto-função e o associa à etiqueta dobro. Nada impede que você associe outras etiquetas ao mesmo objeto, assim:

>>> f = dobro
>>> f
<function dobro at 82fa30>

Note que o nome f agora está associado ao mesmo objeto-função que antes chamamos de dobro.

O novo nome também pode ser usado para invocar a função:

>>> f(19)
38
>>> y = f(17) + 2
>>> y
36
>>>

Ao tratar funções como objetos, Python deixa para trás linguagens mais tradicionais como C++ e Java, e se junta a uma classe de linguagens utilizadas em trabalhos avançados de Ciência da Computação: linguagens de programação funcional. A mais famosa delas, Lisp, tem sido ferramenta fundamental na pesquisa de Inteligência Artificial há várias décadas. Um dialeto simplificado de Lisp, chamado Scheme, é usado nos cursos introdutórios de computação do MIT (Massachussetts Institute of Technology), um dos mais importantes centros de pesquisa em informática do planeta. Como você vê, estudando Python estamos em ótima companhia.

Vejamos na prática uma vantagem de tratarmos funções como objetos. Python possui uma função poderosa chamada map. Vamos usá-la agora:

>>> map(dobro, m)
[20, 40, 110, 80]
>>>

Invocamos a função map com dois argumentos. O primeiro é a nossa função dobro, e o segundo é a lista m, [10, 20, 55, 40]. A função map aplica o objeto-função a cada item do segundo argumento. O resultado é a criação de um novo objeto-lista, sem modificar o original.

Veja este outro exemplo:

>>> map(str, m)
['10', '20', '55', '40']
>>>

Neste caso, usamos a função embutida (ou pré-definida) str para converter cada um dos itens numéricos em uma string.

» Argumentos default »

Copyright © 1999 MAGNET
Introdução

Dividir para conquistar

Programação estruturada

Funções como objetos

Argumentos default

Usando módulos

Copyright© 1996 - 2003 Terra Networks S.A. Todos os direitos reservados. All rights reserved.