Получение длины списка в виде строки - PullRequest
0 голосов
/ 04 февраля 2012

Хорошо, простой вопрос, пожалуйста, не убивайте меня.

Для записи длины списка я делаю:

logger.info("the length of my list is: " + str(len(mylist)));

Есть ли лучший способ сделать это в Python?

Ответы [ 4 ]

8 голосов
/ 04 февраля 2012

Я бы сделал что-то вроде этого:

logger.info('the length of my list is: {0}'.format(len(mylist)))

Изменить: Для получения дополнительной информации о том, почему format должен быть лучше, чем %, пожалуйста, посмотрите на PEP 3101 :

Оператор '%' в первую очередь ограничен тем, что это бинарный оператор, и, следовательно, может принимать не более двух аргументов. Один из этих аргументов уже посвящен строке формата, оставляя все остальные переменные втиснуть в оставшиеся аргумент. Текущая практика заключается в использовании словаря или кортеж в качестве второго аргумента, но так много людей прокомментировали [3], этому не хватает гибкости. Подход "все или ничего" (это означает, что нужно выбирать между только позиционными аргументами, или только именованные аргументы) считается чрезмерно сдерживающим.

Также обратите внимание, что вы даже можете добавить свой собственный формат для ваших объектов. Следовательно, вы не ограничены набором уже определенных символов преобразования, но вы можете определить свой собственный мини-язык для форматирования объектов в соответствии с вашими потребностями. Это что-то действительно мощное, недоступное через %.

Как объяснено в документации :

формат (значение [, format_spec])

Преобразование значения в «отформатированное» представление, управляемое format_spec. Интерпретация format_spec будет зависеть от типа аргумента значения, однако существует стандартный синтаксис форматирования, который используется большинством встроенных типов: Mini-Language Спецификации формата.

4 голосов
/ 04 февраля 2012

Вы также можете сделать что-то вроде:

logger.info('the length of my list is %d' % len(mylist))
1 голос
/ 04 февраля 2012

Вы также можете сделать это:

logger.info('the length of my list is: %s', len(mylist))

, который будет выполнять подстановку, только если регистратор включен для уровня INFO.Следовательно, это делает его немного быстрее, чем выполнять подстановку в сообщении перед его регистрацией, когда регистратор не включен.

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

>>> logging.info('%s %s %s', 1,2,3)
INFO:root:1 2 3
>>> logging.info('%(foo)s %(bar)s', {'foo': 'FOO', 'bar': 'BAR'})
INFO:root:FOO BAR

logging использует оператор форматирования строки.Для других целей format() может быть лучше.

0 голосов
/ 04 февраля 2012

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

Например:

FORMAT = "'%(message)s' is long: %(length)d"
logging.basicConfig(format=FORMAT)
logger = logging.getLogger()
d = {'length': 30}
logger.info('my message', extra=d)

Даст вам что-то вроде:

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