2016-09-29 3 views
0

Например, у меня плохо документированная библиотека. У меня есть объект из него, и я хочу знать, какие типы аргументов принимают определенные методы.Как определить тип параметра функции в python?

В IPython я могу запустить

In [28]: tdb.getData? 
Signature: tdb.getData(time, point_coords, sinterp=0, tinterp=0, data_set='isotropic1024coarse', getFunction='getVelocity', make_modulo=False) 
Docstring: <no docstring> 
File:  ~/.local/lib/python3.5/site-packages/pyJHTDB/libJHTDB.py 
Type:  method 

, но это не дает мне типы аргументов. Я точно не знаю, что такое тип point_coords.

+4

Если это родная функция python, в смысле C нет строгих типов имен. Вы могли бы даже передать бутерброд с ветчиной как «point_coords». –

+0

Если он не использует функцию аннотаций нового типа, то есть. –

+0

Прочитайте исходный код и найдите соответствующие комментарии и какие операции они попытаются выполнить в аргументе, или посмотрите примеры использования. На странице Github говорится о функции ['test_plain'] (https://github.com/idies/pyJHTDB/blob/master/pyJHTDB/test.py#L45), которая, как представляется, указывает, что« point_coords »должна быть Nx3 NumPy массив float32 dtype. – user2357112

ответ

1

Обычно функции в Python принимают аргументы любого типа, поэтому вы не можете определить, какой тип он ожидает.

Однако функция, вероятно, делает некоторые неявные предположения относительно полученного объекта.

Возьмите эту функцию, например:

def is_long(x): 
    return len(x) > 1000 

Какой тип аргумента x ли эта функция принимать? Любой тип, если он имеет длину.

Таким образом, он может принимать строку или список, или dict, или любой пользовательский объект, который вы создаете, до тех пор, пока он реализует __len__. Но это не займет целого числа.

is_long('abcd') # ok 
is_long([1, 2, 3, 4]) # ok 
is_long(11) # not ok 

Чтобы ответить на этот вопрос: Как вы можете сказать, что assumtions функция делает?

  • читать документацию
  • прочитать строку документации (попробуйте help(funcname))
  • догадка: Передайте любой аргумент к нему и посмотреть, как он выходит из строя. Если он не с AttributeError: экземпляр X не имеет атрибута 'get_value', он ожидает что-то с get_value.
Смежные вопросы