Найти - Пользователи
Полная версия: Есть ли разница между %s и str()
Начало » Python для новичков » Есть ли разница между %s и str()
1
agaspher
Здравствуйте!

Может быть кто-то подскажет, есть ли разница между %s и str()
пытаюсь разобраться с кодировками и работой со строками, но похоже запутался
В доке по python 2.7 вижу:
's' String (converts any Python object using str())
то есть как я понял ‘s’ просто способ вызова str(), но на деле:
cur - подключение к базе firebird 2.1 charset win1251 используя kinterbasdb
 
for tuple in cur:
    print '%s ' % tuple
получаю вывод в человеческом виде:
Administrator
Администратор

если делаю
for tuple in cur:
    print str(tuple)
выводится:
(u'Administrator',)
(u'\u0410\0434\u043c\u0438\u043d\u0438\u0441\u0442\u0440\u0430\u0442\u043e\u0440',)

или я неправильно понял, может тогда кто расскажет подробно почему оба варианта работают именно так?

JOHN_16
agaspher
сделайте так и посмотрите на результаты:
print str(tuple[0])
print ' '.join(tuple)
а еще посмотрите на это:
>>> t=('qwe',)
>>> tt=('qwe','asd')
>>> print '%s'%t
qwe
>>> print '%s'%tt
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: not all arguments converted during string formatting
>>> l=[1,2]
>>> str(l)
'[1, 2]'
>>> print '%s'%l
[1, 2]

По сути: все дело в том что в вашем первом случае у вас в строке один оператор подстановки, а вы на вход подаете кортеж длиной 1. Соответственно str() была применена к нулевому элементу кортежа, коим является строка. И это единственное значение было корректно в соответствии со всеми правилами выведено на экран.
Во втором случае вы пытаетесь на печать вывести строковое представление кортежа (а не строковое представление его содержимого), а он выглядит именно так как и вы показали.

спать охота, объяснил как смог))
py.user.next
agaspher
то есть как я понял ‘s’ просто способ вызова str()
>>> print '%s%s%s' % (1, tuple(), [])
1()[]
>>>
вот три раза выполняется str(), и каждый результат вставляется на своё место в форматной строке
agaspher
Спасибо! Вроде все более менее встало на свои места
строковое представление кортежа (а не строковое представление его содержимого)
вот этой мысли не хватало, даже не думал об этом
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB