Какова функция .self в литкоде? [дубликат]Python

Программы на Python
Anonymous
Какова функция .self в литкоде? [дубликат]

Сообщение Anonymous »

Я написал приведенную ниже программу на Python для вопроса 509 на LeetCode, которая просит пользователя написать программу для поиска значения n-го числа в последовательности Фибоначчи:

Код: Выделить всё

class Solution(object):
def fib(self, n):
output = 0
if n == 0:
output = 0
elif n == 1:
output = 1
else:
output = fib(n-1) + fib(n-2)
return(output)

Затем я столкнулся с этой ошибкой:

Код: Выделить всё

NameError: global name 'fib' is not defined
output = fib(n-1) + fib(n-2)
Line 9 in fib (Solution.py)
ret = Solution().fib(param_1)
Line 30 in _driver (Solution.py)
_driver()
Line 40 in  (Solution.py)
Затем я просмотрел все опубликованные решения и заметил, что все решения, использующие линейную рекурсию, имели одну общую черту: все они использовали self. в качестве префикса. перед вызовом функции fib() в теле исходной функции. Таким образом, я изменил свое решение на:

Код: Выделить всё

class Solution(object):
def fib(self, n):
output = 0
if n == 0:
output = 0
elif n == 1:
output = 1
else:
output = self.fib(n-1) + self.fib(n-2)
return(output)

Ошибка исчезла, и LeetCode принял мою отправку.
Странно то, что я запустил исходный код без себя. в IDE, и ошибок во время выполнения не было; программа работала.
Почему мне пришлось использовать .self, чтобы избавиться от ошибки выполнения LeetCode?

Подробнее здесь: https://stackoverflow.com/questions/787 ... n-leetcode

Вернуться в «Python»