• Share
  • Email
  • Embed
  • Like
  • Save
  • Private Content
Introdução à Linguagem de programação Python
 

Introdução à Linguagem de programação Python

on

  • 518 views

 

Statistics

Views

Total Views
518
Views on SlideShare
472
Embed Views
46

Actions

Likes
1
Downloads
5
Comments
0

1 Embed 46

http://dojotuba.wordpress.com 46

Accessibility

Categories

Upload Details

Uploaded via as Apple Keynote

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n
  • \n

Introdução à Linguagem de programação Python Introdução à Linguagem de programação Python Presentation Transcript

  • Introdução à linguagemde programação Python Diego Manenti Martins dmmartins@gmail.com 1
  • O que é Python• Intuitiva• Múltiplos paradígmas (estruturado, OO, funcional)• Interpretado (bytecode)• Tipagem dinâmica• Multiplataforma• Baterias Inclusas• Criada por Guido van Rossum 2
  • O Interpretadormufasa:~ diego$ pythonPython 2.6.1 (r261:67515, Aug 2 2010, 20:10:18)[GCC 4.2.1 (Apple Inc. build 5646)] on darwinType "help", "copyright", "credits" or "license" formore information.>>> print Hello world!Hello world!>>> 3
  • Hello world#!/usr/bin/env python# -*- coding: utf-8 -*-print Hello world! 4
  • Variáveis e Tipos• Tipagem dinâmica>>> a = 123>>> type(a)<type int>>>> a = DojoTuba>>> type(a)<type str>• Tipos nativos • float, inteiro, números complexos, string, tupla, lista, dicionario, set, etc 5
  • Variáveis e tipos>>> texto1 = um texto>>> texto2 = "outro texto">>> inteiro = 123>>> real = 1.23>>> real2 = 1.23e6 # 1.23 * 10^6>>> lista = [1, 2, teste, real, inteiro]>>> print lista = , listalista = [1, 2, teste, 1.23, 123]>>> tupla = (1, 2, teste, real, inteiro)>>> tupla(1, 2, teste, 1.23, 123) 6
  • Variáveis e tipos>>> lista[1, 2, teste, 1.23, 123]>>> lista[0]1>>> lista[4]123>>> lista[-1]123>>> lista[-2]1.23 7
  • Variáveis e tipos>>> lista[1, 2, teste, 1.23, 123]>>> lista[1:3][2, teste]>>> lista[1:][2, teste, 1.23, 123]>>> lista[:4][1, 2, teste, 1.23]>>> lista[-4:-2][2, teste] 8
  • Variáveis e tipos>>> dicionario = {chave: valor,chave2: 123, 123: lista, real: real}>>> dicionario{chave: valor, 123: [1, 2, teste,1.23, 123], chave2: 123, 1.23: real}>>> dicionario[chave]valor>>> dicionario[123][1, 2, teste, 1.23, 123] 9
  • Variáveis e tipos>>> a = 123>>> b = 1.23>>> print a = %d % aa = 123>>> print b = %f % bb = 1.230000>>> print a = %d, b = %f % (a, b)a = 123, b = 1.230000>>> valores = {c1: 123, c2: 1.23, c3: umtexto}>>> print a = %(c1)d, b = %(c2)f, c = %(c3)s %valoresa = 123, b = 1.230000, c = um texto 10
  • Condicionais>>> if a == 1 and b == 2:... print a = 1 e b = 2... elif a == 2 or not b == 2:... print a = 2 ou b != 2... elif a in [1, 2, 3]:... print a = 1 ou a = 2 ou a = 3... else:... print nao deu!>>> c = 1 if a == 2 else 2 11
  • Laços>>> frutas = [banana, maca, uva]>>>>>> for fruta in frutas:... print fruta...bananamacauva>>> # nao faca isso>>> for i in range(len(frutas)):... print frutas[i]...bananamacauva 12
  • Laços>>> i = 0>>> while i < 10:... print i... i += 1...0123456789 13
  • Laços?>>> # Múltiplos de 3 de 0 a 100... # usando list compression... m = [x for x in range(100) if x % 3 == 0]>>> m[0, 3, 6, 9, 12, 15, 18, 21, 24, 27, 30, 33,36, 39, 42, 45, 48, 51, 54, 57, 60, 63, 66,69, 72, 75, 78, 81, 84, 87, 90, 93, 96, 99] 14
  • Funções>>> def fatorial(n):... Funcao recursiva que retorna n! ... if n > 1:... return n * fatorial(n - 1)... else:... return 1...>>> help(fatorial)Help on function fatorial in module __main__:fatorial(n) Funcao recursiva que retorna n!(END) 15
  • Funções>>> fatorial(255)3350850684932979117652665123754814942022584063591740702576779884286208799035732771005626138126763314259280802118502282445926550135522251856727692533193070412811083330325659322041700029792166250734253390513754466045711240338462701034020262992581378423147276636643647155396305352541105541439434840109915068285430675068591638581980604162940383356586739198268782104924614076605793562865241982176207428620969776803149467431386807972438247689158656000000000000000000000000000000000000000000000000000000000000000L 16
  • Funções>>> # Funções com argumentos com valores padrão... def potencia(a, b=2):... Retorna a elevado na potencia b ... return a ** b...>>> potencia(3) # 3 ^ 2 (argumento padrao)9>>> potencia(3, 3) # 3 ^ 327>>> # Passagem de argumentos especificos... def f(a, b=2, c=3, d=4):... return a + b + c + d...>>> f(2, d=9)16 17
  • Funções>>> # Função com número variável de argumentos... def f(*args):... for arg in args:... print arg...>>> f(1, 2, 3)123 18
  • Funções>>> # Função com número variável de argumentosnomeados... def f(**kwargs):... for kw in kwargs:... print %s=%s % (kw, kwargs[kw])...>>> f(a=1, b=2, c=teste)a=1c=testeb=2 19
  • Classes>>> class Pessoa(object):... Classe pessoa. ... # Construtor... def __init__(self, nome=, idade=0):... self.nome = nome... self.idade = idade...>>> p = Pessoa()>>> p.nome = Joao Pessoa>>> p.idade = 150>>> p.nomeJoao Pessoa>>> p.idade150 20
  • Classes>>> dojo = Pessoa(DojoTuba, 5)>>> joao = Pessoa(nome=Joao, idade=56)>>> dojo.nomeDojoTuba>>> dojo.idade5>>> joao.idade56>>> joao.idade = 57>>> joao.idade57 21
  • Classes>>> class Pessoa(object):... # Funcao privada... def __get_idade(self):... return self.__idade... # Funcao privada... def __set_idade(self, idade):... if idade < 0:... raise ValueError(Idade negativa, tem certeza?)... elif not type(idade) == int:... raise TypeError(A idade precisa ser um inteiro!)... else:... self.__idade = idade...... idade = property(__get_idade, __set_idade) 22
  • Classes... # Construtor... def __init__(self, nome=, idade=0):... self.nome = nome... try:... self.__set_idade(idade) # Atributo privado... except TypeError:... self.__set_idade(0)... except ValueError:... self.__set_idade(0)...>>> joao.idade = testeTraceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 21, in __set_idadeTypeError: A idade precisa ser um inteiro!>>> joao.idade = 58>>> joao.idade58 23
  • Classes>>> class Animal(object):... def falar(self):... print Nao falo!...... def andar(self):... print Estou andando....>>> class Cachorro(Animal):... def falar(self):... print Au!... 24
  • Classes>>> a = Animal()>>> a.falar()Nao falo!>>> a.andar()Estou andando.>>> c = Cachorro()>>> c.andar()Estou andando.>>> c.falar()Au! 25
  • Classes>>> class Homem(object):... def andar(self):... print Estou andando...>>> class Morcego(object):... def voar(self):... print Estou voando...>>> class Batman(Homem, Morcego):... pass...>>> b = Batman()>>> b.andar()Estou andando>>> b.voar()Estou voando 26
  • Módulosmufasa:~ diego$ cat > hello.py#!/usr/bin/env python#-*- coding: utf-8 -*-def hello(nome): return Hello %s! % nomemufasa:~ diego$ pythonPython 2.6.1 (r261:67515, Aug 2 2010, 20:10:18)[GCC 4.2.1 (Apple Inc. build 5646)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> import hello>>> hello.hello(World!)Hello World!! 27
  • Testando#!/usr/bin/env python#-*- coding: utf-8 -*-import helloimport unittestclass HelloTestCase(unittest.TestCase): def test_hello_diego(self): self.assertEqual(Hello diego!, hello.hello(diego)) def test_hello_world(self): self.assertEqual(Hello world!, hello.hello(world)) def test_hello_erro(self): self.assertEqual(Hello world!, hello.hello(World))if __name__ == __main__: unittest.main() 28
  • Testandomufasa:~ diego$ python hellotest.py.F.======================================================================FAIL: test_hello_erro (__main__.HelloTest)----------------------------------------------------------------------Traceback (most recent call last): File "hellotest.py", line 15, in test_hello_erro self.assertEqual(Hello world!, hello.hello(World))AssertionError: Hello world! != Hello World!----------------------------------------------------------------------Ran 3 tests in 0.000sFAILED (failures=1)mufasa:~ diego$ 29
  • Testando>>> import unittest>>> dir(unittest.TestCase)[__call__, __class__, __delattr__, __dict__, __doc__, __eq__, __format__,__getattribute__, __hash__, __init__, __module__, __ne__, __new__, __reduce__,__reduce_ex__, __repr__, __setattr__, __sizeof__, __str__, __subclasshook__,__weakref__, _exc_info, assertAlmostEqual, assertAlmostEquals, assertEqual,assertEquals, assertFalse, assertNotAlmostEqual, assertNotAlmostEquals,assertNotEqual, assertNotEquals, assertRaises, assertTrue, assert_, countTestCases,debug, defaultTestResult, fail, failIf, failIfAlmostEqual, failIfEqual, failUnless,failUnlessAlmostEqual, failUnlessEqual, failUnlessRaises, failureException, id, run,setUp, shortDescription, tearDown] 30
  • import this• Bonito é melhor que feio.• Explícito é melhor que implícito.• Simples é melhor que complexo.• Complexo é melhor que complicado.• Plano é melhor que aninhado.• Esparso é melhor que denso.• Legibilidade conta. 31
  • import this• Casos especiais não são especiais o bastante para se quebrar as regras.• Embora a simplicidade supere o purismo. Erros nunca deveriam passar silenciosamente. A menos que explicitamente silenciados.• Ao encarar a ambiguidade, recuse a tentação de adivinhar.• Deve haver uma – e preferencialmente apenas uma – maneira óbvia de se fazer isto.• Embora aquela maneira possa não ser óbvia à primeira vista se você não for holandês. 32
  • import this• Agora é melhor que nunca.• Embora nunca, seja muitas vezes melhor que pra já.• Se a implementação é difícil de explicar, é uma má idéia.• Se a implementação é fácil de explicar, pode ser uma boa idéia.• Namespaces são uma idéia estupenda – vamos fazer mais deles! 33