Страницы

Поиск по вопросам

понедельник, 23 декабря 2019 г.

Есть ли разница между quit и exit?

#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

Комментариев нет:

Отправить комментарий