Я нашел код в модуле shutil
в стандартной библиотеке, которую я не понимаю.Что делает `<=` делать с наборами python и booleans?
_use_fd_functions
заканчивает проведение truthy/falsy значение, и он инициализируется так:
_use_fd_functions = ({os.open, os.stat, os.unlink, os.rmdir} <=
os.supports_dir_fd and
os.listdir in os.supports_fd and
os.stat in os.supports_follow_symlinks)
{os.open, os.stat, os.unlink, os.rmdir}
все функции, а правый аргумент <=
выглядит как логическое, но, по словам источника, они функции и наборы функций.
я не смог воссоздать это поведение в Python 3.5.2 РЕПЛ: (tracebacks удален)
>>> {lambda x: x} <= True
TypeError: unorderable types: set() <= bool()
>>> {True} <= True
TypeError: unorderable types: set() <= bool()
>>> {lambda x: x} <= (lambda x: x+1)
TypeError: unorderable types: set() <= function()
>>> {lambda x: x} <= (lambda x: x+1) in {lambda x: x+1}
TypeError: unorderable types: set() <= function()
Конечно, так как опытный разработчик не смог расшифровать код в течение нескольких секунд, код слишком умный. Но как это работает, и что он делает?
Является ли исходный код Python 2? Там, сравнение 'set' с' boolean' не бросает 'TypeError'. Я не помню правила (что является частью причины такого поведения, которое было удалено), но здесь происходит что-то умное. –
Я действительно не понимаю, что это делает, но '{lambda x: x} <= (lambda x: x + 1) в {lambda x: x + 1}' возвращает 'False' в Python 2.7 бит. – roganjosh
@ juanpa.arrivillaga Путь к 'shutil', который я прочитал, это' C: \ Python35 \ Lib \ shutil.py'. Я ожидаю, что это Python 3.5. –