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

2024-04-26 11:23:58 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

df.corr()

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

corr(df)

我知道第一个表达式是正确的,我只是想从高层了解原因。有没有人有任何视频或工具可以解释编码的基本原理

我在过去的工作中经常使用excel,这可能就是为什么我本能地把所有事情都放在括号内

谢谢你的帮助


Tags: 数据函数代码语言信息df视频表达式
1条回答
网友
1楼 · 发布于 2024-04-26 11:23:58

However, why is the parenthesis left closed without any information inside of it?

df.corr()

因为没有什么可以传递给函数了。或者,更准确地说(假设df类似于panda dataframe实例或其他类似对象),因为在本例中,唯一需要的参数(df)是自动传递给函数的

Why can't you put the variable within the expression like this -

corr(df)

如果你真的想做的话,你可以做一些像type(df).corr(df)的事情,但那有点没用

好的,让我们更深入一点:Python是一个object oriented language。在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,因为in不会强迫您只使用对象和方法-您也可以编写和使用普通函数(例如上面的draw_allmain函数),当然,这些函数将按照您的预期工作

相关问题 更多 >