Расчет длины вкладок Python Expand - PullRequest
4 голосов
/ 17 апреля 2010

Меня смущает, как вычисляется длина строки при использовании расширенных таблиц. Я подумал, что expandtabs заменяет табуляцию соответствующим количеством пробелов (по умолчанию количество пробелов на табуляцию равно 8). Однако, когда я запускал команды, используя строки различной длины и различного количества вкладок, вычисление длины отличалось от того, что я ожидал (т.е. каждая вкладка не всегда приводила к увеличению длины строки на 8 для каждого экземпляра из "/ т").

Ниже приведен подробный вывод сценария с комментариями, объясняющими то, что, по моему мнению, должно быть результатом команды, выполненной выше. Кто-нибудь, пожалуйста, объясните, как рассчитывается длина при использовании расширенных вкладок?

IDLE 2.6.5     
>>> s = '\t'
>>> print len(s)
1
>>> #the length of the string without expandtabs was one (1 tab counted as a single space), as expected.
>>> print len(s.expandtabs())
8
>>> #the length of the string with expandtabs was eight (1 tab counted as eight spaces).
>>> s = '\t\t'
>>> print len(s)
2
>>> #the length of the string without expandtabs was 2 (2 tabs, each counted as a single space).
>>> print len(s.expandtabs())
16
>>> #the length of the string with expandtabs was 16 (2 tabs counted as 8 spaces each).
>>> s = 'abc\tabc'
>>> print len(s)
7
>>> #the length of the string without expandtabs was seven (6 characters and 1 tab counted as a single space).
>>> print len(s.expandtabs())
11
>>> #the length of the string with expandtabs was NOT 14 (6 characters and one 8 space tabs).
>>> s = 'abc\tabc\tabc'
>>> print len(s)
11
>>> #the length of the string without expandtabs was 11 (9 characters and 2 tabs counted as a single space).
>>> print len(s.expandtabs())
19
>>> #the length of the string with expandtabs was NOT 25 (9 characters and two 8 space tabs).
>>>

Ответы [ 2 ]

7 голосов
/ 17 апреля 2010

Как и при вводе вкладок в текстовом редакторе, символ вкладки увеличивает длину до следующего кратного 8.

Итак:

  • '\t' само по себе 8, очевидно.
  • '\t\t' равно 16.
  • 'abc\tabc' начинается с 3 символов, затем вкладка увеличивает его до 8, а затем последняя 'abc' увеличивает его с 8 до 11 ...
  • 'abc\tabc\tabc' аналогично начинается с 3, табуляция увеличивает его до 8, другая 'abc' идет до 11, затем еще одна табуляция увеличивает до 16, а последняя 'abc' приводит длину до 19.
5 голосов
/ 17 апреля 2010

Вкладка увеличивает указатель столбца до следующего кратного 8:

>>> 'abc\tabc'.expandtabs().replace(' ', '*')
'abc*****abc'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...