Python 过程的顺序(何时将变量放在括号中与将其放在句点之前)



我目前正在自学如何编码,我对Python(和其他所有语言(有一个非常广泛的问题。您如何知道何时将变量放在句点之前或函数的括号内?

例如 - 此表达式将检索数据集的相关性。

df.corr()

但是,为什么括号是封闭的,里面没有任何信息?为什么你不能像这样将变量放在表达式中 -

corr(df)

我知道第一个表达是正确的,我只是想在高层次上知道为什么。有没有人有任何视频或工具可以解释编码的这一基本原则?

我过去在过去几年的职位上经常使用 excel,这可能就是为什么我本能地将所有内容都放在括号内的原因。

谢谢你的帮助!

但是,为什么括号是封闭的,里面没有任何信息?

df.corr()

因为没有更多的东西可以传递给函数。或者,更准确地说(假设df是类似于熊猫数据帧实例或其他类似对象的东西(,因为在这种情况下,唯一必需的参数(df(会自动传递给函数。

为什么你不能像这样将变量放在表达式中 -

corr(df)

如果你真的愿意,你可以做一些类似type(df).corr(df)的事情,但这有点没用。

好的,让我们更深入一点:Python是一种面向对象的语言。在 OO 中,对象具有"方法",即作用于调用它们的对象的函数。在大多数 OOPL 中,方法调用的语法是obj.method()而不是method(obj)。在后台,您的语言的编译器或解释器(或任何其他机制(实际上使obj可用于该方法,因此无需显式传递它。

以这种方式(而不是使用标准函数(的要点是,不同的对象可以以自己的方式定义相同的方法,因此作为这些对象的"客户端",您不必检查确切的类型并自己调用特定于对象的版本,即:

没有对象:

def draw_rect(rect):
# code to draw a rect here
def draw_line(line):
# code to draw a line here
def draw_circle(circle):
# code to draw a circle here

def draw_all(drawables):    
for obj in drawables:
if isinstance(obj, Rect):
draw_rect(obj)
elif isinstance(obj, Line):
draw_line(obj)
elif isinstance(obj, Circle):
draw_circle(obj)
def main():
# a list of various "drawable" objects
objects = [Rect(), Line(), Cicle()]
draw_all(objects)

带对象:

class Rect():
def draw(self):
# code to draw a rect here
class Line():
def draw(self):
# code to draw a line here
class Circle():    
def draw(self):
# code to draw a circle here

def draw_all(drawables):
for obj in drawables:
obj.draw() 

def main():
# a list of various "drawable" objects
objects = [Rect(), Line(), Cicle()]
draw_all(objects) 

而在幕后,Python将把obj.draw()变成type(obj).draw(obj)。这被称为"基于类型的多态调度",实际上是 OOP 中最基本的概念。

现在 Python 不是一个"纯粹的"OOPL,因为它不会强迫你只使用对象和方法 - 你也可以编写和使用普通函数(例如上面的draw_allmain函数(,当然,这将按您的预期工作。

最新更新