Pythonのお勉強 Part4
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
NGNGhttp://www.python.jp/Zope/
python オフィシャルサイト
http://www.python.org/
前スレ
http://pc2.2ch.net/test/read.cgi/tech/1053955472/
ログや関連リンクは >>2-3
0153デフォルトの名無しさん
NGNG\共有共有!ぱいそんぱいそん!/
nyヽ( ´∀`)人(´∀` )ノpy
0154デフォルトの名無しさん
NGNG(・∀・) オッ?
(・∀・) L、M、N、O、P、Q、R・・・
Σ(゚∀゚) オオッ!!
(゚∀゚) ny → oy → py
(゚∀゚) キター!!
0155デフォルトの名無しさん
NGNG至言です.
0156129
NGNGうーん、そうですか。
となると1文か文節単位でデータを切り分けてから
chasenとかで形態素解析してそれぞれの読みを求める、って感じかなあ。
やればできそうだけど、これだとあんまり面白みがないですね。
他に面白そうなネタを探してみます。
ありがとうございました。
0157デフォルトの名無しさん
NGNG0158超初心者
NGNG円の面積を求めるプログラムを書きました。
で、Run script(実行はこれですよね?本にはRun moduleとあったのですが)を
クリックしたのですが、なんかダイアログが出ます。
一度保存してから実行したらいけたのですが。
実行前に保存しないと駄目なんですか?
0159デフォルトの名無しさん
NGNGそのとおりです。IDLEでスクリプトを実行するには、
一旦ファイルに保存する必要があります。Ctrl+S, F5 です。
編集バッファが未保存の状態であるとき、ウインドウタイトルが
*muwahaha.py* のように“*”で囲まれた形になります。
IDLEはPython2.3で大改修されたので、あなたの“本”と
若干違うことがあるかもしれません。
円の面積って、こんなんでしたっけ?
import math
def circle_area(r):
"""circle_area(radius) -> area"""
if r<0: raise ValueError, 'radius should not be negative'
return r**2*math.pi
0160デフォルトの名無しさん
NGNG0161デフォルトの名無しさん
NGNGVCは持ってないのでBCCで。
ドキュメント通りにやってbuildまでは成功したんですけど、
installができませんでした。
setup.py installすると「VCを出せ」とか言って止まるし、
かといってinstallと--compilerは併用できんとかぬかすし。
どうすればいいんだか。手動コピーで問題ないんですか?
0162デフォルトの名無しさん
NGNGsetup.py install がやってることは実質的にはファイルのコピーだから
手動で site-packages ディレクトリにインスコすれば良いと思うよ。
うまくいったら動作報告きぼーん。
0163デフォルトの名無しさん
NGNGpython setup.py bulid --compiler=bcpp
とかでコンパイラ選べるです、JapaneseCodecsに限らず。
>うまくいったら動作報告きぼーん。
単純にコピって動かしてみました。
import japanese とか、 # -*- coding=sjis -*- とかはうまくいってる模様。
# ……ってやってる間にPyJUGにWin32用インストーラが上がってた罠。
0164デフォルトの名無しさん
NGNG>>> r = re.compile(r"([a-z]+)(?:[ \t]+(?:([0-7]{3})|(text|binary)|([a-z]+)))*")
>>> r.match("file").groups() # 1
('file', None, None, None)
>>> r.match("file 604").groups() # 2
('file', '604', None, None)
>>> r.match("file 604 text").groups() # 3
('file', '604', 'text', None)
>>> r.match("file 604 text alias").groups() # 4
('file', '604', '', 'alias')
>>>
4 番目で \3 に 'text' ではなく空文字列が入るのですが、
何故なのでしょうか?
0165164
NGNGPerl で同様のことをしてみたのですが、
$r = '([a-z]+)(?:[ \t]+(?:([0-7]{3})|(text|binary)|([a-z]+)))*';
@a = ("file", "file 604", "file 604 text", "file 604 text alias");
foreach $i (@a) {
$i =~ m/$r/;
print "$i: `$1', `$2', `$3', `$4'\n";
}
出力を見てみると、
file: `file', `', `', `'
file 604: `file', `604', `', `'
file 604 text: `file', `604', `text', `'
file 604 text alias: `file', `604', `text', `alias'
と、$3 に 'text' が入ってますし……
0166デフォルトの名無しさん
NGNGどの段階で fix されたかわからないけど、 2.4 ブランチでは fix されています。
Python 2.4a0 (#1, Dec 15 2003, 08:37:53)
[GCC 3.3.1 (cygming special)] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import re
>>> r = re.compile(r"([a-z]+)(?:[ \t]+(?:([0-7]{3})|(text|binary)|([a-z]+)))*")
>>> r.match("file 604 text alias").groups()
('file', '604', 'text', 'alias')
2.3.3c1 ではテストした限り直ってないから、さっきリリースされた 2.3.3 でも駄目だと思う。
0167デフォルトの名無しさん
NGNGPython 2.3 をお使いでしょうか?
いまちょっと 2.2.3 & 2.1.3 でテストしてみると、両方のバージョンで
#3
('file', '', 'text', None)
#4
('file', '', '', 'alias')
になりました。
0168164
NGNG>>167
Python 2.3.2 (#1, Oct 9 2003, 12:03:29)
[GCC 3.3.1 (cygming special)] on cygwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
です。
>>166
ありがとうございます。
まさか Python 側が原因とは……
2.4 が来るまでは正規表現以外で処理するしかないですね。
0169デフォルトの名無しさん
NGNG> さっきリリースされた 2.3.3 でも駄目だと思う。
http://www.python.org/
つながらねー
ヲレだけか?
0170デフォルトの名無しさん
NGNG表示するページなし http://www.python.org/ こんなんでました。
0171デフォルトの名無しさん
NGNG仕事で忙しいのか?
0172デフォルトの名無しさん
NGNG新しい何かが増えたわけでもなし、語るべきこと自体はそうない感じ。
0173デフォルトの名無しさん
NGNGwhile j<=12: #条件指定
print "%d×12=%d" %(j,j*12)
j=j+1 #最後にjをインクリメントする
と本にあったのですが、最初と最後の分の意味がわかりません。
j=1 #変数の初期化 これはなんなんでしょう?
なしでコードを書いたら実行できませんでしたし。
最初にこれを書く意味がわからない。
j=j+1 #最後にjをインクリメントする
この文は矛盾してませんか?
j=j+1って。
それにインクリメントの意味がわからない。
プログラミング辞書にも載ってません。検索してもよく判らない。
0174デフォルトの名無しさん
NGNG0175デフォルトの名無しさん
NGNG【インデント】ぱいそんぱいそん!3【ムネオたん】
http://pc3.2ch.net/test/read.cgi/tech/1036811974/
0176デフォルトの名無しさん
NGNGwhileとprintの行は分かるんですね。すごいすごい!
0177デフォルトの名無しさん
NGNGj = 1 のような文を代入文と呼びます。
この代入文は、j という名前の変数に 1 という値を代入する、という意味です。
同様に、j = j + 1 は変数 j の現在の値に 1 足した値を j に代入するという意味になります。
つまり、代入文に使われる = は数学の等号の意味とは違います。
また、インクリメント (increment) は「増やす」という意味の英語です。
プログラミングの文脈では「値を1増やす」という狭い意味でも使われます。
逆に、「(値を1) 減らす」ことをデクリメント (decrement) と言います。
0178177の続き
NGNGPython では、二つの値が等しいかどうかを調べるには == という比較演算子を使います。例:
>>> j = 1
>>> j == 1
True
>>> j == 0
False
>>>
ここで、j == 1 のような式を条件式と呼びます。値は真偽値です。
また、数学の等号の意味で「等しい」という主張は次のように表現できます。
>>> assert j == 1
>>> assert j == 0
Traceback (most recent call last):
File "<stdin>", line 1, in ?
AssertionError
>>>
assert は「主張する」という意味の英語で、assert 文は (代入文と同様に) 一種の Python の文です。
最初の assert 文は条件式の値が真なので何も起こりません。
次の assert 文は条件式の値が偽なのでエラーが起こっています。
このような assert 文は、プログラムの実行途中で変数に予期しない値が入っていないか
チェックするために利用することができ、プログラムのデバッグの際に役に立ちます。
>>174
お前の方こそネタスレに逝け。そのまま帰ってくるな。
0179デフォルトの名無しさん
NGNG>>> ←これの説明は?
0181デフォルトの名無しさん
NGNG>お前の方こそネタスレに逝け。そのまま帰ってくるな。
マターリ逝こうよ。ヽ(´ー` )ノ
0182デフォルトの名無しさん
NGNG勝手に表示されて、この後に命令を書けばいい。
人が入力する必要はない。
... ←これも同様。
Unixとか知ってる人は、シェルの$とか%とか#とかと同じモンだと思えば、それでだいたいあってる。
0183177
NGNG173がネタ(釣り)だと思う方がどうかしてる。相当2ちゃんに毒されてるな(w
つーか、釣りだと思っててもクソ真面目にマジレスしてやれ。
このスレがいつか HTML 化されて Google で引っかかるようになったときに
インクリメントだの assert だので検索した香具師の役に立つかも知れないだろ?
0184デフォルトの名無しさん
NGNGいちいち糞真面目に答えるやつも邪魔だ。アホが集まってくる。
0185177
NGNG|
|
ぱくっ|
/V\
/◎;;;,;,,,,ヽそんな煽りで
_ ム::::(,,゚Д゚)::| 俺様が釣られると思ってんのか!!
ヽツ.(ノ:::::::::.:::::.:..|)
ヾソ:::::::::::::::::.:ノ
` ー U'"U'
0186デフォルトの名無しさん
NGNGpygtkとかpyqtとかいろいろありますよね
何かお勧めはありますか
使用環境としては、
・家:Linux ,職場:windowsでシームレスに使いたい
・職場ではあちこちのパソコンに入れるのでセットアップの手間が
小さいのがありがたい
・やっぱり簡単にプログラムが組みたい
なんですが...
0187デフォルトの名無しさん
NGNG標準で付いてくる威力は大きい
0188デフォルトの名無しさん
NGNGどうしようも無いですね
0189デフォルトの名無しさん
NGNG見た目にこだわらず、凝ったことをやらないのなら、 tk
0190デフォルトの名無しさん
NGNGWindowsインストーラ版引っ張ってきてフルインストールすりゃ入ってるけど。<Tkinter
0191デフォルトの名無しさん
NGNG「Python をインストールしないと、、、」という意味だと思う。
0192デフォルトの名無しさん
NGNGPythonに限らずだが、そういう手間すら惜しむなら、そもそもLinuxとWindowsで
クロスプラットホームなGUIなんてあり得ないと思うんだけど……。
だからひとつインストールするだけってのが目的を果たす最少構成って話。
0193デフォルトの名無しさん
NGNGPythonなしで使いたいならpy2exeで全部ぶちこんでしまうとか。
ぐぐっても日本での使用例が少ないが、
http://kumiki.c.u-tokyo.ac.jp/~ichiyama/projects/wxpythonmascot/
これで使えるとおもったらTkinter+py2exeにすれば?
0194デフォルトの名無しさん
NGNGものはありますか?
Iwataさんのブロッグなどもそうだと思うのですが、他に手ごろな例がないかなって。
0195デフォルトの名無しさん
NGNG0196デフォルトの名無しさん
NGNGそういうためのRunAsサービス
0197デフォルトの名無しさん
NGNGいまどきの Python アプリって内部文字コードが Unicode になってて、
UI も Unicode 対応のライブラリで作ってあったりして、日本語化の努力って
必要なかったりしない?
もし内部文字コードが ASCII や Latin-1 限定なら、
ソースを追いかけて入出力や文字列操作の箇所を見つけ出して
文字のバイト長を考慮するように書き換えるのが基本。
これは Python だろうが他の言語だろうが同じだと思われ。
ソース読んだことないけど Mailman の日本語化パッチは所望のものに近いかも。
0198デフォルトの名無しさん
NGNG0199デフォルトの名無しさん
NGNGmultiplier=input("乗数を入力してください:")
for j in range (1,13):
print "%d×%d=%d" %(j,multiplier,j*multiplier)
と書かれています。「乗数を入力してください:」の部分に
数字を代入すると(たとえば3)、
1×3
2×3
3×3
4×3
・
・
12×3
と表示されるのではないのでしょうか?
実際には「乗数を入力してください:」の部分に代入した数字が
表示されるだけなのですが。
どうなってるのかよく判りません。
0200デフォルトの名無しさん
NGNG漏れのところでは期待通り動いた。プログラム的にはまったくおかしくないよ。
どういう風にプログラムを実行してる?
問題の3行だけから成るファイル (例えば mul.py) を作って
python mul.py
のように実行すればいけると思うんだけど。
0202199
NGNGttp://cgi.io-websight.com/index2/uploarder/img/hare7105.jpg
IDLEからではもしかして駄目なのでしょうか?
0203デフォルトの名無しさん
NGNGいかどうかを確かめることを考えるだろう。1つのやり方だけに固執せずに。
0205デフォルトの名無しさん
NGNG()の中に""をつけてませんでした。
お騒がせしました。
ついでに聞きたいのですが、>>200,>>203の言っているほかの方法とは
どのようにやるのでしょう?
MS DOS プロンプトでしょうか?
これ開くとC:\DOCUME^1\名前>とでます。
Cの下のディレクトリにおいているので、C:\Python Program>pyhon d.pyと
するのでしょうか?でも、C:\DOCUME^1\名前>が変更できません。
書いていても、物凄く初歩的なことだとは判るのですが、全然やりかた判らないです。
0206200
NGNGDOS 窓から Python を使うには、cd コマンドとか dir コマンドとか
環境変数 PATH の設定とか、そういう MS-DOS 由来の知識が要ります。
興味があったら自分で調べて下さい。しかし郷に入ったら郷に従えで
Windows では IDLE を使うのがいい気がします。
漏れは Linux 使いなので>>200のように使うのが楽なのです。
0208デフォルトの名無しさん
NGNG0209デフォルトの名無しさん
NGNGクラスで、何をクラスにしたらよいのかわかりません。
ネットでも調べてみましたが、よくわからなかったので
よければ教えてください。
0210デフォルトの名無しさん
NGNG>>> python number.py
と入れて実行しようとしたのですが
SyntaxError: invalid syntax
と出て起動できません。原因はなんでしょうか?
非常に初歩的な質問ですみません・・。
0211デフォルトの名無しさん
NGNG使い方がわからないうちは使う必要ないです。
一部でなんでもクラスにしないと気がすまない悪い子さんとかいますし、、、
0212デフォルトの名無しさん
NGNGプログラムはコマンドラインから実行する。
$ python number.py
Python のシェルから実行しても駄目だよ。
0213210
NGNGし、知らなかったです・・。すみません、勉強不足で。
しかしコマンドラインから実行しても
File "<stdin>", line 1
$ python number.py
'
と出て起動できません・・・。一体どうすれば良いのでしょうか?
0214デフォルトの名無しさん
NGNGglade+Cの方が簡単か?
0215デフォルトの名無しさん
NGNG>>213 の表示は、 >>212さんが言っている「コマンドライン」
ではないように見えます。推測ですが、python インタプリタの
「>>>」というプロンプトの直後に、「$ python number.py」のように
タイプしたものでしょう。そのような操作は誤りです。
「>>>」というプロンプトに対しては、Python言語のプログラム
(の断片)を入力します。
>>212さんがいっている「コマンドライン」は、
もしWindowsの場合であれば、「コマンド プロンプト」または
「MS-DOSプロンプト」のことだし、
Linuxまたはその他のUnixの場合であれば、シェル(bashなど)
のことです。
実は、それぞれのOSにおける「コマンドライン」の使い方について
質問するには、このスレッド(またはプログラム板全体)は
最適ではないです。PC初心者板などきくのがよいのでは
ありませんか。
0216デフォルトの名無しさん
NGNGどこからコマンドを実行してる?
OS は?
0217デフォルトの名無しさん
NGNG0219デフォルトの名無しさん
NGNGWindows なら number.py をダブルクリックするだけでは?
0220デフォルトの名無しさん
NGNG標準ライブラリのソースを読んで、クラスがどのように使われているかを
調べてみたらどうだろう。一部のクラスは継承することを前提に書かれている。
単にインスタンス化するためだけのものもある。そういう用例をたくさん
知っていれば自分でクラスを設計するときに役立つよ。
Python では必ずしもクラスを使う必要はないから、最初はいつ使えばいいのか
分からないかも知れない。ひとつの指針として、こういうのはどうだろう。
関数が増えて大域変数をいくつも使う必要が出てきたら、
それらをクラスとしてまとめることを考えてみる。
つまり、大域変数をメンバ、関数をメソッドにして、プログラムをクラスとして
再構成してみる、ということ。オブジェクト指向の方法論からすれば邪道だけど
実践的なアプローチとしては「あり」じゃないかなと思う。
0221デフォルトの名無しさん
NGNGsakito 並に支離滅裂だな。
0223220
NGNG「sakito並」と言ってみたかっただけのお花畑だったのね。ヽ(´ー`)ノヤレヤレ
ご愁傷様。>sakitoタソ
0224デフォルトの名無しさん
NGNG[1,2,3,6,7,10,11]みたいなリストがあったとして、
[[1,2,3],[6,7],[10,11]]みたく、連続した部分を切り出すような処理をしたいんです。
再帰使ったりとかの定石的な書き方ってありますか?
0225224
NGNG1 def pf(args):
2 if not args:
3 return []
4 r = []
5 r = pf(args[1:])
6 if not r:
7 r.append([args[0]])
8 else:
9 if abs(r[-1][-1] - args[0]) == 1:
10 r[-1].append(args[0])
11 else:
12 r.append([args[0]])
13 return r
こんな感じなんですけど。なんか再帰感薄いっつーか、逆から回してるだけじゃんかと。
そんなもんなんですか?
0226デフォルトの名無しさん
NGNG0227デフォルトの名無しさん
NGNG全角スペースかタグを使ったスペースよろしく!
0228デフォルトの名無しさん
NGNGキーワードに注目すれば
ブロックが見える
こんなかんじ?
def pf(args):
if not args:
return []
r = []
r = pf(args[1:])
if not r:
r.append([args[0]])
else:
if abs(r[-1][-1] - args[0]) == 1:
r[-1].append(args[0])
else:
r.append([args[0]])
return r
>>>pf([1,2,3,5,6,8,9])
[[9, 8], [6, 5], [3, 2, 1]]
で,ひっくり返ってるが,これは桶なの? >> 225
無理に再起使う必要ないんじゃ?
0229224
NGNGひっくり返ってんのは、入力データを降順にするからいいですw
def pf2(args):
prev = None
r = []
for i in args:
if i - 1 == prev:
r[-1].append(i)
else:
r.append([i])
prev = i
return r
非再帰だとこれ...おもしろくもなんともなかったw
あんまりリスト操作ってやったことないので、すいません
0230デフォルトの名無しさん
NGNG>>> def split_list(seq, test=lambda seq, i: True):
... chunk = []
... for i,x in enumerate(seq):
... if (i==0) or (not test(seq, i)):
... chunk.append(x)
... else:
... yield chunk
... chunk = [x]
... else:
... yield chunk
...
>>> def not_consecutive(seq, i):
... return seq[i] != seq[i-1]+1
...
>>> print [c for c in split_list([1,2,3,6,7,10,11], not_consecutive)]
[[1, 2, 3], [6, 7], [10, 11]]
0231224
NGNGなんか全然C(つかVBか不本意ながら)だもん>>229
ジェネレータでやってみようとも思ったんだけど...
yieldの動きがよくわかんなくて、もろよくわかんなかったとこなんですけど、
.. if (i==0) or (not test(seq, i)):
... chunk.append(x)
... else:
... yield chunk
で、ループ中でyieldするじゃないですか。でその後
... chunk = [x]
でループの続きが動く、というのは、呼び出し元でまだ続きがあるとわかってるってこと??
... else:
... yield chunk
こっちのyieldは終わりであると。なんかよくわからんのですよ。
後、内包表記って評価された時点で全部メモリに乗っちゃうんですか?
例えば
result = [c for c in split_list([1,2,3,6,7,10,11], not_consecutive)]
ってやって、
for i in result:
print i
とかだと、resultにバインドした時点で全てメモリにあるのか、for文で取り出した時に
メモリに乗るのか...長くてすいませんできたら教えてください
0232デフォルトの名無しさん
NGNG・pthonの関数はreturnはオプションで、やるべきことを済ませば勝手にreturnする。
・pythonのfor文はシーケンスの終わりにstop iterarion例外を捕らえてループを抜ける。
・リストコンプリヘンションはlistを生成するための表記法の一つなので、代入した場合の格納されるオブジェクトは当然list。
すなわち230の例ではstop iteration例外によってfor文を抜けて暗黙のreturnで関数を終了してる。
resultは(リストコンプリヘンションで生成した)listオブジェクトその物を指している。
、、、なんか答えになってねーっぽい。
0233デフォルトの名無しさん
NGNGyieldを含んだ関数は、関数の値を計算しないで、ジェネレータを返す。
ジェネレータは、nextメソッドを呼ぶと、関数を頭から実行して、yieldのところで値を返して一時停止する。
もう一回nextを呼ぶと、一時停止した直後から実行再開。
関数の終わりに到達すると、もう実行再開できなくなる(StopIteration例外がでる)。
最後のyield文じゃなくて、あくまで関数の終わりね。
普通の関数なら、暗黙の無返値のreturnがある位置。
あと、内包表記はresultにバインドした時点で全部メモリに乗る。
ジェネレータは呼び出すたびにいちいち計算するもんなので、計算結果全部をメモリに乗せない。
for i in split_list(...):
print i
と、内包表記を経由しなければOK。
for文がnextとかStopIterationとかの面倒を勝手にやってくれるから。
0234デフォルトの名無しさん
NGNG>>230の方法は callable でテストを可変にした点がいいとオモタ。
つーことで足して2で割ってみた。
def split(L, test):
buffer = [[L[0]]]
for i in range(1, len(L)):
if test(L[i-1], L[i]):
buffer[-1].append(L[i])
else:
buffer.append([L[i]])
return buffer
print split([1, 2, 3, 6, 7, 10, 11], lambda x, y: x + 1 == y)
print map("".join, split("abcmnrst", lambda x, y: ord(x) + 1 == ord(y)))
0235デフォルトの名無しさん
NGNG0237デフォルトの名無しさん
NGNG微妙。
0238デフォルトの名無しさん
NGNGなにがどのように
0239224
NGNGどうもわかりやすかったです。
yieldが含まれる関数はジェネレータオブジェクトを返すってことなのか。
それでdefのかわりにgeneraterって予約語作ったほうがいいって話もあったりするんすね。
pythonはじめてから一番違和感ある...そんなことないのかな。いやあるなあ。
むしろ内包表記なんかも全部ジェネレータ的に動いてくれりゃいいのにとか勝手なこと思いますけど。
バインドした時点ではジェネレータオブジェクトを抱えたジェネレータオブジェクトで、
みたいな感じだとむしろ理解しやすいっつーか巨大ファイル扱う時も内包表記でいけるじゃんと。
>>234だと隣あってる要素の比較っていうのが固定されるんすね。
普通どのへんで手を打つべきなんだろう。
ちなみにこれはgeniconvtblのcondition以下の生成をしようっつーので必要なんです。
どうもありがとうございました。
0240デフォルトの名無しさん
NGNGhttp://python.org/peps/pep-0289.html
0241デフォルトの名無しさん
NGNGあるので、全部ジェネレータというのもちょっと……。
PEP 289が入れば>>239の望みもかなうかな。
0242デフォルトの名無しさん
NGNGPython のファイルオブジェクトは実質的にジェネレーターの一種だと思う。
辞書の iterxxx 系統とか。
0243224
NGNGああそう、こんな具合で。いいっすねー。
>>242
そもそも指摘の意図がわかんないですすいません。
巨大ファイルってとこになんかあるですか
後、そもそもジェネレータとイテレータの違いってyieldの特性によるもの?
0244デフォルトの名無しさん
NGNG(一定の規則に則って)繰り返し値を返してくれるオブジェクトをイテレータといって、
イテレータの中でも、予めメモリ上に全部乗ってるデータを順番に返すのではなくて、
値が必要になったらその都度計算して返すオブジェクトをジェネレータという。
最近のファイルオブジェクトは、値を全部メモリに読み込んで返す他に、
必要な分だけその都度読み込んでは返すことができるので、そういう意味で
ジェネレータに近いんじゃないかと。メモリも圧迫しないし。
0245デフォルトの名無しさん
NGNGC# にもつくらしいけど。
0246デフォルトの名無しさん
NGNG漏れの知る限りでは、Smalltalk-80には既に存在していた。
0247デフォルトの名無しさん
NGNG0248246
NGNGyieldを使って構成するようなものではなくて、例えばpython風に書くと
|class RandomGenerator:
|def __init__(self, seed = None):
|#何かseedを使って初期化する
|def next(self):
|...
|return XXX
みたいなクラスを定義して、
| random = RandomGenerator()
| while 1:
| r = random.next()
| print r
みたいな形で、next()を呼ぶ毎に次の値を計算する。
こういうのが、一種のパターンして確立していた。
別の似たようなものとしては、関数型言語の無限リストがある。
これも漏れの知る限りでは1980年に発表されたMirandaで実装されていた。
0249デフォルトの名無しさん
NGNG0250デフォルトの名無しさん
NGNG0251デフォルトの名無しさん
NGNGソースきぼn
0252デフォルトの名無しさん
NGNGyield はゲネレータ かと名前から思っていたのだけど、今調べたら、単なるイテレータのようですね。
スマソ。
■ このスレッドは過去ログ倉庫に格納されています