Я знаю, что это немного любопытно. Потому что я верю, что если я углублюсь, я смогу получить это быстрее и за короткое время я смогу стать экспертом .. Сегодня некоторые вещи попались на глаза в модуле "stat" в python 3.7
Иногда нам нужен статус файла или каталога. Мы можем видеть это так.
>>>import pathlib as ph
>>>x=ph.Path('D://Music')
WindowsPath('D:/Music')
x.is_dir()
True
Нет проблем. Затем я захожу во внутреннюю часть pathlib для того, что происходит в начальном состоянии. И я знал, что я столкнусь с модулем статистики в нем.
если мы сделаем это:
x.stat()
#Then we will get a tuple like this
os.stat_result(st_mode=16749, st_ino=28147497........
Таким образом, модуль stat, чтобы выяснить, является ли данный адрес каталогом или файлом, принимает "st_mode", в этом случае это число 16749 И здесь начинается волшебство.
Следующие коды находятся внутри модуля статистики.
Наше число (16749) сначала пересекается с S_IFMT, поэтому будет & -ed со значением.
def S_IMODE(mode):
"""Return the portion of the file's mode that can be set by
os.chmod().
"""
return mode & 0o7777
def S_IFMT(mode):
"""Return the portion of the file's mode that describes the
file type.
"""
return mode & 0o170000
# Constants used as S_IFMT() for various file types
# (not all are implemented on all systems)
S_IFDIR = 0o040000 # directory
если мы сделаем это вручную:
>>> 16749&0o170000
16384
>>> oct(16384)
'0o40000' #really is that S_IFDIR = 0o040000 # directory
Похоже, что это значение исходит от встроенного уровня ОС, потому что его вернула статистика кортежа из файла x (st_mode). Так что вопрос в этом.
1. Откуда эти значения? как S_IFDIR, там несколько переменных хранят эти "октальные" значения, как это 0o040000.
2. Почему это восьмеричное число & ed, почему нет или xor?
Заранее благодарю за помощь.