diff --git a/python.html b/python.html index e215725..3777372 100644 --- a/python.html +++ b/python.html @@ -66,6 +66,42 @@
  • Dinamicamente tipada.
  • + +
    +

    O Zen de Python

    + + +
    + +
    + +
    + +
    + +
    @@ -81,6 +117,14 @@ Type "help", "copyright", "credits" or "license" for more information. >>>

    + +
    +

    Executando scripts Python:

    + +

    
    +python meuscript.py
    +                        

    +
    @@ -97,7 +141,8 @@ Type "help", "copyright", "credits" or "license" for more information.

    Uma variável do tipo "imutável" não pode ser alterada depois de - criada. Tentar modificar a variável vai criar uma nova instância.

    + criada. Tentar modificar o conteúdo da variável vai criar uma nova + instância.

    Uma variável do tipo "mutável" é o contrário: tentar alterar vai alterar o objeto, não criar um novo.

    @@ -105,21 +150,30 @@ Type "help", "copyright", "credits" or "license" for more information.

    A importância disto será visto mais pra frente, mas tenha isso em mente.

    + +
    +

    ... ainda...

    + +

    Existem tipos que são, na verdade, objetos e tem toda uma gama + de funções para alterar/manipular/editar o conteúdo de uma variável.

    + +

    Outros são tipos simples que não são objetos.

    +
    -

    bool: Tipo booleano.

    +

    bool: Tipo booleano. Tipo simples.

    
    -a = True
    -b = False
    +>>> a = True
    +>>> b = False
                             

    -

    int: Um inteiro.

    +

    int: Um inteiro. Simples.

    
    -a = 1
    +>>> a = 1
                             

    
    @@ -129,56 +183,56 @@ a = 1
                         
    -

    float: Um número com ponto flutuante.

    +

    float: Um número com ponto flutuante. Simples.

    
    -a = 1.1
    -b = 1.0
    +>>> a = 1.1
    +>>> b = 1.0
                             

    -

    str: Strings. É um objeto imutável.

    +

    str: Strings. Objeto imutável.

    
    -a = 'Python'
    -b = "Python"
    -c = """Python
    -    Rocks!"""
    +>>> a = 'Python'
    +>>> b = "Python"
    +>>> c = """Python
    +>>> Rocks!"""
                             

    -

    unicode: Strings em Unicode. É um objeto imutável.

    +

    unicode: Strings em Unicode. Objeto imutável.

    
    -a = u'Python'
    +>>> a = u'Python'
                             

    -

    list: Listas. É um objeto mutável.

    +

    list: Listas. Objeto mutável.

    
    -a = [1, 2, 'Python', ['Outra lista']]
    +>>> a = [1, 2, 'Python', ['Outra lista']]
                             

    -

    dict: Um dicionário/objeto/mapa. É um objeto mutável.

    +

    dict: Um dicionário/objeto/mapa. Objeto mutável.

    
    -a = {'Python': 'Rocks',
    -     1: 1.0}
    +>>> a = {'Python': 'Rocks',
    +>>> 1: 1.0}
                             

    -

    tuple: Um conjunto de elementos. É um objeto imutável.

    +

    tuple: Um conjunto de elementos. Objeto imutável.

    
    -a = ('Python', 1)
    -b = (2,)
    +>>> a = ('Python', 1)
    +>>> b = (2,)
                             

    @@ -218,9 +272,9 @@ b = (2,)

    if [condição]

    
    -if a = 1:
    -    b = 2
    -c = 3
    +>>> if a == 1:
    +>>>     b = 2
    +>>> c = 3
                             

    @@ -228,11 +282,11 @@ c = 3

    while [condição]

    
    -a = 1
    -while True:
    -    a += 1
    -    if a > 10:
    -        break
    +>>> a = 1
    +>>> while True:
    +>>>     a += 1
    +>>>     if a > 10:
    +>>>         break
                             

    @@ -240,9 +294,9 @@ while True:

    for [iterável]

    
    -soma = 0
    -for valor em [345, 123, 123, 34]:
    -    soma += valor
    +>>> soma = 0
    +>>> for valor em [345, 123, 123, 34]:
    +>>>     soma += valor
                             

    @@ -276,8 +330,8 @@ for valor em [345, 123, 123, 34]:

    Strings como iteráveis:

    
    -for l in 'Python':
    -    print l
    +>>> for l in 'Python':
    +>>>     print l
                             

    @@ -285,10 +339,98 @@ for l in 'Python':

    Dicionários como iteráveis:

    
    -for key in {'Python': 'Rocks', 'Parrot': 'Dead', 'Favorite Color': 'Blue'}:
    -	print key
    +>>> d =  {'Python': 'Rocks', 'Parrot': 'Dead', 'Favorite Color': 'Blue'}
    +>>> for key in d:
    +>>> 	print key, d[key]
     						

    + +
    +

    Ou ainda:

    + +

    
    +>>> d =  {'Python': 'Rocks', 'Parrot': 'Dead', 'Favorite Color': 'Blue'}
    +>>> for (key, value) in d.iteritems():
    +>>>     print key, value
    +					    

    +
    + + +
    +
    +

    Slices

    +
    + +
    +

    Slice é uma "extensão" de indíces de acesso.

    + +

    Com slices, é possível "cortar" iteráveis, retornando + um novo iterável.

    +
    + +
    +

    
    +iterável[start:end:step]
    +                        

    + +

    (end é exclusívo.)

    +
    + +
    +

    
    +>>> a = [1, 2, 3, 4]
    +>>> print a[1:2]
    +[2]
    +                        

    +
    + +
    +

    Deixar um índice em branco indica que:

    + +
      +
    • start = 0
    • +
    • end = len(iterável)
    • +
    • step = 1
    • +
    + +

    
    +>>> a = [1, 2, 3, 4]
    +>>> print a[:2]
    +[1, 2]
    +                        

    +
    + +
    +

    Índices negativos começam do final do iterável.

    + +

    
    +>>> a = [1, 2, 3, 4]
    +>>> print a[1:-1]
    +[2, 3]
    +                        

    +
    + +
    +

    Lembre-se que strings também são iteráveis.

    + +

    
    +>>> a = 'Python Rocks'
    +>>> print a[7:-1]
    +'Rock'
    +                        

    +
    + +
    +

    Deixar os dois índices em branco cria uma cópia "flat".

    +

    
    +>>> a = [1, 2, 3, 4]
    +>>> print a[:]
    +[1, 2, 3, 4]
    +                        

    + +

    Para fazer uma cópia de uma lista com outros + iteráveis internos, existe o módulo deepcopy.

    +
    @@ -297,14 +439,104 @@ for key in {'Python': 'Rocks', 'Parrot': 'Dead', 'Favorite Color': 'Blue'}:
    -

    def [nome_da_função]([parâmetro], [parâmetro]):

    +

    def [nome_da_função]([parâmetro], [parâmetro], ...):

    
    -def funcao(a, b, c):
    -    return (a + b) / c
    +>>> def funcao(a, b, c):
    +>>>     return (a + b) / c
     						

    + +
    +
    +

    Classes

    +
    + +
    +

    Ok, algumas coisas a serem vistas antes de entrar em + classes:

    +
    + +
    +

    Existem dois tipos de classes: old-style e new-style.

    + +

    A diferença é que classes "new-style" sempre extendem da + classe object, enquanto que "old-style" não + extendem ninguém.

    + +

    Por baixo dos panos, "new-style" e "old-style" funcionam + de forma diferente, mas isso não é visível para o + programador.

    +
    + +
    +

    Para todos os casos e efeitos, "old-style" não deve + mais ser usado.

    + +

    No Python 3, não existem mais + classes "old-style", mas a sintaxe removeu a necessidade + de extender object.

    + +

    (Ou seja, no Python 3 uma classe + se parece com o "old-style" do Python 2.)

    +
    + +
    +

    this/self não é uma variável + implícita da classe: Ela tem que constar sempre + na definiçào do método.

    +
    + +
    +

    O construtor da classe é chamado __init__.

    + +

    Não existe função para o destrutor.

    + +

    Existem ainda outras funções (como o + __getitem__ comentado anteriormente), mas + não vamos falar sobre elas nesse momento.

    +
    + +
    +

    
    +>>> class MyClasse(object):
    +>>>     def __init__(self):
    +>>>         self.valor = 0
    +>>>     def show(self):
    +>>>         print self.valor
    +    				    

    +
    + +
    +

    Para instanciar uma classe, basta chamar a classe + como se fosse uma função.

    + +

    
    +>>> my = MyClasse()
    +>>> my.show()
    +0
    +				        

    +
    + +
    +

    Se o construtor tiver parâmetros, estes devem ser + passados durante a instanciação, como se a "função" + classe tivesse parâmetros.

    + +

    
    +>>> class MyClasse(object):
    +>>>     def __init__(self, name):
    +>>>         self.name = name        
    +>>>     def show(self):
    +>>>         print self.name
    +        
    +>>> my = MyClasse('Julio')
    +>>> my.show()
    +Julio
    +				        

    +
    +