Почему скобки в печати являются добровольными в Python 2.7?
в Python 2.7 оба следующих будут делать то же самое
print("Hello, World!") # Prints "Hello, World!"
print "Hello, World!" # Prints "Hello, World!"
не будет
print("Hello,", "World!") # Prints the tuple: ("Hello,", "World!")
print "Hello,", "World!" # Prints the words "Hello, World!"
В Python 3.х скобок на print является обязательным, по существу делая его функция, но в 2.7 оба будут работать с разными результатами. Что еще я должен знать о print в Python 2.7?
4 ответов:
В Python 2.x
это также, почему он не может быть использован как:
lambda x: print xотметим, что
(expr)не создает Кортеж (это приводит кexpr), но,делает. Это, вероятно, приводит к путанице междуprint (x)иprint (x, y)в Python 2.7С(1) # 1 -- no tuple Mister! (1,) # (1) (1,2) # (1,2) 1,2 # 1 2 -- no tuple and no parenthesis :) [See below for print caveat.],в особом порядке - и не создать Кортеж. Это особое отношение к,или нет.удачи в кодировании.
*этот
from __future__ import print_function
здесь у нас есть интересный побочный эффект, когда дело доходит до UTF-8.
>> greek = dict( dog="σκύλος", cat="γάτα" ) >> print greek['dog'], greek['cat'] σκύλος γάτα >> print (greek['dog'], greek['cat']) ('\xcf\x83\xce\xba\xcf\x8d\xce\xbb\xce\xbf\xcf\x82', '\xce\xb3\xce\xac\xcf\x84\xce\xb1')последняя печать-это кортеж с шестнадцатеричными байтовыми значениями.
Это все очень просто и не имеет ничего общего с прямой или обратной совместимости.
общая форма для
print expr1, expr2, ... exprn(каждое выражение по очереди вычисляется, преобразуется в строку и отображается с пробелом между ними.)
но помните, что скобки вокруг выражения-это все то же выражение.
Так что вы также можете написать это как:
print (expr1), (expr2), ... (expr3)Это не имеет ничего общего с вызова функции.
в основном в Python до Python 3 print был специальным оператором, который печатал все строки, если они были получены в качестве аргументов. Так что
print "foo","bar"просто означало "print ' foo', а затем 'bar'". Проблема с этим заключалась в том, что было заманчиво действовать так, как будто печать была функцией, и грамматика Python неоднозначна на этом, так как(a,b)- кортеж, содержащийaиbноfoo(a,b)- это вызов функции из двух аргументов.поэтому они сделали несовместимое изменение для 3, чтобы сделать программы менее неоднозначные и более регулярные.
(на самом деле, я думаю, что 2.7 ведет себя так же, как 2.6, но я не уверен.)
Comments