#python #string #python-2.7 #python-3.x
#python #строка #python-2.7 #python-3.x
Вопрос:
Я использовал print()
синтаксис в своих файлах python 2.7, хотя знаю, что в 2.7 print
это инструкция, а не функция, как в 3.X. Но у интерпретатора python, похоже, не было никаких проблем с print()
синтаксисом, поэтому я сохранил его, чтобы упростить возможный будущий перенос на 3.X . Но я заметил что-то подозрительное в том, как Python обрабатывал строковый литерал внутри круглой скобки:
>>>> print("nFirst linen", "Second line")
('First linen', 'Second line')
В то время как типичный синтаксис инструкции 2.7 выводит символы новой строки, как и ожидалось:
>>>>print "nFirst linen", "Second line"
First line
Second line
Вопрос:
Итак, каковы причины, по которым print () работает в 2.7, но игнорирует n
символ? Это почти похоже на то, что print () выводит __repr__
строку содержащегося строкового литерала.
Комментарии:
1. Не удалось выполнить репликацию в Python 2.7.6.
2. Хотя интерпретатор Python 2.7.x не имеет проблем с синтаксисом, это, безусловно, выглядит некрасиво. Попробуйте
print('a', 'b', 'c')
в Python 3:a b c
и в Python 2.x:('a', 'b', 'c')
3. Для меня это не то, что он делает в 2.7.7.
4. @martineau Спасибо, что указали на это, я перефразировал свой код, чтобы его было легче понять вне контекста, и не понял, что именно запятая превратила его в кортеж. В следующий раз я перезапущу свой код перед загрузкой
5. @joshsvoss: Используйте
from __future__ import print_function
, чтобы получить тот же синтаксис для
Ответ №1:
Вы можете заключить любое выражение в круглые скобки, не изменяя его значения, так что:
print ("hello world")
точно совпадает с:
print "hello world"
На первый взгляд это выглядит как вызов функции, но на самом деле вы просто печатаете строковое выражение, которое заключено в круглые скобки. Такая же сделка, как эта:
x = 1 2 # same as
x = (1 2)
Однако, если вы попытаетесь напечатать несколько элементов или напечатать с запятой в конце вашей строки (что часто используется, чтобы избежать печати новой строки), вы получите результаты, которые вы описываете:
print ("hello", "world")
print ("hello world",)
В этом случае вы печатаете кортеж.
t = ("hello", "world") # or
t = ("hello world", )
print t
И печать кортежа фактически выводит repr()
каждого элемента внутри него.
Комментарии:
1. ДА. Вот почему я сказал, что на самом деле это не делает того, что он сказал, что это делает.