2016-10-19 44 views
3

Pythonには、インプレイス関数の概念があります。例えばシャッフルは、何も返さないという点でインプレースです。Pythonのインプレース関数

機能が配置されるかどうかはどのように決定しますか?

from random import shuffle 

print(type(shuffle)) 

<class 'method'> 

だから私は、それがクラスrandomからmethodだ知っているが、インプレースとして、いくつかの関数を定義する特殊変数はありますか?

+2

私はあなたのドキュメンテーション文字列を読み取ることがあると思います。 –

答えて

4

与えられた関数の操作に関する知識はありません。ソースを見て、この情報を推論するか、ドキュメントの文字列を調べて、開発者がこの動作を文書化することを望む必要があります。例えば

は、list.sortに:特定の種類の上で動作させる機能については

help(list.sort) 
Help on method_descriptor: 

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

、その可変性は、一般的には、操作に関するある程度の知識を抽出することができます。たとえば、文字列上で動作するすべての関数が最終的に新しい関数を返すことは、インプレース操作を実行できないことを意味します。これは、Pythonの文字列が不変のオブジェクトであることに注意する必要があるためです。

+0

文字列は複合データ型なので?リストを文字列で使用すると、たとえばシャッフルがインプレースとして動作するためです。 – sayth

+1

@sayth演算子(関数)は、文字列が不変であるため、常に新しい文字列を返します。リストに変更を加えることができるので、リストに関係なく(コンテンツに関係なく)インプレースで操作できます。 –

2

一部の関数をインプレースとして定義する特殊変数はありませんが、標準関数にはインプレースで値を返さないというドキュメント文字列が必要です。たとえば:

>>> 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.`