f"..."
строки хороши при интерполяции результатов выражения в литерал , но у вас нет литерала, у вас есть шаблон строки в отдельной переменной.
Вы можетеиспользуйте str.format()
, чтобы применить значения к этому шаблону:
name=["deep","mahesh","nirbhay"]
user_input = "certi_{element}" # this string i ask from user
for value in name:
print(user_input.format(element=value))
Заполнители форматирования строки, использующие имена (например, {element}
), не являются переменными .Вместо этого вы назначаете значение для каждого имени в аргументах ключевого слова вызова str.format()
.В приведенном выше примере element=value
передает значение переменной value
, чтобы заполнить заполнитель element
.
В отличие от f
-строк, заполнители {...}
равны not выражений, и вы не можете использовать произвольные выражения Python в шаблоне.Это хорошо, вы не хотели бы, чтобы конечные пользователи могли выполнять произвольный код Python в вашей программе.См. Формат строки синтаксиса Документация для получения подробной информации.
Вы можете передать любое количество имен;шаблон строки не имеет для использования любого из них.Если вы объедините str.format()
с соглашением о вызовах **mapping
, вы можете использовать любой словарь в качестве источника значений:
template_values = {
'name': 'Ford Prefect',
'number': 42,
'company': 'Sirius Cybernetics Corporation',
'element': 'Improbability Drive',
}
print(user_input.format(**template_values)
Вышеуказанное позволит пользователю использовать любое из имен в template_values
вих шаблон, сколько угодно раз.
Хотя вы можете использовать locals()
и globals()
для создания словарей, отображающих имена переменных в значения, я бы не рекомендовал такой подход.Используйте выделенное пространство имен, подобное приведенному выше, чтобы ограничить доступные имена и задокументировать эти имена для своих конечных пользователей.