내가 이해하지 못하는 표준 라이브러리의 shutil
모듈에 일부 코드가 있습니다.`<=`는 파이썬 세트와 불린으로 무엇을합니까?
_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}
모든 기능이 있고, <=
에 대한 권리 주장은 부울처럼 보이지만 소스에 따라 그들이 함수와 함수 세트.
나는 파이썬 3.5.2 REPL에서이 동작을 재현 할 수 없습니다 : (역 추적 제거) 물론
>>> {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()
, 숙련 된 개발자가 몇 초에 코드를 해독 할 수 없습니다 때문에, 코드가 너무 영리합니다. 그러나 어떻게 작동하고, 그것은 무엇을 하는가?
파이썬 2의 소스 코드는 무엇입니까? 거기에서,'set'을'boolean'과 비교하는 것은'TypeError'를 던지지 않습니다. 나는 (그런 행동이 제거 된 이유의 일부인) 규칙을 기억하지 못한다.하지만 영리한 일이 여기서 벌어지고있다. –
{lambda : x + 1}에서'{lambda : x} <= (lambda x : x + 1)'가 파이썬 2.7 btw에서'False'를 반환한다는 것을 정말로 이해하지 못합니다. – roganjosh
@ juanpa.arrivillaga 내가 읽은'shutil '경로는'C : \ Python35 \ Lib \ shutil.py'이다. 나는 그것이 파이썬 3.5가되기를 기대한다. –