X



Pythonは同じ事するのにforと内包表記の2つの方法が
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
垢版 |
2020/06/21(日) 20:38:14.43ID:reDB8Zbe
なんで同じことをするのに違う方法があるのでしょうか?
Pythonの哲学に反していますよね
0002デフォルトの名無しさん
垢版 |
2020/06/21(日) 22:18:11.85ID:mc9JBLN2
一般的に知られてるPythonの哲学ってのは
後付けの言い訳だから真に受けるほうが間違ってる
実用的な意味や使い分けの慣習なんかを理解したほうがいい
0005デフォルトの名無しさん
垢版 |
2020/06/22(月) 15:47:40.46ID:PgeKKkLv
文と式だから根本的に違うじゃん(ついでに速度も違う)。
そんなんより、map・filterの方が用途として完全に内包表記とかぶっているわけで。
0006デフォルトの名無しさん
垢版 |
2020/06/22(月) 17:38:00.67ID:56XWoaaG
>>5
根本的に違うかどうかは関係ない
Pythonは人によって書き方が統一できないのが問題
0007デフォルトの名無しさん
垢版 |
2020/06/22(月) 19:00:19.62ID:8yyL+9AA
書き方を統一させるのは言語の役割じゃない

それをあたかも言語の役割であるかのように
勘違いさせるポエムをありがたがってるのが問題
0008デフォルトの名無しさん
垢版 |
2020/06/27(土) 22:47:09.01ID:Fil4ka9J
>>1
「最善の方法が1つだけある」
って話なんだが
「方法が1つだけある」
って解釈してPythonガーとか遠吠えしてるバカ乙
0009デフォルトの名無しさん
垢版 |
2020/06/27(土) 23:31:26.13ID:gS37C1rZ
>>8
Pythonで最善のフレームワークを教えて下さい
0010デフォルトの名無しさん
垢版 |
2020/06/28(日) 01:41:20.01ID:pODeKu4C
>>8
あのポエム of パイソンでもさすがに「最善の方法が1つだけある」なんてバカなことは言ってないぞ
0011デフォルトの名無しさん
垢版 |
2020/06/28(日) 07:04:08.77ID:4OGtUBl/
>>9
最善の方法は実際に使ってみることだよ
フレームワークに要求するものは人によって違うからな

>>10
PEP20:
There should be one-- and preferably only one --obvious way to do it.
0012デフォルトの名無しさん
垢版 |
2020/06/28(日) 08:39:23.68ID:Tsqhb3xY
>>11
え?最善の方法が一つだけしか無いなら
使う前でもなく答えられるはずだよね?
0014デフォルトの名無しさん
垢版 |
2020/06/28(日) 08:53:53.94ID:Tsqhb3xY
>>13
だから同じことをするのに複数の方法があるんでしょう?
0015デフォルトの名無しさん
垢版 |
2020/06/28(日) 08:54:17.97ID:Tsqhb3xY
要求によって、どの方法を使うか決めるなら
他の言語と何も変わらないよね
0016デフォルトの名無しさん
垢版 |
2020/06/28(日) 09:16:58.52ID:ghhwznz4
swichが無いのも哲学か
0017デフォルトの名無しさん
垢版 |
2020/06/28(日) 09:23:22.47ID:dPpHZkah
まあでも、そう言っちゃうと There's More Than One Way To Do It. な perl も
最善なやり方はそのうちの一つかもな。
0018デフォルトの名無しさん
垢版 |
2020/06/28(日) 09:25:19.79ID:Tsqhb3xY
一貫性があれば哲学だと思うけどね
これはないけど、あれはあるって状況だと
単に実装がめんどくさかっただけだと思うね

