Проблема состоит в том, что необходимо дать #inner
набор width
(что-либо кроме auto
или inherit
). margin: 0 auto;
прием только работает, если внутренний элемент является более узким, чем его контейнерный элемент. Не будучи данным width
, #inner
автоматически расширяется до полной ширины #outer
, который заставляет ее содержание быть выравниванием по левой границе.
Это то, что я бы назвал ошибкой дизайна в спецификациях строки формата. Согласно документам ,
element_index ::= integer | index_string
, но, увы, -1
не является «целым числом» - это выражение. Оператор унарного минуса даже не имеет особо высокого приоритета, так что, например, print (-2 ** 2)
испускает -4
- еще одна распространенная проблема и, возможно, дизайн сбой (оператор **
имеет более высокий приоритет, поэтому сначала происходит увеличение в степень, а затем изменение знака, запрошенное унарной системой с более низким приоритетом -
).
Что угодно в этой позиции в строке формата, которая не является целым числом (а, например, выражение), обрабатывается как строка для индексации аргумента dict - например:
$ python3 -c "print('The last:{0[2+2]}'.format({'2+2': 23}))"
The last:23
Не уверен, стоит ли поднимать проблему в Python trac, но это '
Верно, не работает. решение:
>>> 'The last:{0}'.format(a[-1])
'The last:3'
Как только вы начнете копать, здесь возникает несколько проблем:
Рассматриваемый элемент называется "element_index", который определяется как целое число.
Проблема 1: если только не пользователи перейдите по ссылке «целое число» на справочное руководство по языку, они не узнают, что -1 считается выражением, а не целым числом. Между прочим, любой, кто хочет сказать «работает, как задокументировано», должен сначала увидеть проплем 7: -)
Предпочтительное решение: измените определение так, чтобы «element_index» мог иметь необязательный «-» перед целым числом.
Это целое число, верно? Не так быстро ... позже в документации будет сказано, что «выражение формы '[index]' выполняет поиск по индексу с использованием __ getitem __ ()
»
Проблема 3: должно быть сказано '[element_index]' (индекс не определен).
Проблема 4: Не все до мозга костей знают, что делает __ getitem __ ()
. Нужны более ясные документы.
Итак, мы можем использовать здесь словарный запас, а также целое число, не так ли? Да, есть две проблемы:
element_index является целым числом? Да, это работает с dict:
>>> "{0[2]}".format({2: 'int2'})
'int2'
Похоже, мы также можем использовать нецелочисленные строки, но для этого нужна более подробная документация (Проблема 5):
>>> "{0[foo]}".format({'foo': 'bar'})
'bar'
Но мы не можем использовать dict с ключом вроде ' 2 '(Проблема 6):
>>> "{0[2]}".format({'2': 'str2'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 2
>>> "{0['2']}".format({'2': 'str2'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: "'2'"
Проблема 7: Это "целое число" действительно должно быть задокументировано как "десятичное число" ... 0x22 и 0b11 обрабатываются как str, а 010 ("восьмеричное число") обрабатывается как 10, не 8:
>>> "{0[010]}".format('0123456789abcdef')
'a'
Обновление: PEP 3101 рассказывает правду:
Значит, мы можем использовать здесь как словарный запас, так и целое число, не так ли? Да, с одной-двумя проблемами:
element_index является целым числом? Да, это работает с dict:
>>> "{0[2]}".format({2: 'int2'})
'int2'
Похоже, мы также можем использовать нецелочисленные строки, но для этого нужна более подробная документация (Проблема 5):
>>> "{0[foo]}".format({'foo': 'bar'})
'bar'
Но мы не можем использовать dict с ключом вроде ' 2 '(Проблема 6):
>>> "{0[2]}".format({'2': 'str2'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 2
>>> "{0['2']}".format({'2': 'str2'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: "'2'"
Проблема 7: Это "целое число" действительно должно быть задокументировано как "десятичное число" ... 0x22 и 0b11 обрабатываются как str, а 010 ("восьмеричное число") обрабатывается как 10, не 8:
>>> "{0[010]}".format('0123456789abcdef')
'a'
Обновление: PEP 3101 рассказывает правду:
Значит, мы можем использовать здесь не только целое число, не так ли? Да, есть две проблемы:
element_index является целым числом? Да, это работает с dict:
>>> "{0[2]}".format({2: 'int2'})
'int2'
Похоже, мы также можем использовать нецелочисленные строки, но для этого нужна более подробная документация (Проблема 5):
>>> "{0[foo]}".format({'foo': 'bar'})
'bar'
Но мы не можем использовать dict с ключом вроде ' 2 '(Проблема 6):
>>> "{0[2]}".format({'2': 'str2'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 2
>>> "{0['2']}".format({'2': 'str2'})
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: "'2'"
Проблема 7: Это "целое число" действительно должно быть задокументировано как "десятичное число" ... 0x22 и 0b11 обрабатываются как str, а 010 ("восьмеричное число") обрабатывается как 10, не 8:
>>> "{0[010]}".format('0123456789abcdef')
'a'
Обновление: PEP 3101 рассказывает правду:
"" "
Правила синтаксического анализа ключа элемента очень просты. Если он начинается с цифры, то он рассматривается как число, в противном случае он используется как строка.
Поскольку ключи не разделены кавычками, невозможно указать произвольные ключи словаря (например, строки "10 "или": -] ") из строки формата.
"" "