Como é visto python 2

Python 3

Uma breve contextualização

Um pouco de história

História do python 3

  • Foi lançada em 2008
  • Não compatível com Python 2
  • Mais baterias incluídas (asyncio, ensurepip, enum, statistics)
  • Correção de nomeclaturas
    • Módulos em letras minúsculas
  • Outras mudanças:
    • print agora é uma função
    • long e int unificados
    • bytes e strings separados
    • Divisão não faz mais coerção de tipo
    • True e False são palavras reservadas
  • Muitas bibliotecas incluem suporte
  • Django, Flask, nltk, scikit-learn, numpy, scipy, etc.

Já tem data para "terminar"

Um pouco de código

Desempacotamento

head, tail and rest

        head, *rest, tail = range(10)
        print(head)
        # retorna 0
        print(tail)
        # retorna 9
        print(rest)
        # retorna [1, 2, 3, 4, 5, 6, 7, 8]
        *rest, tail = range(5)
        print(rest)
        # retorna [0, 1, 2, 3]
        print(tail)
        # retorna 4
      

Iteradores em todo lugar!

Sem mais Xtudo ou iterlista

        print(range(10))
        # retorna range(0, 10)
        # não é mais uma lista
        # se comporta como xrange do python 2
        for numero in range(10):
            print(numero, endp=" ")
        # 0 1 2 3 4 5 6 7 8 9
        dic = {"chaveA": 1, "chaveB": 2, "chaveC": 3}
        dic.keys()
        # retorna dict_keys(['chaveB', 'chaveC', 'chaveA'])
        # visão com os valores das chaves do dicionário
        for (chave, valor) in dic.items():
            print(chave, valor)
        # chaveB 2
        # chaveC 3
        # chaveA 1
      

Comparações

Tipificação em comparadores

        # No Python 2
        'abc' > 1
        # True
        None < 0
        # True

        # No Python 3
        'abc' > 1
        # TypeError: unorderable types: str() > int()
        None < 0
        # TypeError: unorderable types: NoneType() < int()
      

String dividida em bytes e unicode

Agora é possivél utilizar de acentos

        def Σ(lim_inf, lim_sup, funcao):
            '''Um somatório é um operador matemático que nos permite
        representar facilmente somas de um grande número de termos,
        até infinitos.
        É representado com a letra grega sigma ( \Sigma ).
        Uma variável i chamada índice do somatório recebe como valor inicial o
        limite inferior(lim_inf).A
        Esta variável percorre os valores inteiros até alcançar o limite
        superior(lim_sup).
        A cada iteração uma função(funcao) é executada sobre o índice do
        somatório.
        A função de entrada (funcao) deve receber um valor de entrada e retornar
        um valor de saída.

        Σ(1,5,lambda x:x) = 1 + 2 + 3 + 4 + 5 = 15

        >>> Σ(1,5,lambda x:x)
        15
            '''
            return sum([funcao(i) for i in range(lim_inf, lim_sup + 1)])
        π = math.pi
      

String dividida em bytes e unicode

Agora é possivel utilizar de acentos

        # python 2
        nome ='cássio'
        nome
        # 'c\xc3\xa1ssio
        bytes('cássio')
        # 'c\xc3\xa1ssio
        # bytes e strings são a mesma coisa
        nome = u'cássio'
        # u'c\xe1ssio'
        # unicode é diferente


        # python 3
        nome ='cássio'
        nome
        # 'cássio'
        bytes('cássio', encoding='utf-8')
        # b'c\xc3\xa1ssio'
        # bytes e strings são coisas distintas
      

E mais uma infinidade de recursos

        # set comprehension
        {value for value in something}

        # dict comprehension
        {key:value for key,value in something}

        # 3/2 agora retorna 1.5

        # notação para numeros em base oito e desesseis
        # 0o99
        # 0x44

        # Não dá mais pra trolar amigos
        True, False = False,True
        # SyntaxError: can't assign to keyword

        # a partir do python 3.4
        from statistics import mean, median, mode

        # asyncio
        # aqui uma utilização interessante
        # http://compiletoi.net/fast-scraping-in-python-with-asyncio.html
      

Baterias incluídas

Lá e de volta outra vez

Vamos a uma longa jornada

Módulo executável

Canivete suiço dos programadores

        # criação de um ambiente virtual
        python -m venv /path/to/<my_venv>
        # ubuntu apresenta problemas, nele utilize
        python -m venv --without-pip /path/to/<my_venv>
        # ativação deste ambiente
        source /path/to/<my_venv>/bin/activate

        # PYTHONPATH
        python -m site

        # Servidor http python
        python -m http.server [port]
      

...


        # Documentação
        python -m pydoc
        # b para abrir documentação no browser
        python -m pydoc -b
        # ou especifique o módulo
        python -m pydoc math.sin

        # debug estilo gdb
        python -m pdb <nomedoprograma.py>

        # profiler
        python -m profile <nomedoprograma.py>

      

.


        #exibe um calendario
        python -m calendar

        # recebe entrada json e imprime
        python -m json.tool

        # codifica e decodifica um texto em base64
        echo 'Hello World' | python -m base64 -e
        echo 'SGVsbG8gV29ybGQK' | python -m base64 -d
      

Termina a nossa jornada

Seu lar ficou para trás agora. O mundo está à sua frente.
Gandalf
O Cinzento

Dúvidas?!?!

<Obrigado!>

Vamos trocar um dedo de prosa!