O Fantástico Mundo de Python
Turicas aka Álvaro Justen
22 de julho de 2017 - Curitiba/PR
Turicas, prazer! =)
Sigam-me os bons:
+55 41 999 311 221
(Signal, Telegram, WhatsApp)
Python
# E vocês?
- Já programa?
- Já ouviu falar de Python?
- Já programa em Python?
# Roteiro
- Conceitos básicos
- Vamos codar!
- Ecossistema
- Comunidade
## Parte 1:
## Conceitos Básicos
## Python - Características
- Linguagem de **propósito geral**
- Criada por Guido Van Rossum em 1989
- Software **livre**
- Multiplataforma
- Fácil de aprender
- Sintaxe simples e clara
- Very High Level Language
- Baterias incluídas
- Altamente extensível
- Largamente utilizada
- Comunidade incrível
Guido van Rossum
## Entrevistei Guido van Rossum!
![Álvaro Justen entrevista Guido van Rossum](images/entrevista-guido.jpg)
Em breve em **[youtube.com/c/PythonicCafe](https://youtube.com/c/PythonicCafe)**
Monty Python
# Aplicações
- Interfaces de linha-de-comando (CLI)
- Interfaces gráficas de usuários (GUI)
- Computação científica
- Computação gráfica
- Jogos
- Web
- Robótica
- *(coloque sua área aqui)*
# Onde roda?
- GNU/Linux
- Mac OS X
- Outros UNIX (FreeBSD etc.)
- Windows
- Android
- Microcontroladores
- ...
# Como instalar?
- GNU/Linux e Mac OS X: **não precisa**!
- Windows: [python.org](python.org)
## Python - Quem usa?
- Canonical
- Dropbox
- Fundação Getúlio Vargas
- Globo.com
- Google
- Industrial Light & Magic
- Mozilla Foundation
- NASA
- SERPRO
- YouTube
- ... (dá pra ficar até amanhã falando) ...
## Parte 2:
## Vamos codar!
Primeiro Programa
print("Olá, OpenDevCommunity!")
## Tipos de Dados
- Strings (`str`)
- Exemplo: `"Álvaro"`
- Números inteiros (`int`)
- Exemplo: `42`
- Números racionais (`float`)
- Exemplo: `3.14`
- Números complexos (`complex`)
- Exemplo: `1 + 2j`
- Listas (`list`)
- Exemplo: `[1, 2, 3]`
- Dicionários (`dict`)
- Exemplo: `{"linguagem": "python", "resposta": 42}`
- ...
Nada de parênteses, nada de chaves!
if expressao1:
comando1
if expressao2:
comando2
elif expressao3:
comando3
elif expressao4:
comando4
else:
comando5
## Operadores Lógicos
### Resultam em verdadeiro/falso
- `<` menor que
- `>` maior que
- `<=` menor ou igual que
- `>=` maior ou igual que
- `==` igual
- `!=` diferente
- `or`
- `and`
- `not`
Slices em listas e strings
lista = [1, 3, 4, 'Arduino', 'Python']
print(lista[1])
print(lista[1:4])
for elemento in lista:
print(elemento)
arquivo = 'nome.txt'
print(arquivo[-3:])
print(arquivo[5:])
novo_arquivo = 'nome.do.arquivo.txt'
print(novo_arquivo.split('.'))
print(novo_arquivo.split('.')[-1])
extensao = 'nome.do.arquivo.py'.split('.')[-1]
print(extensao)
Trabalhando com arquivos
arquivo_1 = open('nome.txt')
for linha in arquivo_1:
print(linha)
arquivo_1.close()
arquivo_2 = open('nome-2.txt', 'w')
arquivo_2.write('Python rules!')
arquivo_2.close()
## Parte 3:
## Ecossistema
## Baterias incluídas!
- `sys`, `os`, `re`, `string`, `zlib`
- `socket`, `urrlib`, `httplib`, `imaplib`
- `time`, `datetime`, `math`, `random`
- `doctest`, `unittest`, `xml`, `xmlrpclib`
- `struct`, `pickle`, `cPickle`, `threading`
- `logging`, `decimal`
- E muito mais!
Lendo CSVs
import csv
municipios = csv.DictReader(open('brasil.csv'))
for municipio in municipios:
if municipio['estado'] == 'PR':
densidade = int(municipio['habitantes']) / float(municipio['area'])
print(municipio['nome'] + '/PR' + ': ' + str(densidade) + ' hab/km²')
Navegando com Python
import urllib
url = 'http://pythonic.cafe/'
pagina = urllib.urlopen(url)
print(pagina.read())
## Pacotes
- Python Package Index (PyPI): [pypi.python.org](http://pypi.python.org/)
- `pyenv`
- `pip`
- `virtualenv`
Lendo CSV (com outra biblioteca)
import rows
municipios = rows.import_from_csv('municipios-brasil.csv')
for municipio in municipios:
if municipio.estado == 'PR':
densidade = municipio.habitantes / municipio.area
print(municipio.nome + '/PR' + ': ' + str(densidade) + ' hab/km²')
Navegando com Python (com outra biblioteca)
import requests
url = 'http://pythonic.cafe/'
pagina = requests.get(url)
print(pagina.content)
Navegando [2]
from splinter import Browser
browser = Browser('firefox')
browser.visit('http://www.google.com.br/')
browser.fill('q', 'GruPy-PR meetup')
button = browser.find_by_name('btnG')
button.click()
if browser.is_text_present('https://www.meetup.com/pt-BR/GruPy-PR/'):
print('Estamos na primeira página')
else:
print('Err... efeito demonstração')
browser.quit()
# Onde Aprender?
- [docs.python.org/tutorial](http://docs.python.org/tutorial)
- [python.org.br](http://python.org.br/)
- Listas de discussão locais
- Eventos (...)
- Vídeos, livros etc.
## Parte 4:
## Comunidade
Diversidade
Django Girls, Curitiba (janeiro de 2017)
Um monte de gente linda
PythonBrasil[12], Florianópolis (outubro de 2016)
Muita cerveja
PythonBrasil[12], Florianópolis (outubro de 2016)
## Grupos
- [Associação Python Brasil (APyB)](http://associacao.python.org.br/)
- [python-brasil no Google Groups](https://groups.google.com/forum/#!forum/python-brasil)
- Grupos no Telegram:
- [pybr - roda de conversa](https://t.me/pythonbr)
- [PyCoding pt_BR](https://t.me/PyCoding)
- [Data science e Python](https://t.me/datasciencepython)
- Diversos grupos locais
- No Facebook:
- [Página PythonBrasil](https://www.facebook.com/pythonbrasil/) (oficial da APyB)
- [Grupo Python Brasil - Programadores](https://www.facebook.com/groups/python.brasil/?ref=br_rs)
## GruPy-PR
- [t.me/grupy_pr](http://t.me/grupy_pr/)
- [GruPy-PR no Meetup.com](https://)
- [grupypr.github.io](https://grupypr.github.io)
## Eventos
- Nível regional:
- [Caipyra](http://caipyra.python.org.br/) (Ribeirão Preto/SP - já foi)
- [Python Nordeste](http://pythonnordeste.org/) (2017: São Luís/MA - já foi)
- [Python Sudeste](http://pythonsudeste.org/) (2017: Rio de Janeiro/RJ - já foi)
- [PyCon Amazônia](http://amazonia.python.org.br/) (2017: Manaus)
- [Python Sul](http://pythonsul.org/) (2017: Caxias do Sul/RS)
- Nível nacional:
- [Python Brasil](http://www.pythonbrasil.com.br/) (2017: Belo Horizonte/MG)
- [PyConUS](https://us.pycon.org/2017/)
- [PyConAr](http://ar.pycon.org/)
- ...
## Extra [1]: Açúcar sintático
- `@decorators`
- `a, b = b, a`
- `big_number = 1_000_000_000`
## Extra [2]: Python Enhancement Proposals (PEPs)
- [python.org/dev/peps](https://www.python.org/dev/peps/)
- [PEP-0008: Style Guide for Python Code](https://www.python.org/dev/peps/pep-0008/)
- [PEP-0020: The Zen of Python](https://www.python.org/dev/peps/pep-0020/)
- [PEP-0405: Python Virtual Environments](https://www.python.org/dev/peps/pep-0405/)
- [PEP-3000: Python 3000](https://www.python.org/dev/peps/pep-3000/)
>>> import this
The Zen of Python, by Tim Peters
Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!