Pythonが嫌いな人のためのスレッドです。
■関連スレ
Rubyについて(アンチ専用) Part002
http://pc11.2ch.net/test/read.cgi/tech/1200210768/
探検
Pythonについて(アンチ専用)
■ このスレッドは過去ログ倉庫に格納されています
2008/02/21(木) 10:24:06
492デフォルトの名無しさん
2009/06/09(火) 23:51:10 >>491
>少なくともUserStringは同型のjoinを持っているし、意味が違う "join" という
>名前はスレッドの join であったり db の join であったりたくさんあるよ。
意味の違うjoinをもってきてどうすんの?
今は hogehoge.join(seq) の形でリストやタプルを引数にとるものの話にきまってるだろ。
だれがスレッドのjoinの話をしてるの? Threadのjoinはlistに実装すべきだとかだれかいったの?
話をすりかえんなよ。元の話は "".join(list) より list.join("") のほうが自然かどうかという話だろうが。
listの要素を連結するメソッドが、listじゃなくてstrのメソッドになっているのがおかしいんじゃないかという話だ。
そこをおまえがセパレータが文字列じゃないjoin()もあるとか言い出したんだろ。
だからセパレータで文字列を使わないjoin()や、文字列以外での連結を行うjoin()は実際にあるのかと聞いたら、スレッドのjoinを挙げるなんて、バカすぎるわ。
リストやタプルの要素を連結する話なのに、スレッドやDBが関係あるわけないだろ。
「文字列以外の場合も考えられる」といっているけど、結局は具体例挙げられなくて、苦し紛れにjoinがつくものを挙げただけじゃんか。
おまえ反論したいだけだろ。「多重継承があるからsuperにはクラス名が必要」とか、いちいち理由をねつ造すんなよ。
つうかPythonistaはこんなやつほっとくなよ。Python界の恥さらしだろ。身内の恥は身内でなんとかしてくれ。
>少なくともUserStringは同型のjoinを持っているし、意味が違う "join" という
>名前はスレッドの join であったり db の join であったりたくさんあるよ。
意味の違うjoinをもってきてどうすんの?
今は hogehoge.join(seq) の形でリストやタプルを引数にとるものの話にきまってるだろ。
だれがスレッドのjoinの話をしてるの? Threadのjoinはlistに実装すべきだとかだれかいったの?
話をすりかえんなよ。元の話は "".join(list) より list.join("") のほうが自然かどうかという話だろうが。
listの要素を連結するメソッドが、listじゃなくてstrのメソッドになっているのがおかしいんじゃないかという話だ。
そこをおまえがセパレータが文字列じゃないjoin()もあるとか言い出したんだろ。
だからセパレータで文字列を使わないjoin()や、文字列以外での連結を行うjoin()は実際にあるのかと聞いたら、スレッドのjoinを挙げるなんて、バカすぎるわ。
リストやタプルの要素を連結する話なのに、スレッドやDBが関係あるわけないだろ。
「文字列以外の場合も考えられる」といっているけど、結局は具体例挙げられなくて、苦し紛れにjoinがつくものを挙げただけじゃんか。
おまえ反論したいだけだろ。「多重継承があるからsuperにはクラス名が必要」とか、いちいち理由をねつ造すんなよ。
つうかPythonistaはこんなやつほっとくなよ。Python界の恥さらしだろ。身内の恥は身内でなんとかしてくれ。
493デフォルトの名無しさん
2009/06/10(水) 00:04:54494デフォルトの名無しさん
2009/06/10(水) 00:11:35 RTFM
ttp://www.python.org/doc/faq/general/#why-is-join-a-string-method-instead-of-a-list-or-tuple-method
ttp://www.python.org/doc/faq/general/#why-is-join-a-string-method-instead-of-a-list-or-tuple-method
495デフォルトの名無しさん
2009/06/10(水) 00:18:58 >>492
> listの要素を連結するメソッドが、listじゃなくてstrのメソッドになっているのがおかしいんじゃないかという話だ。
joinはlistの要素を連結するんじゃないぞ。iterable であれば tuple でも generator でも
なんでも使える。listのメソッドにしたらリストにしか使えない。これだけでもリストに join を
実装すべきでない明確な理由になるな。
> listの要素を連結するメソッドが、listじゃなくてstrのメソッドになっているのがおかしいんじゃないかという話だ。
joinはlistの要素を連結するんじゃないぞ。iterable であれば tuple でも generator でも
なんでも使える。listのメソッドにしたらリストにしか使えない。これだけでもリストに join を
実装すべきでない明確な理由になるな。
496デフォルトの名無しさん
2009/06/10(水) 00:19:00497デフォルトの名無しさん
2009/06/10(水) 00:19:46 >>496
bytearray.join もだねw
bytearray.join もだねw
498デフォルトの名無しさん
2009/06/10(水) 00:47:47 Python FAQにjoinのこと載ってあった。
4.8 Why is join() a string method instead of a list or tuple method?
(なんでjoin()はlistやtupleのメソッドじゃなくてstringのメソッドなの?)
ttp://www.python.org/doc/faq/general/#why-is-join-a-string-method-instead-of-a-list-or-tuple-method
やっぱりみんな疑問に思うよな。思わないやつもいるけど。
FAQの答え
This method can be used with any argument which obeys the rules for sequence objects, including any new classes you might define yourself.
(このメソッドは、シーケンスオブジェクトのルールに則った引数なら何でも使うことができます。あなた自身が定義した新しいクラスでも構いません。)
つまりlistやtuple以外でも、sequenceのように振る舞うものなら何でもjoinできるようにするために、joinをlistではなくstrのメソッドにしているわけだ。
>>477の通りだな。
Rubyだとmix-inがあるから、任意のクラスでEnumerableをincludeしてやればArrayじゃないものでもjoinが使えるようになるけど、
Pythonではそうするかわりに引数を抽象化することで、繰り返し可能であればなんでもjoinで使えるようになるということか。
これならjoinがstrのメソッドである理由として納得できるな。
Pythonでは多重継承できるんだからMix-inも使える。だからEnumerableを導入することは技術的には可能だけど、iteratableを引数にするという方法も悪くないね。
これでスッキリした。Pythonいいね!
あとは多重継承が〜、joinは文字列を対象にしたメソッドだから〜、と、間違った理由をねつ造するバカを排除してくれ。
ほんとの理由を知らないくせに、分かったふりして語るなよな。答えしらないんなら出てくんな。
おまえリアルでも知ったかぶってるだろ。ほんと迷惑。
4.8 Why is join() a string method instead of a list or tuple method?
(なんでjoin()はlistやtupleのメソッドじゃなくてstringのメソッドなの?)
ttp://www.python.org/doc/faq/general/#why-is-join-a-string-method-instead-of-a-list-or-tuple-method
やっぱりみんな疑問に思うよな。思わないやつもいるけど。
FAQの答え
This method can be used with any argument which obeys the rules for sequence objects, including any new classes you might define yourself.
(このメソッドは、シーケンスオブジェクトのルールに則った引数なら何でも使うことができます。あなた自身が定義した新しいクラスでも構いません。)
つまりlistやtuple以外でも、sequenceのように振る舞うものなら何でもjoinできるようにするために、joinをlistではなくstrのメソッドにしているわけだ。
>>477の通りだな。
Rubyだとmix-inがあるから、任意のクラスでEnumerableをincludeしてやればArrayじゃないものでもjoinが使えるようになるけど、
Pythonではそうするかわりに引数を抽象化することで、繰り返し可能であればなんでもjoinで使えるようになるということか。
これならjoinがstrのメソッドである理由として納得できるな。
Pythonでは多重継承できるんだからMix-inも使える。だからEnumerableを導入することは技術的には可能だけど、iteratableを引数にするという方法も悪くないね。
これでスッキリした。Pythonいいね!
あとは多重継承が〜、joinは文字列を対象にしたメソッドだから〜、と、間違った理由をねつ造するバカを排除してくれ。
ほんとの理由を知らないくせに、分かったふりして語るなよな。答えしらないんなら出てくんな。
おまえリアルでも知ったかぶってるだろ。ほんと迷惑。
499デフォルトの名無しさん
2009/06/10(水) 00:56:53 なんでここIDでないんだろ
500デフォルトの名無しさん
2009/06/10(水) 00:59:11 迷惑な香具師に絡んで空気汚す香具師も迷惑
501デフォルトの名無しさん
2009/06/10(水) 01:07:41 >>493
>>>491 は UserString という「同じ意味の」 join の反例を出している。
なんでこれが反例なんだ?要素を連結して文字列を返しているんだからstr.joinとかわらない。
反例というなら、文字列じゃないセパレータを使って、要素の連結結果として文字列じゃないのを返すものをだせよ。
>その上で、文字列以外にも join という名前はよくでてくるから文字列と
>直接の関係がないリストに join という名前で文字列用のメソッドを
>持ち込むことが名前空間の視点で間違っていると言ってるだけだろ。
だから、「joinが文字列用のメソッド」といいきれるのかという質問の答えになってないだろ。
おまえの話は、「joinは文字列用のメソッドであるのが自然」という前提から始まってるだろ。
その前提がおかしいんじゃないかって話をしているのに、名前空間なんか関係ないだろ。
はなっから質問が理解できてねーwww
>>495
そういう納得できる回答がほしいわけよ。バカのねつ造にゲンナリしたから、もう自力で探したけど。
バカが理由もなく「joinは文字列用のメソッド」とかぬかしてるから、Rubyistごときに反論されるんじゃん。
ついでにいうと、それはjoinがlistやtupleのメソッドではない理由としては十分だけど、strのメソッドである理由としては不十分だけどな。
あとsuperでクラス名を指定しなきゃいけないのは、多重継承が原因じゃないからな。試験にでても間違えるなよ!
>>>491 は UserString という「同じ意味の」 join の反例を出している。
なんでこれが反例なんだ?要素を連結して文字列を返しているんだからstr.joinとかわらない。
反例というなら、文字列じゃないセパレータを使って、要素の連結結果として文字列じゃないのを返すものをだせよ。
>その上で、文字列以外にも join という名前はよくでてくるから文字列と
>直接の関係がないリストに join という名前で文字列用のメソッドを
>持ち込むことが名前空間の視点で間違っていると言ってるだけだろ。
だから、「joinが文字列用のメソッド」といいきれるのかという質問の答えになってないだろ。
おまえの話は、「joinは文字列用のメソッドであるのが自然」という前提から始まってるだろ。
その前提がおかしいんじゃないかって話をしているのに、名前空間なんか関係ないだろ。
はなっから質問が理解できてねーwww
>>495
そういう納得できる回答がほしいわけよ。バカのねつ造にゲンナリしたから、もう自力で探したけど。
バカが理由もなく「joinは文字列用のメソッド」とかぬかしてるから、Rubyistごときに反論されるんじゃん。
ついでにいうと、それはjoinがlistやtupleのメソッドではない理由としては十分だけど、strのメソッドである理由としては不十分だけどな。
あとsuperでクラス名を指定しなきゃいけないのは、多重継承が原因じゃないからな。試験にでても間違えるなよ!
502デフォルトの名無しさん
2009/06/10(水) 01:13:40 >>498
一つの理由を見つけただけですべてを判った気になるな。
ちゃんとそのFAQの最後に、
Because this is a string method it can work for Unicode strings as
well as plain ASCII strings. If join() were a method of the sequence
types then the sequence types would have to decide which type of
string to return depending on the type of the separator.
って書いてあるだろーが。
>>477,495 が正解であると同時に、「strのjoinだからstr.join」というのも
正解だ。
Rubyは自分で文字列と同じ振る舞いをする型を追加したら、
join_to_mystr なんてメソッドを Enumerable に追加するのか?
似たものを追加するときに同じ方法を一貫して使えるのが
正しい方法だ。
一つの理由を見つけただけですべてを判った気になるな。
ちゃんとそのFAQの最後に、
Because this is a string method it can work for Unicode strings as
well as plain ASCII strings. If join() were a method of the sequence
types then the sequence types would have to decide which type of
string to return depending on the type of the separator.
って書いてあるだろーが。
>>477,495 が正解であると同時に、「strのjoinだからstr.join」というのも
正解だ。
Rubyは自分で文字列と同じ振る舞いをする型を追加したら、
join_to_mystr なんてメソッドを Enumerable に追加するのか?
似たものを追加するときに同じ方法を一貫して使えるのが
正しい方法だ。
503デフォルトの名無しさん
2009/06/10(水) 01:13:45 >>461
>> ruby
>> a.sort().reverse().map{|x| x.to_s}.join('-')
>
>これ成城に動いてるときはいいんだけど
>バグが出たら何が原因か分かりづらいぜ?
Python:
'-'.join(str(x) for x in sorted(a, reverse=True))
Pythonだって、バグが出たら同じようなもんじゃん。
>> ruby
>> a.sort().reverse().map{|x| x.to_s}.join('-')
>
>これ成城に動いてるときはいいんだけど
>バグが出たら何が原因か分かりづらいぜ?
Python:
'-'.join(str(x) for x in sorted(a, reverse=True))
Pythonだって、バグが出たら同じようなもんじゃん。
504デフォルトの名無しさん
2009/06/10(水) 01:18:58 >>501
> なんでこれが反例なんだ?
> 要素を連結して文字列を返しているんだからstr.joinとかわらない。
strを拡張した型を作って join() したら元の str に戻ってしまうのが
正しい動作だと言うのか?
Unicodeをjoin()した結果がstrになるのが正しい動作か?
> なんでこれが反例なんだ?
> 要素を連結して文字列を返しているんだからstr.joinとかわらない。
strを拡張した型を作って join() したら元の str に戻ってしまうのが
正しい動作だと言うのか?
Unicodeをjoin()した結果がstrになるのが正しい動作か?
505デフォルトの名無しさん
2009/06/10(水) 01:29:17 同じFAQに、
"1, 2, 4, 8, 16".split(", ")
が
", ".join([1,2,4,8,16])
と対称性が取れているという理由も載ってるね。
他の二つの理由と合わせて考えると、joinがstrのメソッドである事は
とても合理的だと思える。
"1, 2, 4, 8, 16".split(", ")
が
", ".join([1,2,4,8,16])
と対称性が取れているという理由も載ってるね。
他の二つの理由と合わせて考えると、joinがstrのメソッドである事は
とても合理的だと思える。
506デフォルトの名無しさん
2009/06/10(水) 01:41:41 目的のものが作れればいいんじゃない?
507デフォルトの名無しさん
2009/06/10(水) 02:14:12 >>481
要素の型が str, unicode, bytes 以外のシーケンスに対する join は、使う場面が
少ないとはいえ一般化して考えれば存在しうるんだから、実際に出てきたときに
対応できないのはまずいね。
検索してみたら、trac の html まわりでちょうど >>469 の言っていたような事を
してる。
http://www.google.co.jp/codesearch/p?hl=ja#-EKtPk0GYAM/trac-0.10.3/trac/util/html.py&q=%22def%20join%22%20self&l=60
まぁ、一貫性を重視するなら文字列が入るとは限らないリストのメソッドに文字列の
連結メソッドを使うという解になるし、文字列は非常によく使う型だから一貫性から
飛び出した特別扱いにするというのも間違いではない。
あとは、「それがしっくりくる(気がする)」だけで特別扱いを許す緩いRubyと、
「明確なメリット無しに一貫性は壊さない」Python の違いでしかない。
結局どちらにしても生産性に違いはないし、読みやすさもなれたらそっちが読みやすい
程度の問題。
要素の型が str, unicode, bytes 以外のシーケンスに対する join は、使う場面が
少ないとはいえ一般化して考えれば存在しうるんだから、実際に出てきたときに
対応できないのはまずいね。
検索してみたら、trac の html まわりでちょうど >>469 の言っていたような事を
してる。
http://www.google.co.jp/codesearch/p?hl=ja#-EKtPk0GYAM/trac-0.10.3/trac/util/html.py&q=%22def%20join%22%20self&l=60
まぁ、一貫性を重視するなら文字列が入るとは限らないリストのメソッドに文字列の
連結メソッドを使うという解になるし、文字列は非常によく使う型だから一貫性から
飛び出した特別扱いにするというのも間違いではない。
あとは、「それがしっくりくる(気がする)」だけで特別扱いを許す緩いRubyと、
「明確なメリット無しに一貫性は壊さない」Python の違いでしかない。
結局どちらにしても生産性に違いはないし、読みやすさもなれたらそっちが読みやすい
程度の問題。
508デフォルトの名無しさん
2009/06/10(水) 02:18:33 >>505
それだ!!
それだ!!
509デフォルトの名無しさん
2009/06/10(水) 06:43:49510507
2009/06/10(水) 11:05:32 > 一貫性を重視するなら文字列が入るとは限らないリストのメソッドに文字列の
> 連結メソッドを使うという解になるし、
typo
一貫性を重視するなら文字列が入るとは限らないリストのメソッドに文字列の
連結メソッドを入れるなという解になるし、
> 連結メソッドを使うという解になるし、
typo
一貫性を重視するなら文字列が入るとは限らないリストのメソッドに文字列の
連結メソッドを入れるなという解になるし、
511デフォルトの名無しさん
2009/06/10(水) 13:52:20 >>502
それはダウトだろう。
今のjoinは単に u'a' + '' + u'b' + '' + u'c' のようなものだろ。
>>> ''.join([u'a',u'b',u'c'])
u'abc'
「strのjoinだからstr」なんてことはない。
もしそうなら
''.join([1,2,3]) だって要素をすべてstr()にしてからjoinしてくれてもいいけど、ぜんぜんそうなってない。
どうせ要素のすべてが文字列である場合じゃないとjoinできないんだから、listのメソッドだったとしても別におかしくはない。
Pythonの仕様上、joinをstrのメソッドにする理由はわかるけど、それが自然かどうかというのはまた別の話。
それはダウトだろう。
今のjoinは単に u'a' + '' + u'b' + '' + u'c' のようなものだろ。
>>> ''.join([u'a',u'b',u'c'])
u'abc'
「strのjoinだからstr」なんてことはない。
もしそうなら
''.join([1,2,3]) だって要素をすべてstr()にしてからjoinしてくれてもいいけど、ぜんぜんそうなってない。
どうせ要素のすべてが文字列である場合じゃないとjoinできないんだから、listのメソッドだったとしても別におかしくはない。
Pythonの仕様上、joinをstrのメソッドにする理由はわかるけど、それが自然かどうかというのはまた別の話。
512デフォルトの名無しさん
2009/06/10(水) 13:55:14 >>502
>Rubyは自分で文字列と同じ振る舞いをする型を追加したら、
>join_to_mystr なんてメソッドを Enumerable に追加するのか?
そうなったらjoinの引数として渡してやるだけでいいじゃん。
str.join(list) が list.join(str) となるだけ。
>Rubyは自分で文字列と同じ振る舞いをする型を追加したら、
>join_to_mystr なんてメソッドを Enumerable に追加するのか?
そうなったらjoinの引数として渡してやるだけでいいじゃん。
str.join(list) が list.join(str) となるだけ。
513デフォルトの名無しさん
2009/06/10(水) 14:08:22 >>502
>一つの理由を見つけただけですべてを判った気になるな。
その理由すらみつけられなかったやつがえらそうに。
最初からFAQを紹介しとけばよかったものを、シッタカブリのせいでぐちゃぐちゃ。
こいつリアルでもおんなじことしてんだろうな。だれもおまえの言葉、ありがたがってないから。
>一つの理由を見つけただけですべてを判った気になるな。
その理由すらみつけられなかったやつがえらそうに。
最初からFAQを紹介しとけばよかったものを、シッタカブリのせいでぐちゃぐちゃ。
こいつリアルでもおんなじことしてんだろうな。だれもおまえの言葉、ありがたがってないから。
514デフォルトの名無しさん
2009/06/10(水) 15:05:56 日本人はすぐ個人攻撃に走る
515デフォルトの名無しさん
2009/06/10(水) 16:12:54 論理的に反論できないんですねわかります
516デフォルトの名無しさん
2009/06/10(水) 17:01:21 まぁ、論理的に反論できないやつが人格攻撃なんてよくあることだ罠
517デフォルトの名無しさん
2009/06/10(水) 17:04:49 偉そうにはとても見えないけど、仮に偉そうだったとして、
実際この子よりは偉いだろうから仕方ないと思う。
相対的にこの子と対等かそれ以下になるのは、常人には逆に難しそう。
実際この子よりは偉いだろうから仕方ないと思う。
相対的にこの子と対等かそれ以下になるのは、常人には逆に難しそう。
518デフォルトの名無しさん
2009/06/10(水) 17:10:07 >>511
> どうせ要素のすべてが文字列である場合じゃないとjoinできないんだから、listのメソッドだったとしても別におかしくはない。
だから、どうしてstringのjoinしか見ないんだって何度もツッコミ入れられてるだろ。
joinがstringに定義されているから、引数はstringのiterableを取り、結果として連結されたstringを返す。
同様に、bytearrayのjoinは引数としてbytearrayのiterableを取り、結果として連結されたbytearrayを返す。
全部listのjoinが何とかするよりも、連結されるクラスが定義するpython式のほうがずっと自然だ。
> どうせ要素のすべてが文字列である場合じゃないとjoinできないんだから、listのメソッドだったとしても別におかしくはない。
だから、どうしてstringのjoinしか見ないんだって何度もツッコミ入れられてるだろ。
joinがstringに定義されているから、引数はstringのiterableを取り、結果として連結されたstringを返す。
同様に、bytearrayのjoinは引数としてbytearrayのiterableを取り、結果として連結されたbytearrayを返す。
全部listのjoinが何とかするよりも、連結されるクラスが定義するpython式のほうがずっと自然だ。
519デフォルトの名無しさん
2009/06/10(水) 17:11:18 >>512
> そうなったらjoinの引数として渡してやるだけでいいじゃん。
> str.join(list) が list.join(str) となるだけ。
そのlistはstrのこともbytearrayのことも何でも知ってなきゃならないわけだ。
ユーザ定義のクラスを連結したい時にはどうするの?
> そうなったらjoinの引数として渡してやるだけでいいじゃん。
> str.join(list) が list.join(str) となるだけ。
そのlistはstrのこともbytearrayのことも何でも知ってなきゃならないわけだ。
ユーザ定義のクラスを連結したい時にはどうするの?
520デフォルトの名無しさん
2009/06/10(水) 17:26:40 その場合はlist.join内部を+とかconcatとかで実装しておいて
その実装に使われたメソッドを各クラスで定義するのが自然ではなかろうか
一手間余計にかかるが
その実装に使われたメソッドを各クラスで定義するのが自然ではなかろうか
一手間余計にかかるが
521デフォルトの名無しさん
2009/06/10(水) 17:28:47 _________
/ \
/ ⌒ ⌒\
/ ( ⌒) (⌒)\
i ::::::⌒ (__人__) ⌒:: i
ヽ、 `ー ' /
/ ┌─┐
i 丶 ヽ{ .茶 }ヽ
r ヽ、__)一(_丿
ヽ、___ ヽ ヽ
と_____ノ_ノ
/ \
/ ⌒ ⌒\
/ ( ⌒) (⌒)\
i ::::::⌒ (__人__) ⌒:: i
ヽ、 `ー ' /
/ ┌─┐
i 丶 ヽ{ .茶 }ヽ
r ヽ、__)一(_丿
ヽ、___ ヽ ヽ
と_____ノ_ノ
522デフォルトの名無しさん
2009/06/10(水) 17:33:39523デフォルトの名無しさん
2009/06/10(水) 17:35:48524デフォルトの名無しさん
2009/06/10(水) 17:47:46 __
 ̄ ̄ ̄二二ニ=-
'''''""" ̄ ̄
-=ニニニニ=-
/⌒ヽ _,,-''"
_ ,(^ω^ ) ,-''"; ;,
/ ,_O_,,-''"'; ', :' ;; ;,'
(.゙ー'''", ;,; ' ; ;; ': ,'
_,,-','", ;: ' ; :, ': ,: :' ┼ヽ -|r‐、. レ |
_,,-','", ;: ' ; :, ': ,: :' d⌒) ./| _ノ __ノ
 ̄ ̄ ̄二二ニ=-
'''''""" ̄ ̄
-=ニニニニ=-
/⌒ヽ _,,-''"
_ ,(^ω^ ) ,-''"; ;,
/ ,_O_,,-''"'; ', :' ;; ;,'
(.゙ー'''", ;,; ' ; ;; ': ,'
_,,-','", ;: ' ; :, ': ,: :' ┼ヽ -|r‐、. レ |
_,,-','", ;: ' ; :, ': ,: :' d⌒) ./| _ノ __ノ
525デフォルトの名無しさん
2009/06/10(水) 19:56:04 Rubyの方が「(Matzの)気持ちよさ」のために汎用性や効率を
犠牲にしている所が多いので、RubyとPythonの仕様の違いで
「Pythonが間違っている!」と指摘するRuby厨はたいてい
視野が狭い。
犠牲にしている所が多いので、RubyとPythonの仕様の違いで
「Pythonが間違っている!」と指摘するRuby厨はたいてい
視野が狭い。
526デフォルトの名無しさん
2009/06/10(水) 21:15:35 >>525
おまえこそ視野を広く持てよ。
join()がArrayやListのメソッドである言語:
Ruby, JavaScript, Smalltalk(GNU), Perl(List用の関数に分類される)
join()が文字列のメソッドである言語:
Python, C#, PHP(文字列用の関数に分類される)
まあオブジェクト指向的に、"連結せよ" というメッセージをどこに送信するかを考えると、そりゃArrayやListに送るわな。
Pythonの場合はオブジェクト指向として考えたわけじゃなくて、シーケンスを引数にしたいという都合からそうなっているだけ。
joinを関数のようにとらえているとそれでもいいけど、オブジェクト指向的に考えると不自然ってだけ。
C#も、joinはインスタンスメソッドではなくスタティックメソッドだから、まさに関数的な考え方。
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/366join/join.html
joinは、オブジェクト指向が強い言語では当然のようにArrayやListのメソッドだけど、関数が主体の言語では文字列のメソッドになることがある。
少なくとも、joinが文字列のメソッドである*べき*なんてのはただのねつ造だし、言語でいえば実は少数派。
まあいいじゃん、joinが文字列のメソッドでも。PHPと同じだと思えば。
525の視野が広くなることを願いながら、この話題はここで終了。
おまえこそ視野を広く持てよ。
join()がArrayやListのメソッドである言語:
Ruby, JavaScript, Smalltalk(GNU), Perl(List用の関数に分類される)
join()が文字列のメソッドである言語:
Python, C#, PHP(文字列用の関数に分類される)
まあオブジェクト指向的に、"連結せよ" というメッセージをどこに送信するかを考えると、そりゃArrayやListに送るわな。
Pythonの場合はオブジェクト指向として考えたわけじゃなくて、シーケンスを引数にしたいという都合からそうなっているだけ。
joinを関数のようにとらえているとそれでもいいけど、オブジェクト指向的に考えると不自然ってだけ。
C#も、joinはインスタンスメソッドではなくスタティックメソッドだから、まさに関数的な考え方。
ttp://www.atmarkit.co.jp/fdotnet/dotnettips/366join/join.html
joinは、オブジェクト指向が強い言語では当然のようにArrayやListのメソッドだけど、関数が主体の言語では文字列のメソッドになることがある。
少なくとも、joinが文字列のメソッドである*べき*なんてのはただのねつ造だし、言語でいえば実は少数派。
まあいいじゃん、joinが文字列のメソッドでも。PHPと同じだと思えば。
525の視野が広くなることを願いながら、この話題はここで終了。
527デフォルトの名無しさん
2009/06/10(水) 22:00:10 >>526が言語とライブラリの区別もつかない土方な件
528デフォルトの名無しさん
2009/06/10(水) 22:04:40 > まあオブジェクト指向的に、"連結せよ" というメッセージをどこに送信するかを考えると、そりゃArrayやListに送るわな。
ぷ
オブジェクト指向的には"連結せよ"というメッセージは連結子になるオブジェクト(string)に送るのが自然だろ。
ArrayやListに送るという発想はSmalltalkの古いCollectionの設計に縛られているだけ。
ぷ
オブジェクト指向的には"連結せよ"というメッセージは連結子になるオブジェクト(string)に送るのが自然だろ。
ArrayやListに送るという発想はSmalltalkの古いCollectionの設計に縛られているだけ。
529デフォルトの名無しさん
2009/06/10(水) 22:08:45 >>526
オブジェクト指向的かどうかではなくて、型に対する態度の問題だと思うぞ。
型を強く意識する言語では、文字列以外も入るリストに要素を文字列として
連結するなんてメソッドを追加するのはあり得ない。
C#のstaticmethod の join は、 Python にも string モジュールに join
という関数がある。文字列に関連したメソッドなんだから str の
インスタンスメソッドにした方が便利だから、インスタンスメソッドに
なっただけ。
オブジェクト指向的かどうかではなくて、型に対する態度の問題だと思うぞ。
型を強く意識する言語では、文字列以外も入るリストに要素を文字列として
連結するなんてメソッドを追加するのはあり得ない。
C#のstaticmethod の join は、 Python にも string モジュールに join
という関数がある。文字列に関連したメソッドなんだから str の
インスタンスメソッドにした方が便利だから、インスタンスメソッドに
なっただけ。
530デフォルトの名無しさん
2009/06/10(水) 22:13:24 「オブジェクト指向的に自然」って、自分で思いこんでるのが
すべての人にとっても自然だと考えるのはなんでなんだろうね。
少なくとも文字列の連結処理を効率的に行うには文字列の
実装を知らないといけなくて、Arrayが文字列の内部実装を
直接弄って効率的な連結をするのは気持ち悪いな。
すべての人にとっても自然だと考えるのはなんでなんだろうね。
少なくとも文字列の連結処理を効率的に行うには文字列の
実装を知らないといけなくて、Arrayが文字列の内部実装を
直接弄って効率的な連結をするのは気持ち悪いな。
531デフォルトの名無しさん
2009/06/11(木) 00:45:49 理想の世界で生きていきたくても、
蛇にそそのかされてリンゴを食べたからな。
現実と向き合わないとならないのだよ。
蛇にそそのかされてリンゴを食べたからな。
現実と向き合わないとならないのだよ。
532デフォルトの名無しさん
2009/06/11(木) 01:13:38 ______.______.__
, '"――――‐, '"――――― ヽ`i1
./ ∧_∧ //'~ ̄ ̄|.|.| ̄ ̄~|.||::||
.i (・∀・ .) i ! _,._|.|.| . |.l|::||
[;].!_っ⌒'と _0[;],l | f _..┘|:. ̄ ̄~ .|| ||._________,
~l!=;:,...二二....,:;=iヨ.'ー''"~ . __ ! __.|| ||i リンゴジュース  ̄i1
li..,._.  ̄。 ̄. _.,..!.| ........~ノ..............~ || !|i,,___,,___,,___,,__,,!|
il_`}≡≡{´_E|..::' /⌒ヽ'ヽ_____/l|!=イ二/_/ ⌒ヽヽ(ニ(]
. {=i:::::::[二]:::::::i=i::」 |i.(*).i;;;;|i□□ー‐! ::::::::::|;;;;;;|ii.(*) i;;;|二l]
 ̄ ̄ゞ三ノ  ̄ ̄ ̄ゞ_ノ ̄ ゞゞ三ノ  ̄ゞゞ_ノ~ ≡3
, '"――――‐, '"――――― ヽ`i1
./ ∧_∧ //'~ ̄ ̄|.|.| ̄ ̄~|.||::||
.i (・∀・ .) i ! _,._|.|.| . |.l|::||
[;].!_っ⌒'と _0[;],l | f _..┘|:. ̄ ̄~ .|| ||._________,
~l!=;:,...二二....,:;=iヨ.'ー''"~ . __ ! __.|| ||i リンゴジュース  ̄i1
li..,._.  ̄。 ̄. _.,..!.| ........~ノ..............~ || !|i,,___,,___,,___,,__,,!|
il_`}≡≡{´_E|..::' /⌒ヽ'ヽ_____/l|!=イ二/_/ ⌒ヽヽ(ニ(]
. {=i:::::::[二]:::::::i=i::」 |i.(*).i;;;;|i□□ー‐! ::::::::::|;;;;;;|ii.(*) i;;;|二l]
 ̄ ̄ゞ三ノ  ̄ ̄ ̄ゞ_ノ ̄ ゞゞ三ノ  ̄ゞゞ_ノ~ ≡3
533デフォルトの名無しさん
2009/06/11(木) 09:03:24 >>511
>どうせ要素のすべてが文字列である場合じゃないとjoinできないんだから、listのメソッドだったとしても別におかしくはない。
要素のすべてが文字列である場合じゃないとjoinできないんだから
str/unicode/byteのメソッドなのでは?
>どうせ要素のすべてが文字列である場合じゃないとjoinできないんだから、listのメソッドだったとしても別におかしくはない。
要素のすべてが文字列である場合じゃないとjoinできないんだから
str/unicode/byteのメソッドなのでは?
535デフォルトの名無しさん
2009/06/11(木) 13:22:39 >>502
違う、全然違う。
str.join は、自動的に unicode へ格上げするような仕様になっている
だけで、実装は + (__add__) よりも効率的なものを使っている。
結果がたまたま等しいだけであって、sep.join([u'a', u'b']) と
u'a' + sep + u'b' は違う意味だ。
「strのjoinだからstr」というのは、逆に言えば「str以外のjoin」は違う動作を
するという意味でもある。
In [3]: k = bytearray('k')
In [4]: k.join([u'a', u'b'])
TypeError: can only join an iterable of bytes (item 0 has type 'unicode')
違う、全然違う。
str.join は、自動的に unicode へ格上げするような仕様になっている
だけで、実装は + (__add__) よりも効率的なものを使っている。
結果がたまたま等しいだけであって、sep.join([u'a', u'b']) と
u'a' + sep + u'b' は違う意味だ。
「strのjoinだからstr」というのは、逆に言えば「str以外のjoin」は違う動作を
するという意味でもある。
In [3]: k = bytearray('k')
In [4]: k.join([u'a', u'b'])
TypeError: can only join an iterable of bytes (item 0 has type 'unicode')
537デフォルトの名無しさん
2009/06/11(木) 14:57:21 reduce(lambda x,y: str(x) + ',' + str(y), [1,2,3])
これ reduce 使う前提でもっと効率良く書けますか?
これ reduce 使う前提でもっと効率良く書けますか?
538デフォルトの名無しさん
2009/06/11(木) 14:58:21 >>> reduce(lambda x,y: x + ',' + str(y), [1,2,3], '')
',1,2,3'
>>> reduce(lambda x,y: x + ',' + y, [1,2,3], '')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: cannot concatenate 'str' and 'int' objects
ダメぽ orz
',1,2,3'
>>> reduce(lambda x,y: x + ',' + y, [1,2,3], '')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
TypeError: cannot concatenate 'str' and 'int' objects
ダメぽ orz
539デフォルトの名無しさん
2009/06/11(木) 15:00:15 ','.join(map(str,[1,2,3]))
540デフォルトの名無しさん
2009/06/11(木) 15:34:13541デフォルトの名無しさん
2009/06/11(木) 16:06:04 仮にreduceでどんだけがんばってもjoinよりは速くならないだろう
542デフォルトの名無しさん
2009/06/11(木) 16:08:15 reduce(lambda x, y: '%s,%s' % (x, y), [1,2,3])
スマートさを求めるならこのあたりが限界かな
スマートさを求めるならこのあたりが限界かな
543デフォルトの名無しさん
2009/06/11(木) 21:48:41 生成される一時オブジェクトの数のオーダが違うから無理だと思う
544デフォルトの名無しさん
2009/06/12(金) 08:08:33 joinは?
545デフォルトの名無しさん
2009/06/12(金) 08:17:15 joinを使うと一時オブジェクトなしで計算量O(N)。
reduceを使うと一時オブジェクトがO(N)必要で計算量O(N^2)。
どっちが良いかは明白だな。
reduceを使うと一時オブジェクトがO(N)必要で計算量O(N^2)。
どっちが良いかは明白だな。
546デフォルトの名無しさん
2009/06/12(金) 10:16:59 Ruby の join って Enumerable のメソッドでは無くてリストのメソッドなんだな。
Pythonよりよっぽど気持ち悪い。
Pythonよりよっぽど気持ち悪い。
547デフォルトの名無しさん
2009/06/15(月) 06:27:55 123
548デフォルトの名無しさん
2009/06/17(水) 12:12:18 daa
549デフォルトの名無しさん
2009/06/21(日) 06:52:49 なんかすげーあちこちに飛び火したな、joinネタ
ttp://d.hatena.ne.jp/methane/20090615/1245025996
ttp://blog.livedoor.jp/dankogai/archives/51226075.html
ttp://d.hatena.ne.jp/methane/20090621/1245532793
ttp://d.hatena.ne.jp/methane/20090615/1245025996
ttp://blog.livedoor.jp/dankogai/archives/51226075.html
ttp://d.hatena.ne.jp/methane/20090621/1245532793
550デフォルトの名無しさん
2009/06/21(日) 12:29:31 >>549
二行目
だんこがい
ってばかだな
class List(list):
def join(self, j = ''):
return j.join(map(lambda x: '%s' % x, self))
二行目
だんこがい
ってばかだな
class List(list):
def join(self, j = ''):
return j.join(map(lambda x: '%s' % x, self))
551デフォルトの名無しさん
2009/06/21(日) 12:38:06 return j.join(map(repr, self))
552デフォルトの名無しさん
2009/06/21(日) 13:53:50553デフォルトの名無しさん
2009/07/03(金) 05:29:13┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘ おっぱい!おっぱい!
554デフォルトの名無しさん
2009/07/22(水) 14:57:08 test
555デフォルトの名無しさん
2009/07/24(金) 19:32:27 pythonをはじめて使った時に ''.join()みたいな書き方は
あり得ないと思ったけど、慣れてしまえば使いやすいね。
あり得ないと思ったけど、慣れてしまえば使いやすいね。
556デフォルトの名無しさん
2009/07/24(金) 19:37:07 ┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘ おっぱい!おっぱい!
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘ おっぱい!おっぱい!
557デフォルトの名無しさん
2009/07/25(土) 03:36:26 JavaScriptもjoin使うの知って
まぁそうゆうもんかと思った。
まぁそうゆうもんかと思った。
558デフォルトの名無しさん
2009/07/25(土) 17:15:15 キャメルケースでも、アンダースコア区切りでもないのが、個人的に違和感がある。
559デフォルトの名無しさん
2009/10/03(土) 22:56:53 アンチ少ないお
560デフォルトの名無しさん
2009/10/03(土) 23:01:16 ┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘ おっぱい!おっぱい!
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘ おっぱい!おっぱい!
2009/10/23(金) 03:16:56
Black community in a town of 96% whites. ,
562デフォルトの名無しさん
2009/11/03(火) 20:47:51 インデント記法は慣れれば気にならないし、
xx.lenghがなくてlen(xx)に統一されてるのも
個人的には嫌いだけど一理あるとは認めざる得ない。
でもスライスのx[n:m]の範囲指定は気持ち悪い。
なんか合理的な理由でもあるの?
xx.lenghがなくてlen(xx)に統一されてるのも
個人的には嫌いだけど一理あるとは認めざる得ない。
でもスライスのx[n:m]の範囲指定は気持ち悪い。
なんか合理的な理由でもあるの?
563デフォルトの名無しさん
2009/11/03(火) 20:52:51 他にどんな方法があるの?
564デフォルトの名無しさん
2009/11/03(火) 21:37:23 >>562
日本語の勉強してから出直せ
日本語の勉強してから出直せ
565デフォルトの名無しさん
2009/11/03(火) 21:38:46566デフォルトの名無しさん
2009/11/03(火) 21:47:04567デフォルトの名無しさん
2009/11/03(火) 21:58:48 x文字目からy文字目まで取り出すとき
s[x:y+1]と計算が多くて済むから合理的
s[x:y+1]と計算が多くて済むから合理的
568デフォルトの名無しさん
2009/11/03(火) 22:31:58 x文字目から最後の文字からn文字前まで取り出すとき
s[x:-n]と計算が少なくて済むから合理的
>>> 'abcde'[2:]
'cde'
>>> 'abcde'[2:-1]
'cd'
>>> 'abcde'[2:-2]
'c'
s[x:-n]と計算が少なくて済むから合理的
>>> 'abcde'[2:]
'cde'
>>> 'abcde'[2:-1]
'cd'
>>> 'abcde'[2:-2]
'c'
569デフォルトの名無しさん
2009/11/03(火) 22:33:52 s = 'abcde'
s[2:len(s)]
s[2:len(s)-1]
s[2:len(s)-2]
s[2:len(s)]
s[2:len(s)-1]
s[2:len(s)-2]
570デフォルトの名無しさん
2009/11/04(水) 17:09:36 Fortranに倣った
571sage
2009/11/05(木) 01:57:16 >571
a(:)みたいな配列を1-n, n-にわけたいとき、
Fortran a(:n), a(n+1:)
python a[:n] a[n:]
と、pythonの方がすっきりだ。これに気づいてからpythonのスライシングを許せるようになったw
a(:)みたいな配列を1-n, n-にわけたいとき、
Fortran a(:n), a(n+1:)
python a[:n] a[n:]
と、pythonの方がすっきりだ。これに気づいてからpythonのスライシングを許せるようになったw
572デフォルトの名無しさん
2009/11/05(木) 19:04:13 0-origin の index の場合、 [begin, end) で範囲を表現するのが一般的
大きさ0の範囲を [x,x) で表現できる。
大きさ0の範囲を [x,x) で表現できる。
573デフォルトの名無しさん
2009/11/06(金) 01:00:35 >>572
その表記ってC++勉強して初めて知ったけど一般的なん?
その表記ってC++勉強して初めて知ったけど一般的なん?
574デフォルトの名無しさん
2009/11/06(金) 01:12:29 数学表記でしょ
閉区間とか開区間とか
閉区間とか開区間とか
575デフォルトの名無しさん
2009/11/06(金) 01:36:39 ああそうか、思いっきり一般的だw
>>573で初めてとか言ったけど学校で習った覚えもあるわ
>>573で初めてとか言ったけど学校で習った覚えもあるわ
576デフォルトの名無しさん
2009/11/06(金) 23:36:11 ヨーロッパとかだと半開区間を [a, b[ とか書いたりする
きもい
きもい
577デフォルトの名無しさん
2009/11/10(火) 17:42:00 http://groups.google.com/group/unladen-swallow/browse_thread/thread/4edbc406f544643e
googleは新規のプロジェクトではpythonを使わないように勧めてるらしい
googleは新規のプロジェクトではpythonを使わないように勧めてるらしい
578デフォルトの名無しさん
2009/11/10(火) 22:34:32 GAEもう使ってないから関係ないわw
579デフォルトの名無しさん
2009/11/11(水) 00:31:02 だからといってRubyやPerlやPHPが代わりに使われることはないわけだが。
580デフォルトの名無しさん
2009/11/11(水) 00:33:31 するとGuile?
名前も似てるしな
名前も似てるしな
名前も似てるしな
名前も似てるしな
581デフォルトの名無しさん
2009/11/11(水) 01:16:24 Google のいちおしは Noop on Scala だろ
582デフォルトの名無しさん
2009/11/11(水) 01:49:35 Javaってことじゃん
やっぱ時代はじゃばだよな!
やっぱ時代はじゃばだよな!
583デフォルトの名無しさん
2009/11/11(水) 12:50:13 Goって囲碁のプログラムかと思ったよ
シンプルで高速、Googleの新プログラミング言語「Go」
ttp://journal.mycom.co.jp/news/2009/11/11/025/?rt=na
シンプルで高速、Googleの新プログラミング言語「Go」
ttp://journal.mycom.co.jp/news/2009/11/11/025/?rt=na
584デフォルトの名無しさん
2009/11/11(水) 15:23:00 Google の中の人、言語作るの好きだな
585デフォルトの名無しさん
2009/11/11(水) 18:21:08 Noopが当て馬、Goが本命?
586デフォルトの名無しさん
2009/11/11(水) 22:10:10 また中途半端なものを出してきたなw
587デフォルトの名無しさん
2009/11/11(水) 22:46:39 単に Google の中の人は飽きっぽいだけだと思
588デフォルトの名無しさん
2009/12/25(金) 20:18:30 test
589デフォルトの名無しさん
2010/01/10(日) 22:59:29 なんでlist.rindexがないのか、理解できない
590デフォルトの名無しさん
2010/01/10(日) 23:03:05 双方向リンクになってないから?
reverseかけてからやるしかないね
reverseかけてからやるしかないね
591デフォルトの名無しさん
2010/04/10(土) 18:43:33 なんでPythonスレはあんなに荒れているのに、このスレはこんなに平和なのか。
■ このスレッドは過去ログ倉庫に格納されています
ニュース
- 米大統領報道官「日本と強固な同盟維持、中国とも協力」 [少考さん★]
- ミス・ユニバース フィンランド代表の「つり目」写真が波紋… 本人釈明も批判やまず 協会謝罪「徹底的に検証」へ [冬月記者★]
- 【おこめ券】鈴木憲和農相 小泉前農相の備蓄米放出を“反省”「備蓄の円滑な運営を図ってまいります」 [Hitzeschleier★]
- 1人3千円の食品高騰対策、何に使える? あいまいなまま衆院通過 [蚤の市★]
- ゆたぼん 二重手術を報告「めちゃくちゃ気に入っています」 [muffin★]
- 【山形】クマ駆除で誤射した猟友会隊員に町が1663万円請求へ...弾当たり男性大けが2023年 小国町 [nita★]
- 中国人、ガチ超正論。「日本人がアイヌに対してやったことを『問題ない』とするなら、中国が日本人に同じことをしても文句ないだろう?」 [314039747]
- 最近高市にすり寄ってきた藤田ニコルさん、妊娠 [809488867]
- 【悲報】新米、全く売れなくて倉庫が満杯になってしまうwwwwwwwwwwwwwwwwwwww [802034645]
- 木曜日のんなっしょい❗(・o・🍬)仕放題スレ🏡
- 【悲報】日本共産党、ツイッター速報にブチギレ法的措置WWWWWWWWWWWWWWWWWWWWWWWWWWWW [935793931]
- カーリングってなんでデッキブラシ持ってんの?
