Я не использовал python в течение многих лет, и я борюсь с объявлением и использованием функции. Я столкнулся с ошибкой глобального имени при попытке вызвать функцию, которую я определил.
Я пытался использовать self
, но немного не понимаю, как это работает.
def main():
size = int(sys.argv[1])
print(size)
generate = gen(size)
print(generate)
def gen(self, size):
#generate...
return size
if __name__ == "__main__":
main()
Ошибка, с которой я столкнулся, это NameError: global name 'gen' is not defined
.
В этом коде нет этой ошибки. Я получаю сообщение об ошибке: TypeError: gen() takes exactly 2 arguments (1 given)
. Пожалуйста, опубликуйте реальный код, который вы используете.
self
нужен только для функций, которые являются членами класса, а gen()
— нет.
Исправьте отступ. Некоторые люди не видят объявление класса. И я не знаю, находится ли последняя строка в определении класса или нет.
@JohnGordon Спасибо, просто хотел удалить лишнее, оно было обновлено.
Почему у вас вообще есть класс здесь? Похоже, вы пытаетесь написать Java на Python.
generate = gen(size)
от generate = self.gen(size)
self
в качестве первого аргумента метода main
Как мне это сделать? Это все в отступе?
Я не заметил, что вы изменили свое описание, я соответственно обновил свой ответ.
Спасибо за ответ. Я пробовал это раньше и получил эту ошибку: «NameError: глобальное имя «я» не определено».
self должен быть первым аргументом основного метода, я обновил свой ответ, думаю, это должно решить вашу проблему
Я также пробовал это раньше, хотя столкнулся с «TypeError: main() принимает ровно 1 аргумент (дан 0)» при вызове main(). Есть ли что-нибудь, что мне нужно отправить методу здесь?
Просто, чтобы ответить на вопрос прямо-
class paging():
def main():
generate = gen(size)
def gen(self, size):
return size
paging
, который является классом.class.method
. Поэтому имя вашей функции здесь должно быть paging.gen
self
в качестве первого аргумента, который заменяет экземпляр класса.вы можете использовать self для вызова других методов экземпляра объекта...
деф основной (я): self.gen()
Держись, может быть трудно прыгать в холод
Вы должны использовать себя. префикс, если вы вызываете метод, который является частью класса. Если вместо этого вы хотите вызвать main() глобально и поместить его вне класса, вы не должны определять функции main() и gen() в самом классе. поэтому, когда вы вызываете gen(), а gen() не является глобальной функцией, но это функция, которая находится в классе, который вы должны ввести
generate = self.gen(size)
Помните, что отступы Python — это способ иметь блоки. Поэтому, если вы сделаете отступ для main, он будет находиться в блоке класса и не будет доступен глобально.
Похоже, вам здесь не нужен класс, если вы хотите запустить свой код без класса, вы можете использовать
import random
import sys
def gen(size):
# generate...
return size
def main():
#Not sure where you are passing pages?
size = int(sys.argv[1])
print(size)
generate = gen(size)
print(generate)
print("FIFO", FIFO(size,pages), "page faults.")
print("LRU", LRU(size,pages), "page faults")
print ("OPT", OPT(size,pages), "page faults")
def FIFO(self, size, pages):
return "hello"
def LRU(self, size, pages):
return "hello"
def OPT(self, size, pages):
return "hello"
if __name__ == "__main__":
if len(sys.argv) != 2:
print "Usage: python paging.py [number of pages]"
else:
main()