Что работает быстрее: одинарные или двойные кавычки в Python?

Ответ

В Python нет разницы в производительности между одинарными (') и двойными (") кавычками. Оба варианта компилируются в одинаковые байткод-инструкции.

Доказательство через dis module:

import dis

def single_quotes():
    return 'Hello, World!'

def double_quotes():
    return "Hello, World!"

print("Single quotes bytecode:")
dis.dis(single_quotes)
print("nDouble quotes bytecode:")
dis.dis(double_quotes)

Оба выводят одинаковый байткод:

2           0 LOAD_CONST               1 ('Hello, World!')
            2 RETURN_VALUE

Рекомендации по использованию:

  1. Стиль кода (PEP 8): Будьте консистентны в проекте

  2. Содержание кавычек: Используйте противоположные кавычки внутри строки

    message = "It's a beautiful day"  # Лучше двойные
    quote = 'He said, "Hello!"'       # Лучше одинарные
  3. f-strings (форматированные строки): Всегда требуют двойных кавычек

    name = "Alice"
    greeting = f"Hello, {name}!"  # Правильно
    greeting = f'Hello, {name}!'  # Также работает, но менее распространено

Производительность f-strings vs других методов:

import timeit

# f-string быстрее всего
print(timeit.timeit("f'Value: {x}'", setup="x=42", number=1000000))
print(timeit.timeit("'Value: {}'.format(x)", setup="x=42", number=1000000))
print(timeit.timeit("'Value: %d' % x", setup="x=42", number=1000000))

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

Ответ 18+ 🔞

Вот, смотри, тут народ часто загоняется — а что быстрее, одинарные кавычки или двойные? Так вот, слушай сюда, разницы нихуя нет, вообще ноль целых, ноль десятых. Компилятору похуй, он их жуёт одинаково.

Доказательство через dis module:

import dis

def single_quotes():
    return 'Hello, World!'

def double_quotes():
    return "Hello, World!"

print("Single quotes bytecode:")
dis.dis(single_quotes)
print("nDouble quotes bytecode:")
dis.dis(double_quotes)

Оба выдают один и тот же байткод, ёпта:

2           0 LOAD_CONST               1 ('Hello, World!')
            2 RETURN_VALUE

Так как же тогда выбирать, спросишь? Ну, вот тебе правила, чтоб не выглядеть как манда с ушами:

  1. Консистентность — наше всё (PEP 8): Выбери что-то одно в проекте и придерживайся. Не надо мешать всё в кучу, а то получится пиздопроебибна.
  2. Содержание строки: Просто чтобы не экранировать кавычки внутри. Если в строке апостроф — бери двойные снаружи, и наоборот.
    message = "It's a beautiful day"  # Так норм
    quote = 'He said, "Hello!"'       # И так тоже
  3. f-strings (форматированные строки): Тут, бля, исторически сложилось, что все используют двойные. Хотя и одинарные работают, но выглядит это как-то криво, честно говоря.
    name = "Alice"
    greeting = f"Hello, {name}!"  # Вот так — красиво и правильно

А вот что реально имеет значение для скорости, так это выбор метода форматирования. f-strings — это просто космос по скорости, ядрёна вошь!

import timeit

# f-string — чемпион
print(timeit.timeit("f'Value: {x}'", setup="x=42", number=1000000))
print(timeit.timeit("'Value: {}'.format(x)", setup="x=42", number=1000000))
print(timeit.timeit("'Value: %d' % x", setup="x=42", number=1000000))

Итог: Не парься насчёт кавычек, они одинаковые. Лучше думай о читаемости кода и используй f-strings, где можно — это реально быстрее. А кавычки — дело вкуса и соглашения в команде.