Получить типы аргументов в Python - PullRequest
4 голосов
/ 09 февраля 2010

Я изучаю Python. Мне нравится использовать help () или interinspect.getargspec, чтобы получить информацию о функциях в оболочке. Но в любом случае я могу получить аргумент / возвращаемый тип функции.

Ответы [ 4 ]

4 голосов
/ 09 февраля 2010

Если вы имеете в виду во время определенного вызова функции, сама функция может получить типы своих аргументов, вызывая type для каждого из них (и, несомненно, будет знать тип, который она возвращает).

Если вы имеете в виду извне функции, нет: функцию можно вызывать с аргументами любых типов - некоторые такие вызовы будут вызывать ошибки, но априори невозможно определить, какими они будут.

Параметры могут быть произвольно оформлены в Python 3, и одно из возможных применений такого оформления состоит в том, чтобы выразить что-то о типах параметров (и / или других ограничениях на них), но язык и стандартная библиотека не дают указаний о том, как такие украшение может быть использовано. С тем же успехом можно принять стандарт, в соответствии с которым такие ограничения выражаются структурированным образом в строке документации функции, что дает преимущество в применимости к любой версии Python.

3 голосов
/ 06 ноября 2014

В документации 3.4.2 https://docs.python.org/3/library/inspect.html, есть упоминание о том, что именно вам нужно (а именно, получение типов аргументов для функции).

Сначала вам нужно определить свою функцию следующим образом:

def f(a: int, b: float, c: dict, d: list, <and so on depending on number of parameters and their types>):

Тогда вы можете использовать formatargspec(*getfullargspec(f)), который возвращает хороший хеш, как это:

(a: int, b: float)
1 голос
/ 09 февраля 2010

Есть функция с именем type().
Вот документы

Вы не можете заранее сказать, какой тип будет возвращать функция

>>> import random
>>> def f():
...  c=random.choice("IFSN")
...  if c=="I":
...   return 1
...  elif c=="F":
...   return 1.0
...  elif c=="S":
...   return '1'
...  return None
... 
>>> type(f())
<type 'float'>
>>> type(f())
<type 'NoneType'>
>>> type(f())
<type 'float'>
>>> type(f())
<type 'int'>
>>> type(f())
<type 'str'>
>>> type(f())
<type 'float'>
>>> type(f())
<type 'float'>
>>> type(f())
<type 'NoneType'>
>>> type(f())
<type 'str'>

Обычно хорошей практикой является возврат только одного типа объекта из функции, но Python не навязывает это вам

0 голосов
/ 09 февраля 2010

Простой способ использования bpython

Обучение Python снова становится легким и увлекательным!

альтернативный текст http://www.noiseforfree.com/bpython/img/bpython01.png

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...