我对python来说还比较陌生,在我看来(可能是因为我不明白),有时语法有些不一致。
假设我们正在使用pandas软件包fedcba
ihg
。然后,import pandas as pd
即pd.method
可以访问此包中的任何方法。现在,pandas程序包中的某些对象具有某些方法,即pd.DataFrame(...)
(注意圆括号),或某些属性,即df.reindex()
(注意无括号)。
我的问题有两个:
首先,我上面所说的正确吗?
第二,为什么df.columns
方法不能保持上述语法?如果这是一种方法,那么我肯定应该使用iloc
而不是df.iloc(0,0)
来获取数据帧的左上值...
谢谢
答案 0 :(得分:4)
TEMPLATES = [{
'BACKEND': 'django.template.backends.django.DjangoTemplates',
'DIRS': [
os.path.join(PROJECT_ROOT, 'site1-templates'),
os.path.join(PROJECT_ROOT, 'base-templates'),
],
'OPTIONS': {
# etc
}
}]
这里是python模块
import pandas as pd
,如果您注意对流命名pd.DataFrame(...)
是此处的课程。
DataFrame
是一种在实例本身上调用的方法。
df.reindex()
没有括号,因为它是对象的属性而不是方法
df.columns
用于按 index 获取项目,因此在这里显示df.iloc
的可索引性质更有意义。
答案 1 :(得分:2)
是的,从概念上讲您是正确的,如果它是可调用的,则无论是否可切片,都应使用()
而不是[]
进行调用。而这正是幕后发生的事情。一个例子是:
>>> lst = [1,2,3,4]
# slicing:
>>> lst[1:3]
... [2, 3]
# calling magic __getitem__ :
>>> lst.__getitem__(slice(1,3))
... [2, 3]
因此,在幕后,对任何可切片对象进行切片都可以使用这种dunder-getitem方法或类似方法。但是,这个__
概念在OOP中传统上是指protected
,强烈建议您不要直接调用它们,因此我们看不到方法调用本身,而是看到了{{ 1}}。同样,这些[...]
方法或dunder
在日常编程中会非常麻烦,而不是像magic
或简单的[...]
(也就是{{1} }(+
)的键入,直观和与框架其余部分的融合非常容易。因此,magic
与__add__
一起使用,而不是方法调用。
如果有时间,我想请您参考.iloc
上的熊猫源代码,尝试查找[...]
:https://github.com/pandas-dev/pandas/blob/master/pandas/core/indexing.py