С Python 3.6 вы можете использовать f-строки:
list_ = [9.0, 0.052999999999999999,
0.032575399999999997, 0.010892799999999999,
0.055702500000000002, 0.079330300000000006]
print(*[f"{element:.2f}" for element in list_])
#9.00 0.05 0.03 0.01 0.06 0.08
Вы можете использовать параметры печати, сохраняя код очень читаемым:
print(*[f"{element:.2f}" for element in list_], sep='|', end='<--')
#9.00|0.05|0.03|0.01|0.06|0.08<--
Это происходит, когда вы вводите временную мертвую зону в глобальную область. Как вы можете знать, let
объявления подняты, но оставлены неинициализированными . Из-за потока управления может случиться, что переменная никогда не инициализируется:
function …() {
if (false)
example; // would throw a ReferenceError if it was evaluated
… // do something
if (true)
return; // stop!
let example = 5; // never executed
}
Это прекрасно в области функций. Возможно, что-то пошло не так, возможно, переменная не нужна вообще - в следующем вызове будет создана новая область с новой переменной.
Аналогичная вещь может произойти в глобальной области, когда вы генерирует исключение, прежде чем инициализируется переменная (только исключения работают здесь как конструкция потока управления, ничто иное не достигает такого же эффекта).
throw new Error;
let example = 5;
В отличие от области функции, здесь имеет значение, что переменная остается неинициализированной. Глобальный охват длится вечно, и переменная вечно мертва. Это не было и никогда не будет инициализировано, и лексические переменные не могут быть повторно объявлены (что помогает предотвратить ошибки).
Этот обсуждался на es-discuss , но считался несущественным. Если выполнение верхнего уровня <script>
вызывает ошибку, у вас больше проблем, чем неинициализированных переменных. Нет пути для восстановления. Если вам это нужно (например, путем повторного объявления его в последовательных сценариях), вы все равно должны использовать var
.
У вас такая же проблема в консоли devtools - это немного неприятность , но может быть решена для консоли как специальная область.
Вы должны знать о подъеме в JS. В принципе, такое объявление, как let a = werwr;
, интерпретируется как
let a;
a = werwr;
. И почему он уже объявлен при запуске второй строки кода.
UPDATE
Итак, в спецификациях ES есть [ПРИМЕЧАНИЕ] в спецификациях ES https://tc39.github.io/ecma262/#prod-LetOrConst
let и const объявляют переменные, которые привязаны к LexicalEnvironment исполняемого контекста выполнения. Переменные создаются, когда их содержащая Лексическая среда создается, но может быть недоступна каким-либо образом, пока не будет оценена LexicalBinding переменной. Переменной, определяемой LexicalBinding с инициализатором, присваивается значение его AssignmentExpression Initializer при анализе LexicalBinding, а не при создании переменной. Если LexicalBinding в объявлении let не имеет инициализатора, переменной присваивается значение undefined при оценке LexicalBinding.
blockquote>...
" но может быть недоступен до тех пор, пока не будет оценен LexicalBinding переменной. означает, что объявление должно быть успешно завершено, прежде чем вы сможете получить доступ к переменной (либо получить значение, присвоить значение, либо сделать
typeof
, либо событиеdelete
);В вашем случае лексическая привязка переменной прерывается исключением.
let a = werwr // Uncaught ReferenceError: werwr is not defined
Пожалуйста, перейдите по ссылке и прочитайте об этом подробнее. Если вы найдете способ восстановить varaible
a
, скажите, пожалуйста. Спасибо, сегодня я узнал что-то новое о Javascript.
let
внутри eval () .... Ну. Удачи.
– vothaison
21 December 2016 в 06:06
let x;
является ярлыком дляlet x = undefined;
, и если вы поместите его в верхнем ручном режиме, вы инициализируете переменную до того, как будет выбрано исключение. – Bergi 21 December 2016 в 13:37<script onerror
– Pacerier 23 November 2017 в 22:46window.onerror
) и зарегистрировать ее, но вы не можете восстановить i> ее. Невозможно отменить то, что сценарий сделал до выброса исключения, и невозможно объявить переменную. – Bergi 23 November 2017 в 22:54