Pythonのお勉強 Part16
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2006/12/14(木) 07:57:54http://www.python.jp/Zope/
http://www.python.jp/doc/release/
http://diveintopython.org/toc/
http://www.python.org/dev/peps/
http://wiki.python.org/moin/
http://python.rdy.jp/
http://www.amazon.co.jp/s/&url=search-alias%3Dstripbooks&field-keywords=Python
http://www.amazon.co.jp/s/&url=search-alias%3Denglish-books&field-keywords=Python
Pythonのお勉強 Part15
http://pc8.2ch.net/test/read.cgi/tech/1163339504/
0357デフォルトの名無しさん
2007/01/01(月) 17:24:59curl ってなんか単純に url な jpg を持ってくる
っていうのがよくわからんかった記憶が。
一々 -o 指定か stdout に吐くしかなくて...
wget に対するアドバンテージって何なの?
0358デフォルトの名無しさん
2007/01/01(月) 17:32:54エロい例
ttp://yusukebe.com/archives/06/08/24/194057.html
ttp://yusukebe.com/archives/06/10/21/201644.html
エロくないけどなんとなく面白い
ttp://yusukebe.com/archives/06/12/03/230402.html
しかし、情報収集ぐらい手動でやりたい気もする・・・
0359デフォルトの名無しさん
2007/01/01(月) 19:08:46zshとか使わなくても連番を展開できる、などなど
curl http://www.hoge.com/hoge[012-125].jpg -O
0360デフォルトの名無しさん
2007/01/01(月) 19:58:22いま勉強中なんだけど、もしかして無駄?
0361デフォルトの名無しさん
2007/01/01(月) 20:24:350362デフォルトの名無しさん
2007/01/01(月) 21:45:590363デフォルトの名無しさん
2007/01/01(月) 21:47:41今ならPerlやるよりPython覚えたほうがいいよ
Pythonのほうが圧倒的にプログラム書きやすい
0364デフォルトの名無しさん
2007/01/01(月) 23:27:47> Pythonのほうが圧倒的にプログラム書きやすい
そうなんだ!
書きやすいって、たとえばどんなかんじで書きやすいの?
0365デフォルトの名無しさん
2007/01/01(月) 23:46:32書いてて楽しいよ。
0366デフォルトの名無しさん
2007/01/02(火) 00:02:230367デフォルトの名無しさん
2007/01/02(火) 00:09:580368デフォルトの名無しさん
2007/01/02(火) 04:27:140369デフォルトの名無しさん
2007/01/02(火) 08:54:08構造化プログラミングまででいいんなら、
Perl に不足するところはないと思うけどねぇ。
だいたい、総じてPython の方が書きやすいといっても、
正規表現とかPerl の方がやりやすいでしょ?
出来合いのモジュールも多いし、とっつきやすいし。
ただ、構造化プログラミングでは役不足で、
オブジェクト指向の助けが必要だと感じるなら、
やっぱりPython の採用を考えるべきだと思う。
ていうか、Perl のオブジェクト指向がも少し使える
ものだったらなぁ。
Java よりややこしいのでは、スクリプトでやる意味がないもん。
0370デフォルトの名無しさん
2007/01/02(火) 09:29:12perlのオブジェクト指向も大して出来ることは変わらないと思う。
組み込みメソッドとかの関係で気分的な差はそこそこあるかもしれないけど
本質的な表現力の差は無いと思う。
0371デフォルトの名無しさん
2007/01/02(火) 10:14:08使ったりして、もうそれだけで疲れ果てちゃうんだよね。
以下は、Python でのクラス作成の雛形めいたものだけど、
シンプルなキーワードと普通の関数だけで作れるのが分ると思う。
class my_class(object):
def __init__(self, v):
self.__value = v
# 加算
def add(self, v):
self.__value += v
# 減算
def sub(self, v):
self.__value -= v
def set_value(self, v):
self.__value = v
def get_value(self):
return self.__value
obj1 = my_class(1000)
obj2 = my_class(1000)
obj1.add(10)
obj2.sub(30)
print obj1.get_value(), obj2.get_value()
(実行結果)
1010 970
0372371
2007/01/02(火) 10:26:54class my_class(object):
def __init__(self, v):
self.__value = v
# 加算
def add(self, v):
self.__value += v
# 減算
def sub(self, v):
self.__value -= v
def set_value(self, v):
self.__value = v
def get_value(self):
return self.__value
0373デフォルトの名無しさん
2007/01/02(火) 11:33:450374デフォルトの名無しさん
2007/01/02(火) 11:34:050375373
2007/01/02(火) 11:34:18めちゃくちゃ恥ずかしいorz
0376デフォルトの名無しさん
2007/01/02(火) 11:37:250377デフォルトの名無しさん
2007/01/02(火) 11:39:13誤爆に見えなかった
0378デフォルトの名無しさん
2007/01/02(火) 11:57:42>別に自分(達)内ルールをしっかり決めてやれば
やっぱりそういう前提条件が付くということこそが
致命的な弱点だと思う > perl
0379デフォルトの名無しさん
2007/01/02(火) 13:15:42Perl の場合、クラスの作成方法それ自体が複数あって、
自分が知らんやり方されたら、それが正しいのやら間違っているのやら
さえ、よく分からなくなってしまう。
それに、ハッシュのリファレンスとか駆使しなきゃいけないから、
単なる特殊記号(バックスラッシュとか)がすごい大きな意味を
持っていて、バグッたときとか、なにが起きているのか判断するのが
容易じゃない。
そもそも、クラスがなんで、コンストラクタがなんで、
オブジェクトやインスタンス、
フィールドやメソッドがなにを意味していて、
オブジェクト指向がどういうことなのか、ということを
理解している人がほとんどいないように見える。
というのも無理がなくて、
Perl でオブジェクト指向するのは、難しすぎるんだって。
(まー、Python でもオブジェクト指向分かってない人はいそうだけど。
結局、Java やって覚えるのが一番簡単だよな)
自分もPerl6 は待っていたんだよ。でも、もう待ちきれないじゃん。
>>374
いいんだよ。サンプルなんだから。
0380デフォルトの名無しさん
2007/01/02(火) 13:19:46長いコード書くとぐちゃぐちゃになり易い。
ちょっとしたツールなら慣れりゃ高速で書けるし。
Rubyは俺使ってたし今も使うんだが
あれはモジュールとクラスを大量に作るには
悪くない言語だけど行く末がすっげぇ不安って感じ。
matzが痛いし暴走癖あるし儲も痛いし。
んで今はPythonに挑戦中。
まだあんまり解らんが案外細かいところに手が届くと思った。
(Rubyは結構細かいところが抜けてるから)
0381デフォルトの名無しさん
2007/01/02(火) 13:56:48簡単なことは器用にこなせるけど、
それで家を建てるとなるとややこしい
0382デフォルトの名無しさん
2007/01/02(火) 14:47:31デバッグが怖いのは同意。
でかいperlコードのデバッグとか、もう2度とやりたくない。
けど、だからといって「perlには○○が出来ない」というのは違うと思う。
perl6はちゃんと今週も進化してる模様・・・
http://pugs.blogs.com/
なんとなく、出てすぐはpythonよりちょっと上をいってそうな気がする
けど、pythonチーム頭よすぎなのでw、すぐいいとこ取りすると思うけど・・・w
0383デフォルトの名無しさん
2007/01/02(火) 15:43:310384デフォルトの名無しさん
2007/01/02(火) 15:57:32コード書いてて気分がいいね。
0385デフォルトの名無しさん
2007/01/02(火) 16:03:56Perl6 vs Python ていう話は、Perl6 が出ないと、
なんともいえないでしょ。
ただ、はたから見ていて、Perl6 は迷宮に迷い込んでいるように
見えるよ。そもそも、仕様は確定してから作業しないと、
時間ばかりかかるように思う。
それに、いまどうするかというのが目の前の問題だからさ。
出ていないPerl6 をいつまで待てるのか。
一方で、一貫した作法でオブジェクト指向を扱える
Python がすでにあってだよ。
待てる人はPerl6 を待てばいいけど、ならPython を
選ぼうという人も多いと思う。
0386Perl6知らないけど
2007/01/02(火) 17:16:50「Perl6」って既に 「perl」 じゃねーよな
0387デフォルトの名無しさん
2007/01/02(火) 17:36:44テンプレートエンジンのKidとか使って何か勉強してみたいな
と思ってるんだけど石橋を叩いてここは2.5ではなくて
2.4をインストールしとくべきかな…2.5はstableって書いて
あるから2.5でも大丈夫な気もするんだけど…IronPythonの
チュートリアルとかみると2.4とか入れてるだよね…
IronpythonとかKidとか使って初心者がpythonを一から勉強
するなら2.4のほうがいいかな?
0388デフォルトの名無しさん
2007/01/02(火) 19:13:11http://docs.python.org/whatsnew/porting.html
0389331
2007/01/02(火) 20:06:50お返事ありがとうございます。
Unicode版のPythonをインストールするだけで本当に解決するのですか?
というのもMac OS X 10.4にはインストールできるPython 2.3 Unicode版バイナリが無いためです。
0390デフォルトの名無しさん
2007/01/02(火) 21:02:52Unicode版のwxPython
~~
0391デフォルトの名無しさん
2007/01/02(火) 22:46:280392331
2007/01/02(火) 22:58:39ありがとうございます。つまりMac OS X 10.4.8に標準装備されているwxPythonとPythonは
なんと!「Unicode対応ビルドではない」ということでしょうか?
それはOSXが積極的にUnicodeに対応してきた歴史からみると変ですね。
現在インストールされている
Python 2.3.5(プリインストール)
wxPython 2.5.3.1(プリインストール)
がUnicode対応版かそうでないか、確認する方法は無いものでしょうか?
度々スレを汚してしまいすみませんが、よろしくお願いいたします。
0393デフォルトの名無しさん
2007/01/02(火) 23:47:170394デフォルトの名無しさん
2007/01/03(水) 00:46:16>>> import wx
>>> print wx.PlatformInfo
('__WXMSW__', 'wxMSW', 'unicode', 'wx-assertions-on', 'SWIG-1.3.27')
'unicode' が含まれていれば Unicode 対応ビルドです。
あと、文字がお豆腐になるならなるで最小限の再現コードを書いてくれると
答えやすいです( GUI なので厳しいかもですが)。
0395331
2007/01/03(水) 01:06:04>>> import wx
>>> print wx.PlatformInfo
('__WXMAC__', 'wxMac', 'unicode', 'wx-assertions-on')
でした!標準でUnicode対応していたんですね。wxPython側は。
最小限のコードですが、表示されたtextctrlに日本語を入力するとまんまと豆腐です。
import wx
app=wx.App()
frame=wx.Frame(None, -1)
text=wx.TextCtrl(frame)
frame.Show(True)
app.SetTopWindow(frame)
app.MainLoop()
0396394
2007/01/03(水) 01:07:06XRCed がどういうものか知らずに適当レスしました。すいません。
XML tree の encoding を utf-8 にしたらどうでしょうか。
0397デフォルトの名無しさん
2007/01/03(水) 01:09:32独りでやる時だけにしてくれよw
0398デフォルトの名無しさん
2007/01/03(水) 04:44:59って3年前から言ってるじゃんw
0399デフォルトの名無しさん
2007/01/03(水) 09:03:52それはラリーがむごもご
0400デフォルトの名無しさん
2007/01/03(水) 10:03:46僕はmacもwxもよく分からないけど、以下のページの情報は参考にならないかな。
http://ymasuda.jp/python/wxpython/index.html
0401331
2007/01/03(水) 11:39:45ありがとうございます。確認したところ既にUTF-8にしてありました。
XRCedは無視してかまわないので、XRCedを使わない先ほどのサンプルコードを起動して、
空白の入力欄に日本語を入力すると豆腐と化します。
>>400
ありがとうございます。そのページは確認しております。
0402デフォルトの名無しさん
2007/01/03(水) 12:59:34問題なく日本語の表示を行っているねぇ。
http://www.harukaze.net/~haruka/wxpython/index.html
0403331
2007/01/03(水) 13:20:45ありがとうございました。リンク先の環境を再現することで無事解決しました。
プリインストールのPythonとwxPythonは一応Unicode対応してはいるものの
実際の表示は化けるビルドなんですね。
0404デフォルトの名無しさん
2007/01/03(水) 13:34:29a += b
↓↓↓
a += b = x
0405デフォルトの名無しさん
2007/01/03(水) 15:01:380406デフォルトの名無しさん
2007/01/04(木) 10:59:01いちいちself付けるのめんどくさい・・・
0407デフォルトの名無しさん
2007/01/04(木) 11:04:02print u'あいう'
とすると、コンソールにちゃんと表示されるのに、
sys.stderr.write(u'あいう')
とすると、文字化けして表示されるのは何で?
どうしたら文字化けせずに表示できる?
0408デフォルトの名無しさん
2007/01/04(木) 11:20:57これ面白いね。
C:\Program Files\Apache Group\Apache2\htdocs>ruby delichio.rb
delichio.rb:8: uninitialized constant JsonParser (NameError)
ってなって漏れはっヘタレだから実行できなかったけど…orz
0409デフォルトの名無しさん
2007/01/04(木) 11:26:56めんどくさいって、もしかして入力補完とか使ってないのか?
(エディタはなに?)
そもそも、クラス作成とかの定型作業なら、わざわざ打つ部分より
コピペしてる部分の方が多いと思うんだが。
0410デフォルトの名無しさん
2007/01/04(木) 11:47:46コンソールウィンドウの環境設定の表示用エンコーディングと
Pythonの入出力のデフォルトエンコーディングを一致させる
0411デフォルトの名無しさん
2007/01/04(木) 11:50:20ソースコードのテキストのエンコーディングと
ソースコード行頭のエンコーディング宣言を一致させる
Pythonではその4つを正しく設定しておかないと文字化けしてしまいます。
0412デフォルトの名無しさん
2007/01/04(木) 11:51:24つけなくちゃだめです。以上。
0413デフォルトの名無しさん
2007/01/04(木) 11:52:40Pythonの入力補完のあるエディタってどんなのがあるの?
0414デフォルトの名無しさん
2007/01/04(木) 11:55:21上のコードを jsonparser.rb として保存
下のコードに
require 'jsonparser'
0415デフォルトの名無しさん
2007/01/04(木) 11:55:55僕の場合は、サクラエディタでキーワードが少ないから、
自分で勝手にキーワード登録増やして使ってるけど。
0416デフォルトの名無しさん
2007/01/04(木) 11:57:280417デフォルトの名無しさん
2007/01/04(木) 12:39:35プログラマが意識して決めることなんだから
サボりようがないよな?
0418デフォルトの名無しさん
2007/01/04(木) 12:49:18俺はSyntaxHighlighterのキーワードが充実してるみたいだから
それを参考にしてキーワード増やして使おうと思ってる
0419デフォルトの名無しさん
2007/01/04(木) 13:47:11自分もはじめそう思った。
0420デフォルトの名無しさん
2007/01/04(木) 13:51:590421デフォルトの名無しさん
2007/01/04(木) 15:25:350422デフォルトの名無しさん
2007/01/04(木) 15:28:37組み込み関数とかだけなら、これで得られるけどね。
import __builtin__
dir(__builtin__)
あと、必要なキーワード、一気に得られる方法があるといいのだけれど。
自分はちまちま、気のつくたびに登録してる。
0423デフォルトの名無しさん
2007/01/04(木) 16:45:10ん、\SyntaxHighlighter_1.4.1\Scripts\のshBrushPython.jsに
キーワードなら書いてあるからそれをコピペすればおkだよ
shBrushPython.js(登録キーワード一覧)->shCore.js(textaream->listタグ+hilight化エンジン)
->\Styles\SyntaxHighlighter.cssで下記のtagを色づけ
'keyword''builtins''magicmethods''exceptions''types''commonlibs'
0424デフォルトの名無しさん
2007/01/04(木) 16:58:19http://www.dreamprojections.com/syntaxhighlighter/
うーむ。よさげなんだが、英語がわけわか… orz
0425デフォルトの名無しさん
2007/01/04(木) 17:10:100426デフォルトの名無しさん
2007/01/04(木) 17:13:44ドットパイ
ドッパイ
オッパイ
0427デフォルトの名無しさん
2007/01/04(木) 17:48:52Exciteでも使って頑張るヨロシ
>425
日本語のチュートリアルある以上
多少の.py書く程度なら出来るだろw
0428デフォルトの名無しさん
2007/01/04(木) 18:59:16import re
import sys
import urllib
threadURL = "http://pc8.2ch.net/test/read.cgi/tech/1166050674/28"
url_parts = threadURL.split('/')
host, test, cgi, category, dat_no, res_no = url_parts[2:8]
dat_url = 'http://%s/%s/dat/%s.dat' % (host, category, dat_no)
lines = urllib.urlopen(dat_url).readlines()
# 本文の抽出 ' <> 本文 <> '
body = lines[int(res_no) - 1].split(' <> ')[1].decode('sjis')
# リンクタグのカット
body = re.sub(r'<.*?>.*?</.*?>', '', body)
# 行ごとに分割してその一文字目を出力
for line in body.split(' <br>'):
print line[1]
ちょっと質問してみる
0429デフォルトの名無しさん
2007/01/04(木) 19:06:52>>37のが面白そうだったのですこし変えて
実行してみたら
#IndexError: string index out of range
となり上手くいきませんでした…orz
2chのdatの構造は
<>_行_<br>_
_行_<br>_
_行_<br>_
_行_<>
のようなので'<br>_'ではなくて'_<br>'で分割しても
上手くゆくと思うのですけれども上手く分割できず
理由がわからない…orz
0430デフォルトの名無しさん
2007/01/04(木) 19:15:550431デフォルトの名無しさん
2007/01/04(木) 19:22:340432デフォルトの名無しさん
2007/01/04(木) 19:35:14すみません張り間違えましたline[0]です…orz
>>431
'<br>_'ではなくて'_<br>'でも
<>_行_<br>_
_行_<br>_
_行_<br>_
_<br>_
_行_<>
が['_行_', '_行_', '_行_', '', '_行_']と同じように
分割されるように思うのですけれども…よくわからない…orz
0433デフォルトの名無しさん
2007/01/04(木) 19:44:46<br>_の場合
['_行_', '_行_', '_行_', '_', '_行_']
_<br>の場合
['_行', '__行', '__行', '__行_', ''] <- 5つ目の要素が空となりline[0]で出力しようとするとerrorとなる
0434デフォルトの名無しさん
2007/01/04(木) 20:00:28> 2ch で聞こうと思ったのですが、アクセスできませんでした。人大杉と出て
> しまいます。
URL が変わったからかな。
古い URL にアクセスすると http://www2.2ch.net/live.html に飛ばされる。
ってここに書いても意味ない罠。
0435デフォルトの名無しさん
2007/01/04(木) 20:36:26トン
やっぱりそうですか・・・
0436デフォルトの名無しさん
2007/01/04(木) 20:45:16pydoc で変数の説明を表示したいんだけど
書き方が分からない
0437デフォルトの名無しさん
2007/01/04(木) 21:01:20行_<br>_
行_<br>_
行_<br>_
_<br>_
行
_<>
<br>_の場合
['行_', '行_', '行_', '_', '行_']
_<br>の場合
['行', '_行', '_行', '_', '_行']
<br>の場合
['行_', '_行_', '_行_', '__', '_行']
□□□_□ 出力できる // □は2バイト _ は1バイト
□____ #IndexError: string index out of range
□____ #IndexError: string index out of range
なんか間違えてたみたいなので訂正して置く
0438デフォルトの名無しさん
2007/01/04(木) 21:01:35モジュール、クラス定義、または関数(メソッド)定義の最初に文字列を置いてその中に書く。
例えば pydoc.py の先頭とか pydoc モジュール内の関数の定義とかを見てみりん。
0439デフォルトの名無しさん
2007/01/04(木) 21:12:56DATA セクションに表示される項目のところ
0440デフォルトの名無しさん
2007/01/04(木) 22:29:15pydoc 使うのは無理か。
doyxgen がいつの間にやら python に対応してたので
こっち使うことにするよ。
0441デフォルトの名無しさん
2007/01/04(木) 22:51:55インスタンスごとに、フィールド・メンバーの
解説をいろいろ書き分けて書くのん? いや、いいけど…
0442デフォルトの名無しさん
2007/01/04(木) 23:31:52def __init__(self, id):
self.id = id
l = [node(1), node(2), node(3)]
print node(1) in l
これ実行するとFalseになるんですがnodeクラスのidが含まれているときにTrueを返すよい方法はないでしょうか?
contain(id, list)
というlの各要素を順番に調べてidと等しいか調べる関数を自分で作ればよいと思うのですが効率的にinと比較してどうなんでしょうか?
ちなみにlistの要素数はものすごく大きいです。
0443デフォルトの名無しさん
2007/01/04(木) 23:41:38idが一意なら、ListやめてDictionaryにしたら?
0444デフォルトの名無しさん
2007/01/04(木) 23:59:12... def __init__(self, id):
... self.id = id
...
>>> n1 = node(1)
>>> n2 = node(2)
>>> n3 = node(3)
>>>
>>> l = [n1, n2, n3]
>>> print n1 in l
True
0445デフォルトの名無しさん
2007/01/05(金) 00:02:120446デフォルトの名無しさん
2007/01/05(金) 00:12:06アドバイスありがとうございます。
>>443
順番が重要なのでDictionaryはだめなんです・・・
>>444
keyで比較したかったので・・・
>>445
下のように__eq__を実装してできました。inも__eq__で実装されてるみたいですね。
class node:
def __init__(self, id):
self.id = id
def __eq__(self, other):
return self.id == other.id
l = [node(1), node(2), node(3)]
print node(1) in l
0447デフォルトの名無しさん
2007/01/05(金) 00:33:55順番にアクセスできればいいわけ?
0448デフォルトの名無しさん
2007/01/05(金) 00:41:20nodeのidが小さい順に並べておきたかったんです。
だから新しいノード追加するときはnodeのidが小さい順番に並ぶようにリストにinsert()してます。
辞書だと自分で追加した順番が保てないので・・・
はじめはSet使おうと思ったのですがnodeのような可変オブジェクトを入れられないみたいでだめでした。
0449デフォルトの名無しさん
2007/01/05(金) 00:42:22>>> node(1) == node(1)
True
>>> node(1) != node(1)
True
うほっ
0450デフォルトの名無しさん
2007/01/05(金) 00:43:230451デフォルトの名無しさん
2007/01/05(金) 00:56:11setに入れるなら__hash__を定義する必要がある。(これも順番は保てないが)
class Node:
def __init__(self, id):
self.id = id
def __hash__(self):
return hash(self.id)
def __cmp__(self, that):
return cmp(self.id, that.id)
s = set()
s.add(Node(1))
s.add(Node(2))
print Node(1) in s
print Node(3) in s
0452デフォルトの名無しさん
2007/01/05(金) 02:10:39お前どこの出身だッ、その方言は聞いたことがある
よもや愛知県三河地方ではあるまいな
0453デフォルトの名無しさん
2007/01/05(金) 02:47:370454デフォルトの名無しさん
2007/01/05(金) 05:22:46PHPのdecbin()に相当する関数を持つモジュールがあればいいのですが。
http://jp.php.net/manual/ja/function.decbin.php
0455デフォルトの名無しさん
2007/01/05(金) 09:48:38bisectモジュールが役立つ鴨。
import bisect
class Node:
def __init__(self, id):
self.id = id
def __cmp__(self, other):
return cmp(self.id, other.id)
def __repr__(self):
return "<Node#%d>" % self.id
def insert(a, x):
i = bisect.bisect_left(a, x)
if a[i] == x:
raise ValueError, "already there"
a.insert(i, x)
def contains(a, x):
i = bisect.bisect_left(a, x)
return i < len(a) and a[i] == x
nodes = [Node(1), Node(3), Node(5)]
print contains(nodes, Node(2))
insert(nodes, Node(2))
print contains(nodes, Node(2))
0456455
2007/01/05(金) 09:54:38if i < len(a) and a[i] == x:
raise ValueError, "already there"
■ このスレッドは過去ログ倉庫に格納されています