No Python 2.7, os dois itens a seguir farão o mesmo
print("Hello, World!") # Prints "Hello, World!"
print "Hello, World!" # Prints "Hello, World!"
No entanto, o seguinte não
print("Hello,", "World!") # Prints the tuple: ("Hello,", "World!")
print "Hello,", "World!" # Prints the words "Hello, World!"
No Python 3.x, o parêntese print
é obrigatório, essencialmente tornando-o uma função, mas no 2.7 ambos funcionarão com resultados diferentes. O que mais devo saber sobre o print
Python 2.7?
python
printing
python-3.x
python-2.7
Hubro
fonte
fonte
print
é realmente uma instrução especial, não uma função. É também por isso que não pode ser usado como:lambda x: print x
Observe que(expr)
não cria uma tupla (resulta emexpr
), mas cria,
.from __future__ import print_function
Respostas:
Em Python 2.x
print
é realmente uma instrução especial e não uma função *.É também por isso que não pode ser usado como:
lambda x: print x
Observe que
(expr)
não cria uma tupla (resulta emexpr
), mas cria,
. Isso provavelmente resulta na confusão entreprint (x)
eprint (x, y)
no Python 2.7No entanto, como
print
é uma instrução de sintaxe / construção gramatical especial no Python 2.x, então, sem o parêntese, trata o de,
uma maneira especial - e não cria uma tupla. Este tratamento especial daprint
declaração permite que ela atue de forma diferente se houver um trailing,
ou não.Boa codificação.
* Este
print
comportamento em Python 2 pode ser alterado para Python 3:fonte
(expr) != tuple
explicação :-)É tudo muito simples e não tem nada a ver com compatibilidade com versões anteriores ou anteriores.
A forma geral da
print
declaração em todas as versões do Python antes da versão 3 é:(Cada expressão, por sua vez, é avaliada, convertida em uma string e exibida com um espaço entre elas.)
Mas lembre-se de que colocar parênteses em torno de uma expressão ainda é a mesma expressão.
Então, você também pode escrever isso como:
Isso não tem nada a ver com chamar uma função.
fonte
print (expr1), (expr2), ... (expr3)
, é sobre por queprint (expr1, expr2, ... , expr3)
é legal no python 2.x enquanto não deveria estar de acordo com os padrões 2.x.Aqui temos um efeito colateral interessante quando se trata de UTF-8.
A última impressão é uma tupla com valores hexadecimais de bytes.
fonte
repr
e, nesse ponto, provavelmente codifica todas as strings no dicionário para ASCII.#encoding=utf-8
, env do linuxLANG=en_US.UTF-8
. Portanto, reprodifique não usando ASCII padrão, mas a codificação utf-8.str
com astring_escape
codificação especial . A string já estava codificada em Unicode como UTF-8.repr
provavelmente toma medidas para garantir que o texto possa ser representado por ASCII (por meio de símbolos de escape não ASCII), não necessariamente que a string seja codificada como ASCII. Ainda não sei se isso é totalmente correto.repr()
saída quando convertidos em uma string (eles não implementam__str__
, apenas__repr__
). O que você vê não é especial para UTF-8; Orepr()
de uma string fornece literais de string Python válidos que são seguros para ASCII.Basicamente no Python antes do Python 3, print era uma instrução especial que imprimia todas as strings se obtidas como argumentos. Então,
print "foo","bar"
significa simplesmente "imprimir 'foo' seguido por 'bar'". O problema com isso era que era tentador agir como se print fosse uma função, e a gramática Python é ambígua quanto a isso, já que(a,b)
é uma tupla contendoa
e,b
masfoo(a,b)
é uma chamada para uma função de dois argumentos.Então, eles fizeram a alteração incompatível para 3 para tornar os programas menos ambíguos e mais regulares.
(Na verdade, acho que o 2.7 se comporta como o 2.6 nisso, mas não tenho certeza.)
fonte