Как typecheck bool [duplicate]

Вы можете просто получить последний div в массиве после вызова getElementsByTagName.

var divArray = wrapperDiv.getElementsByTagName("div");
if(divArray.length > 0)
    var lastDiv = divArray[divArray.length-1];
else
    console.log("Empty!");
31
задан Jim Fasarakis Hilliard 28 December 2016 в 14:05
поделиться

3 ответа

Возможно ли это? Возможно, mypy может это сделать, но я бы предпочел использовать проверку типа типа Python-3.6 (например, a: List[str]) вместо стиля комментария (например # type List[str]), используемого в mypy. И мне любопытно, есть ли переключатель на родном языке python 3.6 для достижения двух пунктов, которые я сказал выше.

Невозможно, чтобы Python сделал это за вас; вы можете использовать mypy, чтобы получить проверку типов (и встроенная программа проверки PyCharms тоже должна это сделать). В дополнение к этому, mypy также не ограничивает , что вы должны вводить только комментарии # type List[str], вы можете использовать переменные аннотации, как и в Python 3.6, поэтому a: List[str] работает одинаково хорошо.

С mypy как есть, потому что релиз свежий, вам необходимо установить typed_ast и выполнить mypy с --fast-parser и --python-version 3.6 , как описано в документах mypy's . Вероятно, это скоро изменится, но пока вам понадобятся их, чтобы они работали плавно

Обновление: --fast-parser и --python-version 3.6 теперь не нужны.

что mypy обнаруживает несовместимость второй операции на вашем a: List[str] просто отлично. Предположим, что ваш файл называется tp_check.py с операторами:

from typing import List

a: List[str] = []
a.append('a')
a.append(1)
print(a)

Запуск mypy с указанными выше аргументами (вы должны сначала pip install -U typed_ast):

python -m mypy --fast-parser --python-version 3.6 tp_check.py

улавливает ошибка:

tp_check.py:5: error: Argument 1 to "append" of "list" has incompatible type "int"; expected "str"

Как было отмечено во многих других ответах на тип намекания с помощью Python , проверки типов mypy и PyCharm s являются теми, которые выполняют проверку , не сам Python . Python не использует эту информацию в настоящее время, она хранит ее только как метаданные и игнорирует ее во время выполнения.

17
ответ дан Jim Fasarakis Hilliard 15 August 2018 в 22:50
поделиться

Аннотации типа в Python не предназначены для обеспечения соблюдения типа. Все, что связано с зависимостью статического типа во время выполнения, означало бы такие фундаментальные изменения, что даже бессмысленно продолжать называть результирующий язык «Python».

Обратите внимание, что динамическая природа Python делает ДОЛЖНЫ для создания внешний инструмент, используя код pure-python, для выполнения проверки типа времени выполнения. Это заставит программу работать (очень) медленно, но, возможно, она подходит для определенных категорий тестов.

Чтобы быть уверенным, одной из основ языка Python является то, что все является объектом, и что вы может попытаться выполнить любое действие над объектом во время выполнения. Если объект не имеет интерфейса, который соответствует выполненной попытке, он будет работать не во время выполнения.

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

Проверка типов Python позволяет любому количеству инструментов точно выполнять что: прерывать и предупреждать на этапе до фактического запуска приложения (но независимо от самого компиляции). Но характер языка не может быть изменен, чтобы на самом деле требовать, чтобы объекты соответствовали во время выполнения - и очень важно печатать и разбивать на самом этапе компиляции.

Хотя, можно ожидать, что будущее версии Python могут включать в себя проверку типа времени компиляции в самой среде исполнения Python - скорее всего, через и необязательный ключ командной строки. (Я не думаю, что это когда-либо будет по умолчанию - по крайней мере, чтобы не сломать сборку - возможно, это может быть сделано по умолчанию для выдачи предупреждений)

Итак, Python не требует статической проверки типов во время выполнения, он перестанет быть Python. Но существует хотя бы один язык, который использует как динамические объекты, так и статическую типизацию - язык Cython, который на практике работает как супермножество Python. Следует ожидать, что Cython включит новый синтаксис типа-подсказки, который будет очень скоро объявлен. (В настоящее время он использует различный синтаксис для необязательных статически типизированных переменных)

7
ответ дан jsbueno 15 August 2018 в 22:50
поделиться

Подсказки типов полностью предназначены для игнорирования в среде исполнения Python и проверяются только сторонними инструментами, такими как интегрированная проверка mypy и Pycharm. Существуют также различные менее известные сторонние инструменты, которые выполняют проверку типов либо во время компиляции, либо во время выполнения с использованием аннотаций типа, но большинство людей используют интегрированную контрольную панель mypy или Pycharm AFAIK.

На самом деле, я действительно сомневаюсь, что typechecking будут когда-либо интегрированы в Python в перспективном будущем - см. раздел «non-goal» PEP 484 (который ввел аннотации типов) и PEP 526 (который ввел переменные аннотации), а также комментарии Guido здесь .

Я лично был бы доволен тем, что проверка типов более тесно интегрирована с Python, но это не похоже на сообщество Python в целом готовы или готовы к такому изменению.

Последняя версия mypy должна понимать синтаксис аннотации переменных Python 3.6 и синтаксис стиля комментария. Фактически, переменные аннотации были в основном идеей Гвидо (Guido в настоящее время является частью команды mypy) - в основном поддержка аннотаций типа в mypy и Python была разработана довольно много одновременно.

25
ответ дан Michael0x2a 15 August 2018 в 22:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: