Erros comuns ao iniciar com Python

Eu já andei escrevendo algumas coisas sobre python aqui no blog, já faz um tempinho, tudo bem, mas ainda são uma boa fonte de consulta para quem não sabe nada a respeito e quer começar a aprender. Depois que parei de escrever sobre python no blog parei também de estudá-lo, infelizmente. Há alguns dias encontrei meu livro Learning Python e resolvi ler mais uma vez pra refrescar a memória, já que aqui no trabalho tem alguns fanáticos por Ruby (não que eu não goste de Ruby, eu gosto também) que detestam python.

Logo nos primeiros quinze capítulos do livro encontrei e relembrei da famosa instrução pass do python, não sei como pude me esquecer de uma instrução tão importante. Basicamente, para quem não conhece, o pass no python está para as instruções assim como o None está para as atribuições, ou seja, ela simplesmente não faz nada, é uma função null/None/nil, como preferir e existe apenas para fins de utilização onde a sintaxe obrigue a existir uma instrução, como num while infinito, por exemplo.

Voltando aos pontos comuns de erros:

  • Dois pontos
    Em instruções compostas (if, while, for, etc) não use mais os parênteses (brackets), em python você deve usar dois pontos – :
  • Endentação e espaços em branco
    Siga um modelo de tabulação consistente e único no seu script. Se você começou usando dois espaços, ou tabulação de 4 espaços ou seja o que for, mantenha-a. O interpretador, geralmente, não saberá o que fazer se você misturar vários de tipos de tabulação e espaçamento.
  • Comece sempre na coluna 1
    Certifique-se sempre de começar a primeira linha do seu código na primeira coluna disponível, principalmente se estiver usando o prompt interativo. É muito comum que um espaço ali tire o seu sono.
  • Atribuições com tipos mutáveis e imutáveis
    Estude e tenha certeza de que realmente aprendeu o comportamento dos tipos de dados em python – listas, dicionários, strings e números. Não pense que se você sabe a linguagem XPTO que os concentois serão os mesmos, principalmente, não pense que isso será uma perda de tempo. É muito comum, por exemplo, fazer uma atribuição como: lista = lista.append(alguma_coisa). Com esta atribuição a única operação será atribuir None a lista e com isso perder completamente a referência para a sua lista de verdade.

Esses são os erros que sempre me incomodam e são os que eu sempre acabo fazendo, certamente que existem outros detalhes pontuais que muita gente deve passar ou ter passado. De qualquer forma, em tempos de desenvolvedores poliglotas, estes tipos de detalhes aparecerão e se tornarão cada vez mais importantes.

Encasoft 2.0

O pessoal do Linux-ES (Grupo de usuários Linux do Espírito Santo) está organizando o Segundo Encontro Capixaba de Software Livre (Encasoft). Nos dias 9 e 10 de novembro, na UVV de Vila Velha o evento terá install fest, palestras, mini cursos, debates e a presença das figurinhas mais conhecidas do cenário de Software Livre do estado.

O Encontro Capixaba de Software Livre (Encasoft) busca debater, apresentar, ensinar e incentivar o uso de softwares livres (Firefox, Linux, OpenOffice, entre outros), sugerindo-os como soluções alternativas aos softwares proprietários. Um Software Livre é um programa de computador que tem o seu código fonte disponível e pode ser usado, estudado, modificado e distribuído por todos.

Saiba mais >>

Quem estiver interessado, inscreva-se, é gratuito.

Começando com Python #3/undefined

Continuando a nossa série de posts sobre como aprender Python, vamos agora começar a falar de OO com Python. Para quem não viu os outros posts, pode ler o primeiro post aqui e o segundo aqui.

Não, eu não esqueci de continuar postando sobre python, apenas demorei um pouco na seqüência.

Objetos são a unidade fundamental de qualquer sistema orientado a objetos. Orientação a objetos é um termo que descreve uma série de técnicas e soluções para problemas computacionais. No nosso caso específico, vamos falar apenas de programação Orientada a Objetos, que é um paradigma de programação no qual um programa é estruturado em objetos, e que enfatiza abstração, encapsulamento, polimorfismo e herança. Em Python, tudo é um objeto (tipos, valores, classes, funções, métodos e, é claro, instâncias).

Em Python, a estrutura essencial para definir novos objetos é a classe. As classes são definidas em código-fonte, onde recebem um nome identificador e encapsulam um conjunto de atributos (dados) e métodos (operações). Vejamos a estrutura simples de uma classe em Python:

[code]class MinhaClasse:
    atributo1 = valor;
    atributo2 = valor;
    def metodo1(self):
        #faz alguma coisa
    def metodo2(self, atributo1):
        #faz alguma coisa[/code]

Vejamos uma classe funcional agora:

[code]class HelloWorld:
    'Minha Primeira Classe em Python'
    i = 123
    def funcao(self):
        return 'Hello World!!!'[/code]

As classes suportam dois tipos distintos de operações, são elas: instanciação e referência a atributos.

A referência a atributos possui uma sintaxe padrão para os objetos de classses em Python: obj.atributo. Sendo obj o seu objeto classe e atributo algum atributo válido, seja ele um atributo (variável) do seu objeto classe ou um objeto função (operação). Usando a classe acima podemos referenciar HelloWorld.i e HelloWorld.funcao, estas referências serão válidas e retornarão um inteiro (123) e um objeto função, respectivamente.

