2016-10-19 4 views
3

In Python gibt es ein Konzept von Inplace-Funktionen. Zum Beispiel ist shuffle inplace, da es keine zurückgibt.Inplace-Funktionen in Python

Wie kann ich feststellen, ob eine Funktion an Ort und Stelle ist oder nicht?

from random import shuffle 

print(type(shuffle)) 

<class 'method'> 

So weiß ich, es ist ein method von Klasse ist random aber gibt es eine spezielle Variable, die einige Funktionen wie Inplace definiert?

+2

Ich glaube, müssen Sie die docstring lesen. –

Antwort

4

Sie können kein Vorwissen über die Operation für eine bestimmte Funktion haben. Sie müssen entweder auf die Quelle schauen und diese Informationen herleiten, oder Sie untersuchen die doc-string dafür und hoffen, dass der Entwickler dieses Verhalten dokumentiert.

Zum Beispiel in list.sort:

help(list.sort) 
Help on method_descriptor: 

sort(...) 
    L.sort(key=None, reverse=False) -> None -- stable sort *IN PLACE* 

Für Funktionen auf bestimmte Arten arbeiten, ihre Veränderlichkeit der Regel können Sie einige Kenntnisse über den Betrieb zu extrahieren. Sie können beispielsweise sicher sein, dass alle Funktionen, die mit Strings arbeiten, einen neuen Wert zurückgeben, dh sie können keine direkten Operationen ausführen. Das liegt daran, dass Sie wissen sollten, dass Zeichenfolgen in Python unveränderliche Objekte sind.

+0

Die Zeichenfolge, weil es ein zusammengesetzter Datentyp ist? Denn wenn Sie eine Liste mit einem String verwenden, würde beispielsweise shuffle als Inplace fungieren. – sayth

+1

@sayth Operationen (Funktion) auf Strings geben immer einen neuen String zurück, da Strings unveränderlich sind. Operationen auf Listen (unabhängig vom Inhalt) können an Ort und Stelle sein, da Listen mutiert werden können. –

2

Ich glaube nicht, dass es eine spezielle Variable gibt, die eine Funktion als In-Place definiert, aber eine Standardfunktion sollte eine Doc-Zeichenfolge haben, die besagt, dass sie an Ort und Stelle ist und keinen Wert zurückgibt. Zum Beispiel:

>>> print(shuffle.__doc__)

Shuffle list x in place, and return None.

`Optional argument random is a 0-argument function returning a 
    random float in [0.0, 1.0); if it is the default None, the 
    standard random.random will be used.`