Использование locals() и метода format() для строк: есть ли подводные камни?
Заголовок: Проблемы и подводные камни при использовании locals() для генерации строк в Python
Я столкнулся с проблемой избыточного написания кода для генерации строк и задумался о том, чтобы использовать следующий паттерн:
def buildString(user, name='john', age=22):
userId = user.getUserId()
return "Name: {name}, age: {age}, userid:{userId}".format(**locals())
Однако использование функции locals()
вызывает у меня неудобство. Существуют ли какие-либо недостатки, предостережения или предупреждения о плохих практиках при использовании этого подхода? Есть ли риск неожиданного поведения?
Для контекста: раньше я постоянно использовал подобные конструкции:
"{name} {age} {userId} {etc}...".format(name=name, age=age, userId=userId, etc=etc)
Благодарю за советы и обсуждения!
1 ответ(ов)
Ответ для версий Python до 3.6
Это довольно старая информация, но если вы используете метод .format
, стоит иметь в виду, что один из подводных камней при передаче **locals()
заключается в том, что если переменная не определена, это приведет к ошибке. Явное указание переменных, которые передаются, поможет избежать этой проблемы в большинстве современных интегрированных сред разработки (IDE).
foo = "bar"
"{foo} и {baz} - это парное программирование".format(**locals())
<произойдет ошибка>
Как экранировать фигурные скобки ({}) в строке при использовании .format?
Как заполнить строку в Python пробелами?
Ошибка форматирования текста: недопустимое выравнивание '=' в спецификаторе формата строки
Форматирование строк против конкатенации
Как изменить порядок столбцов в DataFrame?