Você está na página 1de 77

Treinamento Python

Terra 2014
Pré-requisitos

š sudo pip install argparser


š sudo pip install ipython iPy
Linguagem interpretada

š Source code > Bytecode > Output


š Arquivo .pyc
Fortemente tipada
Fortemente tipada
Delimitação
Python & IPython

š Abrir o shell
š Digitar python
Python & IPython

š  Operações básicas

š  + adição

š  - subtração

š  * multiplicação

š  / divisão
Python & IPython
ž  Desafio 1:

—  20 + 5 * 4 + 2 deve dar 150. O que falta


para isso?
Python & IPython

š >>> exit
š Use exit() or Ctrl-D (i.e. EOF) to exit
Python & IPython

š $ sudo apt-get install ipython


Python & IPython
ž  Desafio 2:

—  1 Euro = 1.35 dólares.


—  Quanto é 65.54 dólares em Euros?
—  Utilizar o ipython
Primeiro arquivo em python

š Salvar como 1.py


š $ python 1.py
š >>> Ola!
hashbang e PEP0263

$ chmod 755 1.py


$ ./1.py
hashbang e PEP0263
PEP - Python Enhancement Proposals

š Guidelines
š Propostas de novos recursos
š Especificação
š Justificativas
PEP - Python Enhancement Proposals

š PEP8
š  Coding conventions for the Python
code

š PEP0263
š  Defining Python Source Code
Encodings
PEP0263

š  Python will default to ASCII as standard encoding if no


other encoding hints are given.
Input
If, elif, else
If, elif, else

š == Igual
š != Diferente
š > Maior que
š < Menor que
š And
š Or
If, elif, else

š Operador ‘in’ em strings.


If, elif, else
ž  Desafio:

—  Fazer um script que pergunte o nome do


servidor.
—  Validar de o servidor pertence ao terra
checando se estão nos domínios terra.* ou
trrsf.*
—  Escrever na tela se o servidor faz parte de MIA,
POA ou CIS. Senão, devolver “Datacenter
desconhecido”.
list, dict, tuple
lista = []
dicionario = {}
tupla = ()

lista.append(‘nome’)
dicionario[‘nome’] = ‘x’
tupla = (‘string’, 1)
For loop
While Loop

š Fazer um programa que escreva na tela o


que o usuário digitou.
š Se ele digitar ‘exit’, sair do programa.
š Utilizar o raw_input + while
list, dict, tuple
ž Desafio:
—  Escrever um dicionário onde a chave é a
nome da equipe no Terra ou produto
principal em que trabalha e o valor é uma
lista de tuplas onde cada item é o nome
de cada colega de equipe e o RE (fake).
—  Listar esses dados
import
import this
š  Bonito é melhor que feio.

š  Explícito é melhor que implícito.

š  Simples é melhor que complexo.

š  Complexo é melhor que complicado.

š  Linear é melhor do que aninhado.


š  Esparso é melhor que denso.

š  Legibilidade conta.

š  Casos especiais não são especiais o bastante para quebrar as regras.
š  Ainda que praticidade vença a pureza.

š  Erros nunca devem passar silenciosamente.

š  A menos que sejam explicitamente silenciados.

š  Diante da ambigüidade, recuse a tentação de adivinhar.

š  Deveria haver um — e preferencialmente só um — modo óbvio para fazer algo.

š  Embora esse modo possa não ser óbvio a princípio a menos que você seja holandês.

š  Agora é melhor que nunca.

š  Embora nunca freqüentemente seja melhor que *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 grande idéia — vamos ter mais dessas!
import
š from lib import Classe
š classe= Classe()

š import lib
š classe = lib.Classe()
import

š $> pip install Ipy


import
ž Desafio:
—  Continuando o programa anterior,
adicionar uma verificação que, se o
usuário digitar uma rede, ele deve
escrever os IPS dessa rede.
—  Se o usuário digitar um hostname,
deve manter a validação anterior.
Conversão de dados

š valor = str(valor)
š valor = int(valor)
š Usando as funções soma e subtração,
fazer um script que receba o num1 e
num2.
Funções

