Почему кортеж используется в строковом формате - PullRequest
4 голосов
/ 10 ноября 2010

я наткнулся на код типа

print "Users connected: %d" % (userCount, )

Мне было интересно, есть ли причина не писать их в

print "Users connected: %d" % userCount

Кажется, у них одинаковый вывод

Ответы [ 5 ]

14 голосов
/ 10 ноября 2010

Код без явного кортежа может укусить вас, если ваша переменная содержит кортеж.

>>> nums = (1, 2, 3, 4)
>>> print "debug: %r" % (nums, )
debug: (1, 2, 3, 4)
>>> print "debug: %r" % nums
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting

Так что всегда использование кортежа в синтаксисе строки формата является частью защитного кодирования.

0 голосов
/ 10 ноября 2010

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

0 голосов
/ 10 ноября 2010

в этом случае да, поскольку передается только элемент.Если вам нужно передать несколько предметов, необходим кортеж

print 'There are %d user connected %s' % (userCount, 'today')
0 голосов
/ 10 ноября 2010

Да, они есть, но скобки используются для группировки переменных в таком состоянии

print "Hi there. I am %s and i am %d years old"%(name, age)

Так что это основное использование, с одной или несколькими переменными ...

0 голосов
/ 10 ноября 2010

Они заканчивают тем же самым, если у вас есть одна переменная для замены.

Из документов :

Учитывая format % values (в вашем случае format = "Пользователи подключены:% d" и values = userCount)

Если для формата требуется один аргумент, значения могут быть одним не кортежем В противном случае значения должны быть кортеж с точным количеством предметов указывается форматной строкой или один объект отображения (например, словарь)

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