谁能解释一下python函数到底发生了什么?

时间:2017-12-09 06:50:49

标签: python class oop

我在python中知道的是我可以写这样的东西

blabla = Classname().somefunctions()

但在这种情况下," np.arange"和"重塑"是功能,它让我困惑,因为" np.arange"是一个函数,被视为一个类。问题是这怎么可能?

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

4 个答案:

答案 0 :(得分:1)

Python是一种面向对象的语言,其中每个变量都是一个对象。 np.arange returns ndarray个对象。然后,您可以调用reshape对象的ndarray方法。

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 :(得分:0)

我认为你混淆了这种行为:

blabla = Classname().somefunctions()

通过调用类somefunctions()中的方法Classname()将变量返回到变量blabla

在numpy模块中链接两个函数:
第一个a = np.arange(15)创建大小为15的数组,并将其分配给名为a的变量,并且:
第二个a.reshape(3, 5)将数组a重新整形为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)

答案 2 :(得分:0)

numpy.arange会返回ndarray个对象。

可能令人困惑的是numpy.reshape是一种将数组作为输入的类方法。但是,有一个等效方法numpy.ndarray.reshape,它是ndarray个对象可用的方法。在您的情况下,它是已使用的后一种方法。

答案 3 :(得分:0)

这是因为np.arange(15)返回类的实例。实际上python中的所有东西都是类。这就是为什么你可以做"HELLO WORLD".lower()

在这种情况下,代码的作用是评估np.(arange)reshape(3, 5)

之后

所以这将是等效的:

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