A instanciação do objeto classe é como nas demais linguagens orientadas a objetos, nós vamos basicamente iniciar um objeto de um determinado tipo (o tipo é o objeto classse) e atribuir a algum atributo. A instanciação (calling) de uma classe, por default, cria um objeto vazio. Por exemplo, para instanciarmos nossa classe de exemplo:

[code]x = HelloWorld()[/code]

Porém, muitas classes podem precisar criar um novo objeto em um estado inicial pré-determinado. Para estes casos, existe um método especial que pode ser definido pela classe, é o método __init__(), conforme próximo exemplo. O método __init__() é o construtor da classe e poderá ter ou não atributos, isso vai depender das necessidades de cada classe.

[code]class HelloWorld:
    'Minha Primeira Classe em Python'
    i = 123
    def __init__(self):
        self.i = 123456
    def funcao(self):
        return 'Hello World!!!'[/code]

Agora, após esta alteração em nossa classe, caso ocorra uma referência ao atributo i sem que haja uma instanciação da classe, o valor retornado será 123, mas caso a classe tenha sido instanciada, o valor retornado será 123456.

[code]print HelloWorld.i
123
x= HelloWorld()
print x.i
123456[/code]

– E aquela String perdida ali no começo da classe?“, você já se perguntou isso? Aquela String é chamada de docstring e pode ser acessada através do atributo __doc__, que no nosso caso irá retornar a String “Minha Primeira Classe em Python”. As docstring podem ser inseridas no início de funções, classes e métodos, é uma convenção criada para documentação. Esta documentação poderá ser consultada depois usando o pydoc com o comando help. Abaixo acesso direto ao atributo __doc__ da classe.

[code]print HelloWorld.__doc__
Minha Primeira Classe em Python[/code]

Consulta ao help da classe usando o pydoc.

[code]help(HelloWorld)
Help on class HelloWorld in module __main__:class HelloWorld
 |  Minha Primeira Classe em Python
 |
 |  Methods defined here:
 |
 |  __init__(self)
 |
 |  funcao(self)
 |
 |  ----------------------------------------------------------------------
 |  Data and other attributes defined here:
 |
 |  i = 123[/code]

Nós poderíamos ter definido mais informações de documentação nesta classe, nos métodos __init__() e funcao por exemplo. Se fosse o caso, basta adicionar os comentários entre aspas () na primeira linha de cada método.

Herança, herança múltipla, exceções e definições de escopo de atributos e métodos serão abordados no próximo post, já estou achando esse aqui muito longo, esta continuação já está em draft e sairá mais rápido! :D

Começando com Python #2/undefined

Vamos começar essa segunda parte aprendendo a usar o PyDev, plugin do Eclipse para programar em Python. Existem várias outras alternativas de ambiente de desenvolvimento, para quem não gosta do Eclipse ou não quer usa-lo com Python, pode escolher entre algumas das alternativas que conheço: IDE Eric, Anjuta, BOA Constructor, DrPython e quem gosta de IntelliJ IDEA pode usar o Pythonid como plugin.

Depois de um HelloWorld, uma das coisas mais difíceis é conseguir pensar em algo interessante para continuar os estudos e como ter um ambiente organizado e produtivo. Então veremos o PyDev e depois alguns outros exemplos mais interessantes.

Instalando PyDev

  1. Acesse: http://pydev.sourceforge.net/
    1. Instale pelo update do Eclipse: http://pydev.sourceforge.net/updates/
    2. Ou baixe o zip e faça a instalação manual: http://www.sourceforge.net/projects/pydev/
  2. Pronto! Simples e rápido.

PyDev Features

  • Suporte a Python 2.4, 2.5 e Jython;
  • Code completation e highlighting;
  • Wizards de projetos, módulos, etc;
  • Organize Imports e Autoformat Code;
  • Refactoring;
  • Code Assistant (CTRL+1);
  • Code Folding;
  • Eclipse Tasks integration;
  • Debugger completinho;
  • PyDev Perspective;
  • E muitas outras;

Continue lendo “Começando com Python #2/undefined”

Começando com Python #1/undefined

Pronto, nada melhor do que um feriadão acompanhado daquela viagem pra casa da mamãe hein; descanso, paz e sossego (e sem internet) é o que eu precisava pra repor as baterias e aliviar a maldita gastrite. E num dos vários devaneios diários resolvi que esta seria a semana do Python no blog, vou escrever aqui como eu conheci e aprendi Python.

E tudo começou em 2004, foi quando eu realmente me interessei por Python, até então eu não tinha contato com muitas linguagens de script além de JavaScript, PHP e Shell. Durante o FISL5.0 quando assisti a palestra Matando o Java e mostrando o Python, por Osvaldo Santana Neto e Ruda Moura e que diga-se de passagem foi muito engraçado, neste ano ocorria o primeiro Javali e todo o pessoal do Java resolveu invadir a palestra do Osvaldo e Ruda. Então juntei o incentivo que tive no FISL na palestra mais as cutucadas que sempre ouvia/lia do CV sobre Java e Python, e como ele mesmo dizia: “Para programar em Python é preciso ter culhões” e eu resolvi então testar os meus (sem duplo sentido por favor), e comecei a gostar de Python.

Continue lendo “Começando com Python #1/undefined”