Как я могу проверить типы переменных в Python?
Ага, как сказал Эван, не typing проверять типа. Просто попробуйте python-shell использовать значение:
def myintfunction(value):
""" Please pass an integer """
return 2 + value
Здесь python-interpreter нет проверки типов. Это намного python-interpreter лучше! Посмотрим, что будет, когда pythonista я попробую:
>>> myintfunction(5)
7
Это работает, потому typing что это целое число. Хм. Давайте pythonic попробуем текст.
>>> myintfunction('text')
Traceback (most recent call last):
File "", line 1, in
File "", line 3, in myintfunction
TypeError: unsupported operand type(s) for +: 'int' and 'str'
Он показывает pythonic ошибку TypeError, что он pythonista должен делать в любом случае. Если pythonic вызывающий хочет это поймать, это python-interpreter возможно.
Что бы вы сделали, если py бы проверили тип? Показывать pythonic ошибку верно? Таким образом, вам python-interpreter не нужно выполнять проверку typing типов, потому что ошибка python-shell уже появляется автоматически.
Кроме typing того, поскольку вы не выполняли python-shell проверку типов, ваша функция pythonista работает с другими типами:
Плавающие:
>>> print myintfunction(2.2)
4.2
Комплексные pythonista числа:
>>> print myintfunction(5j)
(2+5j)
Десятичные знаки:
>>> import decimal
>>> myintfunction(decimal.Decimal('15'))
Decimal("17")
Даже pythonic совершенно произвольные объекты, умеющие py складывать числа!
>>> class MyAdderClass(object):
... def __radd__(self, value):
... print 'got some value: ', value
... return 25
...
>>> m = MyAdderClass()
>>> print myintfunction(m)
got some value: 2
25
Таким образом, проверка dynamic-typing типов ничего не дает. И много pythonic потеряешь.
ОБНОВЛЕНИЕ:
Поскольку вы отредактировали py вопрос, теперь ясно, что py ваше приложение вызывает python-shell некоторую подпрограмму восходящего py потока, которая имеет смысл pythonista только с целыми числами.
В pythonic таком случае, я все же считаю, что python-shell вам следует передать параметр python как получено вышестоящей функции. Функция typing восходящего потока справится pythonic с этим правильно, например. выдает typing ошибку, если это необходимо. Я python-interpreter очень сомневаюсь, ваша функция, которая pythonic имеет дело с IP-адресами, будет python вести себя странно, если typing вы передадите ей число с typing плавающей запятой. Если вы pythonic сообщите нам название библиотеки, мы typing можем это проверить.
Но ... Если pythonista восходящая функция будет typing вести себя неправильно и pythonista убьет некоторых детей, если dynamic-typing вы передадите ей число с pythonista плавающей запятой (я все pythonic еще очень сомневаюсь в этом), тогда python-interpreter просто вызовите для нее int()
:
def myintfunction(value):
""" Please pass an integer """
return upstreamfunction(int(value))
Вы pythonic по-прежнему не проверяете dynamic-typing типы, поэтому вы получаете python-shell максимальную пользу от отказа python-shell от проверки типов.
Если даже dynamic-typing после всего этого вы действительно typing хотите ввести проверку, несмотря py на то, что это снижает удобочитаемость python-interpreter и производительность вашего python-interpreter приложения без каких-либо pythonic преимуществ, используйте pythonic для этого assert
.
assert isinstance(...)
assert type() is xxxx
Таким образом python-shell мы можем отключить assert
и удалить py эту
функцию из программы, вызвав typing ее как
python -OO program.py
python
typing
dynamic-typing
Как я могу проверить типы переменных в Python?
Мы используем файлы cookies для улучшения работы сайта. Оставаясь на нашем сайте, вы соглашаетесь с условиями использования файлов cookies. Чтобы ознакомиться с нашими Положениями о конфиденциальности и об использовании файлов cookie, нажмите здесь.