0

Использование locals() и метода format() для строк: есть ли подводные камни?

28

Заголовок: Проблемы и подводные камни при использовании 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 ответ(ов)

0

Ответ для версий Python до 3.6

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

foo = "bar"
"{foo} и {baz} - это парное программирование".format(**locals())
<произойдет ошибка>
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь