$whoami Marido Pai de um adolescente e 8 gatos Ok, 3 cães também... Apaixonado por programação (desde os 12) Cinéfilo Bacharel em Informática (Unioeste, 1999) Mestre em Ciência da Computação (UFSC, 2002) Professor na UTFPR-TD (desde 2009) Prof. Fabio Alexandre Spanhol, M.Sc. 2 é uma linguagem interpretada, interativa, funcional, orientada a objetos, dinamicamente tipada e com gerenciamento automático de memória Similar, em certos aspectos, a Perl, Ruby, Scheme, Smalltalk e Tcl Prof. Fabio Alexandre Spanhol, M.Sc. 3 Entre todas as linguagens que aprendi, Python é a que menos interfere entre mim e o problema. É a mais efetiva para traduzir pensamentos em ações. Eric Raymond Prof. Fabio Alexandre Spanhol, M.Sc. 4 Life is Better Without Braces. Bruce Eckel Prof. Fabio Alexandre Spanhol, M.Sc. 5 Python has been an important part of Google since the beginning, and remains so as the system grows and evolves. Today dozens of Google engineers use Python, and we're looking for more people with skills in this language. Peter Norvik, director of search quality at Prof. Fabio Alexandre Spanhol, M.Sc. Google, Inc 6 Python is everywhere at ILM. It's used to extend the capabilities of our applications, as well as providing the glue between them. Every CG image we create has involved Python somewhere in the process. Philip Peterson, Principal Engineer, Research & Development, Industrial Light & Magic Prof. Fabio Alexandre Spanhol, M.Sc. 7 Prof. Fabio Alexandre Spanhol, M.Sc. 8 Guido van Rossum é referido pela comunidade python, desde 1995, como Benevolent Dictator For Life (BDFL) De dezembro de 2005 a 2012 Guido trabalhou na Google, dedicando 50% do seu tempo com a linguagem Prof. Fabio Alexandre Spanhol, M.Sc. 7/12/2012 passou a trabalhar na Dropbox www.python.org/~guido neopythonic.blogspot.com/ 9 Não veio da cobra! "Over six years ago, in December 1989, I was looking for a "hobby" programming project that would keep me occupied during the week around Christmas. My office ... would be closed, but I had a home computer, and not much else on my hands. I decided to write an interpreter for the new scripting language I had been thinking about lately: a descendant of ABC that would appeal to Unix/C hackers. I chose Python as a working title for the project, being in a slightly irreverent mood (and a big fan of Monty Python´s Flying Circus)”. Prof. Fabio Alexandre Spanhol, M.Sc. 10 Prof. Fabio Alexandre Spanhol, M.Sc. 11 NADA! Python foi desenvolvido como um projeto open source, sem fins lucrativos e gerenciado pela PSF (Python Software Foundation) Prof. Fabio Alexandre Spanhol, M.Sc. 12 Para obter o interpretador Python acessar http://www.python.org/download/ Versões Python 2.7.5 foi liberada em 15 de maio de 2013 Python 3.3.2* foi liberada em 15 de maio de 2013 Prof. Fabio Alexandre Spanhol, M.Sc. 13 http://www.python.org/about/success/ Google NASA Yahoo InfoSeek MCI Worldcom IBM Higway Industrial Light and Magic AstraZeneca Honeywell ... Prof. Fabio Alexandre Spanhol, M.Sc. 14 Governo Federal Petrobras Serpro Embratel Globo.com StarOne Conectiva CPqD Async Haxent UTFPR ... Prof. Fabio Alexandre Spanhol, M.Sc. 15 Vários projetos da comunidade Software Livre Blender OpenOffice Zope/Plone MoinMoin Mailman BitTorrent Chandler Gimp Plone Django OpenERP inVesalius Prof. Fabio Alexandre Spanhol, M.Sc. 16 Canivete suíço Web e Internet Database GUIs Científico e processamento numérico Educação Programação de rede Construção e teste de software Desenvolvimento de jogos e renderização 3D Onde mais sua imaginação mandar! Prof. Fabio Alexandre Spanhol, M.Sc. 17 Prof. Fabio Alexandre Spanhol, M.Sc. 18 Prof. Fabio Alexandre Spanhol, M.Sc. 19 Unix: HP-UX, Solaris ... Linux (frequentemente pré-instalada) Mac OSX (sempre pré-instalada) Windows: 9x, ME, 2K, XP, Vista, Seven (ctypes, win32all) Apple iPhone Google Android Prof. Fabio Alexandre Spanhol, M.Sc. 20 SIM: Compilação Híbrida! Como ficou “famoso” com Java, programas Python são compilados, porém para uma linguagem intermediária, destinada a um interpretador Isola Python de muitas das excentricidades das máquinas reais na qual ele roda provê um nível de portabilidade Prof. Fabio Alexandre Spanhol, M.Sc. 21 De altíssimo nível e poderosa Elegante, com sintaxe simples e concisa Fácil de aprender, “cabe” no seu cérebro ! Multiparadigma Funcional, Procedural e Orientado a Objetos Prof. Fabio Alexandre Spanhol, M.Sc. Possui suporte nativo a estruturas de dados complexas 22 Prof. Fabio Alexandre Spanhol, M.Sc. 23 Prof. Fabio Alexandre Spanhol, M.Sc. 24 Prof. Fabio Alexandre Spanhol, M.Sc. 25 Prof. Fabio Alexandre Spanhol, M.Sc. 26 Código é muito mais lido que escrito! Readability importa! (muito) Python te ajuda a escrever legível! Prof. Fabio Alexandre Spanhol, M.Sc. código mais 27 Extensa biblioteca padrão Um módulo para o que você precisar sys, random, re, datetime, calendar, csv, os, webbrowser, string, urlib, tkinter, codecs, pickle, types, array, mutex, queue, zlib, gzip, md5, thread, socket, email, xml.dom, locale, etc. Prof. Fabio Alexandre Spanhol, M.Sc. 28 Prof. Fabio Alexandre Spanhol, M.Sc. 29 33 palavras reservadas Java tem 53 e C# 77 and except as finally assert for break from class global continue if def import del in elif is else lambda Prof. Fabio Alexandre Spanhol, M.Sc. nonlocal not or pass raise return try while with yeld False None True 30 Prazer em lhe conhecer! Cython onde existir um compilador C ISO/IEC 9899:1990 Jython máquina virtual Java PyPy Python implementado em Python Python for .NET [Brian Lloyd], IronPython (da M$) Python for Delphi LunaticPython interoperando com Lua Ruby/Python em Ruby importar módulos Python) Prof. Fabio Alexandre Spanhol, M.Sc. 31 Prof. Fabio Alexandre Spanhol, M.Sc. 32 Programas maiores codificados em arquivos (scripts) normalmente usando um IDE extensão py O script pode ser executado diretamente da linha de comando do SO python oi.py Ou carregado para o interpretador interativo >>> import oi Prof. Fabio Alexandre Spanhol, M.Sc. 33 Inúmeros Geany Vim Aptana Komodo NetBeans PyCharm PyDev (Eclipse) Wing IDE Pyshield Spyder MS-Visual Studio Etc. Prof. Fabio Alexandre Spanhol, M.Sc. 34 Ninja IDE (Ninja Is Not Just Another IDE) Multiplataforma Editor de código poderoso Gerenciamento de Projetos Plugins http://ninja-ide.org/ Prof. Fabio Alexandre Spanhol, M.Sc. 35 Prof. Fabio Alexandre Spanhol, M.Sc. 36 Prof. Fabio Alexandre Spanhol, M.Sc. 37 Python Enhancement Proposal São documentos padronizados da comunidade Python Uma PEP propõe um padrão, melhoria, funcionalidade, estrutura, explicações sobre funcionalidades, etc. Veja a PEP #0 http://www.python.org/dev/peps/pep-0000/ Prof. Fabio Alexandre Spanhol, M.Sc. 38 Python é case-sensitive Cada linha é delimitada por enter Tipagem forte e dinâmica Não há declaração de variáveis Alguns operadores Atribuição: = Aritméticos: +, -, *, /, **,//, % Relacionais: <, >, >=,<=, ==, !=, <>, is, in Lógicos: and, or, not Bitwise: |, ^, &, >>, <<, ~ Prof. Fabio Alexandre Spanhol, M.Sc. 39 Em Python, variáveis são referências a objetos não guardam os objetos em si não têm tipo, mas os objetos aos quais elas se referem têm tipo São criadas dinamicamente Uma variável não pode ser utilizada em uma expressão sem ter sido inicializada não existe “criação automática” de variáveis Prof. Fabio Alexandre Spanhol, M.Sc. 40 Variáveis não são “caixas” com valores Variáveis são “rótulos” colados em objetos São criadas pela atribuição Operador = Prof. Fabio Alexandre Spanhol, M.Sc. 41 Atribuição não gera uma cópia do objeto Uma referência (variável) pode ser liberada Usando del Não existindo mais referências a um objeto, ele é removido da memória (garbage collector) Prof. Fabio Alexandre Spanhol, M.Sc. 42 Um bloco inicia com : A estrutura dos blocos é definida pela indentação A PEP #8 - Style Guide for Python Code - sugere 4 espaços Seja consistente Não misturar tabulações com espaços!!! Prof. Fabio Alexandre Spanhol, M.Sc. 43 Prof. Fabio Alexandre Spanhol, M.Sc. 44 A partir do caractere #, o interpretador ignora o restante do código até o final da linha Isso não vale dentro de strings Para várias linhas use asplas triplas (docstring) Documentar funções, classes, módulos, etc. Prof. Fabio Alexandre Spanhol, M.Sc. 45 Inteiros x y z = 10 = 56859898958711346465165798798715654000000000000**2 = y + x 3233048109594863662031421586618163610229539807267781773950479 944647716000000000000000000000010L Ponto flutuante f = 85.99984 Booleanos True e False Strings Delimitadas por aspas ou apóstrofo s = “python” s2 = ‘language’ s3 = “%s %s” % (s,s2) Prof. Fabio Alexandre Spanhol, M.Sc. 46 Usando type Prof. Fabio Alexandre Spanhol, M.Sc. 47 Usando type Prof. Fabio Alexandre Spanhol, M.Sc. 48 Tuplas Imutáveis (‘Fabio’,36, False, 89.2,186) Listas mutáveis [‘Fabio’,36, False, 89.2,186] Dicionários Chaves com valores associados refeicoes = {"café" : “cereal com leite e mel", "almoço" : "macarrão carbonara“,"jantar" : "sopa de champignon"} refeicoes["almoço"] Conjuntos Não permite elementos duplicados set([1,2,3,4,5,6,8,9,8,1,2,7,1,2,5]) Retorna set([1, 2, 3, 4, 5, 6, 7, 8, 9]) Prof. Fabio Alexandre Spanhol, M.Sc. 49 Entrada com input Saída com print Prof. Fabio Alexandre Spanhol, M.Sc. 50 if if (expressao): bloco [elif (expressao): bloco] [else: bloco] Prof. Fabio Alexandre Spanhol, M.Sc. 51 exemplo Prof. Fabio Alexandre Spanhol, M.Sc. 52 For for variavel in sequencia: bloco [else: bloco] While while (expressao): bloco [else: bloco] Prof. Fabio Alexandre Spanhol, M.Sc. 53 Exemplo1 Exemplo2 Prof. Fabio Alexandre Spanhol, M.Sc. 54 Modularizam o código Comando def inicia a definição de uma função Comando return marca o fim da execução da função e define o resultado a ser devolvido Pode ser None Prof. Fabio Alexandre Spanhol, M.Sc. 55 Exemplo Prof. Fabio Alexandre Spanhol, M.Sc. 56 Prof. Fabio Alexandre Spanhol, M.Sc. 57 Ei, não vamos complicar! Prof. Fabio Alexandre Spanhol, M.Sc. 58 Estourar a pilha de execução é “fácil” E aí, tentou fat(1000)? Prof. Fabio Alexandre Spanhol, M.Sc. 59 Mudando o tamanho da pilha de ativação Prof. Fabio Alexandre Spanhol, M.Sc. 60 Prof. Fabio Alexandre Spanhol, M.Sc. 61 Prof. Fabio Alexandre Spanhol, M.Sc. 62 Inverter a ordem das cartas baralho.reverse() Tirar a carta do topo baralho.pop() Adicionar 4 coringas baralho.extend([‘Coringa’]*4) Colocar em ordem baralho.sort() Pelo número de letras: baralho.sort(key=len) Prof. Fabio Alexandre Spanhol, M.Sc. 63 TCL-TK é parte integrante, via tkinter Diversos outros bindings de frameworks wxWidgets QT GTK etc. Prof. Fabio Alexandre Spanhol, M.Sc. 64 Prof. Fabio Alexandre Spanhol, M.Sc. 65 Também tem! Você pode fazer programação funcional sem Lost in Stupid Parenthesis (LISP) Prof. Fabio Alexandre Spanhol, M.Sc. 66 Prof. Fabio Alexandre Spanhol, M.Sc. 67 Prof. Fabio Alexandre Spanhol, M.Sc. 68