私は理解できない標準ライブラリのshutil
モジュールにいくつかのコードを見つけました。`<=`はPythonの集合とブール値で何をするのですか?
_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 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()
、経験豊富な開発者は数秒でコードを解読することができませんでしたから、コードがスマートになっています。しかし、それはどのように機能し、何がしますか?
Python 2のソースコードはありますか?そこでは、 'set'を' boolean'と比較することは 'TypeError'を投げません。私は規則(そのような行動が取り除かれた理由の一部です)を覚えていませんが、ここでは賢明なことが起こっています。 –
これは何をするのか分かりませんが、{lambda:x + 1}の '{lambda:x} <=(lambda x:x + 1)'はPython 2.7 btwで 'False'を返します。 – roganjosh
@ juanpa.arrivillaga私が読んだ 'shutil'へのパスは' C:\ Python35 \ Lib \ shutil.py'です。私はそれがPython 3.5であることを期待しています。 –