All work and no play makes Jack a dull boy

terça-feira, 1 de outubro de 2013

dict comprehension

Sim, existe uma forma de fazer um comprehension para dicionários e, pasme, até há uma PEP para isso.

A sintaxe é bem simples:
{ i : chr(65+i) for i in range(26) }

Assim, você acabou de criar um dicionários com as letras do alfabeto:
{0: 'A', 1: 'B', 2: 'C', 3: 'D', 4: 'E', 5: 'F', 6: 'G', 7: 'H', 8: 'I', 9: 'J', 10: 'K', 11: 'L', 12: 'M', 13: 'N', 14: 'O', 15: 'P', 16: 'Q', 17: 'R', 18: 'S', 19: 'T', 20: 'U', 21: 'V', 22: 'W', 23: 'X', 24: 'Y', 25: 'Z'}

Você também chegaria no mesmo resultado se fizesse da seguinte maneira:
dict([ (i, chr(65+i)) for i in range(26) ])

=]

terça-feira, 6 de agosto de 2013

Autoenconding para python no SublimeText

Pacote SublimeText da vez é o Auto Enconding for Python.

#quemnunca acabou esquecendo de declarar o encoding do arquivo python?

Então, para sua preguiça seu auxílio há um pacote para Sublime Text que dá uma mão nisso.

Ele simplesmente inclue para você:
#!/usr/bin/env python
# -*- coding: utf-8 -*-#
Dá uma conferida.

segunda-feira, 5 de agosto de 2013

loops, list comprehension e generators

loops, list comprehension generators
Qual a diferença de tempo (performance também?) entre alguns modos de montar uma lista em python? Resolvi fazer um teste de tempo de execução de um código simples. A idéia é comparar o tempo que leva para montar uma lista contentdo 1 milhão de números.

Segue a sequência com seus respectivos tempos. Ah! Para medir o tempo usei o 'time' do linux e rodei todos com o comando a seguir no terminal do ubuntu 12.04 64bits.


$ time python teste.py

Apesar de óbvia a diferença entre usar  range()  e  xrange()  no python, fiz questão de deixar para mostrar/constatar em relação a tempo de execução.

lista = []
for i in range(1000000):
    lista.append(i)
# TEMPO GASTO 0.198s

for i in xrange(1000000):
    lista.append(i)

# TEMPO GASTO 0.169s

Dica rápida: instancie o método  append() , isso ajuda um pouco.
lista_append = lista.append
for i in range(1000000):
    lista_append(i)

# TEMPO GASTO 0.158s


lista_append = lista.append
for i in xrange(1000000):
 lista_append(i)

# TEMPO GASTO 0.156

List comprehension e generators
lista = [i for i in range(1000000)]
# TEMPO GASTO 0.141s

lista = [i for i in xrange(1000000)]
# TEMPO GASTO 0.100s

lista = (i for i in range(1000000))
# TEMPO GASTO 0.065s

lista = (i for i in xrange(1000000))
# TEMPO GASTO 0.021s


Bacana a diferença de tempo entre o primeiro e último, não?

quarta-feira, 17 de julho de 2013

python lint? SublimeLinter ajuda!

Vez ou outra faço buscas aleatórias no github, hoje foi por pacotes ligados a python e Sublime. Encontrei o SublimeLinter.

Instalar é tranquilo, basta usar o PackageControl e instalar, sem complicações.

O SublimeLinter já tem linters incluidos para: C/C++, CSS, Git, HTML, Javascript, Python, Ruby, PHP, XML e outras.

O linter por padrão roda no background, mas você pode setar para verificar a cada save.

Depois de instalado (claro!), vá em  Preferences > Package Settings > SublimeLinter > Settings - Default  e mude a linha:

"sublimelinter_popup_errors_on_save": false,

para
"sublimelinter_popup_errors_on_save": true, 

Ele ainda permite configurações customizadas para cada projeto seu no Sublime. Vale uma olhada.

quarta-feira, 29 de maio de 2013