То, что Вы хотите связать/интерполировать и как Вы хотите отформатировать результат, должно управлять Вашим решением.
Строковая интерполяция позволяет Вам легко добавлять форматирование. На самом деле Ваша строковая версия интерполяции не делает того же самого как Вашей версии конкатенации; это на самом деле добавляет дополнительную наклонную черту вправо перед q_num
параметр. Чтобы сделать то же самое, необходимо было бы записать return DOMAIN + QUESTIONS + "/" + str(q_num)
в том примере.
Интерполяция помогает отформатировать численные данные; "%d of %d (%2.2f%%)" % (current, total, total/current)
было бы намного менее читаемо в форме конкатенации.
Конкатенация полезна, когда у Вас нет постоянного числа объектов для строкового представления.
кроме того, знайте, что Python 2.6 представляет новую версию строковой интерполяции, названной строка, обрабатывающая по шаблону :
def so_question_uri_template(q_num):
return "{domain}/{questions}/{num}".format(domain=DOMAIN,
questions=QUESTIONS,
num=q_num)
Строковая шаблонная обработка намечена для возможной замены % - интерполяция, но этого не произойдет долгое время, я думаю.
IMHO, поддержка TR1 и auto
безопасны в использовании. В случае auto
это была одна из первых функций, которые были включены в стандарт, и это относительно небольшое изменение языка. Поэтому у меня не было бы проблем с его использованием.
Я бы немного сомневался в использовании списков инициализаторов
. На некоторых других форумах (например, comp.lang.c ++. Moderated) есть вопросы об их поведении и возможном изменении их поведения ближе к выпуску стандарта.
Я не использую поддержку GCC 4.4.0 C ++ 0x в производстве, но я использую функции TR1 с помощью библиотеки Boost http: // www. Boost Library хорошо протестирована и часто используется в производственных средах. Если вы позже конвертируете в стандарт C ++ 0x, единственное, что вам нужно сделать, это изменить свои директивы включения http://www.boost.org/doc/libs/1_40_0/doc/html/boost_tr1.html .
На мой взгляд, сейчас лучше использовать Boost Library, пока стандарт не будет готов. Это гораздо более независимый от компилятора способ.
MinGW просто не будет компилироваться с '-std = c ++ 0x'. Как ни странно, работает '-std = gnu ++ 0x'. В любом случае он кажется глючным, и я не буду на это рассчитывать.