2013-06-01 4 views
1

Чтение через «Learn Python the Hard Way», я попытался изменить упражнение 6, чтобы увидеть, что происходит. Первоначально он содержит:Почему выход отличается?

x = "There are %d types of people." % 10 
binary = "binary" 
do_not = "don't" 
y = "Those who know %s and those who %s." % (binary, do_not) 
print "I said: %r." % x 
print "I also said: '%s'." % y 

и производит вывод:

I said: 'There are 10 types of people.'. 
I also said: 'Those who know binary and those who don't.'. 

Для того чтобы увидеть различия между использованием% S и% R в последней строке, я заменил его:

print "I also said: %r." % y 

и получил теперь выход:

I said: 'There are 10 types of people.'. 
I also said: "Those who know binary and those who don't.". 

Мой вопрос: Почему теперь существуют двойные кавычки вместо одиночных кавычек?

ответ

6

Потому что Python умеет цитировать.

Вы просите строковое представление в (%r использует repr()), которая представляет строки таким образом, что является законным кодом Python. Когда вы эхо-значения в интерпретаторе Python, используется одно и то же представление.

Потому что y содержит одну цитату, Python дает вам двойные кавычки, чтобы избежать этой цитаты.

Python предпочитает использовать одиночные кавычки для строковых представлений, и использует двойным, когда это необходимо, чтобы избежать вытекания:

>>> "Hello World!" 
'Hello World!' 
>>> '\'Hello World!\', he said' 
"'Hello World!', he said" 
>>> "\"Hello World!\", he said" 
'"Hello World!", he said' 
>>> '"Hello World!", doesn\'t cut it anymore' 
'"Hello World!", doesn\'t cut it anymore' 

Только тогда, когда я использовал оба типа кавычек, так и Python начать использовать управляющий код (\') для одной кавычки.

+0

Приятно объяснено и продемонстрировано –

+0

Благодарим вас за четкий и немедленный ответ. Теперь я обнаружил, что это же замечание предлагается автором в книге. – agtortorella

3

Потому что в строке есть одна цитата. Python компенсирует.

+0

Игнасио, спасибо за ваш продуманный ответ. – agtortorella

Смежные вопросы