Pythonは同じ事するのにforと内包表記の2つの方法が
■ このスレッドは過去ログ倉庫に格納されています
なんで同じことをするのに違う方法があるのでしょうか?
Pythonの哲学に反していますよね 一般的に知られてるPythonの哲学ってのは
後付けの言い訳だから真に受けるほうが間違ってる
実用的な意味や使い分けの慣習なんかを理解したほうがいい 見た目同じforでもスコープの扱い違うのが糞
継ぎ接ぎだらけの糞言語 文と式だから根本的に違うじゃん(ついでに速度も違う)。
そんなんより、map・filterの方が用途として完全に内包表記とかぶっているわけで。 >>5
根本的に違うかどうかは関係ない
Pythonは人によって書き方が統一できないのが問題 書き方を統一させるのは言語の役割じゃない
それをあたかも言語の役割であるかのように
勘違いさせるポエムをありがたがってるのが問題 >>1
「最善の方法が1つだけある」
って話なんだが
「方法が1つだけある」
って解釈してPythonガーとか遠吠えしてるバカ乙 >>8
Pythonで最善のフレームワークを教えて下さい >>8
あのポエム of パイソンでもさすがに「最善の方法が1つだけある」なんてバカなことは言ってないぞ >>9
最善の方法は実際に使ってみることだよ
フレームワークに要求するものは人によって違うからな
>>10
PEP20:
There should be one-- and preferably only one --obvious way to do it. >>11
え?最善の方法が一つだけしか無いなら
使う前でもなく答えられるはずだよね? >>12
2行目読めないの?
要求仕様って聞いたことないのか?w >>13
だから同じことをするのに複数の方法があるんでしょう? 要求によって、どの方法を使うか決めるなら
他の言語と何も変わらないよね まあでも、そう言っちゃうと There's More Than One Way To Do It. な perl も
最善なやり方はそのうちの一つかもな。 一貫性があれば哲学だと思うけどね
これはないけど、あれはあるって状況だと
単に実装がめんどくさかっただけだと思うね
この機能は重複するけど、面白そうなので作ってみた(内包表記)
この機能はあれば便利だけど、作るのがめんどくさい。ifでやって
そして後付で重複する機能は作らないといってるだけだろう
そのせいでよりよい方法が採用できないでいる Pythonで確実に言えるのは、誰が書いても同じようなコードになるわけではないってことね
そりゃ同じことを実現するのに複数のライブラリやフレームワークがあるのに
同じようなコードになるわけがない >>20
最善の方法なんて無いよ。
やり方が複数あるのだから、それに応じてやり方は変わる Pythonの誰が書いても同じようなコードになるというのは
単にインデントが揃う。という程度のものだと思ったほうがいい
コードフォーマッターをかければコードが整形されるでしょ?
あれと同じ >>15
同じことをするのに複数の方法がないとは書いてないけど?
>>8から読み直して理解できないなら諦めたほうがいいよ >>17
だいたいの人が考える最善な方法を1つにするってことね
Perlの
if(!a){…}
と
unless(a){…}
のどっちが最善かって人によってかなり違うでしょ?
そう言うのを極力やめるって話
あとこういう話になると必ず〇〇はできてねーじゃんとか言うやつが出てくるけど人が使う言語なので理念を優先しすぎて使いにくいものを作ってもしょうがない
そう言うのもちゃんと書いてある
Although practicality beats purity. >>25
そりゃ a という条件の記述でどっちが意図をうまく表現できるかによるでしょ。
unless は if の論理反転だから意味がないとするか、その違いに意味があるとするか
単にボーダーの違いだけと思うがな。
pythonだって
if b >= a and b <= c:
if not (b < a or b > c):
どっちが最善かは意図によって変わるし。 if a <= b <= c:
意図より読みやすいかどうかだな。
最初に思いつきで書いた後に、ドモルガンで書き換えるのはよくやること。 でも海外書籍のイントロでよくあるなぜpythonか?の説明で理由の一つとしてよく挙げられてるのは自然な英語として読めること。
これって日本人にはまったく価値のない宣伝ポイントだよな。 >>11
>There should be one-- and preferably only one --obvious way to do it.
どこに「最善」なんて書いてあるの?
最善の方法というのは比較対象の選択肢を完全に限定した上で
その時点で相対的に最も良さそうだと考えられる選択肢の1つでしかない
置かれた状況や主観だけでなく
スキルレベルやチームメンバーのリテラシーなんかによっても常に変化しうるものなので
ポエムとは言え「最善の方法が1つだけある」なんて書いてたらもっと多くの人にバカにされてる >>26
> unless は if の論理反転だから意味がないとするか、その違いに意味があるとするか
そういう議論になるでしょ
議論になるのは優劣が決め辛いと言うこと
> どっちが最善かは意図によって変わるし。
うん、だからPythonも完璧じゃないよ
そう言う事も書いてあるよね >>30
> だいたいの人が考える最善な方法を1つにするってことね
って書いてあるのに…
だめなケースを挙げられる俺すげー君乙w >>32
obviousを「最善」と誤訳しましたってことでいいのかな?
Although that way may not be obvious at first unless you're Dutch.
オランダ人で無い限り、最初は「最善」な方法には思えないだろうけどw >>29
プログラム言語で使われる程度の英語力ならそんなに苦労しなくて理解できる日本人は多いと思うけどね
まあだからと言って a = b if c else d がすんなり理解できるかと言うと疑問ではあるがw >>33
> obviousを「最善」と誤訳しましたってことでいいのかな?
君がそう思いたいならそれでいいんじゃね?
多分どう説明してもイチャモンつける気満々だしねw >>31
優劣付け辛いというより客観的にどこで線を引くか決めようがない。
だから後付けでpythonのやり方はOKでperlのやり方はNGとしてるだけに過ぎないかもしれないが
それも確かめようもない。 >>36
どこで線を引くかは言語仕様を決める人が決めればいいだけでしょ だからpythonにはpythonの、perlにはperlの基準があって比較のしようもないということ。
pythonの作者が「方法は一つだ」と言えばそうなるわけ。 理念を理解出来ない人っているんだな…
理念自体が間違ってるとか仕様が理念に沿ってないとか言うならまだわかるんだけどね Zen of Python は「単なる理念」でしかないと言っているつもりなんだが?
それ自体正しいとか正しくないとか客観的に判断できるものじゃない。 >>25
> のどっちが最善かって人によってかなり違うでしょ?
人によって違うんじゃなくて、要求によって違う
書き方の違いっていうのは要求の違い
日本人には英語は記号のように見えるが
ネイティブにはこのように見える
・もし A なら実行する
・A でない場合は実行する
これを同じ意味だからってこう書き換えるとわかりづらくなる
Aの反対 でない場合は実行する
もし Aの反対 なら 実行する
ifを使うかunlessを使うかは、どちらが自然な文章になるかであって
「自然な文章」というのが要求
読みやすさという要求によって使う単語を変えるべき Pythonは「方法は一つ」なんて誇大広告を出さずに
ブロックをインデントにすることで、なるべく同じ書き方になるようにした
とか
多くのライブラリを標準で用意することで、オレオレライブラリが量産されるのを防いだ
とか
言うべきだった >>40
うん、君がそう思うならそれでいいんじゃないかな
「単なる理念」なんて無意味だと言うなら君にとってはそうなんだろうし >>41
> 読みやすさという要求によって使う単語を変えるべき
それは君の意見だよね
単語を増やさない方が読みやすいと感じる人もいるから「人によって違う」って書いてあるわけ
理解できるかな? >>42
> Pythonは「方法は一つ」なんて誇大広告を出さずに
>>8に戻るw 特定の問題の明白な解き方が1つだけなんて元々ありえないことなんだから
それを真に受けるやつは流布するやつと同じくらいどうかと思う >>46
要求が同じでも人によって感じ方が異なることなんていくらでもある >>47
目標と実現できてる内容の区別ぐらいしようよ…
実現できてないなら目標なんて無駄と言うならそうなんだろう
お前ん中ではな >>43
お前さんの頭の中じゃ「単なる理念」は無意味なのか。 ■ このスレッドは過去ログ倉庫に格納されています