Как определить строку (квази) константу питона, которая имеет динамические входы? - PullRequest
4 голосов
/ 05 сентября 2011

Например:

MY_MESSAGE = 'Dear %s, hello.'
# ...
name = "jj"
print MY_MESSAGE % name

Есть ли в Python функция для выполнения чего-то вроде моего кода выше?

Ответы [ 4 ]

5 голосов
/ 05 сентября 2011

Да, именно так, как ты это написал.Ваш код в порядке.

3 голосов
/ 05 сентября 2011

Python на самом деле не имеет того же понятия «константа», которое вы найдете в C. Так что у вас есть довольно хороший подход.

Я бы на самом деле утверждал, что это один из примеров того, что «мы все взрослые по обоюдному согласию», не очень хорошо держатся. Думаю, что язык потрясающий, но постоянная время от времени будет ... хороша.

2 голосов
/ 05 сентября 2011

Оператор форматирования строки:% также может делать другие полезные вещи:

STRING = "This is %(foo)s, and this is also %(foo)s"
print STRING % {"foo": "BAR"}

# => This is BAR, and this is also BAR

Это действительно полезно, если вы будете повторять один аргумент. Конечно бьет

FORMAT_STRING % ("BAR", "BAR")

Вы также можете выполнять заполнение и форматирование чисел.

1 голос
/ 05 сентября 2011

Ваш код верен, но я считаю, что есть более предпочтительный способ сделать это:

>>> my_message = 'Dear {:s}, hello.'
>>> my_message.format('jj')
'Dear jj, hello.'

Предпочтительнее, поскольку в будущем возможна замена оператора % на метод .format().

Как уже упоминалось в Learning Python Марка Лутца. Четвертое издание , format метод:

  • имеет несколько функций, которых нет в выражении %,
  • может сделать значения подстановки более явными,
  • торгует оператором за возможно более мнемоническое имя метода,
  • не поддерживает разный синтаксис для одного и нескольких случаи подстановочной стоимости,

и позже, в той же книге:

... существует некоторый риск того, что разработчики Python могут отказаться от выражения % в пользу метода format в будущем. Фактически, в руководствах по Python 3.0 есть примечание об этом.

...