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