- 締切済み
Pythonのanyって何?
下のPythonのプログラムにおいて、any()とは何をしているんでしょうか。たしかに取ると動かなくなります。 $ cat fruits.txt Banana Orange Navel Strawberry Apple $ cat fruits.txt | python -c 'import sys; any(print(l,end="") for l in sorted(sys.stdin))' Apple Banana Navel Orange Strawberry $
- みんなの回答 (1)
- 専門家の回答
みんなの回答
- mitoneko
- ベストアンサー率58% (469/798)
回答No.1
まず、any関数の意味です。この関数は、引数にイテレータをとります。そして、その中の一つでもtrueなら、trueを返します。 この使い方は、器用ですね。正直、any関数の意味なんてお構いなしに見えます。戻り値もどうでもよい。ただ、イテレータを取り、何の副作用も無いという関数が欲しかった。つまり、関数の構文だけが欲しかったようです。その理由は、ジェネレータを使いたかったから。ジェネレータの中でprint文を利用して必要な出力をしてしまったのは良いが、ジェネレータはあくまでイテレータを返しますから、そのイテレータを捨てるゴミ箱が欲しかったと言った感じです。 ジェネレータを使うにしても、 print("".join(l for l in sorted(sys.stdin))) の方が素直な気がします。 と考えれば、もともとsortedはリストを返すわけで・・・ print("".join(sorted(sys.stdin))) でも、結果は一緒ですねぇ・・・ 何故にこんな面倒なことをしたのやら?
お礼
ありがとうございます! joinなるほどですね。 上のプログラムはブログで発見したのですが、もとは python -c 'import sys; any(print(l,end="") for l in sorted(sys.stdin.readlines()))' で、他のブログに「sys.stdinにreadline()、readlines()は不要」と書かれていたので取ったものです。 他のブログを見ても、forをanyで囲ったものが多くありますが、コピペの源流を知りたいです。。 python -c 'import sys; [print(l,end="") for l in sorted(sys.stdin)]' というのもありました。 python -c 'import sys; print(*sorted(sys.stdin), sep="")' というのもいけるっぽいですね。 でもjoinを使ったやり方が、何をしているのかはっきり分かって、短くて好きです^^