Há muitas situações em que uma função faz cálculos e operações para obter valores e, ao final, deve montar uma string com esses valores. Nesta situação, muita gente monta um dicionário com os valores e usa string formatting para gerar a string a ser retornada. Por exemplo:
# -*- encoding: utf-8 -*-
import string,random
template='''Sugestões para %(nome)s:
- login: %(login)s
- email: %(email)s
- site: www.%(domain)s.com
- senha: %(passwd)s
'''
def sugere_logins(nome):
login=nome.split(' ')[0].lower()
domain=nome.split(' ')[-1].lower()
email=login+'@'+domain+'.com'
chars=string.letters+string.digits
passwd=''.join(random.sample(chars,10))
dados={'login':login,
'email':email,
'nome':nome,
'domain':domain,
'passwd':passwd}
print template % dados
Você pode substituir todo o trecho em que monta o dicionário, usando o resultado da função locals(). A função locals() retorna um dicionário com todas as variáveis locais. No exemplo acima, isso ficaria assim:
# -*- encoding: utf-8 -*-
import string,random
template='''Sugestões para %(nome)s:
- login: %(login)s
- email: %(email)s
- site: www.%(domain)s.com
- senha: %(passwd)s
'''
def sugere_logins(nome):
login=nome.split(' ')[0].lower()
domain=nome.split(' ')[-1].lower()
email=login+'@'+domain+'.com'
chars=string.letters+string.digits
passwd=''.join(random.sample(chars,10))
print template % locals()
Uso muito esse truque ao trabalhar com web2py, fazendo com que os controllers, ao invés de retornar um dicionário montado por mim, retornem locals().
Deixe um comentário