← Назад к вопросам
Преобразование camelCase в snake_case
2.3 Middle🔥 191 комментариев
#Теория тестирования
Условие
Напишите функцию, которая преобразует строку из camelCase в snake_case.
Пример
Вход: myVariableName Выход: my_variable_name
Комментарии (1)
🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)
Ответ сгенерирован нейросетью и может содержать ошибки
Решение
Анализ задачи
Необходимо преобразовать строку из camelCase в snake_case. Это часто встречается при работе с API, где названия полей приходят в camelCase (JavaScript/JSON), а нужно преобразовать их в snake_case (Python). Критично при автоматизации тестирования REST API.
Решение
import re
def camel_to_snake(camel_case_str: str) -> str:
"""Преобразует camelCase в snake_case."""
if not isinstance(camel_case_str, str):
raise TypeError("Входное значение должно быть строкой")
if not camel_case_str:
return ""
snake_case = re.sub(r"([a-z])([A-Z])", r"\1_\2", camel_case_str)
return snake_case.lower()
class StringConverter:
@staticmethod
def camel_to_snake_iterative(camel_case_str: str) -> str:
"""Преобразование через итерацию."""
if not camel_case_str:
return ""
result = []
for i, char in enumerate(camel_case_str):
if char.isupper() and i > 0:
result.append("_")
result.append(char.lower())
return "".join(result)
@staticmethod
def snake_to_camel(snake_case_str: str) -> str:
"""Обратное преобразование snake_case в camelCase."""
if not snake_case_str:
return ""
parts = snake_case_str.split("_")
return parts[0] + "".join(word.capitalize() for word in parts[1:])
Примеры использования
print(camel_to_snake("myVariableName")) # my_variable_name
print(camel_to_snake("getUserByID")) # get_user_by_id
print(StringConverter.camel_to_snake_iterative("myVariableName")) # my_variable_name
print(StringConverter.snake_to_camel("my_variable_name")) # myVariableName
Ключевые моменты
Подходы:
- Регулярное выражение: O(n), встроенная оптимизация, компактно
- Итеративный цикл: O(n), явный контроль, понятный код
Регулярное выражение:
([a-z])([A-Z])— ищет переход от нижней буквы к заглавнойr"\1_\2"— вставляет подчёркивание между группами
Граничные случаи:
- Пустая строка
- Один символ
- Только заглавные буквы
- Цифры в строке
- Уже преобразованный snake_case