š  Como ficam as funções soma, divisão, subtração e


multiplicação?

š  soma(1, 3)
š  >>> 4
Funções

š  Lambda são funções anonimas.


š  Alterar a calculadora para usara lambda
Funções
Funções
Funções
ž Desafio:
—  Alterar a calculadora para que ela
possua uma função apenas
chamada calcular(1, 2, op=‘soma’)
—  Utilizando o * e **
Funções - Decorators
Funções - Decorators
ž  Desafio:
—  Criar uma função que retorne um
dicionário de chave e valor como String.
—  Criar um decorator que transforme esse
dicionário em json como String.
—  Sem libs extenas!
argparse
Calculadora com params
ž  Desafio:

—  Usando o argparse, fazer um programa


que receba n1,op e n2 como parâmetros.
—  Exemplo:
—  python calc.py --numero1 1 --numero2 2 --
operador soma
—  >> 3
Qualidade do código
ž Desafio:
—  Trocar os scripts:
○  1 deve funcionar sem nenhuma alteração.
○  2 deve ser legível.
○  3 não podem ocorrer erros de charset,
indentação, etc.
○  4 sugerir melhorias.
Requisitos

š $ sudo apt-get install facter


str
str
str – Format e %s
Strings

š  Desafio:

š  Criar um gerador de senhas,


onde o usuário digita ‘terra’ e a
saída seja ‘T3Rr4’
popen
Verificando o servidor

š  Desafio:

š  Usando o Popen com facter e o


atributo “is_virtual => true/false”,
descobrir de a maquina é virtual ou
não.

š $ python check_vm.py


š >>> É uma maquina virtual
Verificando
o servidor

š  Desafio:

š  Usando o Popen com facter, a


função split, colocar os dados do
facter em um dicionario.

š $ python facter.py


š >>>{ ‘interfaces’: ‘eth1,lo’} (...)
Verificando o servidor parte 2

š  Desafio:
š  Utilizando tudo que foi visto
anteriormente, criar um script que
receba o valor que o facter precisa
buscar. Se o valor for ‘all’, então retorna
todos.
š  $ python facter.py –v swapfree
š  >>> 1.89 GB
š  $ python facter.py –v all
š  >>> architecture = i386
š  >>> domain = corp.terra
š  (...)
Lendo um arquivo de texto
Escrevendo um arquivo de texto

š  datetime.datetime.now().strftime("%A, %d. %B %Y %I:


%M%p")
from facterutils import log

š  Criando um módulo


Facter + Log

š  Desafio:

š Adicionar logs ao script facter.py.


š Deve ser feita uma função def
log(msg) no módulo facterutils
š Deve usar with
set()
set()

š  Desafio:
š $ wget http://goo.gl/dsc4Jv
š Abrir o arquivo de texto usando
open().
š Cada linha representa uma lista
separada por ponto e virgula.
Colocar os nomes em conjuntos.
š Verificar quais nomes do conjunto 1
aparecem no conjunto 2, porém que
não estejam no conjunto 3.
virtualenv

“A Virtual Environment, put simply,


is an isolated working copy of
Python which allows you to work on
a specific project without worry of
affecting other projects.”
virtualenv

$ cd /tmp
$ virtualenv venv
$ source venv/bin/activate

$ pip install simplejson


$ pip freeze

$ deactivate

$ pip freeze
OO em python
OO em python
OO em python
OO

š  Desafio:
š Permitir que a classe seja
utilizada em:
š  print int(num1)
š  >> 10

š  Permitir que a classe seja utilizada:


š  print str(num1)
š  >> X
Pré-requisitos

š $ pip install flask


Estrutura de diretório exemplo

š $ pip install flask


Hello World!

š $ pip install flask


Levantando servidor
Utilizando templates
Templates->hello.html
Levantando servidor
Adicionando um formulário
Templates->hello.html
Templates->form.html
Levantando servidor
Levantando servidor

š  Desafio

š  Criar uma aplicação flask que receba uma campo do facter
como parâmetro e retorne seu respectivo valor
š  É necessário utilizar a estrutura de templates do flask
Fim!
Obrigado!