Python 为什么iloc使用[]而不是()?

Python 为什么iloc使用[]而不是()?,python,pandas,Python,Pandas,我对python比较陌生,在我看来(可能是因为我不理解),语法有时有点不一致 假设我们正在使用pandas包将pandas导入为pd。然后可以通过pd.method访问此包中的任何方法,即pd.DataFrame(…)。现在,pandas包中的某些对象具有某些方法,即df.reindex()(请注意圆括号),或某些属性,即df.columns(请注意无括号) 我的问题有两个: 首先,我上面说的对吗 其次,为什么iloc方法不维护上述语法?如果这是一种方法,那么我肯定应该使用df.iloc(0,0

我对python比较陌生,在我看来(可能是因为我不理解),语法有时有点不一致

假设我们正在使用pandas包
将pandas导入为pd
。然后可以通过
pd.method
访问此包中的任何方法,即
pd.DataFrame(…)
。现在,pandas包中的某些对象具有某些方法,即
df.reindex()
(请注意圆括号),或某些属性,即
df.columns
(请注意无括号)

我的问题有两个:

首先,我上面说的对吗

其次,为什么
iloc
方法不维护上述语法?如果这是一种方法,那么我肯定应该使用
df.iloc(0,0)
而不是
df.iloc[0,0]
来获得数据帧的左上角值


谢谢

将熊猫作为pd导入
这里是python模块

pd.DataFrame(…)
如果您注意命名对流
DataFrame
在这里是一个类

df.reindex()
是对实例本身调用的方法

df.columns
没有括号,因为它是对象的属性而不是方法


df.iloc
是通过索引来获取项目的,因此显示其可索引性质
[]
在这里更有意义

是的,您在概念上是正确的,如果它是可调用的,则应该使用
()
而不是
[]
来调用,无论它是否是可切片的。这正是引擎盖下发生的事情。例如:

>>> lst = [1,2,3,4]
# slicing:
>>> lst[1:3]
... [2, 3]
# calling magic __getitem__ :
>>> lst.__getitem__(slice(1,3))
... [2, 3]
因此,在引擎盖下,在任何可切片对象中切片都可以使用dunder getitem方法或类似的方法。然而,这个
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu。此外,这些
dunder
方法或
magic
在日常编程中会非常麻烦,而像
[…]
或简单的
+
(这也是一种名为
\uu add\uuu
magic
)更易于键入、直观,并且与框架的其余部分很好地融合。因此,
.iloc
[…]
一起使用,而不是方法调用


如果您有时间,我想让您参考
索引
上的pandas源代码,尝试查找
\u LocationIndexer

,因为它是索引,所以它们使用与索引到列表相同的语法。任何可调用的,都使用()来调用(即方法或函数)。任何可索引的东西都使用[]来索引(即列表/数组/集合等)@BlueRine S但是可调用的
df.iloc
也是可切片的,而OP没有understand@Jab然后,您应该向OP进一步解释OOP的底层核心。也许可以用神奇的方法展示一个例子。@jornsharpe,但是键入
df.iloc([0,0])
是否更有意义呢。在我看来,如果这是一种方法,我应该总是需要()。。。