14 de junho de 2009

Vantagens do novo print do Python 3

A primeira diferença que se nota quando se muda para o python 3 e a mudança do print, que virou uma função e agora tem que ter os parênteses para funcionar
Antes o famoso "hello Word" era assim:
>>> print 'ola mundo'
agora fica assim:
>>> print ('ola mundo')
A principal vantagem está na padronização da função e na possibilidade de testar o print() com funções como o dir() e help(),
Antes:
>>> dir(print)
File "<stdin>", line 1
dir(print)
^
SyntaxError: invalid syntax
Agora:
>>> dir(print)
['__call__', '__class__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__']
O mesmo acontecia com o help(), por falar nele fica mais fácil para os iniciantes saberem como fazer para, por exemplo, enviar a saída do print para um arquivo, e usar o print como um log, (ou mudar a saída padrão)
Antes:
>>> arquivoLog = open("log.txt", "a")
>>> print>>arquivoLog, "imprimindo no arquivo de log"

>>> print>>sys.stderr, "imprimindo na saida padrao"
Agora:
>>> arquivoLog = open("log.txt", "a")
>>> print("imprimindo no arquivo de log", file=arquivoLog

>>> print("imprimindo no saida padrao", file=sys.stderr)
Agora é possivel usar separadores quando temos varios objetos para imprimir:
>>>print(1, 2, 3, sep=" - ")
1 - 2 - 3
E definir o caractere de fim de linha (o padrão é o '\n'):
>>>print("mensagem", end=" - log\n")
mensagem - log/n
A sintax da função print() ficou assim:
>>>print([objeto, ...][, sep='separador'][, end='caractere final de linha'][, file=arquivoDirecionado])

Pra mim o antigo print ja vai tarde ;)

mais posts sobre Python:
1- Diferencas entre o Python 3 vs Python 2.x
2 - Edje / QEdje (usando Python)3 - Receitas com Python
4 - Mini Curso PyGame - JED 2008

5 comentários:

Marco disse...

E tem algo como o print <<<END […] END; do PHP ou Perl? Isso me economizaria um tempo enorme.

Unknown disse...

Desculpe mas o o que este comando faz no php ou no perl? :(

Marco disse...

Permite a inclusão de variáveis no print sem a necessidade de escapar certos caracteres:

<?php
print <<<END
Isto usa a sintaxe "documento aqui" para mostrar múltiplas linhas com interpolação de $VARIÁVEIS. Note que o terminador de documento deve aparecer em uma linha terminada em ponto e vírgula(;) sem nenhum espaço extra!
Não precisa escapar ", ', \, /, & ou "?" dentro disto. É quase um template, que só interpreta $VARIÁVEIS.
END;
?>

Unknown disse...

Marco seria realmente dificil pra uma linguagem como o python que naum tem caractere identificador de variavel ($ no php) saber quando vc quer imprimir "nome" ou a variavel nome usando um esquema desse o maximo q eu sei seria usar :
print ("""
nome = %s
""" % variavel)

ai vc precisa escapar pouca coisa ;)
espero ter ajudado

Unknown disse...

Marco, acho q tenho a sua solucao
vc pode fazer:

nome = "larry"

r"""
teste
pra colocar uma variavel:
nome = %(nome)s
""" % locals()

teste
pra colocar uma variavel:
nome = larry

espero ter ajudado