Форматирование текста в разных версиях Python - PullRequest
2 голосов
/ 31 июля 2009

У меня проблема с выполнением скрипта python в разных средах с разными версиями интерпретатора, потому что форматирование текста отличается от одной версии к другой.

В python <2.6 это делается так: </p>

n = 3
print "%s * %s = %s" % (n, n, n*n)

тогда как в python> = 2.6 лучший способ сделать это :

n = 3
print "{0} * {0} = {1}".format(n, n*n)

Но как насчет того, когда вы хотите, чтобы скрипт запускался в любой версии Python? Что лучше: написать код python <2.6 для обеспечения мгновенной совместимости или использовать код python> = 2.6, который будет использоваться в будущем?

Есть ли другой вариант написания кода для актуальных версий Python без потери совместимости со старшими?

Спасибо

Ответы [ 3 ]

3 голосов
/ 31 июля 2009

str.format () был представлен в Python 2.6, но он стал предпочтительным методом форматирования строк в Python 3.0.

В Python 2.6 оба метода, конечно, будут работать.

Все зависит от того, кто будет потребителем вашего кода. Если вы ожидаете, что большинство ваших пользователей не будут использовать Python 3.0, используйте старое форматирование.

Однако, если в Python 3.0 есть какая-то обязательная функция, необходимая для вашего проекта, то вполне разумно требовать от пользователей использования определенной версии интерпретатора. Имейте в виду, однако, что Python 3.0 ломает некоторый код до 3.0.

Итак, если вы хотите использовать Python 3.0, используйте str.format (). Если вы нацелены на Pyhon <3.0, используйте форматирование%. </p>

1 голос
/ 31 июля 2009

А как насчет старого доброго кортежа или цепочки строк?

print n, "*", n, "=", n*n
#or
print str(n) + " * " + str(n) + " = " + str(n*n)

это не так красиво, но должно работать в любой версии.

если это слишком многословно, возможно, может помочь пользовательская функция:

def format(fmt, values, sep="%%"):
   return "".join(str(j) for i in zip(fmt.split(sep), values) for j in i)

#usage
format("%% * %% = %%", [n, n, n*n])
0 голосов
/ 01 августа 2009

Вы должны взглянуть на string.Template (ссылка для 3.1) способ форматирования строки, API стабильно работает во всех версиях> = 2.5. Я думаю, что объединение - это простой способ добиться переносимости как для старых, так и для новых версий Python. Очевидно, что он медленный, многословный и менее питонический, чем альтернативы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...