【发布时间】:2023-01-07 19:05:49
【问题描述】:
我有一个简单的 leetcode 问题需要解释。其他类似的 stackoverflow 问题并没有真正解决我的问题,我想知道这是否是我的代码有问题,或者是否需要以特定方式定义 leetcode 函数。这是我的代码:
class Solution:
def countNegatives(self, grid: List[List[int]]) -> int:
arr = []
for g in grid:
check(g)
return len(arr)
def check(g):
if g[-1] < 0:
arr.append(g[-1])
g.remove(g[-1])
check(g)
我在第 5 行中收到错误,其中显示 check(g),因为它说的是 name 'check' is not defined
据我所知,check 应该在范围内,因为它没有在 countNegatives 函数内部定义。我调换了这两个函数的顺序,但这并不重要。我认为如果未定义 g 会更有意义,但它表示我的整个函数无效。函数中的实际代码是否正确目前对我来说并不重要,但我只是对为什么不定义它感到困惑。
【问题讨论】:
-
检查在范围内,但它的定义方式 python 将其视为
Solution实例的方法。您可能希望将其声明为@staticmethod并将其称为Solution.check(g)。 (那么arr将是未定义的,你将遇到无限递归......) -
它没有定义。您将
check定义为类属性,而不是全局(或非本地)函数。我会说它应该完全在类之外定义,但这看起来像是一些需要不必要类的非惯用框架,所以check可能应该定义为静态方法,然后在两个地方都用self.check(g)调用. -
感谢你们俩,这很有意义。我对 Python 中的类没有太多经验,有点习惯于在全局范围内随意定义函数。
标签: python arrays python-3.x function