この機能は重複するけど、面白そうなので作ってみた(内包表記)
この機能はあれば便利だけど、作るのがめんどくさい。ifでやって
そして後付で重複する機能は作らないといってるだけだろう
そのせいでよりよい方法が採用できないでいる
0019デフォルトの名無しさん
垢版 |
2020/06/28(日) 09:30:43.03ID:Tsqhb3xY
Pythonで確実に言えるのは、誰が書いても同じようなコードになるわけではないってことね
そりゃ同じことを実現するのに複数のライブラリやフレームワークがあるのに
同じようなコードになるわけがない
0021デフォルトの名無しさん
垢版 |
2020/06/28(日) 09:32:34.16ID:Tsqhb3xY
>>20
最善の方法なんて無いよ。
やり方が複数あるのだから、それに応じてやり方は変わる
0022デフォルトの名無しさん
垢版 |
2020/06/28(日) 09:34:13.19ID:Tsqhb3xY
Pythonの誰が書いても同じようなコードになるというのは
単にインデントが揃う。という程度のものだと思ったほうがいい
コードフォーマッターをかければコードが整形されるでしょ?
あれと同じ
0024デフォルトの名無しさん
垢版 |
2020/06/28(日) 09:46:53.18ID:4OGtUBl/
>>15
同じことをするのに複数の方法がないとは書いてないけど?
>>8から読み直して理解できないなら諦めたほうがいいよ
0025デフォルトの名無しさん
垢版 |
2020/06/28(日) 09:55:38.55ID:4OGtUBl/
>>17
だいたいの人が考える最善な方法を1つにするってことね
Perlの
if(!a){…}

unless(a){…}
のどっちが最善かって人によってかなり違うでしょ?
そう言うのを極力やめるって話
あとこういう話になると必ず〇〇はできてねーじゃんとか言うやつが出てくるけど人が使う言語なので理念を優先しすぎて使いにくいものを作ってもしょうがない
そう言うのもちゃんと書いてある
Although practicality beats purity.
0026デフォルトの名無しさん
垢版 |
2020/06/28(日) 10:12:34.46ID:dPpHZkah
>>25
そりゃ a という条件の記述でどっちが意図をうまく表現できるかによるでしょ。
unless は if の論理反転だから意味がないとするか、その違いに意味があるとするか
単にボーダーの違いだけと思うがな。

pythonだって

if b >= a and b <= c:

if not (b < a or b > c):

どっちが最善かは意図によって変わるし。
0027デフォルトの名無しさん
垢版 |
2020/06/28(日) 10:23:04.70ID:YNxCdn94
if a <= b <= c:
意図より読みやすいかどうかだな。
最初に思いつきで書いた後に、ドモルガンで書き換えるのはよくやること。
0029デフォルトの名無しさん
垢版 |
2020/06/28(日) 11:44:33.06ID:bT05BMar
でも海外書籍のイントロでよくあるなぜpythonか?の説明で理由の一つとしてよく挙げられてるのは自然な英語として読めること。
これって日本人にはまったく価値のない宣伝ポイントだよな。
0030デフォルトの名無しさん
垢版 |
2020/06/28(日) 11:50:30.63ID:pODeKu4C
>>11
>There should be one-- and preferably only one --obvious way to do it.

どこに「最善」なんて書いてあるの?

最善の方法というのは比較対象の選択肢を完全に限定した上で
その時点で相対的に最も良さそうだと考えられる選択肢の1つでしかない

置かれた状況や主観だけでなく
スキルレベルやチームメンバーのリテラシーなんかによっても常に変化しうるものなので
ポエムとは言え「最善の方法が1つだけある」なんて書いてたらもっと多くの人にバカにされてる
0031デフォルトの名無しさん
垢版 |
2020/06/28(日) 12:47:38.96ID:YEZ8i32j
>>26
> unless は if の論理反転だから意味がないとするか、その違いに意味があるとするか
そういう議論になるでしょ
議論になるのは優劣が決め辛いと言うこと

> どっちが最善かは意図によって変わるし。
うん、だからPythonも完璧じゃないよ
そう言う事も書いてあるよね
0032デフォルトの名無しさん
垢版 |
2020/06/28(日) 12:52:39.09ID:YEZ8i32j
>>30
> だいたいの人が考える最善な方法を1つにするってことね
って書いてあるのに…
だめなケースを挙げられる俺すげー君乙w
0033デフォルトの名無しさん
垢版 |
2020/06/28(日) 14:13:53.05ID:pODeKu4C
>>32
obviousを「最善」と誤訳しましたってことでいいのかな?

