当前位置: 首页 > news >正文

函数的定义位置和归属不同导致的调用区别(经验总结)

代码和定义(后附代码出处)

class Solution_1:def maxDepth(self, root: Optional[TreeNode]) -> int:# 终止条件:空节点深度为0if not root:return 0# 分治:左子树深度 vs 右子树深度,取max后+1(包含当前节点)left_depth = self.maxDepth(root.left)right_depth = self.maxDepth(root.right)return max(left_depth, right_depth) + 1class Solution_2:def inorderTraversal(self, root: Optional[TreeNode]) -> List[int]:res = []  # 存储遍历结果# 定义递归辅助函数def dfs(node):if not node:  # 终止条件:节点为空,返回returndfs(node.left)  # 1. 递归遍历左子树res.append(node.val)  # 2. 访问根节点,加入结果dfs(node.right)  # 3. 递归遍历右子树dfs(root)  # 从根节点开始递归return res

二叉树中序遍历

二叉树最大深度

一、先明确两个函数的 “归属” 差异

要理解调用方式,首先要清楚这两个函数分别属于哪个 “范围”:

函数定义位置归属(作用域)
maxDepth在 Solution_1 类内部定义类的「实例方法」(属于类的实例
dfs在 inorderTraversal 方法内部定义方法的「局部嵌套函数」(属于方法内部

二、为什么 maxDepth 必须用 self.maxDepth() 调用?

maxDepth 是 Solution 类的 实例方法(定义时第一个参数是 self,这是 Python 类实例方法的标志),这类方法有两个关键特性:

  1. 依赖实例上下文:实例方法的调用必须绑定到 Solution 的一个实例(比如 sol = Solution_1(),然后 sol.maxDepth(root))。在方法内部,self 就代表当前这个实例,是调用实例方法的 “桥梁”。
  2. 作用域不在方法内部maxDepth 定义在类的全局范围,而不是在 maxDepth 方法自身内部。如果直接写 maxDepth(root.left),Python 会在当前方法内部找这个函数 —— 但方法内部没有定义 maxDepth,就会报 NameError(找不到函数名)。

三、为什么 dfs 可以直接用 dfs() 调用?

dfs 是在 inorderTraversal 方法内部定义的 嵌套函数,它的特性刚好和实例方法相反:

  1. 作用域在方法内部:嵌套函数的 “可见范围” 仅限于定义它的外层方法(inorderTraversal)内部。在 dfs 函数内部调用 dfs(node.left) 时,Python 会直接在当前作用域(inorderTraversal 内部)找 dfs 函数 —— 而 dfs 就在这里定义,所以能直接找到,无需额外前缀。
  2. 不依赖类实例dfs 是局部函数,它的调用不需要绑定类实例,也没有 self 参数。它的参数(node)和使用的变量(如外层的 res 列表)都是在方法内部可见的,不需要通过 self 访问。

四、一句话总结核心区别

函数的调用方式由它的 “定义位置和归属” 决定:

  • 若函数是「类的实例方法」(定义在类内,第一个参数是 self),必须通过 self.函数名() 调用(因为要绑定实例);
  • 若函数是「方法内部的嵌套函数」(定义在方法内,无 self 参数),直接用 函数名() 调用即可(因为作用域就在方法内部)。
http://www.dtcms.com/a/458446.html

相关文章:

  • 网站模板下载简单的那种漳州网站建设
  • 外贸电商网站制作平面设计图片 作品集
  • 做外贸需要什么网站wordpress页面目录下
  • 国外做的好的鲜花网站惠山做网站公司
  • 哪个汽车网站汽贸店免费做校园交易网站建设论文
  • 重庆响应式网站建设扬中信息网
  • VGG模型结构体及代码
  • 绵阳企业网站建设公司广州建网站的公司有哪些
  • wordpress 多站点 合集赣州快云科技有限公司
  • 网站资讯如何做wordpress推特登陆
  • wordpress企业网站h5页面如何制作
  • 免费代理ip的网站wordpress主题 彩票
  • 网站建设简单点的网站专题页面用什么做
  • AI智能体赋能社会学分析之仿真:“数字广场”的社会回响
  • 网站运营内容包含哪些怎样进行网络推广效果更好
  • C++“语法糖”-引用 VS C语言指针 到底谁更胜一筹???
  • 济南公司做网站的价格seo相关ppt
  • Leetcode刷题记录-Boyer-Moore 投票算法
  • 千图素材网站wordpress 侧边栏代码
  • 建设网站询价对比表模板什么网站时候做伪静态
  • 一个开源免费的TTS工具2.0
  • 引流网站建设教程做网站设计的长宽一般是多少
  • 网站 解析iis怎么搭建设计网站
  • 网站建设公司招聘校园微网站建设方案ppt模板
  • 徐州营销型网站制使开发一个网站成本
  • 【framebuffer】
  • 【PAG】一个PAGView和多个PAGImageView分别渲染多个pag文件
  • 专门做婚庆的网站有哪些广州市品牌网站建设企业
  • 上海市网站seo公司网站活动怎么做
  • 昆山网站制作公司网站建设征求意见通知