2016-09-29 2 views
0

Zum Beispiel habe ich eine schlecht dokumentierte Bibliothek. Ich habe ein Objekt davon und möchte wissen, welche Arten von Argumenten bestimmte Methoden akzeptieren.Wie Funktionsparameter Typ in Python zu bestimmen?

In IPython kann ich

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 

laufen, aber es mir nicht die Typen der Argumente geben. Ich weiß nicht genau, was ist der Typ von point_coords.

+4

Wenn es eine native Python-Funktion ist, gibt es keine strikten Typen von Namen im C-Sinne. Sie könnten sogar ein Schinkensandwich als 'point_coords' übergeben. –

+0

Es sei denn, es wird die neue Typ-Annotations-Funktion verwendet. –

+0

Lesen Sie die Quelle und suchen Sie nach relevanten Kommentaren und nach den Operationen, die sie für das Argument ausführen möchten, oder suchen Sie nach Anwendungsbeispielen. Die Github-Seite sagt, dass man sich die Funktion ['test_plain'] (https://github.com/idies/pyJHTDB/blob/master/pyJHTDB/test.py#L45) ansehen sollte, die darauf hinweist, dass' point_coords' ein sein sollte Nx3 NumPy Array von float32 dtype. – user2357112

Antwort

1

Normalerweise akzeptieren Funktionen in Python Argumente beliebigen Typs, so dass Sie nicht definieren können, welchen Typ es erwartet.

Dennoch macht die Funktion wahrscheinlich einige implizite Annahmen über das empfangene Objekt.

Nehmen Sie diese Funktion zum Beispiel:

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

Welche Art von Argument x kann diese Funktion übernehmen? Jeder Typ, solange die Länge definiert ist.

So kann es eine Zeichenfolge, eine Liste oder ein dict oder ein benutzerdefiniertes Objekt, das Sie erstellen, verwenden, solange es __len__ implementiert. Aber es wird keine ganze Zahl brauchen.

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

die Frage zu beantworten: Wie kann man sagen, was assumtions die Funktion macht?

  • lesen Sie die Dokumentation
  • die doc-String lesen (versuchen help(funcname))
  • Vermutung: Übergeben Sie jedes Argument, um es sehen, wie es funktioniert nicht. Wenn es mit fehlschlägt AttributError: X-Instanz hat kein Attribut 'get_value', erwartet etwas mit get_value.
Verwandte Themen