2017-12-09 6 views
1

は、私はこの誰かが正確に何がPythonの関数で起こっていることを説明することができますか?私はPythonで知っている

blabla = Classname().somefunctions() 

のようなものを書くが、この場合、両方の「np.arange」として「再構築」機能と「np.arange」であるので、それは私を混乱することができていますクラスのように扱われます。問題はこれがどのように可能なのか?

import numpy as np 
a = np.arange(15).reshape(3, 5) 
print(a) 
+1

'...のように扱われている:あなたは、たとえば、コードがnp.(arange)を評価し、そうreshape(3, 5)

後、これは同等になりますです何この場合"HELLO WORLD".lower()

を行うことができた理由ですクラス - あなたはその声明が意味することを説明できますか? – wwii

+0

[メソッド連鎖](https://en.wikipedia.org/wiki/Method_chaining) – wwii

答えて

2

Pythonはすべての変数がオブジェクトであるオブジェクト指向言語です。 np.arangereturnsndarrayオブジェクトです。そして、ndarrayオブジェクトのreshapeメソッドを呼び出すことができます。

私はあなたがこの動作を混乱していると思う
import numpy as np 

a = np.arange(15) 

type(a) 
Out[148]: numpy.ndarray 

a 
Out[149]: array([ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14]) 

a = a.reshape(3, 5) 

type(a) 
Out[151]: numpy.ndarray 

a 
Out[152]: 
array([[ 0, 1, 2, 3, 4], 
     [ 5, 6, 7, 8, 9], 
     [10, 11, 12, 13, 14]]) 
1

メソッドを呼び出すことによって返された値を代入され
blabla = Classname().somefunctions() 

somefunctions() 2のチェーンを使用して変数blabla

にクラスClassname()にありますnumpyモジュールの関数:
最初のa = np.arange(15)は、サイズ15のアクセスと配列を作成し、それをという名前の変数に割り当てます配列aをそれぞれ5つの要素を含む3つの配列の配列に再構成する第2のa.reshape(3, 5)があります。

import numpy as np 
a = np.arange(15) #-> [ 0 1 2 3 4 5 6 7 8 9 10 11 12 13 14] 
a = a.reshape(3, 5) #-> [[ 0 1 2 3 4] [ 5 6 7 8 9] [10 11 12 13 14]] 
print(a) 
0

numpy.arangendarrayオブジェクトを返します。

numpy.reshapeは、配列を入力として受け取るクラスメソッドですが、混乱している可能性があります。しかし、ndarrayオブジェクトで使用できるメソッドである同等のメソッドnumpy.ndarray.reshapeがあります。あなたの場合、後者の方法が使われています。

1

これは、np.arange(15)がクラスのインスタンスを返すために発生します。実際には、Pythonのすべてがクラスです。

import numpy as np 
a = np.arange(15) 
a = a.reshape(3, 5) 
print(a) 
関連する問題