Избегать дублирования аргументов в str.format?

В настоящее время я использую форматирование строк в своем коде, однако считаю, что я жестко кодирую для отображения повторяющихся переменных. Есть ли более эффективный способ сделать это?

print("Hello this is {} and {} and {} - Hello this is {} and {} and {} ".format(versionP, versionS, versionT, versionP, versionS, versionT))

Результат - тот, который я хочу, но мне нужно повторить это несколько раз, и это может стать утомительным. Есть ли способ записать переменную только один раз?

Это зависит от вашей версии Python. F-струны, предложенные Aaron_ab, доступны начиная с версии 3.6.

Bram Vanroy 08.01.2019 16:56
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
1
179
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете указать позиции, и str.format будет знать, какие аргументы использовать:

a, b, c = 1, 2, 3
string = "This is {0}, {1}, and {2}. Or, in reverse: {2}, {1}, {0}"
string.format(a, b, c)
# 'This is 1, 2, and 3. Or, in reverse: 3, 2, 1'

Вы также можете передать аргументы ключевого слова или распаковать словарь:

a, b, c = 1, 2, 3
string = """This is {versionP}, {versionS}, and {versionT}. 
            Or, in reverse: {versionT}, {versionS}, {versionP}"""
# string.format(versionP=a, versionS=b, versionT=c)
string.format(**{'versionP': a, 'versionS': b, 'versionT': c})
# This is 1, 2, and 3. 
#       Or, in reverse: 3, 2, 1

Обратите внимание, что техника со словарем может вызвать исключение, если в словарном словаре нет соответствующих ключей.

Aaron_ab 08.01.2019 17:01

Примечание для OP: я преобразовал свой ответ в рабочие примеры, чтобы вы могли сами увидеть, как это работает. Процесс идентичен для вашего варианта использования.

cs95 08.01.2019 17:04
Ответ принят как подходящий

Python 3.6

Я считаю это простым и понятным:

print(f"Hello this is {versionP} and {versionS} and {versionT} - 
        Hello this is {versionP} and {versionS} and {versionT}")

Вы даже можете использовать методы оценивать внутри f-форматирования или вложенные f-струны

Хороший ответ, но предполагается, что OP имеет python3.6

cs95 08.01.2019 16:57

Хорошая точка зрения. Это будет работать только в версии 3.6 и выше .. Мне нравится ваш ответ со словарем

Aaron_ab 08.01.2019 17:00

Другие вопросы по теме