Pythonのお勉強 Part15
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/11/12(日) 22:51:44http://www.python.jp/Zope/
Python オフィシャルサイト
http://www.python.org/
Python 2.5
http://www.python.org/download/releases/2.5/
IronPython
http://www.codeplex.com/Wiki/View.aspx?ProjectName=IronPython
まとめ wiki
http://www7a.biglobe.ne.jp/~yasozumi/python/wiki/
Pythonの入門書「みんなの Python」
http://www.amazon.co.jp/gp/product/479733665X/
Pythonのお勉強 Part14
http://pc8.2ch.net/test/read.cgi/tech/1161272096/
0478デフォルトの名無しさん
2006/11/29(水) 01:08:02x.append(1)
print x
>>> hoge()
[1, 1]
>>> hoge()
[1, 1, 1]
はめられたああああ!
初期化してくれねぇのかよ!
0479デフォルトの名無しさん
2006/11/29(水) 01:09:29横着しないで入門書読めば?
0480デフォルトの名無しさん
2006/11/29(水) 01:14:48reduce(lambda x, y:str(x)+str(y),[1,2,3])とか?
0481デフォルトの名無しさん
2006/11/29(水) 01:20:16いや、読み返して絶叫したんだよ。
正しくは「はまった俺はアホ」でした。すみません><
0482デフォルトの名無しさん
2006/11/29(水) 01:31:00thanx
0483デフォルトの名無しさん
2006/11/29(水) 01:46:17"".join(map(str,list))
0484デフォルトの名無しさん
2006/11/29(水) 02:00:19まともな入門書なら、なぜそのようなことが起こるのか、たいてい書いてあるな。
>>477
冗長に思えるかも知れないけど、リストコンプリヘンションは表記として分かりやすいと思う。
"".join([str(x) for x in [1,2,3]])
あと、listという変数名は使わない方がいい。
0485デフォルトの名無しさん
2006/11/29(水) 02:17:23>まともな入門書なら、なぜそのようなことが起こるのか、たいてい書いてあるな。
ハマりどころだからね.
初心者がハマりやすい罠を、丁寧に解説してあるのがよい入門書の条件だと思う.
0486デフォルトの名無しさん
2006/11/29(水) 03:20:32例えばdict.has_key()はアンダーバーが入っててhasattr()は入っていないんですが、ここらへんの命名方針があれば教えてください。
0487デフォルトの名無しさん
2006/11/29(水) 07:10:49> 関数名
>
> 関数名は lowercase 方式で命名。アンダースコアで単語を区切って可
> 読性を上げてもよい。mixedCase 方式は、既に広く使われているような文
> 脈(たとえば threading.py)で、互換性を保つ場合にのみ許される。
>
> メソッド名
>
> 関数の場合とほぼ同じ。lowercase 方式で命名し、可読性を上げる目的で、
> アンダースコアで単語を区切るのは構わない。
さじ加減次第?
0488475
2006/11/29(水) 07:32:24print u
てすと
となりますた。なんでだろう。
0489デフォルトの名無しさん
2006/11/29(水) 07:35:49http://www.python.jp/doc/release/tut/node6.html#SECTION006700000000000000000
>重要な警告: デフォルト値は 1 度だけしか評価されません。デフォルト値がリストや辞書のような変更可能なオブジェクトの時にはその影響がでます。例えば以下の関数は、後に続く関数呼び出しで関数に渡されている引数を累積します:
0490デフォルトの名無しさん
2006/11/29(水) 11:12:18Python 3.0で統一されるかも根。
0491Python初心者(復活)
2006/11/29(水) 12:14:41Python2.5ではgeneratorにおいてsend()によって「値を
渡す」ことが出来るようになったとある。
例えば:
lang = ['C','Java','Perl','Lisp',
'Python','Ruby']
def conLang (maximum):
i = 0
while i < maximum:
val = (yield lang[i])
if val is not None:
i = lang.index(val)
else:
i += 1
if __name__=='__main__':
x = conLang(6)
print x.next()
print x.next()
print x.send('C')
print x.next()
print x.send('Python')
print x.next()
以上のコードから、原則的にyield文の戻り値は代入
出来ないが、send()とは結局(yield ??)の
「代入」を可能にするということですか?
0492デフォルトの名無しさん
2006/11/29(水) 12:43:190493デフォルトの名無しさん
2006/11/29(水) 13:27:20そもそも、環境を書け。
http://lowlife.jp/nobonobo/zine/5/6.html
あたりは参考にならんのか?
0494デフォルトの名無しさん
2006/11/29(水) 13:41:43... while 1:
... val = (yield 10)
>>> __import__('dis').dis(mygen)
2 0 SETUP_LOOP 10 (to 13)
3 >> 3 LOAD_CONST 1 (10)
6 YIELD_VALUE
7 STORE_FAST 0 (val)
10 JUMP_ABSOLUTE 3
>> 13 LOAD_CONST 0 (None)
16 RETURN_VALUE
(参考: ttp://www.python.jp/doc/2.4/lib/bytecodes.html)
直前のnext()やsend()が値を返した直後はYIELD_VALUEまで実行されている。
send(arg)を呼ぶとargをTOSに積んでSTORE_FAST以降を実行。
だからval=argになって次のYIELD_VALUEまで進んで値を返す...ということじゃないかな。
next()を呼んだときはTOSにNoneを積むから、next()はsend(None)と等価だと思う。
>>> def mygen2():
... while 1:
... yield 10
2 0 SETUP_LOOP 8 (to 11)
3 >> 3 LOAD_CONST 1 (10)
6 YIELD_VALUE
7 POP_TOP
8 JUMP_ABSOLUTE 3
とにかく2.5ではnext()を呼ぶとTOSに何かを積むらしい。2.4ではYIELDの前後はこうだった。
3 >> 3 LOAD_CONST 2 (10)
6 YIELD_VALUE
7 JUMP_ABSOLUTE 3
0495デフォルトの名無しさん
2006/11/29(水) 13:47:12> yield文の戻り値は代入出来ないが
してるじゃん。
0496デフォルトの名無しさん
2006/11/29(水) 14:00:52コードだけみてもの言わないでね^^
0497デフォルトの名無しさん
2006/11/29(水) 14:01:51早漏ぎみですね・・・ストレスでせうか?
0498デフォルトの名無しさん
2006/11/29(水) 14:05:380499デフォルトの名無しさん
2006/11/29(水) 14:38:11Tkinterを使おうと思っているんですけど
Microsoft Visual Studioのダイアログエディタみたいに、
GUIでボタンなどの部品を配置するソフトはありませんか?
0500デフォルトの名無しさん
2006/11/29(水) 23:32:35Pythonにはあまりいなそうだね。
需要が無いからか、色分け設定用意されてないことも多いし…。
0501デフォルトの名無しさん
2006/11/30(木) 00:19:50色分け、普通に出来てるよ。
少数派なの?
みんなはなに使ってるのよ。
0502デフォルトの名無しさん
2006/11/30(木) 00:23:02普通は、RADが裏で勝手なコードを吐くのが
イヤだから、スクリプト言語を使ってると思うんだ。
そういうのがいいなら、僕なら netBeansかなにかに
しとくなぁ。
0503デフォルトの名無しさん
2006/11/30(木) 00:30:270504デフォルトの名無しさん
2006/11/30(木) 00:34:090505デフォルトの名無しさん
2006/11/30(木) 00:54:04日本語の扱いが他のアプリと統一できないのが嫌。
0506デフォルトの名無しさん
2006/11/30(木) 01:01:37設定が悪いだけでしょ
0507デフォルトの名無しさん
2006/11/30(木) 01:04:500508デフォルトの名無しさん
2006/11/30(木) 01:34:21自動補完って、普通の入力補完と違うの?
サクラエディタで、色分けと普通の入力補完してるけど。
最初に .py の拡張子付きで保存しないと、機能が使えない
のが多少難だけど、特段不満ないなぁ。
キーワードが少し足りないと思うけど、
設定ファイルに自分で書き足せば問題なし。
ああ、自動補完て、もしかして RAD のように
コード生成してくれる機能のこと?
あったら便利かもしれないけど、
コードの雛形をコピペするので十分かも。
0509507
2006/11/30(木) 02:32:58最近調べていないから断言出来ないけど、
サクラエディタの補完機能はおそらく、マクロ実行コマンドを叩いてから実行されるが、
crescent eve の場合はうざい位に候補を自動で出してくれる。※編集中ファイル内の単語から候補を抽出。
EmEditor、秀丸とかも試しんですが、いづれもマクロを使って実現しているだけで、
必ずトリガーが必要で好きじゃない。
サクラで↑のような自動補完機能があれば即乗り換えなんですが、
どうでしょうか?
というか今から調べてみます。
0510デフォルトの名無しさん
2006/11/30(木) 02:44:31>>499
663 名前: 662 [sage] 投稿日: 2006/07/29(土) 11:50:08
SpecTIXというのがあった.
ttp://www.python.net/crew/mike/src/Spectix/Spectix.html
0511デフォルトの名無しさん
2006/11/30(木) 02:51:59TextMateというエディタがおすすめ。
たしかTurboGearのスクリーンキャストで
使われてたので見た事ある人いるかも。
0512デフォルトの名無しさん
2006/11/30(木) 02:55:01あ、自動補完ってトリガーがいらないのね。
サクラエディタではたしかに、ctr-space 叩いてるわ。
あと、サクラのPython での色分けはね、
自分で設定とかしないといけないのよ。
自分は、↓ あたりみて、あれこれやった。
(例にあがっているのは、tclだけれど)
http://www2u.biglobe.ne.jp/~k_hiray/ps_db/fsw/wiki.cgi?page=%BF%A7%CA%AC%A4%B1%C9%BD%BC%A8%A4%B9%A4%EB
0513デフォルトの名無しさん
2006/11/30(木) 03:08:49matlabモードもあるかな…
0514デフォルトの名無しさん
2006/11/30(木) 03:22:24TextMateのデフォルトではインストールされてないけど、
下の言語を追加するプラグインを入れてプラグイン一覧を見てみると
mathlabプラグインもあったよ。
http://sg.validcode.at/2006/11/7/textmate-getbundle-bundle
0515デフォルトの名無しさん
2006/11/30(木) 03:27:040516デフォルトの名無しさん
2006/11/30(木) 03:30:32TextMateは日本語入力が難しいって話だけど、どのへんがおすすめなの?
構文色分け程度なら他のエディタもあるし。
0517デフォルトの名無しさん
2006/11/30(木) 03:54:47日本語の問題はhetimaさんという人がプラグイン書いてくれたおかげで、
大分ましになったかな。作者は次のMacOSXの機能を利用して完全に解決
すると公言してる。
魅力は、他のIDEのようにフォルダを階層表示するドロワーを備えていて、
関係ファイルをタブ表示できるGUI機能。文字列を選択してオプションキー
を押すだけで選択範囲を行方向の選択から列方向の選択に切り替えて複数の
行を編集できたり、鬼車という正規表現エンジンがかなり強力で文字列の
検索置換の自由度が高いなどのエディタ機能の充実。それと、選択文字列を
シェル変数に入れてそれをスクリプトで処理してそのままエディタの文字と
置換できるので、シェルで動く言語なら何でもスクリプトが書けて、
既に何十という言語に対応した文字の色分けやスクリプトをパッケージを
まとめたバンドルというプラグインが存在してる事かな。
だめな部分は、シェアウェアだという事と、日本語に完全に対応してない、
Emacsに比べるとまだまだスクリプトが充実してない事かな。
0518デフォルトの名無しさん
2006/11/30(木) 04:14:04じゃあ一応TextMateのダウンロード先も
http://macromates.com/
0519デフォルトの名無しさん
2006/11/30(木) 07:30:31http://www.vector.co.jp/soft/win95/writing/se177399.html
0520デフォルトの名無しさん
2006/11/30(木) 08:45:59コマンド一覧吐き出させる方法があれば、設定を自作できるにしても、
本体だけでできることを少なくしてる特性上、満足なモノはできないっぽい。
かといって、全部のモジュールを拾うのは大変だし。
がんばっても入力補完できないから、alt /壊れてるIDLEの方がマシか…。
0521デフォルトの名無しさん
2006/11/30(木) 10:24:50自分は、入力補完はないとやってられないが、
色分けは特段に必要性とか感じないけど。
0522デフォルトの名無しさん
2006/11/30(木) 10:27:06で、そのグレートにマイナーなエディタってなに?
いや、避けて通りたいのでw
0523デフォルトの名無しさん
2006/11/30(木) 11:00:120524デフォルトの名無しさん
2006/11/30(木) 11:04:480525499
2006/11/30(木) 11:23:47レスthanx
SpecTIXが消滅している模様・・・
TkinterのGUIビルダーは結局ないのか?!
GUIビルダーを使いたいならPyGTKかwxPythonを使うしかないのか?!?!
0526デフォルトの名無しさん
2006/11/30(木) 11:37:44コードの雛形をコピペするんじゃ、
ダメなの?
そんなにGUIビルダーが必要かなぁ。
Java でRAD のおせっかいにはうんざりしたクチなので。
まあ、でも、オンラインのコードのコピペOKの
ちゃんとしたクイック・リファレンスはほしいと思ってる。
0527デフォルトの名無しさん
2006/11/30(木) 12:14:17> GUIビルダーを使いたいならPyGTKかwxPythonを使うしかないのか?!?!
それはイヤなの?
0528デフォルトの名無しさん
2006/11/30(木) 12:33:20public class Lituus extends Applet {
public void paint (Graphics g) {
g.setColor(Color.red);
int centerx = getWidth()/2;
int centery = getHeight()/2;
g.drawLine(0,centery,centerx*2,centery);
g.drawLine(centerx,0,centerx,centery*2);
g.setColor(Color.blue);
int n=360;
double zoomx=10,zoomy=10;
double delta =Math.PI*2/n;
int radius = (centerx<centery)? centerx*3/4:centery*3/4;
double c =Math.sqrt(2*Math.PI)*(radius);
double t = 0.001;
double r =Math.sqrt(ここ);
int lastx = (int)(r*Math.cos(t))+centerx;
int lasty = -(int)(r*Math.sin(t))+centery;
for (int i=1;i<=n;i++){
t+=delta;
r=Math.sqrt(ここ);
int x = (int)(r*Math.cos(t*zoomx))+centerx;
int y = -(int)(r*Math.sin(t*zoomy))+centery;
g.drawLine(lastx,lasty,x,y);
lastx=x;
lasty=y;
}
}
}
ここってかいたとこができればできるらしいのですが、わかりますか?おしえてください
0529528
2006/11/30(木) 12:38:460530Python初心者(復活)
2006/11/30(木) 12:39:50>next()はsend(None)と等価だと思う。
本当だぁ!
>>491
の最後を
x = conLang(6)
print x.send(None)
print x.next()
print x.send('C')
print x.send(None)
print x.send('Python')
print x.next()
と変えてみたが、全く同じ動作をする…
しかし、
if val is not None:
i = lang.index(val)
else:
i += 1
だから、Noneがsend()されればelse:以降が
実行されるってのは、当たり前だと言えば
そうだが…
0531デフォルトの名無しさん
2006/11/30(木) 13:04:10http://lowlife.jp/nobonobo/zine/5/6.html
ここを見てsitecustomize.pyを設置しているんですが、
---------------------
Python 2.4.3 on Windows XP
>>> sys.getdefaultencoding()
'mbcs'
>>> print u'ほげ'
ほげ
---------------------
Python 2.3.4 on RedHat EL4
>>> sys.getdefaultencoding()
'UTF-8'
>>> print u"ほげ"
≫
---------------------
Python 2.3 on Debian serge
>>> sys.getdefaultencoding()
'euc-jp'
>>> print u"ほげ"
Traceback (most recent call last):
File "<stdin>", line 1, in ?
UnicodeEncodeError: 'euc_jp' codec can't encode character u'\xb2' in position 3\
: illegal multibyte sequence
---------------------
>>> print u"ほげ" がうまく行くのはWindowsだけです。
何かアドバイスをいただけないでしょうか?
0532531
2006/11/30(木) 13:06:03print u"ほげ"
は問題なく「ほげ」と表示されます。
0533Python初心者(復活)
2006/11/30(木) 13:21:20正式ヴァージョンと関数を利用した簡易ヴァージョンです。
class Accumulator:
def __init__(self, start):
self.val = start
def incr(self, amount):
self.val += amount
def getValue(self):
return self.val
def accum(n):
s = [n]
def infunc(i):
s[0] += i
return s[0]
return infunc
if __name__=='__main__':
val = Accumulator(5)
val.incr(3)
print val.getValue()
val.incr(4)
print val.getValue()
ac = accum(5)
print ac(3)
print ac(4)
0534Python初心者(復活)
2006/11/30(木) 13:22:19書けないか疑問に思って良いと思う。
def foo(n):
return lambda i: return n += i
あるいは、
def foo(n):
lambda i: n += i」
とhttp://www.shiro.dreamhost.com/scheme/trans/icad-j.html
で書いている。上記簡易ヴァージョンより簡単な書き方は
ないのでしょうか?
0535デフォルトの名無しさん
2006/11/30(木) 13:47:41これはちがうの?
http://sourceforge.net/projects/ptkgb/
0536デフォルトの名無しさん
2006/11/30(木) 13:56:11自分も以前に調べたけど、ないと思う。
Pythonには
1.lambda関数には、式は書けるが、文は書けない。
2.クロージャが参照している変数は、書き換えはできない。
という制約があるから。
Guidoはlambdaが嫌いなので(見づらくなりがちだから)、1.が変わることは
ないだろうけど、2.は単に、代入するとローカル変数の宣言になってしまうと
いうだけなので、適当な表記法さえ見つかれば、クロージャの参照している変
数の書き換えの機能を追加しても良い、という話になっているらしい。以前の
Pythonスレにそう書いてあった。
0537デフォルトの名無しさん
2006/11/30(木) 14:19:33def foo(n):
a = [n]
return lambda i: a.__setitem__(0, i + a[0]) or a[0]
f = foo(1)
print f(2)
print f(3)
print f(4)
0538デフォルトの名無しさん
2006/11/30(木) 14:22:41class foo:
def __init__(self, n):
self._n = n
def __call__(self, i):
self._n += i
return self._n
f = foo(1)
print f(2)
print f(3)
print f(4)
0539デフォルトの名無しさん
2006/11/30(木) 15:12:07うまくいかない環境のPythonのバージョンを
うまくいく環境のものに合わせればいいのでは。
0541デフォルトの名無しさん
2006/11/30(木) 15:56:47知らないだろ?ランバダ。
0542デフォルトの名無しさん
2006/11/30(木) 16:01:23うちは XP で Python2.5だけど、
その方法ではうまくいかない。
(うちだけなのか?)
対話モードでは、諦めて
print unicode('ほげ', 'mbcs')
方式でやってるなぁ。
0543デフォルトの名無しさん
2006/11/30(木) 16:36:380544531
2006/11/30(木) 17:07:52>>543 それはもちろんやっております。
ところで、>>531の書き込みが一部、おかしくなっていました。
Python 2.3.4 on RedHat EL4
>>> print u"ほげ"
≫ ←ここ
「≫ 」になっていますが、実際は a の上に ~ が付いたものが出るなどの文
字化けになっています。まあ些細なことですが。
0545デフォルトの名無しさん
2006/11/30(木) 19:37:03いるんだろうか?いたら環境を教えて欲しい。ちなみに自分はダメ。
0546デフォルトの名無しさん
2006/11/30(木) 19:40:56出力できている。
0547デフォルトの名無しさん
2006/11/30(木) 19:44:19Linux (FC5 UTF-9)だが、問題なく出力される
0548デフォルトの名無しさん
2006/11/30(木) 19:45:32造族
ナニコレ(WWWWWWWWWWWWWW
0549デフォルトの名無しさん
2006/11/30(木) 19:46:39FreeBSD6.1R + Python2.4.3、2.5 (PuTTY経由)
でもいけるようだ
0550デフォルトの名無しさん
2006/11/30(木) 19:47:54ほげ
これで不都合ないので問題ない
0551デフォルトの名無しさん
2006/11/30(木) 20:08:08sys.getdefaultencoding()が
asciiでもutf-8でもmbcsでも問題ない
0552デフォルトの名無しさん
2006/11/30(木) 20:13:56Python Tk Gui Builder
出たばかりのソフトか
0553デフォルトの名無しさん
2006/11/30(木) 22:07:30スクリーンキャストあったので、よかったらどうぞ
http://macromates.com/screencast/python_part_1.mov
0554デフォルトの名無しさん
2006/11/30(木) 22:17:180555デフォルトの名無しさん
2006/11/30(木) 22:37:38Python教えてるんだと。
一回生ということは大学かなあ?
0556デフォルトの名無しさん
2006/11/30(木) 23:10:090557デフォルトの名無しさん
2006/11/30(木) 23:26:47買った人いますか?
ブログ検索では買った人を見かけない...orz...
0558デフォルトの名無しさん
2006/11/30(木) 23:27:490559デフォルトの名無しさん
2006/11/30(木) 23:50:2712月1日発売,今日じゃねーじゃん
http://www.cbook24.com/bm_detail.asp?sku=4886484602
もしかして発売の前日に話題にしとくと得する人?
0560デフォルトの名無しさん
2006/12/01(金) 00:07:25これだけ使えればコメントなんかは十分じゃない
http://www.youtube.com/watch?v=8iQVujJjTzo
0561デフォルトの名無しさん
2006/12/01(金) 00:11:45微妙。
日曜プログラマしか満足しねえだろ。
TextMateって,作者タソがマルチバイト対応宣言してるんじゃなかったっけ?
正式に対応してインライン変換できるようになるまで待つことにするよ。
0562デフォルトの名無しさん
2006/12/01(金) 00:16:37Leopardの機能つかって対応すると言ってる。
スレ違いでしつこくてすまない
0563デフォルトの名無しさん
2006/12/01(金) 00:30:54今日普通に平積みしてあった。
あまりにも低レベルな内容だったので当然スルー。
いちいちifを図で解説してもらわなくても結構という感じ。
0564デフォルトの名無しさん
2006/12/01(金) 00:39:18>あまりにも低レベルな内容だったので
「実践」ってタイトルについているのに低レベルなのか。
低レベルな実践ってなんなんだ(w
0565デフォルトの名無しさん
2006/12/01(金) 00:44:480566デフォルトの名無しさん
2006/12/01(金) 01:55:36スレ違いだと分かってて居座ってますってことか?
0567デフォルトの名無しさん
2006/12/01(金) 02:00:13略して"しっぱい"ですから
0568デフォルトの名無しさん
2006/12/01(金) 02:47:16上のほうでWindowsのエディタの話もしてたから
許容範囲かと思ったけど、別のスレに誘導すればよかったね
ごめんね
0569デフォルトの名無しさん
2006/12/01(金) 02:53:490570デフォルトの名無しさん
2006/12/01(金) 02:57:02いや、こっちもカリカリしすぎた。気分悪くしてスマソ。
0571デフォルトの名無しさん
2006/12/01(金) 03:08:32・・・と、2, 3年間考えてるが何もしてない
0572デフォルトの名無しさん
2006/12/01(金) 03:38:330573デフォルトの名無しさん
2006/12/01(金) 03:48:22にいやまさん,いつもご苦労様です
0574デフォルトの名無しさん
2006/12/01(金) 04:43:55二本語ワロス。
といかインライン入力(だっけ?)ってできないのこれ?
0575デフォルトの名無しさん
2006/12/01(金) 09:33:31実装するだけでは足りないでしょうか。
if object in MyIterable:
anything_else...
こんなことをすると、
TypeError: iterable argument required
とか
TypeError: argument of type 'type' is not iterable
と怒られます。
0576デフォルトの名無しさん
2006/12/01(金) 10:29:59MyIterableクラスのインスタンスをつくってイテレータとして利用するんだよ。
if object in MyIrerable():
# any code...
こんなかんじか?
0577デフォルトの名無しさん
2006/12/01(金) 11:49:33あぁ、なるほど。ありがとうございます。うまくいきました。
クラスオブジェクトのままではだめか……
■ このスレッドは過去ログ倉庫に格納されています