Почему Python string.printable содержит непечатаемые символы? - PullRequest
12 голосов
/ 07 января 2009

У меня есть две загадки String.printable в одном вопросе.

Сначала в Python 2.6:

>>> string.printable
'0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'

Посмотрите на конец строки, и вы увидите, что \ x0b \ x0c торчит, как больной палец. Почему они там? Я использую машину с австралийскими настройками, поэтому здесь не должно быть символов с акцентом или тому подобного.

Далее попробуйте запустить этот код:

for x in string.printable: print x,
print
for x in string.printable: print x

Первая строка успешно печатает все символы, разделенные пробелом. Два нечетных символа оказываются мужскими и женскими символами.

Во второй строке успешно печатаются все символы, кроме последних, разделенных переводом строки. Мужской символ печатает; женский символ заменяется пропущенным символом (прямоугольником).

Я уверен, что Python не был предназначен для гендерных предрассудков, так что же даст разницу?

Ответы [ 2 ]

26 голосов
/ 07 января 2009

Существует разница в «для печати» для «может отображаться на вашем экране». Ваш терминал отображает управляющие коды принтера ascii 0x0B и 0x0C в качестве мужского и женского символов, потому что именно это содержат эти индексы в вашем шрифте. Эти символы более точно описаны как символы вертикального табулятора и формы. Эти два символа, наряду с \ t \ r и \ n, пригодны для печати и выполняют четкие функции на принтере.

6 голосов
/ 07 января 2009

Изнутри cmd.exe:

>>> print '\x0b'
♂
>>> print '\x0c'
♀
>>> print '\f' # form feed
♀
>>> print '\v' # vertical tab
♂
>>>

Внутри Emacs:

>>> print '\f\v'
^L^K

Вот выдержка из форматов (5) 'man page:

| Sequence | Character    | Terminal Action                             |
|----------+--------------+---------------------------------------------|
| \f       | form-feed    | Moves the printing position to the initial  |
|          |              | printing position of the next logical page. |
| \v       | vertical-tab | Moves the printing position to the start of |
|          |              | the next vertical tab position. If there    |
|          |              | are no more vertical tab positions left on  |
|          |              | the page, the behavior is undefined.        |
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...