刷题小笔记:self

77 阅读1分钟

只能算刚入门的刷题选手,今日加深了一下self的用法

`class Solution:

def inorderTraversal(self,root:TreeNode):
    def change(root:TreeNode,result:list):
        if not root:
            return None
        change(root.left,result)
        result.append(root.val)
        change(root.right,result)
    result=[]
    change(root,result)
    return result`

像这种情况不需要在inorderTraversal函数中中对change函数使用self,因为是在自己函数内定义的change函数 `

class Solution:

def inorderTraversal(self,root:TreeNode):
    
    
    def change(root:TreeNode,result:list):
        if not root:
            return None
        change(root.left,result)
        result.append(root.val)
        change(root.right,result)
    if not root:
        return []
    result=[]
    self.change(root,result)
    return result`

而像这样的函数会报一个下述图片的错误

image.png

而若将代码改成下面这样就正常了,self相当于c++里的this指针吧,指向这个类里的函数

class Solution:

def inorderTraversal(self,root:TreeNode):
    result=[]
    self.change(root,result)
    return result  
    
def change(self,root:TreeNode,result:list):
        if not root:
            return None
        self.change(root.left,result)
        result.append(root.val)
        self.change(root.right,result)
        

另外,我发现一些函数中若用self会降低速度,如果是算法类的代码,尽量在函数中定义函数直接进行调用

image.png