Slide 1 Por que Python ? - O Python é uma linguagem de programação dinâmica de altíssimo nível e orientada a objetos que pode ser utilizada no desenvolvimento de qualquer tipo de aplicação, científica ou não. O Python oferece suporte à integração com outras linguagens e ferramentas e é distribuído com uma vasta biblioteca padrão. Possui uma sintaxe simples e clara, podendo ser aprendida em poucos dias. O uso do Python é frequentemente associado com grandes ganhos de produtividade e ainda, com a produção de programas de alta qualidade e de fácil manutenção. Slide 2 A linguagem de programação Python começou a ser desenvolvida no final dos anos 80, na Holanda, por Guido van Rossum. Guido foi o principal autor da linguagem e continua até hoje desempenhando um papel central no direcionamento da evolução. Slide 3 Dentre as várias características da linguagem que a tornam interessante para computação científica, destacam-se: Multiplataforma: O Python pode ser instalado em qualquer plataforma computacional: desde PDAs até supercomputadores com processamento paralelo, passando por todas as plataformas de computação pessoal. Portabilidade: Aplicativos desenvolvidos em Python podem ser facilmente distribuídos para várias plataformas diferentes daquela em que foi desenvolvido, mesmo que estas não possuam o Python instalado. Software livre: O Python é software livre, não impondo qualquer limitação à distribuição gratuita ou venda de programas. Slide 4 Extensibilidade: O Python pode ser extendido através de módulos,escritos em Python ou rotinas escritas em outras linguagens, tais como C ou Fortran. Orientação a objeto: Tudo em Python é um objeto: funções, variáveis de todos os tipos e até módulos (programas escritos em Python) são objetos. Tipagem automática: Python é uma linguagem dinamicamente tipada. Não é necessário tipar as variáveis para usá-las. O tipo de uma variável (string, inteiro, float, etc.) é determinado durante a execução do código. Slide 5 Código legível: O Python, por utilizar uma sintaxe simplificada e forçar a divisão de blocos de código por meio de indentação, torna-se bastante legível, mesmo para pessoas que não estejam familiarizadas com o programa. Flexibilidade: O Python já conta com módulos para diversas aplicações, científicas ou não, incluindo módulos para interação com os protocolos mais comuns da Internet (FTP, HTTP, XMLRPC, etc.). A maior parte destes módulos já faz parte da distribuição básica do Python. Operação com arquivos: A manipulação de arquivos, tais como a leitura e escrita de dados em arquivos texto e binário, é muito simplificada no Python, facilitando a tarefa de muitos pesquisadores ao acessar dados em diversos formatos. Slide 6 Uso interativo: evita “codifica-compila-roda”: O Python pode ser utilizado interativamente ou invocado para a execução de scripts completos. O uso interativo permite “experimentar” comandos antes de incluí-los em programas mais complexos, ou usar o Python simplesmente como uma calculadora. Quem usa Estas e outras vantagens fizeram que grandes empresas e universidades começassem a usar Python com sucesso, como a Philips, Industrial Light and Magic (empresa de George Lucas), que usou Python para controlar efeitos especiais de Star Wars, a NASA, a Aliança Espacial Universal (USA), a Nokia que usa Python em seus celulares, a Disney, os sites Google e Yahoo, entre outros. Slide 7 The Zen of Python , por Tim Peters Parte da cultura da linguagem gira ao redor de The Zen of Python, um poema que faz parte do documento "PEP 20 (The Zen of Python)" Beautiful is better than ugly. Explicit is better than implicit. Simple is better than complex. Complex is better than complicated. Readability counts. Special cases aren't special enough to break the rules. Errors should never pass silently. Now is better than never. ... Slide 8 Fundamentos da linguagem O interpretador de Python. O console interativo do Python possui um sistema de ajuda integrado que pode ser usado para acessar a documentação de qualquer elemento da linguagem. O comando help() inicia a ajuda interativa. Tipos de Objetos Os principais tipos de objetos em Python são inteiros, floats (números reais, que o computador representa da melhor maneira possível por meio de variações na posição do separador decimal), strings (texto), listas, tuplas e dicionários. Pode-se transformar o tipo original de um objeto para inteiro, float ou string por meio das funções int, float e str, respectivamente. Delimitadores de bloco O Python detecta os limites automaticamente pela endentação da linha - o espaço à esquerda em seu código. Todas as instruções endentadas com a mesma distância à direita pertencem ao mesmo bolco de código. Em outras palavras, as instruções dentro de um bolco são endentadas verticalmente. Slide 9 Estruturas de dados Listas As listas formam o tipo de dados mais utilizado e versátil do Python. Listas são definidas como uma sequência de valores separados por vírgulas e delimitada por colchetes: lista=[1,2,3]. Uma lista é uma sequência ordenada de elementos, de forma que podemos selecionar elementos de uma lista por meio de sua posição. Todas as contagens em Python começam em 0. Uma lista também pode possuir elementos de tipos diferentes. Listas são mutáveis , crescem até o limite da memória. Acesso sequencial, em fatias ou direto por índice. Possuem diversos métodos: adicionar, remover, ordenar, procurar, contar. Slide 10 Slide 11 Strings Strings são os objetos que Python oferece para trabalhos com texto (conjuntos de caracteres). Substituem char e vetor de char. As strings em Python são seqüências imutáveis. Os endereçamentos começam a ser contados do zero. Crescem até o limite da memória. Acesso sequencial, em fatias ou direto por índice Implementadas com arrays. Principais métodos: split, count, index, join, lower, upper, replace, etc. Slide 12 Slide 13 Atribuição manipula referências Por um processo chamado “binding”, atribui-se um objeto a um nome e este nome incorpora o tipo do objeto. Assim, para atribuirmos o valor 2, que é um inteiro, ao nome “valor1”, só precisamos fazer valor1=2, e “valor1” será automaticamente tipado por Python como inteiro. Para saber qual o tipo de determinado objeto, usamos a função type(x), que retorna o tipo do objeto x. x = y não faz uma cópia de y. x = y faz x referenciar ao objeto que y referencia. Para obter um novo objeto, ao invés de uma referência para um objeto existente deve-se usar o módulo c opy. Slide 14 Estruturas de controle Estruturas de controle de Python incluem: estrutura de seleção ( if, else, elif ); estrutura de repetição (f or, while ), que itera por um container, capturando cada elemento em uma variável local dada; construção de classes (c lass ); construção de subrotinas (d ef ); construção de escopo (w ith ), como por exemplo para adquirir um recurso. if A instrução if do Python é típica da maioria das linguagens procedurais. Ela ssume a forma de um teste if seguido de uma ou mais testes elif opcionais (significando else if ), e termina com um bloco e lse opcional. A forma geral de uma instrução i f é a seguinte: if <teste>: <instruçõoes1> elif <teste2>: #teste if #Bloco associado <instruções2> else: <instruções3> #instruções elif opcionaiis #instrução opcional Exemplo: Slide 15 while A instrução while consiste em uma linha de cabeçalho com uma expressão de teste, um miolo com uma ou mais instruções indentadas e uma parte else opcional, que é executada se o controle sai do loop sem passar por uma instrução brake . O Python continua avaliando o teste do início e executando as instruções aninhadas na parte while , até que o teste retorne um valor falso: while <teste> : <instruções1> else: <instruções2> Exemplo: #faz um loop em teste #miolo do loop #else opcional #executadas se não sai do loop com break Slide 16 for O loop for é um iterador de sequência genérico no Python: ele pode percorrer os itens de qualquer objeto sequência ordenada. O loop for funciona em strings , tuplas, listas e em novos objetos que criaremos posteriormente com classes. O loop f or do Python começa como uma linha de cabeçalho que especifica um destino (ou destinos) de atribuição, junto com um objeto que você queira percorrer. O loop for também aceita um bloco else que é executado se o loop termina se ele encontrar uma instrução break : for <destino> in <objeto> #Atribui itens do objeto ao destino <instruções> if <teste>: break #Sai do loop, pular clausula else if <teste>: continue #Vai para o início do loop agora else: <instruções> #Se não atingimos uma instrução break Slide 17 Exemplos: Slide 18 Loops contadores Range A função range é independente dos loops for . Embora seja mais frequentemente usada para gerar índices em loop for , você pode usá-las sempre que precisar de uma lista de inteiros. Slide 19 FUNÇÕES A instrução def cria um objeto função e atribui um nome a ela. O corpo das funções geralmente contém a instrução return que pode aparecer em qualquer lugar no miolo de uma função. A instrução return é opcional; se não estiver presente, uma função termina quando o fluxo de controle chega no final do seu miolo. def <nome> (arg1, arg2, … , argN): <instruções> return <valor> Exemplo: Slide 20 Em Python, o significado real de uma expressão como x * y depende completamente dos tipos de objetos que x e y são. O Python deixa por conta dos objetos fazer algo razoável para essa sintaxe. Esta flexibilidade, denominada polimorfismo , é algo intencional em Python. Se os objetos passados para uma função possuem os métodos e operadores esperados (como para X * Y), então eles são totalmente compatíveis com a lógica da função. Mesmo na função times , isto significa que quaisquer dois objetos que suportem um operador * funcionarão independente do que possam ser e de quando possam escritos. Isto revela-se uma diferença filosófica fundamental entre o Python e as linguagens tipadas estaticamente como C++ e Java. Slide 21 Lidando com erros: Exceções Suponhamos que você escreva um programa que realiza divisões em algum ponto, e dependendo dos dados fornecidos ao programa, o denominador torna-se zero. Como a divisão por zero não é possível, o seu programa para, retornando uma mensagem “ZeroDivisionError: division by zero”. Caso você queira continuar com a execução do programa apesar do erro, poderíamos solucionar o problema conforme o exposto no exemplo: A construção try:...except : nos permite vericar a ocorrência de erros em partes de nossos programas e responder adequadamente a ele. o Python reconhece um grande número de tipos de exceções, chamadas “built-in exceptions”. Slide 22 Pacotes Úteis para Computação Cientíca ( http://www.scipy.org/ ) SciPy é um ambiente baseado em Python de software em código aberto para matemática e engenharia. Estas são algumas de seus principais pacotes: NumPy NumPy é o pacote fundamental para computação científica com Python. Integrando o Python com rotinas numéricas escritas em uma linguagem compilada, para obter velocidade, a extensão numPy transforma o Python em uma ferramenta de programação numérica sofisticada, porém fácil de usar, que frequentemente pode substituir código já existente em linguagens compiladas tradicionais como FORTRAN ou C++. Ele contém entre outras funções: ● Um poderoso objeto array N­dimensional capaz de armazenar dados de diferentes tipos em cada posição; ● Sofisticadas funções de broadcasting que otimizam a manipulação de arrays compostos por tipos distintos de dados; ● Otimização para álgebra linear, linear algebra, transformada de Fourier e números randômicos. Slide 23 Matplotlib Matplotlib é uma biblioteca de diagramas e gráficos 2D que produz figuras com qualidade editorial em diversos formatos e ambientes interativos entre plataformas. matprolib pode ser utilizado em scripts Python, MATLAB e Mathematica e aplicações para servidores web. SciPy library A biblioteca SciPy é um dos pacotes centrais que compoem a pilha SciPy. Ela fornece diversas rotinas amigáveis e eficazes como rotinas para integração numérica e otimização. Slide 24 Aplicações: - Modelagem matemática Teoria de grafos Interação com Bancos de Dados Simulações estocásticas Programação de sistemas GUIs Scripts de Internet Jogos, imagens, IA, XML e muito mais Slide 24 Referencias 1. The Making of Python (em inglês ) Artima Developer. Visitado em 2007-03-22. 2. LUTZ, Mark. Aprendendo com python. 2ªed. Porto Alegre: Bookman, 2007. https://cld.pt/dl/download/e1946c4f-499c-4961-b63a-179c2fb3526e/Livros%20Linux/Programa%C3%A7%C3%A3o/a prendendo%20python.pdf 3. COELHO, Flávio C. Computação Científica com Python. 1ªed. Petrópolis: Edição do autor, 2007. http://www.complex.if.uff.br/_media/python_flavio.pdf 4. http://www.scipy.org/ , https://www.python.org/ 5. Slides de Rafael Sachetto Oliveira: http://www.ufjf.br/deptocomputacao/files/2010/08/apresentacao.pdf