Blog em português onde relato a minha aprendizagem de Python. Sendo um blog, ele deve ser lido de baixo para cima e é escrito orientado a uma audiência com alguns conhecimentos de programação. Não tentando ser uma fonte exaustiva de conhecimento sobre Python, pode, no entanto, servir como crash course a esta linguagem.

Sunday, May 10, 2009

Algumas notas sobre a filosofia de desenho do Python:

Em python tudo é um objecto de 1ª classe. Isto significa que não existem qualquer tipo de restrições enter as operações que se podem fazer a cada tipo de objecto. As funções são objectos de 1ª classe e, como tal, podem ser manipuladas como qualquer outro tipo de objectos. Por exemplo, podem ser passadas para dentro de outras funções, ou serem usadas como valor de retorno de uma função.

Regra geral, não existem construções que só são visíveis em compile-time. Tudo está reificado no runtime..

Directa ou indirectamente tudo herda de object. inclusive números, classes, funções, etc. Não existem tipos especiais (como, por exemplo, os ints em Java). Tudo são objectos.



Por outro lado, a linguagem segue uma filosofia de que o programador deve escrever o mínimo possível. Assim, e como consequência dessa filosofia, existem muito poucas keywords especiais. As variáveis não têm que ser declaradas antes de usadas e não são tipificadas.
Pelo facto de se tentar ter um mínimo de keywords/tokens especiais, não existem keywords para marcar o início de fim de um bloco. É pela identação que o Python sabe quando começa um novo bloco e quando acaba. Exemplo:
if x <> 10 and x < 20):   
print "So vou aparecer se a condicar avaliar para True"

print "Eu ja nao pertenco ao if. logo apareco sempre"

Por outro lado, como as variáveis não são tipificadas nem declaradas, posso
fazer o seguinte:
x = 54
x = "ola"

A atribuição em python é feita com = e a comparação com ==
A ligação entre nomes (de variáveis ou parâmetros de funções) e o seu valor é
sempre feita por referência. i.e. x=3 significa que o x refere-se ao objecto representado por 3.


A linguagem é fortemente tipificada. Não é em geral possível transformar um objecto
de um dado tipo noutro objecto. Como por exemplo em C em que isto é possível
com casts.

A implementação normal de python corre em cima de uma máquina virtual. A compilação é
sempre feita just in time (normalmente quando um módulo é importado).
Python tem também um garbage collector automático.