2010-02-09 3 views
4

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

+0

Что случилось с 'help' текста? Что не так с чтением самого кода? –

+0

Конечно, это неправильно. Вам действительно нравится читать исходный код, когда вы просто хотите вызвать метод. – leon

ответ

1

Существует функция, называемая type().
Here are the docs

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

>>> 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 не принуждает, что при вы

4

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

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

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

1

В 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) 
+0

Этот вопрос с 2010 года ... задолго до того, как существовал 3.4.2. Я бы решил удалить этот ответ. – rnevius

Смежные вопросы