Física Computacional 1. 2. 3. 4. 5. Revisão de Python: 1. 2. O que é, features. Tipos básicos e complexos. 1. 2. 3. Listas, Tuples, Dicionários. Vectores Ciclos. Funções. Introspecção. 14-12-2009 [email protected] Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 1 O Python é uma poderosa linguagem de programação interpretada. ◦ Outras linguagens semelhantes são o Perl, Ruby ou Java. Funcionalidades interessantes : ◦ A indentação obrigatória nos programas, ◦ Rápido “prototyping” (teste) de soluções. É fácil de utilizar para escrever programas rápidos, funcionando como caixa de testes (sandbox) para códigos mais complexos, mesmo em outras linguagens. ◦ “Batteries included”: o Python já inclui várias bibliotecas com soluções prontas a utilizar. ◦ Modularidade: o Python permite incorporar outras (shared) libraries (módulos) escritas em (outras) linguagens. ◦ É compatível com múltiplos sistemas operativos (Windows, MacOS, Unix, Linux, OS/2,…). Revisão – o que é o Python 14-12-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 2 Vários tipos de dados disponíveis: ◦ floats, inteiros de tamanho ilimitado, complexos, strings, listas e dicionários. ◦ constructores: float, int, complex, str, list, dict. ◦ oz dados são “dynamically typed” mas “strongly typed”. Suporta OOP através da implementação de classes e herança ◦ A privacidade de membros não é assegurada. Podemos agrupar o código em bibliotecas (“módulos” e “pacotes”). Utilização de exceptions standard e personalizadas. Gestão automática de memória. A distribuição standard já inclui um integrated development environment (IDE) chamado IDLE. Python - features 14-12-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 3 Podem utilizar o Python como “calculadora de bolso”: #!/usr/bin/python print "Hello, FC!" from math import sin,pi b = 2*pi sin(b) #complex numbers a = 3+2j a.real a.imag abs(a) “Hello, FC” -2.4492935982947064e-16 3.0 2.0 3.6055512754639896 Podem recorrer a funções e constantes definidas em bibliotecas através da keyword import. O tipo de uma variável é detectador durante a atribuição. O Python suporta nativamente números complexos. Podem ser escritos através da notação x +yj ou através do constructor do tipo complex(x,y). Python – operações básicas 14-12-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 4 O Python permite a declaração de strings através de três delimitadores: ◦ a = “uma string”, ◦ b = „ outra string,‟ ◦ c = “”” multi-line string com 3 linhas \n\n\n “”” Os caracteres especiais como “\n”, “\t”, etc., continuam a ser válidos. Podem ser algumas operações com strings: ◦ A soma é permitida e a multiplicação por inteiros são permitidas. Hello WorldHello World d lo World llo W He orld <type 'str'> a,b = "Hello”, „ „ a+=b c = a + 'World' a = c.strip() print a*2 #multiplication print a[-1] #negative indexing print a[3:] #slicing print a[2:-4]+' '+a[:2]+' '+a[-4:] print type(a) #type identification Python – revisão de Strings 14-12-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 5 a,b = False, 1 if a == True: print "It's true" elif b >0: print 'b is ' + str(b) + """ which is ">" than 0 """ else: print """A multiple line string with lots of useless info and using several ' ' ' ' and "" ". String only stops with 3 " """ A notar: ◦ ◦ ◦ ◦ ◦ Atribuição simultânea de valores a várias variáveis. Variáveis booleanas. Comparações com if, elif e else. Três tipos de delimitadores para strings („,”,”””). Conversão de um número inteiro para string, de modo que o Python permita a sua soma com outras strings. Pequeno exemplo 14-12-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 6 Existem vários tipos de vectores em Python: ◦ lists (mutáveis). ◦ tuples (imutáveis). ◦ dicionários (keys imutáveis, dados mutáveis). a = [4,5,3] print a print a[0] print a[1:] b = [] print b b.append(4) print b b.append(a) print b print type(b) [4, 5, 3] 4 [5, 3] [] [4] [4, [4, 5, 3]] <type 'list'> A indexação e slicing são suportadas. Listas podem conter outros vectores. Python – listas (revisão) 14-12-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 7 Tuples são vectores com conteúdos inalteráveis. A indexação e slicing são suportadas. Tuples podem conter outros vectores. a = (4,5,3) print a print a[0] print a[1:] b = () print b b.append(4) #erro print type(b) [4, 5, 3] 4 [5, 3] [] Traceback (most recent call last): File "<pyshell#5>", line 1, in <module> b.append(3) AttributeError: 'tuple' object has no attribute 'append' <type 'list'> Tuples – analogia com listas 14-12-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 8 dicionários são vectores com índices heterogéneos. A indexação (keys) é feita com imutáveis. dicts podem conter outros vectores. >>> a = {} >>> print type(a) <type 'dict'> >>> a[1] = "hello" >>> a['pi'] = 3.14 >>> print a {1: 'hello', 'pi': 3.1400000000000001} >>> a[0] Traceback (most recent call last): File "<pyshell#16>", line 1, in <module> a[0] KeyError: 0 >>> a[1] 'hello' Dicionários – analogia com listas 14-12-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 9 Para saber o tamanho de uma lista ou string: ◦ len(VARIAVEL). Para alterarmos um elemento de uma lista, usamos o seu índice (ex: a[2] = 3). ◦ Isto só funciona com listas e dicionários. Para criarmos uma lista de inteiros começando em 0 e terminando em len(VARIAVEL) – 1: ◦ range(len(VARIAVEL)). ◦ xrange() para grandes números. a = [4,5,3] print a print len(a) print range(len(a)) i = 0 while i < len(a): print a[i] i+=1 [4, 5, 3] 3 [0, 1, 2] 4 5 3 Semelhanças entre vectores e strings 14-12-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 10 O exemplo anterior explicita um ciclo “while” (análogo a C/C++). Em Python, existe uma nova forma de criar ciclos, através de iteráveis. ◦ Assim podemos iterar ao longo de uma lista de valores que não tenha apenas números ordenados. Equivalentes! a = [4,5,3] print a for i in a: print i [4, 5, 3] 4 5 3 a = [4,5,3] print a for i in range(len(a)): print a[i] Ciclos – While e Loop 14-12-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 11 As funções em Python podem ser definidas de uma forma análoga a C/C++. ◦ É necessário ter muito cuidado com a indentação do código. ◦ Os argumentos podem ser comutados (a explicar mais tarde). >>> def MyFunc(firstvariable = 3,secondvariable = 5): return firstvariable+secondvariable >>> print MyFunc() 8 >>> print MyFunc(secondvariable=6) 9 Os argumentos podem ser comutados, chamando apenas os que precisamos (desde que devidamente identificados!). Funções em Python 14-12-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 12 O próprio nome da função é uma referência à mesma. Útil para a realização de recursões ou ponteiros para funções. >>> MyFunc <function MyFunc at 0x027F14B0> >>> type(MyFunc) <type 'function'> >>> a = MyFunc >>> a(2,3) 5 >>> dir(a) ['__call__', '__class__', '__closure__', '__code__', (...) '__name__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc', 'func_globals', 'func_name'] Funções em Python – cont.(2) 14-12-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 13 Analogamente ao que era permitido em ROOT, o Python possui funcionalidades de introspecção. Qualquer objecto em Python pode ser observado introspectivamente. Apresentamos aqui algumas funções frequentemente utilizadas. help(): ◦ Informação geral sobre o objecto. Eventual descrição dos constructores e outros métodos dir(): ◦ Lista todos os membros e métodos desse objecto type(): ◦ retorna o tipo de objecto que usamos como argumento >>> a = "Ola" >>> help(a) no Python documentation found for 'Ola' >>> type(a) <type 'str'> >>> dir(a) ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', (…) 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill'] Introspecção em Python 14-12-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 14 Podem utilizar a introspecção de forma recursiva: Os comentários são feitos linha a linha com “#”. Linhas vazias são ignoradas pelo compilador de Python. Em modo interactivo, podem aceder ao resultado da última operação através da variável “_”. Analogamente ao “system(“Pause”) utilizado em Windows para que a janela não feche imediatamente, podem usar: ◦ help(var1.method1().retvar). ◦ import math ◦ dir(math) raw_input("\nPrima uma tecla para sair.") Python - dicas 14-12-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 15 Mais sobre funções. Classes, OOP. Excepções (?) Memoization (?) Podem trazer o laptop para a aula teórica, não sendo obrigatório. Os exemplos serão treinados na aula prática. Próximas aulas 14-12-2009 Física Computacional - MEFT 2009/10 – P. Bicudo & P. Martins 16