W3docs

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

Все способы конкатенации строк в Python: +, +=, join(), f-строки и * — с примерами, подводными камнями и советами по производительности.

Конкатенация строк — это процесс объединения двух или более строк в одну. Python предлагает несколько подходов — от простого оператора + до эффективного метода join() — и выбор правильного важен для читаемости и производительности.

В этой главе рассматривается:

  • Операторы + и +=
  • Объединение списка строк с помощью join()
  • Встраивание значений с помощью f-строк
  • Повторение строки с помощью *
  • Конкатенация не-строковых значений (и распространённая ошибка TypeError)
  • Когда использовать join() вместо +

Связанные главы: Строки Python · Изменение строк · Форматирование строк · Методы строк

Использование оператора +

Оператор + — самый прямой способ объединить две строки. Python создаёт новую строку, содержащую все символы обоих операндов по порядку.

Конкатенация двух строк с помощью +

python— editable, runs on the server
Hello World

Вы можете объединять сколько угодно строк в одном выражении:

greeting = "Good" + " " + "morning" + ", " + "Python!"
print(greeting)
Good morning, Python!

Важно — допускаются только строки. Оператор + не конвертирует другие типы автоматически. Попытка конкатенировать строку и число вызовет TypeError:

age = 30
# This raises TypeError: can only concatenate str (not "int") to str
# message = "I am " + age + " years old."

# Correct: convert the number to a string first
message = "I am " + str(age) + " years old."
print(message)
I am 30 years old.

Всегда вызывайте str() для не-строкового значения перед использованием +.

Использование оператора +=

Оператор += добавляет строку к существующей переменной. Это сокращение для variable = variable + new_string и удобно при пошаговом построении строки.

Построение предложения по шагам с помощью +=

python— editable, runs on the server
Hello, World!

Распространённый случай — накопление строк внутри цикла:

words = ["one", "two", "three"]
result = ""
for word in words:
    result += word + " "
print(result.strip())
one two three

Примечание о производительности. Многократное использование += внутри цикла создаёт новый строковый объект на каждой итерации. Для небольших списков это приемлемо, но для больших коллекций join() (см. ниже) значительно быстрее.

Использование join() для конкатенации списка строк

str.join(iterable) объединяет все строки в итерируемом объекте, помещая строку, для которой вызван метод, между каждой парой. Это идиоматический способ Python для построения строки из коллекции.

Объединение слов с пробелом в качестве разделителя

python— editable, runs on the server
Hello World

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

letters = ["P", "y", "t", "h", "o", "n"]

print(", ".join(letters))   # comma-separated
print("".join(letters))     # no separator — merges into one word
print("\n".join(letters))   # one letter per line
P, y, t, h, o, n
Python
P
y
t
h
o
n

Почему предпочесть join() вместо + в циклах?

Каждый вызов + выделяет совершенно новую строку. join() вычисляет общую длину один раз, выделяет память один раз и копирует все части за один проход — это O(n) вместо O(n²) для больших входных данных.

# Slow for large collections
parts = ["a"] * 10_000
result = ""
for p in parts:
    result += p   # 10,000 allocations

# Fast — single allocation
result = "".join(parts)

Использование f-строк для конкатенации значений

f-строки (доступны начиная с Python 3.6) позволяют встраивать переменные и выражения непосредственно в строковый литерал без явных вызовов + или str().

first_name = "Ada"
last_name  = "Lovelace"
birth_year = 1815

bio = f"{first_name} {last_name} was born in {birth_year}."
print(bio)
Ada Lovelace was born in 1815.

f-строки часто чище, чем +, когда вы смешиваете несколько переменных с текстом. Смотрите главу Форматирование строк для полного синтаксиса f-строк и параметров форматирования.

Повторение строки с помощью *

Оператор * повторяет строку заданное количество раз — это лаконичная альтернатива циклу конкатенации.

line = "-" * 20
print(line)

echo = "ha" * 3
print(echo)
--------------------
hahaha

Конкатенация многострочных строк

Python автоматически объединяет соседние строковые литералы, расположенные на последовательных строках внутри скобок — + не нужен. Это удобно для длинных жёстко заданных строк.

message = (
    "This is the first part. "
    "This is the second part. "
    "And this is the third."
)
print(message)
This is the first part. This is the second part. And this is the third.

Можно также разбить длинную конкатенацию по строкам с помощью обратного слеша:

long_url = "https://example.com/products" \
           "?category=books" \
           "&sort=price"
print(long_url)
https://example.com/products?category=books&sort=price

Выбор подходящего метода

СитуацияЛучший выбор
Объединение двух или трёх литералов+
Построение строки в циклеjoin()
Смешивание переменных с текстомf-строка
Объединение списка или любого итерируемого объектаjoin()
Повторение строки N раз*
Длинные жёстко заданные строкиСоседние литералы в ()

Для получения дополнительных строковых операций смотрите Изменение строк, Срезы строк и Методы строк.

Практика

Практика
Which of the following are correct ways to concatenate strings in Python?
Which of the following are correct ways to concatenate strings in Python?
Was this page helpful?