Pythonのお勉強 Part23

このエントリーをはてなブックマークに追加
293デフォルトの名無しさん
>280
二重ループの部分を関数内関数にする

def main():
    def foo():
        for i in xrange(10):
            for j in xrange(10):
                if i == j == 5:
                    print "found"
                    return
        print "not found"
    foo()

main()
294デフォルトの名無しさん:2008/02/08(金) 19:08:57
for i in xrange(10):
    for j in xrange(10):
        if i == j == 5:
            break
    else:
        continue
    break

print i, j
295デフォルトの名無しさん:2008/02/08(金) 19:23:55
>>> import operator
>>> map(operator.itemgetter(1), [[1,2],[3,4],[5,6]])
[2, 4, 6]
296デフォルトの名無しさん:2008/02/08(金) 20:06:28
主部省略だけで文が読めなくなる低能はどこですか
297デフォルトの名無しさん:2008/02/08(金) 20:32:25
2.6〜2.9って生まれることも許されないのが確定っスか?
298デフォルトの名無しさん:2008/02/08(金) 21:02:37
>>286
> ここまで解説してもまだ分からない?
うん、まったくわからない。説明してくれる?
とりあえず、こちらが実際に「ちっとも忘れていない」ことを「忘れるな」と言われても、
ああ、どっかで誤読してるんだなこの人、としか思わないわけで。
299デフォルトの名無しさん:2008/02/08(金) 21:14:28
>>286
キチガイ、ゲラゲラゲラ(www
300デフォルトの名無しさん:2008/02/08(金) 22:06:25
耳が悪いと頭も性格も悪くなるのか。
気を付けないと。
301デフォルトの名無しさん:2008/02/08(金) 22:12:20
>297
2.6はリリースされることは決まっているが
302デフォルトの名無しさん:2008/02/08(金) 22:13:34
>>297
2.7くらいまでは出るんじゃね?
303デフォルトの名無しさん:2008/02/08(金) 23:26:25
>>297
2.6 といっしょに 3.0 が出て
2.7 といっしょに 3.1 が出て
2.8 といっしょに 3.2 が出て
2.9 といっしょに 3.3 が出て

くらいまでは 2.x 系列が使われ続けるだろうからむしろ 2.9 までで足りるのかを心配した方がいいよ
304デフォルトの名無しさん:2008/02/08(金) 23:29:43
小数点以下が16進で
2.10
2.11
2.12
2.13
2.14
2.15

までいくだろ
305デフォルトの名無しさん:2008/02/08(金) 23:39:12
2.9は出ない、に10000グーグル
306297:2008/02/08(金) 23:40:16
なるほどFirefoxみたいな感じに並行メンテされるのね。
つか、2.9じゃ桁足りない説ワロタ。むしろ近いのはIPv4/6か。
307272:2008/02/09(土) 04:09:57
そうか。
トヨタが筑豊に技術者を集めるのは、技術を奪い取って剥ぎ取って追い出すためか。
トヨタは泥棒が得意だからな。

それはそうと、松並議員が相撲部屋に説教たれてたのは何のギャグだろ。
あいつ痴漢した相手が逆らったからって殴り倒して地下鉄でひき殺させようとした殺人未遂犯のくせして。
写真うpしちゃうぞコラ。
308デフォルトの名無しさん:2008/02/09(土) 08:34:40
>>293
見易さのためだけに関数化するのは馬鹿のすること。

http://pc11.2ch.net/test/read.cgi/tech/1169473442/549
309デフォルトの名無しさん:2008/02/09(土) 08:38:40
>>308
へ?みやすくなるならいいじゃん。
ネストした関数の何が問題なのさ?
310デフォルトの名無しさん:2008/02/09(土) 08:54:31
>>309
ループを基準に関数化とか・・・
gosubみたいな引数を伴わない関数でもあるんならいいけどね。

短くするための関数化なら、普通にエディタで折りたためば良いと思うよ。
それほど大規模なやつでなくてもいまどきのは折りたためるの結構あるし。
311デフォルトの名無しさん:2008/02/09(土) 08:58:59
>>310
引数無しのネスト関数で何の問題があるの?
ループ内のまとまった処理を関数としてまとめることに
問題があるとは思えないんだけど。

なんかフラットな構造の関数に慣れてるだけじゃないの?
312デフォルトの名無しさん:2008/02/09(土) 12:30:58
呼ぶ回数にもよるが、インライン展開とか無いなら、
関数呼び出しのコストが無駄になるかもね
313デフォルトの名無しさん:2008/02/09(土) 12:32:45
関数の中身がよほどスカスカでないかぎり、
関数呼び出しがボトルネックになることは
まずないと思うがなあ。
314デフォルトの名無しさん:2008/02/09(土) 13:06:47
>>308
関数化した方が処理が抽象化されて再利用性が高まる。
テストもしやすくなるしね。

パフォーマンスのことを気にするのは,その後でしょ。
315デフォルトの名無しさん:2008/02/09(土) 13:29:31
>なんかフラットな構造の関数に慣れてるだけじゃないの?
Pythonによく似ていて関数内関数のない言語。それはRu(ry
316デフォルトの名無しさん:2008/02/09(土) 14:41:35
えっ,Rubyって関数ローカルな関数作れないの?
317デフォルトの名無しさん:2008/02/09(土) 14:59:12
関数内部に関数を定義することはできるが、関数外部に定義したのと同じ効果
しかないので無意味。
318デフォルトの名無しさん:2008/02/09(土) 15:47:47
マジか?名前かぶったらどうなるんだ?
319デフォルトの名無しさん:2008/02/09(土) 16:16:54
上書きされる(つД`)

def boo
  p "boo"
end

def foo
  def boo
    p "boo2"
  end
  boo
end

foo # boo2
boo # boo2
320デフォルトの名無しさん:2008/02/09(土) 16:21:56
>>318
「あと」に実行されたメソッド定義で上書きされる
というか、def methodname という書式は所属するクラスにメソッドを定義する効果しかない
勝手に「関数内関数だぜー」とか勘違いして使っておいて文句ゆーな
いわゆる関数内スコープの関数が欲しければ「一連の手続き」をオブジェクトとして持ち歩けるProc使え
321デフォルトの名無しさん:2008/02/09(土) 16:26:55
>勝手に「関数内関数だぜー」とか勘違いして使っておいて文句ゆーな
じゃ、なんで関数内に関数を書けるように変更されたんでつか?
322デフォルトの名無しさん:2008/02/09(土) 16:28:21
>>320
それ、勘違いというより、コンパイラで弾くべきエラーなんじゃ…
323デフォルトの名無しさん:2008/02/09(土) 16:28:46
設計ミスちゃうんかと
324デフォルトの名無しさん:2008/02/09(土) 16:32:49
That's Matz quality!
325デフォルトの名無しさん:2008/02/09(土) 16:36:18
>>321
それが「俺ってすごい感」
326デフォルトの名無しさん:2008/02/09(土) 16:47:34
>>321-322
動的にメソッドを追加できるというメリット…まあ、注意深く使えばメリットになるものがなくもない
「Hoge#levelupを実行するとHogeクラスに10個くらいメソッドが追加される」とかそういうやつ
「メソッド定義(Rubyには関数はない)はどこにでも書ける」という単純な事象の単純な結果に過ぎない
だからProc使えよ

def foo
helloworld = Proc.new{ puts 'Hello, World!'}
helloworld.call
end

helloworld ←エラー
foo ← Hello, World!

327デフォルトの名無しさん:2008/02/09(土) 16:50:33
説教泥棒という言葉を思い浮かべてしまった。
328デフォルトの名無しさん:2008/02/09(土) 16:55:17
>>326
まとめると、まっつんの設計ミスということでOK?
329デフォルトの名無しさん:2008/02/09(土) 16:57:21
Rubyって,よく考えずに追加した浅はかな仕様で自爆してること多くね?
330デフォルトの名無しさん:2008/02/09(土) 16:59:28
まあそろそろRuby関連スレでやってくれ
331デフォルトの名無しさん:2008/02/09(土) 17:02:16
>>328
> この定義のある場所にメソッドを定義します。
> すなわち、クラス/モジュール定義中ならばそのクラス/モジュールのメソッドを定義します。
> トップレベルならばどこからでも呼べるメソッドを定義します。

という def の説明があるんで、def の中に def を書いたらどうなるかは…
やっぱ、そのクラスにメソッドが定義される以上の動作はし得ないと思うぞ
メソッドにメソッドを定義することはできない

既存言語を経験した人が def をネストしてハマるのはまあ通過儀礼のような気もせんでもないが
それで Proc とかそのへんを使い始めてくれればそれで問題ないかと
332デフォルトの名無しさん:2008/02/09(土) 17:04:06
まあ、いずれにしても使わないんですけどね、Rubyなんて。
333デフォルトの名無しさん:2008/02/09(土) 17:07:35
まあPythonスレだしな
334デフォルトの名無しさん:2008/02/09(土) 17:09:15
少なくとも言語設計としては大失点だな。
335デフォルトの名無しさん:2008/02/09(土) 17:14:03
スレタイを読めない奴は黙れ
336デフォルトの名無しさん:2008/02/09(土) 17:16:20
あれほど酷くは無い。なんつったっけ、P(ry
337デフォルトの名無しさん:2008/02/09(土) 17:20:55
>>336
まあ目くそ鼻くそだけどな。
くそ同士だから、お互い気になって仕方がないんだろ。
338デフォルトの名無しさん:2008/02/09(土) 17:23:38
なぜruby厨がそこら中のスレで鼻摘まみ者になっているか、よくわかった。
339デフォルトの名無しさん:2008/02/09(土) 17:25:52
とりあえず、NGワード Proc を設定 www
340デフォルトの名無しさん:2008/02/09(土) 17:27:51
Procってあれだろ、カッコなしでメソッド呼び出しできる仕様を追加してしまったがために、
呼び出し可能オブジェクトを代入できなくなって、苦し紛れに作った仕様なんだよな。
341デフォルトの名無しさん:2008/02/09(土) 17:37:24
Procでreturnするとfooから抜けちゃって関数内関数として使えません(> <)

def foo
  boo = Proc.new do
    100.times do |i|
      100.times do |j|
        if i == 50 && j == 50
          return
        end
      end
    end
  end
  boo.call
  p "foo" # 実行されず
end

foo
342デフォルトの名無しさん:2008/02/09(土) 17:47:37
だからRubyの話はRubyスレでやれヴォケ
343デフォルトの名無しさん:2008/02/09(土) 17:50:25
Matzは多言語の悪口を言う前に
スタックの使い方について勉強した方がいいな(www
344デフォルトの名無しさん:2008/02/09(土) 18:00:44
>>341
ものすごいfoolなfooですね。
Rubyってやっぱクソだ

>>340
Ruby作者の頭イカレすぎ

子供の作文に見せかけたなでしこで書かれた破壊プログラムにも全部消されたしクソ杉。
345デフォルトの名無しさん:2008/02/09(土) 18:01:24
http://pc11.2ch.net/test/read.cgi/tech/1200106073/484
レスはこっちに書いたから
346デフォルトの名無しさん:2008/02/09(土) 18:07:01
なんにしてもRubyみたいな糞言語は使わないんだけどね。
347デフォルトの名無しさん:2008/02/09(土) 18:26:02
細かい言語仕様ひとつで糞言語って大げさ。

ってかアンチrubyスレいけ。いい加減しつこい。
348デフォルトの名無しさん:2008/02/09(土) 18:40:26
細かい言語仕様て、決まってないと安心して使えないアル。では安心して
使える言語Pythonの話題をどうぞ.
349デフォルトの名無しさん:2008/02/09(土) 18:45:07
>1.8.6では、Proc.new≠proc=lambda
>1.9では、Proc.new=proc≠lambda

なんか勝手に変えられることもあるらしい(wwww

なにこの糞言語(wwwwwww
350デフォルトの名無しさん:2008/02/09(土) 18:51:12
報告はいいから
Ruby話の続きは>>345でまとめようぜ
興味あるPython使いは勝手に覗きに来る事だろうて