Подтвердить что ты не робот

Разница между использованием запятых, конкатенацией и форматированием строк в Python

Я изучаю python (2.7) самостоятельно. Я узнал, что мы можем использовать следующие способы для объединения строк и переменных:

x = "Hello"
y = "World"

Используя запятые:

print "I am printing" , x, y  # I know that using comma gives automatic space

Используя конкатенацию:

print "I am printing" + " " + x + " " + y 

Используя форматирование строк

print "I am printing %s %s" % (x, y) 

В этом случае все три печатаются одинаково:

I am printing Hello World

В чем разница между тремя и есть ли какие-либо конкретные случаи, когда один предпочтительнее другого?

4b9b3361

Ответ 1

Чтобы ответить на общий вопрос, прежде всего, вы должны использовать печать вообще для вывода информации в своих сценариях на экран при написании кода, чтобы убедиться, что вы получаете то, что ожидаете.

По мере того, как ваш код становится более сложным, вы можете обнаружить, что запись будет лучше, чем печать, но эта информация для другого ответа.

Существует большая разница между представлениями печати и представления возвращаемых значений, которые повторяются в интерактивном сеансе с помощью интерпретатора Python. Печать должна печатать на вашем стандартном выходе. Вторичное представление возвращаемого значения выражения (которое отображается в вашей оболочке Python, если не None) будет молчат при запуске эквивалентного кода в сценариях.

1. Печать

В Python 2 у нас были операторы печати. В Python 3 мы получаем функцию печати, которую мы также можем использовать в Python 2.

Заявления с запятыми (Python 2)

Оператор печати с разделяющими запятыми элементами использует пространство для их разделения. Задняя запятая вызовет добавление другого пространства. Никакая конечная запятая не добавит символ новой строки к вашему напечатанному элементу.

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

Например (это будет работать только в script, в интерактивной оболочке вы получите новое приглашение после каждой строки):

x = "Hello"
y = "World"

print "I am printing",
print x,
print y 

Вывести:

I am printing Hello World

Функция печати

Благодаря встроенной функции печати из Python 3, также доступной в Python 2.6 и 2.7 с этим импортом:

from __future__ import print_function

вы можете объявить разделитель и конец, что дает нам гораздо большую гибкость:

>>> print('hello', 'world', sep='-', end='\n****\n')
hello-world
****
>>>

По умолчанию ' ' для sep и '\n' для конца:

>>> print('hello', 'world')
hello world
>>> 

2. Конкатенация строк

Конкатенация создает каждую строку в памяти, а затем объединяет их вместе в конце в новой строке (так что это может быть не очень удобно для памяти), а затем выводит их на ваш вывод одновременно. Это хорошо, когда вам нужно присоединиться к строкам, вероятно, построенным в другом месте вместе.

print('hello' + '-' + 'world')

напечатает

hello-world

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

print('here is a number: ' + str(2))

печатает

here is a number: 2

Если вы попытаетесь объединить целое число без принуждения к строке сначала:

>>> print('here is a number: ' + 2)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate 'str' and 'int' objects

Это должно продемонстрировать, что вы должны пытаться только объединить переменные, которые, как известно, являются строками. Новый способ форматирования продемонстрировал, что эта проблема будет решена для вас.

3. Интерполяция строк

Форматирование, которое вы демонстрируете, это старый стиль интерполяции строк, заимствованный из C. Он берет старую строку и один раз создает новую. То, что он делает, довольно просто. Вы должны использовать это, когда может показаться, что вы создаете довольно большой шаблон (в 3 + строках и 3 + переменных, вы определенно должны делать это таким образом).

Новый способ сделать это - сделать это (используя индекс аргументов):

print('I am printing {0} and {1}'.format(x, y))

или в python 2.7 или 3 (с использованием подразумеваемого индекса):

print('I am printing {} and {}'.format(x, y))

или с именованными аргументами (это семантически легко читается, но код не выглядит очень СУХОЙ (т.е. не повторяйте сам))

print('I am printing {x} and {y}'.format(x=x, y=y))

Самое большое преимущество этого форматирования стиля % (не показано здесь) заключается в том, что он позволяет комбинировать позиционные и ключевые слова

print('I am printing {0} and {y}'.format(x, y=y))

Новое в Python 3.6, литералы формата

Python 3.6 будет иметь формат литералов, с более элегантным синтаксисом (меньше избыточности). Простой синтаксис выглядит примерно так:

print(f'I am printing {x} and {y}')

Литералы формата могут фактически выполнять код на месте:

>>> print(f'I am printing {"hello".capitalize()} and {"Wo" + "rld"}')
I am printing Hello and World

Ответ 2

вы должны создать список и использовать соединение с разделителем например "". Присоединиться (LIST_NAME)