Although that way may not be obvious at first unless you're Dutch.
オランダ人で無い限り、最初は「最善」な方法には思えないだろうけどw
0034デフォルトの名無しさん
垢版 |
2020/06/28(日) 15:30:51.91ID:4OGtUBl/
>>29
プログラム言語で使われる程度の英語力ならそんなに苦労しなくて理解できる日本人は多いと思うけどね
まあだからと言って a = b if c else d がすんなり理解できるかと言うと疑問ではあるがw
0035デフォルトの名無しさん
垢版 |
2020/06/28(日) 15:35:13.27ID:4OGtUBl/
>>33
> obviousを「最善」と誤訳しましたってことでいいのかな?
君がそう思いたいならそれでいいんじゃね?
多分どう説明してもイチャモンつける気満々だしねw
0036デフォルトの名無しさん
垢版 |
2020/06/28(日) 16:02:10.11ID:dPpHZkah
>>31
優劣付け辛いというより客観的にどこで線を引くか決めようがない。
だから後付けでpythonのやり方はOKでperlのやり方はNGとしてるだけに過ぎないかもしれないが
それも確かめようもない。
0038デフォルトの名無しさん
垢版 |
2020/06/28(日) 17:20:35.92ID:dPpHZkah
だからpythonにはpythonの、perlにはperlの基準があって比較のしようもないということ。
pythonの作者が「方法は一つだ」と言えばそうなるわけ。
0039デフォルトの名無しさん
垢版 |
2020/06/28(日) 18:32:19.76ID:4OGtUBl/
理念を理解出来ない人っているんだな…
理念自体が間違ってるとか仕様が理念に沿ってないとか言うならまだわかるんだけどね
0040デフォルトの名無しさん
垢版 |
2020/06/28(日) 19:00:05.92ID:dPpHZkah
Zen of Python は「単なる理念」でしかないと言っているつもりなんだが?
それ自体正しいとか正しくないとか客観的に判断できるものじゃない。
0041デフォルトの名無しさん
垢版 |
2020/06/28(日) 20:16:49.75ID:Tsqhb3xY
>>25
> のどっちが最善かって人によってかなり違うでしょ?

人によって違うんじゃなくて、要求によって違う
書き方の違いっていうのは要求の違い

日本人には英語は記号のように見えるが

ネイティブにはこのように見える
・もし A なら実行する
・A でない場合は実行する

これを同じ意味だからってこう書き換えるとわかりづらくなる
Aの反対 でない場合は実行する
もし Aの反対 なら 実行する

ifを使うかunlessを使うかは、どちらが自然な文章になるかであって
「自然な文章」というのが要求
読みやすさという要求によって使う単語を変えるべき
0042デフォルトの名無しさん
垢版 |
2020/06/28(日) 20:19:56.50ID:Tsqhb3xY
Pythonは「方法は一つ」なんて誇大広告を出さずに

ブロックをインデントにすることで、なるべく同じ書き方になるようにした
とか
多くのライブラリを標準で用意することで、オレオレライブラリが量産されるのを防いだ
とか
言うべきだった
0043デフォルトの名無しさん
垢版 |
2020/06/28(日) 21:03:38.50ID:4OGtUBl/
>>40
うん、君がそう思うならそれでいいんじゃないかな
「単なる理念」なんて無意味だと言うなら君にとってはそうなんだろうし
0044デフォルトの名無しさん
垢版 |
2020/06/28(日) 21:07:04.51ID:4OGtUBl/
>>41
> 読みやすさという要求によって使う単語を変えるべき
それは君の意見だよね
単語を増やさない方が読みやすいと感じる人もいるから「人によって違う」って書いてあるわけ
理解できるかな?
0046デフォルトの名無しさん
垢版 |
2020/06/28(日) 21:33:24.92ID:X6mVOuE/
>>44
人によって違うんじゃなくて要求の違い
0047デフォルトの名無しさん
垢版 |
2020/06/28(日) 21:46:48.39ID:pODeKu4C
特定の問題の明白な解き方が1つだけなんて元々ありえないことなんだから
それを真に受けるやつは流布するやつと同じくらいどうかと思う
0049デフォルトの名無しさん
垢版 |
2020/06/28(日) 21:50:51.48ID:4OGtUBl/
>>47
目標と実現できてる内容の区別ぐらいしようよ…
実現できてないなら目標なんて無駄と言うならそうなんだろう
お前ん中ではな
■ このスレッドは過去ログ倉庫に格納されています

ニューススポーツなんでも実況