O Fantástico Mundo de Python


Turicas aka Álvaro Justen


Encontro do GruPy-PR + OpenDevCommunity

22 de julho de 2017 - Curitiba/PR

Turicas, prazer! =)

Sigam-me os bons:

{twitter,
github,
youtube,
slideshare,
instagram}
/turicas

turicas@pythonic.cafe

Blog: turicas.info

+55 41 999 311 221

(Signal, Telegram, WhatsApp)


escoladedados.org


generonumero.media


simplefractal.com


pythonic.cafe

youtube.com/c/PythonicCafe

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

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

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) ...

Google usa Python desde 1998

## 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!

Fonte: xkcd.com/353

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

Programming Language?


Fonte: github.com/stereobooster/programming-languages-genealogical-tree

Top Programming Languages


Fonte: spectrum.ieee.org/computing/software/the-2017-top-programming-languages

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!

?


{twitter, github, youtube,
slideshare, instagram}/turicas

turicas@pythonic.cafe

Blog: turicas.info

+55 41 999 311 221