#python #python_3x #python_2x
Функция type показывает, что quit и exit являются одним объектом: print(type(quit), type(exit)) #Функция id возвращает разные идентификаторы: print(hex(id(quit)), hex(id(exit))) # 0x18caae42b70 0x18caae50630 Функция help возвращает одинаковое описание: Help on Quitter in module _sitebuiltins object: class Quitter(builtins.object) | Methods defined here: | | __call__(self, code=None) | Call self as a function. | | __init__(self, name, eof) | Initialize self. See help(type(self)) for accurate signature. | | __repr__(self) | Return repr(self). | | ---------------------------------------------------------------------- | Data descriptors defined here: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined) В документации обе функции имеют общее описание quit(code=None) exit(code=None) Objects that when printed, print a message like “Use quit() or Ctrl-D (i.e. EOF) to exit”, and when called, raise SystemExit with the specified exit code. Но разница ведь должна быть?
Ответы
Ответ 1
Короткий ответ -- разницы нет, это объекты от одного класса Quitter и разница будет только в наименовании: print(quit) # Use quit() or Ctrl-Z plus Return to exit print(exit) # Use exit() or Ctrl-Z plus Return to exit Думаю, quit и exit добавлены для удобства работы с интерпретатором. Для большего понимания нужно посмотреть исходный код _sitebuiltins.py: class Quitter(object): def __init__(self, name, eof): self.name = name self.eof = eof def __repr__(self): return 'Use %s() or %s to exit' % (self.name, self.eof) def __call__(self, code=None): # Shells like IDLE catch the SystemExit, but listen when their # stdin wrapper is closed. try: sys.stdin.close() except: pass raise SystemExit(code) А также исходный код site.py: def setquit(): """Define new builtins 'quit' and 'exit'. These are objects which make the interpreter exit when called. The repr of each object contains a hint at how it works. """ if os.sep == '\\': eof = 'Ctrl-Z plus Return' else: eof = 'Ctrl-D (i.e. EOF)' builtins.quit = _sitebuiltins.Quitter('quit', eof) builtins.exit = _sitebuiltins.Quitter('exit', eof) Аналогичный ответ на SO
Комментариев нет:
Отправить комментарий