1 :
デフォルトの名無しさん :
03/11/15 00:41
2!
おとなしすぎるスレタイに隠された真の名は! ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ 【愛と】人生の脱北者でも使えるPythonのお勉強 Part4【信頼】 ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑
Pythonはお勉強するって雰囲気の言語ではない気がする。 自然に必要な事を理解できる所がまだある言語だと思う。
今度こそ2をゲットする。そんな思いで幾十夜。 手が震えるそんな毎日。リロードなんか当たり前。しない時ない。 おかげで腱鞘炎です。腱鞘炎。2ちゃんのリロードで腱鞘炎。 トイレいってるときに限ってスレが立つ。そんなとき・・・! 腹立ちます。ほんっと、腹立つ。考えてない。 俺のトイレの時間を考えてない。。 そんな無責任で身勝手な1ばかりの中でこのスレの1は違った。 俺がリロードした瞬間に立ててくれた。これは1にとっても、俺に とっても幸運だったといえる。ネタとしてはいまいちよく分からないでも ないが、それでもこのタイミング。まさに阿吽。まさに以心伝心。 俺はいま2を取れる感激で胸がいっぱいだ。腱鞘炎を見てもらってる先生に なんて言おうか?この喜びが伝わるだろうか? いつか自伝の映画作成をさせて下さいと言われたらこのことはクライマックスに 持って来よう。 なにしろいつも2ゲットできませんでしたから。(笑 さて、、、記念すべきこの瞬間。悔しがる3や4の連中の姿が目に浮かぶ。 もう、おまえらとはレベルが違うぜ! 俺はこの瞬間から2ゲッターだ。 ちょっとどきどき、いまから「書きこむ」頂きます。 かろやかに、しなやかに、そしてスタイリッシュに! 2ゲットでございます!
このスレは敗北者でなくてもいいのでせうか?
どんとこい!
はいれます!
ア○コの終身医療保険
これからだ!
OOPが全然わからないのでお勉強してます。 インスタンス属性とクラス属性が頭の中でぐぢゃぐぢゃです。 例えば、オブジェクトを格納する配列をクラス内で使う場合、 class Spam: def __init__(self): self.hairetu = [] def addInstance(self, eggsobject): self.hairetu.append(eggsobject) とすればいいか、 class Spam: hairetu = [] def addInstance(self, eggsobject): Spam.hairetu.append(eggsobject) のどちらがいいのでしょうか。
>>12 すべてのインスタンスで共通に使いたいんなら、後者。
インスタンス毎に別々にしたいんなら、前者。
最初のうちはクラス属性なんて気にするな。 インスタンス変数とモジュール変数で十分だ。
>>13-14 わかりますた。
はじめはメソッドを通さないと取り出せないのがインスタンス変数で、
そうでないのがクラス属性だと思っていました。
Windows上でWindowsに付属しているスクリーンキーボードの様に 常駐していてキーが押されたときのイベント?を横取りするような アプリケーションが作りたいのですが、Pythonで このようなアプリケーションを作るにはどうしたらよいでしょうか?
wxPython と pyHook を使えば実現できます.pyHook は
http://sourceforge.net/projects/uncassist から入手できますが,
ソースコードは別のプロジェクトのCVS,
http://cvs.sourceforge.net/viewcvs.py/uncpythontools/pyHook/ にあります.詳細はソースコードに付属する example.py を参照してください.
from wxPython.wx import *
from pyHookManager import *
class myFrame(wxFrame):
def __init__(self):
wxFrame.__init__(self, None, -1, '',
style=wxTRANSPARENT_WINDOW| wxFRAME_NO_TASKBAR)
self.hm = HookManager()
self.hm.KeyDown = self.OnKeyboardEvent
self.hm.HookKeyboard()
def OnKeyboardEvent(self, event):
key_face = event.Key
if key_face == 'Q':
self.Show(False)
self.Destroy()
raise SystemExit()
else:
print 'Key:', key_face
if __name__ == '__main__':
app = wxPySimpleApp(0)
frame = myFrame(); app.SetTopWindow(frame); frame.Show(True)
app.MainLoop()
2ch用のインデントし忘れた... from wxPython.wx import * from pyHookManager import * class myFrame(wxFrame): def __init__(self): wxFrame.__init__(self, None, -1, '', style=wxTRANSPARENT_WINDOW| wxFRAME_NO_TASKBAR) self.hm = HookManager() self.hm.KeyDown = self.OnKeyboardEvent self.hm.HookKeyboard() def OnKeyboardEvent(self, event): key_face = event.Key if key_face == 'Q': self.Show(False) self.Destroy() raise SystemExit() else: print 'Key:', key_face if __name__ == '__main__': app = wxPySimpleApp(0) frame = myFrame(); app.SetTopWindow(frame); frame.Show(True) app.MainLoop()
wxPython をアップグレードするときは、古いバージョンをいったんアンインストールする必要があるのですか? Windows のものをつかってます。
>>1 乙カレー。
そういえば「乙」ってヘビみたいな形しとんなあ。
>>20 2.3.4.1 の Windows installer prompts to uninstall old version first.
ですか?
24 :
デフォルトの名無しさん :03/11/18 04:55
トヨタテクノサービスという会社で面接したときに、君パイソンできる? 今パイソンできる人探してるんだけど?と言われた。見事に落とされ ましたけど。
Yesって答えたの? たぶん保守要員が欲しいんだと思うけど。
l = [] for i in range(10): l.append(1) とやるのと l = [1] * 10 とやるのではなにか違いはありますか?
前者は、リストの各要素が別なオブジェクトを指す。 つまり「1」が10個つくられる。 後者は、リストの各要素が同じオブジェクトを指す。 つまり「1」は1個つくられ、10箇所から参照される。 数値はimmutableだからこの場合問題ないけど、listみたくmutableな オブジェクトでこれをやるとはまることがあるので注意。例: l = [] for i in range(10): l.append([1]) print l l[0].append('spam') print l l = [[1]] * 10 print l l[0].append('spam') print l
28 :
デフォルトの名無しさん :03/11/18 20:56
>>25 いや、パイソン知らないんで名前しか知りませんって答えた。 おいらはPHP,PERL派なので・・・っていうかスクリプトはそれしか 知らない。で、テクノサービスで日本ではあまり人気の無いと 言われてる言語を使うということで少し感動したが、保守だったのかなー あれは。
29 :
デフォルトの名無しさん :03/11/19 18:53
どなたかWindows環境でPythonモード付きのエディタでしりませんか? KaaEditっていうのがあるらしいけど、どこにも置いてない・・ 普段は秀丸、Terapadとか使ってるんですけど Pythonキーワードの強調ファイルとかどこにもない 仕方がないんで簡単なのは作ったんですけど・・なんか違う あと、キーワード強調だけじゃなくって 例えば if ....: hoge pass って書くとpassに反応してオートインデントが解除とか そういうのはないかなと
そこでVimとかMeadowとか言つてはまずいだらうか?(わらひ
えまっくす使え
Meadowなんか起動が面倒なんですよね
だから、関連付けにはさくっと秀丸,Terapadとかにしてて
そのまま使い続けるみたいな
一応Meadowならpyモードあるかなと思って起動してみたことあるんですけど
何も起こらなかったのでそこで終了してました。
なんでpython mode が標準でついてないんだ・・・_| ̄|○
ttp://www.python.org/emacs/python-mode/ ここからスクリプトはとってこれたんですがモード設定の仕方がよく分かりません
Meadow\1.15\lisp\progmodesの中に入れるだけじゃダメ?
site-lispにpython-mode.elをいれて.emacsに以下を書くだけ。 windowsならxyzzyでもいいんじゃない。 (autoload 'python-mode "python-mode" "Python editing mode." t) (nconc auto-mode-alist '(("\\.pp$" . python-mode) ("\\.pyw$" . python-mode) ("\\.py$" . python-mode)))
34 :
デフォルトの名無しさん :03/11/19 21:33
ちょっと便乗気味で質問させて。 自分でエディタを作るとした場合なんだけど、 構文強調っていうの? キーワードなんかに色つけるやつ、 あれってどういう仕組みで実現すればいいんですか?
>>33 さんありがとう
perl-modeとかjava-modeの設定まんま写そうとして.も場所分からずで止まってました
>>34 プログラム内部で構文木作ってるなら、キーワードとマッチングとか
行ベースでデータ持ってるなら、行の文字列を正規表現とかで
マッチングとって強調表示させてるんじゃないの?
>>29 最近お気に入りのサクラエディタにキーワードファイルが付いてるね。
でもパイソンモードの設定がないから、自前で設定しないといけないみたいだね。
xyzzyで書いてる人ってほんとにいる? 自分はMeadowとxyzzy両方使っているんですが。
すみません、 Windows上でイベントをフックすることは出来るようになったのですが、 キーをプログラムから入力(スクリーンキーボードの様に) するにはどうしたらよいでしょうか?
by Kevin Altis.
http://msdn.microsoft.com/scripting/default.htm?/scripting/windowshost/doc/wsMthSendKeys.htm # the above URL also documents the codes to use with SendKeys
import win32api
import win32com.client
shell = win32com.client.Dispatch("WScript.Shell")
shell.Run("calc")
win32api.Sleep(100)
shell.AppActivate("Calculator")
win32api.Sleep(100)
shell.SendKeys("1{+}")
win32api.Sleep(500)
shell.SendKeys("2")
win32api.Sleep(500)
shell.SendKeys("~") # ~ is the same as {ENTER}
win32api.Sleep(500)
shell.SendKeys("*3")
win32api.Sleep(500)
shell.SendKeys("~")
win32api.Sleep(2500)
pygameをLinux上でインストールしようとしたら、SMPEGとFontが"not found"と いわれたのですが、この2つを解決するには具体的には何をインストールしたら いいのですか?
cygwinや inuxのコマンドラインで、WindowsのIDLEのように、 オートインデントさせることはできますか?
python で、eucで書かれたファイルに対しマッチングしたいのですが、 unicodeに変換してやらないと正しくマッチングできないんですよね? なんとか高速化したいのですが、術はあるのでしょうか?
Embedded UNIX5号とLinux World 2004/1号にPython記事が。 当LWの記事におけるRubyの扱いと、諸Ruby記事における Pythonの扱いの差に思わず笑いがこみ上げますた。
2.3.2の日本語版win用インストーラー…
>>44 検索したい文字列が英数字なら EUC-JP のままで特に問題ない。
ただしプログラムは文字のバイト長を考慮したものにしなければならない。
検索したい文字列が日本語なら Unicode を介するのが無難。
EUC-JP だとこんな↓おかしなことになっちゃうけど
>>> "こんにちは".find("海")
1
Unicode だと正しく処理できる。
>>> unicode("こんにちは", "euc-jp").find(unicode("海", "euc-jp"))
-1
検索文字列が英数字なら↓こんな風に EUC-JP のままでも正しくマッチングできるけど
>>> "日本語EUC".find("EUC")
6
日本語が2バイトで1文字であることを考慮したプログラムにしないといけない。
その点、Unicodeなら↓こんな風に文字単位になる。
>>> unicode("日本語EUC", "euc-jp").find(u"EUC")
3
余談だけど、Python 1.5.2 の頃に EUC-JP の文字列を内部で文字単位に切り分けて Boyer-Moore アルゴリズムで文字列検索するクラスをごりごり書いたことがある。 >>> wstring.WString("こんにちは").find("海") -1 >>> wstring.WString("日本語EUC").find("EUC") 3 >>> print wstring.WString("日本語EUC")[:3] 日本語 けど、今だったら素直に Python 2.x の Unicode を使って書いちゃう気がする。 こんなトリッキーな手段を使っても早くなるかどうか分からんしね。
いちいち unicode("なんたら", "かんたら") って書くの面倒なんだが‥‥ 生産性も悪いし。PEP 263 に従っておけば、任意のエンコーディングで u"なんたら" って書けばそれと等価になるようにして欲しい。
unicodeにしてからのマッチング激しくコスト高い。手間だし。
レガシー文字コードを使う以上、変換にコストがかかるのは当たり前だよね。 Python の問題じゃなく Unicode とレガシー文字コードの併用の本質的な問題。 実行時の変換コストが問題なら予め UTF-8 とかに変換しとくとか。 変換テーブルの参照が起こらない分、レガシー文字コードよりは早そう。
>>45 よんでみたけど、Embedded UNIX のほうはすごく参考になった。
自分が普段使っている Python と方向性が異なっていたので
最近の Python もきっちりおさえてあったし。
Linux World のほうは、、、
執筆者の力量が思いっきり反映されている内容だった。
>>56 それはネットで公開されているし、対応している Python のバージョンも古いよ。
どうせ買うなら、nutshell とかは?
>>57 Python in a Nutshell は附属ドキュメントとかぶる部分が多いので躊躇しているんですよね…
でもふんぎりがついたです。思いきって両方注文しちゃおうかと思います。どもでした。
(´-`).。oO( 56タソは何に便乗したつもりだったのだろう・・・ )
pykf の Windows 用インストーラーはどこかにありますか?
class A(file): というように file 型を継承したときに、デフォルトで w モードでインスタンスを作るようにするのと、 IOException をキャッチするようにするにはどうすればいいのですか? いまは a = A(filename, 'w') とやっているのですが、少しダサいので。
class A(file): def __init__(self, name): file.__init__(self, name, 'w') f = A('name') f.write('spam') f.close()
try: なんか処理 except IOException, ex: キャッチした時の処理 else: キャッチしなかった時の処理
wxPython の wxFrame(None, -1, "Hello World") のこの場合では-1のIDについてよくわからないのですが、 どのようなことをやっているのでしょうか?Noneじゃだめですか?
ID に -1 を指定すると,wxWindows 側で wxNewId() を使って適当な ID を 割り当てます. ID は整数型でなければならないので None は使えません. 割り当てた ID は GetId() メソッドで取得できます.
67 :
デフォルトの名無しさん :03/11/26 22:51
listを継承して固定長のリストを作りたいのですが、 listの持つメソッドで禁止したいもの(append, extend, remove, sort など) はどう実装すればいいのでしょうか?
>>67 list を継承して当該メソッドをオーバーライドすればよいと思われ。
>>68 それはわかっているのですが、どう禁止するかってことがわからないんです。
何か例外投げるのがよいと思うのですが、定石があるのかと思ってお聞きしました。
#ま、どーせ自分しか使わないんで、その辺適当でもいいんですが、
#勉強を兼ねて。
>>69 そういう場合は継承しない。という手もある。
委譲を利用する方が手としては妥当と思う。
Javaなどでは、継承はめったにしない方向が基本で、継承する場合は継承元が
継承をする事を規定したクラスでないといけない。(Abstractなど)
委譲が望ましいが、どーしても継承したくて仕方がない困ったさんには、 NotImplementedError例外がある。が勉強以上の用途にはお勧めしない。
>>63 > file.__init__(self, name, 'w')
__init__ の最初の引数に self を指定しないとだめなんですね。
これではまった。
a = A(filename, 'w') がダサいってのは、多分君の心得違いだとおもう。ところで class A(file): def __init__(self, name): file.__init__(self, name, 'w') def __getattribute__(self, name): if name == "write": raise AttributeError else: return super(A, self).__getattribute__(name) という手もある。
>>70-71 なるほど。
「委譲」というのはOOPの用語でしょうか?
class MyList:
def __init__(self,len):
self.data = [None for i in range(i)]
の様にして、__getitem__とか必要なものだけ実装してやるという
ことでいいのかな?
>>72 もれも時々混乱する時がある。
- インスタンス.メソッド() を呼ぶ時は、暗黙にselfがcalleeの引数に加えられる。
- クラス.メソッド() を呼ぶ時は、それはならない。
と最近理解したのだが、よいのかな?
Numericのarrayはどう? 使ったこと無いけど。
>>74 そうOOPの用語。
もとのクラスの機能に自分の動作をゆずりわたすように作成する。
継承はあまり好ましくない、というのがOOPの現在の流れ。
>>75 桶。ちなみに、インスタンス (self) に結びつけられたメソッドのことを
bounded method (束縛されたメソッド) と呼ぶ。
>>> A.f
<unbound method A.f> ← クラスオブジェクトのメソッドはインスタンスに束縛されていない
>>> a = A()
>>> a
<__main__.A instance at 0x40246e6c> ← インスタンス
>>> a.f
<bound method A.f of <__main__.A instance at 0x40246e6c>> ← インスタンスに束縛されている
>>>
束縛されていてどのインスタンスに対するメソッド呼び出しなのかは明らかなので
self を書かなくてもいい、というわけ。クラスについては正反対のことが言える。
ぐへ。ヒドい書き間違い・・・。 × bounded method ○ bound method (bound は動詞 bind の過去分詞だっつーの>漏れ)
継承は好ましくなくて委譲の方がはやりなの? なんで? isaなものは継承すべきじゃないの?
82 :
デフォルトの名無しさん :03/11/28 03:31
流行とかよりも、is-a なものを継承しないほうがいい場合もある、 ってことが、最近になって明らかなってきたってことじゃないの?
職業クラスを継承すると転職できなくなっちゃうよ
委譲と継承は互いに補完し合う関係なんじゃないのかな。 それぞれに一長一短があるし。すべて委譲でやろうとすると無理が出る気がする。 デザインパターンの Templete Method とか Visitor は継承を前提にしてるよね。 この二つのパタンを委譲で実現するのは何か違うなーって感じ。 それにひきかえ Mediator パタンは委譲そのもの。継承で書くのはムリポ。 流行りとか比較的いい(悪い)とかじゃなくて「適材適所」なんじゃないかなぁ。
>>80 codecs モジュールの StreamReaderWriter が委譲の例になってると思われ。
委譲先の Reader と Writer (StreamWriter クラスと StreamReader クラス) は
Codec クラスを継承してる。委譲と継承が使い分けられている。
>>83 実装方法によります。
>>84 それは確かです。
ただ単純化すると、
元のクラスよりメソッド数減少とか、機能低下する場合は委譲
元のクラスを拡張する場合は継承をまず考えてみる
というのが一つの方法。
議論元になったやつはメソッド数や機能減らすので委譲の方が比較的安価に作
成できるはず。
>>81 補足
is-a とか has-a とかで継承、委譲判断するのは古い考え方です。
Javaでは継承はFrameWorkを利用する時以外ではほとんど利用されなくなってき
ている。
FrameWorkの継承を is-a というのはかなり変だと思う。
くだらない質問なんですが、 ひらがなをカタカナに変換するのに、 正規表現で簡単に書くことってできるでしょうか? 自分は結局それぞれの組を定義してやったんですが、 もっと簡単にできるはずだと思いまして。
>>90 無理だと思う。正規表現は集合間の写像は表現できない。
ひらがなとカタカナの文字コードの連続性を利用するといいかも知れない。
>>> print re.sub(u"[\u3041-\u3093]", lambda m: unichr(ord(m.group()) + 0x60), unicode("ぴちょん", "euc-jp")).encode("euc-jp")
ピチョン
>>>
コードはshift-JISなんですが
いまいちピンと来ないんだけど、度々引き合いに出されている Java での方法論って Python でどれぐらい当てはまる? 個人的にそのうちちゃんと比較検討してみたいなぁと思ってるんだけど、 オブジェクト指向の議論、特に Gamma のデザパタの実現例なんかは 型付けの厳しい言語を前提にしているところが多いなぁという印象がある。 Python だったらこうは書かないかも、みたいな(うまい例が出ない。スマソ) Python に特化したデザパタの本が欲すぃ。誰か書いてくんないかな。
>>90 92
pykfとか利用してshift-JISをEUCに変換しちゃえば?
もしくはpykfを改造すればできるかも。
>>93 > Python に特化したデザパタの本が欲すぃ。誰か書いてくんないかな。
洋書ならある。
OOPの方法論はOOPとして利用するかぎりだいたいあてはまる。
そもそもデザパタとかは再利用をかなり強く意識してるから、pythonで巨大ア
プリ書く場合は結構役に立つ。
書きすての場合はいらない。
あと、デザパタは関数型言語利用するとその存在意義はほとんどない。
その洋書の詳細キボン
>>93 型付けがが弱いのとオーバーロードがないことから、「いわゆる」デザインパターンの
いくつか(多く?)は Python, Ruby などにはあまり関係がないと思う。
>>87 委譲 = メソッドの一部を書き換える?書き換えたもの以外はもとのものを利用?
委譲 = よく言えばアウトソーシング。悪く言えば丸投げ。
>>91 なるほど、こうするとかなり短くかけるんですね。
ありがとうございました。
スーパクラスを書き換える: class ShopClerk: def occupation(self): return 'shop clerk' class Lumberjack: def occupation(self): return 'lumberjack' class Person(ShopClerk): pass ####### >>> man = Person() >>> man.occupation() 'shop clerk' >>> man.__class__.__bases__ = (Lumberjack,) >>> man.occupation() 'lumberjack'
ありゃ、改行が効かない
スマソ。正規表現howto以外にって書いてあるのに回線切t
>>107 ふるかわさんの日本語訳はよみやすくていいね。
みんなpythonでなに作ってるの?
112を作っております
>>112 ls -lt ~/python してみるとこんな感じ。
dml2html.py 日記データ(独自XML形式)をHTML形式に変換
dailynews2html.py NHK World Daily News のニュース記事を一括ダウンロード
dailynews2text.py 同上。こちらはテキスト形式で出力。cronで定期実行して自分にメール
namiki.py IRCロガー。某チャンネルで24時間ログを取っている。よく落ちる
daisy.py PILを使った画像ビューワ。サムネイル表示でグロ画像のダメージを最小化
gtkhtmlconv2.py UnicodeのテキストをHTMLの実体参照に変換するための簡易GUIエディタ
jst.py www2.crl.go.jp/cgi-bin/JST.cgiから時刻データをゲット
asahi_upload.py FTPでプロバイダにファイルをうpするためのコマンドラインツール
shuffle.py 入力されたテキストの行をランダムに入れ替えるフィルタ(sortコマンドの反対)
wvHtml2txt.py wvHtmlコマンドを利用してWord文書をプレインテキストに変換
konbu.py Pythonのコデックを使った文字コード変換フィルタ(iconvコマンドみたいなもの)
swf2html.py SWFファイル表示用のHTMLファイルを自動生成
codecs_kr/ 韓国・朝鮮語コデック
post2ch.py 2ちゃんにカキコするためのライブラリ
こうして見るとおもちゃ箱をひっくり返したようだ。
>>112-114 ぼくも〜
C:\>dir /b "%HOMEDRIVE%%HOMEPATH%\My Documents\Python\*.py"
accesspoint.py - telnetlibモジュールでルータを操作
arkanoid0.py - ブロック崩し風
check_dns.py - 特定のDNS名がリゾルブできるかをテストする
discard.py - UDP Discardクライアント
grep.py - たぶんgrep
hexdump.py - BSDのhd風ダンプツール
LED.py - 7セグメントLED
ledit.py - Tkinterのテキストエディタ
linux.com.py - japan.inux.comのRDFファイルを編集して表示
makeram.py - Realmediaの"ram"ファイルを作る
ping0.py - ICMP Echo送信
ripv2send.py - RIPv2アップデート送信
sstp.py - SSTPプロトコルクライアント
t21dnd.py - Tkinterドラッグアンドドロップ(試作)
tkgrep0.py - Tkinter版grep風
tkicon1.py - Tkinterでウインドウアイコン設定(試作)
udpecho.py - UDP Echo クライアント
udpechosv.py - UDP Echo サーバ
unzip.py - 複数のzipファイルを一挙に展開(特殊用途)
videobot.py - Webサイトを巡回してvideoファイルをダウンロード
win32saeko1.py - ms officeの冴子先生を操る
すっげぇ〜、ソース見せて欲しい
うpしてください。おながいします。いや、マジで。
>>114 > dailynews2html.py NHK World Daily News のニュース記事を一括ダウンロード
> dailynews2text.py 同上。こちらはテキスト形式で出力。cronで定期実行して自分にメール
この2つを特におながいします。
>>117 ,118
そんなだから
スキルが上がらないのだ
(´-`)。oO(別にpythonでなくても実現できるのだが…
>>118 むう。意外なものがリクエストされてるな。
NHK World Daily News のニュース記事は8ヶ国語あって、
漏れのはポルトガル語用なんだけどいいかな?
うpするのは構わないけど、こーゆーのはウェブページの構成が変わると
すぐ動かなくなるから自作&自力で修正できないとツラいかも。
全然難しくないプログラムだからよかったらチャレンジしてみて。
作り方は以下の通り。
1. 目的のウェブページのソースを見て、欲しい部分の前後の特徴(タグ、コメント等)を探る
2. urllib でウェブページをダウンロード
3. テキストを走査して欲しい部分を切り出す(1行ずつチェック、もしくはre.search()で検索)
4. 切り出した部分を整形(段落詰めしたりエンコードをかえたり)して出力
コツが分かればいろんなウェブページから必要な部分だけ抽出できるようになるよ。
ちなみに、同じ URL で内容が定期的に更新されるウェブページの場合、
プロキシのキャッシュが邪魔なことがある。その場合は以下のようにするといい。
urlopener = urllib.FancyURLopener()
urlopener.addheader("Pragma", "no-cache")
file = urlopener.open(URL)
漏れは同じ要領で CNN.com と The Japan Times の記事も毎日自分にメールしてる。
ぴちょんは語学の友。
(それでもやっぱり欲しかったら言ってちょ。うpします)
python way な小物ツールのコツとかは知りたいかも。 perl の while (<>); #だっけ?とか、 ruby の while line = gets に対して python だと while 1: lines = sys.stdin.readlines(8*1024) if not lines: break for line in lines: pass みたいになったりするので、そーいう用途に使い辛いそという 個人的厨房的感想を持っていたりするのだけれど。
123 :
デフォルトの名無しさん :03/12/10 21:34
>>122 Python 2.3 だとこういう風に書けるよ。
for line in sys.stdin:
...
もっとも漏れは古参の蛇使いなんで昔ながらの書き方がクセになってる。
打鍵数の多寡とかは気にしないことにしてる。むしろクドい方が好きかも(w
while 1:
line = sys.stdin.readline()
if not line:
break
...
>>124 明示的なほうが分かりやすいことが多い
ただし明らかに処理内容が分かる場合は
省略したほうが分かりやすくなる
import fileinput for line in fileinput.input(): process(line)
python-doc-jp のメーリングリストはちょっと殺伐としていたから、初心者向けの ほのぼのとした話題がくるとほっとするね。
Asahi.com から円相場の情報を取ってくるサンプルプログラムを書いてみた。
記法は今風にしてみた。要 Python 2.3。
# -*- coding: EUC-JP -*-
import codecs, re, sys, urllib
# Expected page structure:
# <a href="/business/"><font size="-1" color="#000000"><b>円相場</b> 108円42銭 (18:39)</font></a>
PATTERN = u'<a href="/business/"><font size="-1" color="#000000"><b>円相場</b> '
re_yen = re.compile(ur"(\d+)円(\d+)銭 \((\d\d):(\d\d)\)")
Reader = codecs.getreader("EUC-JP")
urlopener = urllib.FancyURLopener()
urlopener.addheader("Pragma", "no-cache")
file = Reader(urlopener.open("
http://www.asahi.com/ "))
for line in file:
pos = line.find(PATTERN)
if pos < 0:
continue
match = re_yen.match(line, pos + len(PATTERN))
if not match:
raise RuntimeError, "unexpected page structure"
output = u"%s時%s分現在の円相場は%s円%s銭です。\n" % (
match.group(3), match.group(4),
match.group(1), match.group(2))
sys.stdout.write(output.encode("EUC-JP")) # environment dependent
break
else:
raise RuntimeError, "unexpected end of file"
file.close()
ひらがなの入力からその漢字混じりがほしいのですが、 Python で仮名漢字変換を制御するのに うまい方法はありますでしょうか?
>>121 どもありがとうございます。Pythonは触ったことすらなく、今から
勉強してみようかと思ってた所存でございます。Perlなら少しわかります。
参考にさせていただきますね。
mailmanの話はここじゃだめ?
UNIXの板でしょう
>>129 windowsならwin32comあたりを経由してIME制御のAPIを叩くくらいで、
特にイイ方法というのは思いつかない。
UNIX系だとどうしたもんかな。
cannaとか仮定してサーバーとお話しか。かなりめんどくさそう。X-(
>>132 mailman 専用の(日本語)メーリングリストがあったと思うけど。
日本語のパースとか遅くないですか?
書き直し。 SJIS とか EUC.JP とかのテキストを、unicode に直してからパースするのは 遅くないですか? regular expression とか。
>>137 遅いよ。でも必要なら仕方ない。
>>128 のスクリプトは安全側に倒して書いた。Asahi.com のページの文字コードは
EUC-JP で、漏れは EUC-JP がデフォの OS を使ってるから、サンプルとして書く
のでなければ文字コード変換を一切使わなかったかも知れない。
これがもっと複雑な文字列操作になると Unicode を使わざるを得ない。
文字のバイト長を意識しながら書くのは結構大変だからね。
Unicode に変換することによって楽になる部分があるのは確か。
それに、遅いと言ってもたかが知れている。
高速化のためのトリッキーなコードにはバグが発生しやすい。
遅いのが問題なら速いマシンを使う。それが賢いプログラマってもんだよ(ナンチャッテ
>>139 そうそう(w
なんでソニーCSLのアドレスじゃないんだー?と思ったんだけど
そーいえば増井さん、産総研に移ったんだっけ。
この人の考えること、面白いよねー。ストトン音楽とか。大好きだ。
PythonのUnicode文字列正規表現って、Unicodeプロパティや Uniocdeスクリプト(書記体系)とかを使ったマッチングって サポートしてますか? ……恐らく当分使わないけど(ぉ
>>129 どうして自前で仮名漢字変換エンジンを制御したいの?
その必要があるケースはあまり多くないような気がするんだけど。
>>143 アナグラムを自動生成できるかなと思いまして。
それで入力文字列をひらがなにして、
それを並び替えた後で仮名漢字変換したらどうかな、と思ったわけです。
でも考えてみると、仮名漢字変換できたとしても、
それが文として成り立ってるかどうかを判定するのは難しそうですね。
146 :
デフォルトの名無しさん :03/12/13 17:10
Pythonの本を読み始めたのですが、 「コレクション」の「リスト」という項目で微妙に躓きました。 >>>aList=[ ] >>>another=[1,2,3] >>>print another [1,2,3] とあったのですが、一行目なしにしてみても問題なく表示できました。 一行目の >>>aList=[ ] はどういう意味があってつけているんですか? あと、「コレクション」の意味がわかりません。 「Pythonでサポートされているコレクションについて説明する」といきなりあり、 その後リストについての説明です・・・。
147 :
デフォルトの名無しさん :03/12/13 17:58
htmllib と HTMLParser の2つで、実際に使う上での大きな違いはありますか?
htmllib.HTMLParser() 閉じられていないタグを管理するスタックがある コメントやスクリプトタグの処理は自分で書かなければならない エンティティ文字の処理を自分で書かなければならない HTMLParser.HTMLParser() タグの対応や入れ子は自分で管理しなければならない エンティティ文字を処理するためのメソッドがある スクリプトやコメントタグを処理するためのメソッドがある
>>144 仮名漢字変換は候補や文節区切りを人手で決めないといけないから
自動処理には向かないんじゃないかな。読みに対応する単語のリストが
欲しければ仮名漢字変換エンジンの辞書を流用する方が手っ取り早い。
それよりは
>>145 のリンク先でeuskeさんがやってるみたいに、
品詞情報と文を構成するための規則(文法)を与えておいて、
読みに現れる平仮名が順不同でたまたま同じになる文の組合せを
探す方が簡単な気がする(時間はすごくかかりそうだけど)。
>>146 む、なんか見覚えあるような。確かその後に aList 使って
メソッドの説明してたような...
nyのdownフォルダからジャンル別フォルダに振り分けするソフト作ってみますた。 コマンドラインベースのシンプルなものだけど、 ちょっと生活が便利になるものを自分で作るのって楽しいね。
\共有共有!ぱいそんぱいそん!/ nyヽ( ´∀`)人(´∀` )ノpy
(・∀・) オッ? (・∀・) L、M、N、O、P、Q、R・・・ Σ(゚∀゚) オオッ!! (゚∀゚) ny → oy → py (゚∀゚) キター!!
>>150 うーん、そうですか。
となると1文か文節単位でデータを切り分けてから
chasenとかで形態素解析してそれぞれの読みを求める、って感じかなあ。
やればできそうだけど、これだとあんまり面白みがないですね。
他に面白そうなネタを探してみます。
ありがとうございました。
IDLEから新しいWindowを開き、 円の面積を求めるプログラムを書きました。 で、Run script(実行はこれですよね?本にはRun moduleとあったのですが)を クリックしたのですが、なんかダイアログが出ます。 一度保存してから実行したらいけたのですが。 実行前に保存しないと駄目なんですか?
>>158 そのとおりです。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
160 :
デフォルトの名無しさん :03/12/16 03:04
ムワハハ
W2K+Py2.3.2環境にJapaneseCodecs1.4.10を入れようとしました。 VCは持ってないのでBCCで。 ドキュメント通りにやってbuildまでは成功したんですけど、 installができませんでした。 setup.py installすると「VCを出せ」とか言って止まるし、 かといってinstallと--compilerは併用できんとかぬかすし。 どうすればいいんだか。手動コピーで問題ないんですか?
へえー、JapaneseCodecs って BCC でコンパイルできるんだ。知らんかった。 setup.py install がやってることは実質的にはファイルのコピーだから 手動で site-packages ディレクトリにインスコすれば良いと思うよ。 うまくいったら動作報告きぼーん。
ドキュメント(
ttp://python.org/doc/2.3.2/inst/inst.html )によると、
python setup.py bulid --compiler=bcpp
とかでコンパイラ選べるです、JapaneseCodecsに限らず。
>うまくいったら動作報告きぼーん。
単純にコピって動かしてみました。
import japanese とか、 # -*- coding=sjis -*- とかはうまくいってる模様。
# ……ってやってる間にPyJUGにWin32用インストーラが上がってた罠。
>>> import re >>> 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' ではなく空文字列が入るのですが、 何故なのでしょうか?
正規表現が間違ってるのかと思って、 Perl で同様のことをしてみたのですが、 $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' が入ってますし……
>>164 どの段階で 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 でも駄目だと思う。
>>164 Python 2.3 をお使いでしょうか?
いまちょっと 2.2.3 & 2.1.3 でテストしてみると、両方のバージョンで
#3
('file', '', 'text', None)
#4
('file', '', '', 'alias')
になりました。
すいません、環境書き忘れてました。
>>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 が来るまでは正規表現以外で処理するしかないですね。
2.3.3が出たのに全く盛り上がってない。 仕事で忙しいのか?
うpでーとはしたけどさ、特に使用感が変わったわけでもなし、 新しい何かが増えたわけでもなし、語るべきこと自体はそうない感じ。
173 :
デフォルトの名無しさん :03/12/23 19:33
j=1 #変数の初期化 while j<=12: #条件指定 print "%d×12=%d" %(j,j*12) j=j+1 #最後にjをインクリメントする と本にあったのですが、最初と最後の分の意味がわかりません。 j=1 #変数の初期化 これはなんなんでしょう? なしでコードを書いたら実行できませんでしたし。 最初にこれを書く意味がわからない。 j=j+1 #最後にjをインクリメントする この文は矛盾してませんか? j=j+1って。 それにインクリメントの意味がわからない。 プログラミング辞書にも載ってません。検索してもよく判らない。
ネタはよそでやってください。
>>173 whileとprintの行は分かるんですね。すごいすごい!
>>173 j = 1 のような文を代入文と呼びます。
この代入文は、j という名前の変数に 1 という値を代入する、という意味です。
同様に、j = j + 1 は変数 j の現在の値に 1 足した値を j に代入するという意味になります。
つまり、代入文に使われる = は数学の等号の意味とは違います。
また、インクリメント (increment) は「増やす」という意味の英語です。
プログラミングの文脈では「値を1増やす」という狭い意味でも使われます。
逆に、「(値を1) 減らす」ことをデクリメント (decrement) と言います。
余談ですが、数学の等号は「等しい」ということを主張する記号ですよね。
Python では、二つの値が等しいかどうかを調べるには == という比較演算子を使います。例:
>>> 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 お前の方こそネタスレに逝け。そのまま帰ってくるな。
>>177-178 178の後半はわかったようなわからんようなって感じですが、
私が疑問に思ったことは判りました。ありがとうございました。
ネタじゃなかったんだ Σ(・∀・`;) >お前の方こそネタスレに逝け。そのまま帰ってくるな。 マターリ逝こうよ。ヽ(´ー` )ノ
>>> ←これは、Pythonが入力を待ってるってこと。 勝手に表示されて、この後に命令を書けばいい。 人が入力する必要はない。 ... ←これも同様。 Unixとか知ってる人は、シェルの$とか%とか#とかと同じモンだと思えば、それでだいたいあってる。
>>181 173がネタ(釣り)だと思う方がどうかしてる。相当2ちゃんに毒されてるな(w
つーか、釣りだと思っててもクソ真面目にマジレスしてやれ。
このスレがいつか HTML 化されて Google で引っかかるようになったときに
インクリメントだの assert だので検索した香具師の役に立つかも知れないだろ?
あんなくだらないことは本読めばわかる。わからないやつは諦めろ。 いちいち糞真面目に答えるやつも邪魔だ。アホが集まってくる。
| Hit!! | | ぱくっ| /V\ /◎;;;,;,,,,ヽそんな煽りで _ ム::::(,,゚Д゚)::| 俺様が釣られると思ってんのか!! ヽツ.(ノ:::::::::.:::::.:..|) ヾソ:::::::::::::::::.:ノ ` ー U'"U'
186 :
デフォルトの名無しさん :03/12/24 01:44
pythonで簡単なGUIアプリを作りたいのですが pygtkとかpyqtとかいろいろありますよね 何かお勧めはありますか 使用環境としては、 ・家:Linux ,職場:windowsでシームレスに使いたい ・職場ではあちこちのパソコンに入れるのでセットアップの手間が 小さいのがありがたい ・やっぱり簡単にプログラムが組みたい なんですが...
Tkinterだしょやっぱ 標準で付いてくる威力は大きい
しかし、Winで使おうとするとインストールの手間は どうしようも無いですね
>>186 見た目にこだわらず、凝ったことをやらないのなら、 tk
>>188 Windowsインストーラ版引っ張ってきてフルインストールすりゃ入ってるけど。<Tkinter
>>190 「Python をインストールしないと、、、」という意味だと思う。
>>191 Pythonに限らずだが、そういう手間すら惜しむなら、そもそもLinuxとWindowsで
クロスプラットホームなGUIなんてあり得ないと思うんだけど……。
だからひとつインストールするだけってのが目的を果たす最少構成って話。
アルファベット前提で書かれたプログラムを日本語も通るようにするうえで参考になるような ものはありますか? Iwataさんのブロッグなどもそうだと思うのですが、他に手ごろな例がないかなって。
windows2000 以降,インストーラが一般ユーザー権限で走らないのが痛い.
>>194 いまどきの Python アプリって内部文字コードが Unicode になってて、
UI も Unicode 対応のライブラリで作ってあったりして、日本語化の努力って
必要なかったりしない?
もし内部文字コードが ASCII や Latin-1 限定なら、
ソースを追いかけて入出力や文字列操作の箇所を見つけ出して
文字のバイト長を考慮するように書き換えるのが基本。
これは Python だろうが他の言語だろうが同じだと思われ。
ソース読んだことないけど Mailman の日本語化パッチは所望のものに近いかも。
>>196 お出掛け先のマシンじゃ無理だよヽ(`Д´)ノ
199 :
デフォルトの名無しさん :03/12/25 19:45
input()関数で詰まりました。 multiplier=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 と表示されるのではないのでしょうか? 実際には「乗数を入力してください:」の部分に代入した数字が 表示されるだけなのですが。 どうなってるのかよく判りません。
>>199 漏れのところでは期待通り動いた。プログラム的にはまったくおかしくないよ。
どういう風にプログラムを実行してる?
問題の3行だけから成るファイル (例えば mul.py) を作って
python mul.py
のように実行すればいけると思うんだけど。
>>200 IDLEからopenで開いて、Run script
なんかいじくってたら、今度は1行目がおかしいという文が。
わから〜ん!
人間並みの頭脳を持っていれば
>>200 のやり方を試してscriptが間違っていな
いかどうかを確かめることを考えるだろう。1つのやり方だけに固執せずに。
205 :
デフォルトの名無しさん :03/12/25 20:55
一から書き直したら原因わかりました。
()の中に""をつけてませんでした。
お騒がせしました。
ついでに聞きたいのですが、
>>200 ,
>>203 の言っているほかの方法とは
どのようにやるのでしょう?
MS DOS プロンプトでしょうか?
これ開くとC:\DOCUME^1\名前>とでます。
Cの下のディレクトリにおいているので、C:\Python Program>pyhon d.pyと
するのでしょうか?でも、C:\DOCUME^1\名前>が変更できません。
書いていても、物凄く初歩的なことだとは判るのですが、全然やりかた判らないです。
>>205 DOS 窓から Python を使うには、cd コマンドとか dir コマンドとか
環境変数 PATH の設定とか、そういう MS-DOS 由来の知識が要ります。
興味があったら自分で調べて下さい。しかし郷に入ったら郷に従えで
Windows では IDLE を使うのがいい気がします。
漏れは Linux 使いなので
>>200 のように使うのが楽なのです。
>>206 ご親切にありがとうございます。
IDLE使っときます。
XcodeでPython使ってる人いますか?
Python を使い始めたものなのですが、 クラスで、何をクラスにしたらよいのかわかりません。 ネットでも調べてみましたが、よくわからなかったので よければ教えてください。
number.pyというプログラムを作って >>> python number.py と入れて実行しようとしたのですが SyntaxError: invalid syntax と出て起動できません。原因はなんでしょうか? 非常に初歩的な質問ですみません・・。
>>209 使い方がわからないうちは使う必要ないです。
一部でなんでもクラスにしないと気がすまない悪い子さんとかいますし、、、
>>210 プログラムはコマンドラインから実行する。
$ python number.py
Python のシェルから実行しても駄目だよ。
>>212 し、知らなかったです・・。すみません、勉強不足で。
しかしコマンドラインから実行しても
File "<stdin>", line 1
$ python number.py
'
と出て起動できません・・・。一体どうすれば良いのでしょうか?
214 :
デフォルトの名無しさん :03/12/26 20:23
GUIプログラムを組むなら glade+Cの方が簡単か?
210さん、
>>213 の表示は、
>>212 さんが言っている「コマンドライン」
ではないように見えます。推測ですが、python インタプリタの
「>>>」というプロンプトの直後に、「$ python number.py」のように
タイプしたものでしょう。そのような操作は誤りです。
「>>>」というプロンプトに対しては、Python言語のプログラム
(の断片)を入力します。
>>212 さんがいっている「コマンドライン」は、
もしWindowsの場合であれば、「コマンド プロンプト」または
「MS-DOSプロンプト」のことだし、
Linuxまたはその他のUnixの場合であれば、シェル(bashなど)
のことです。
実は、それぞれのOSにおける「コマンドライン」の使い方について
質問するには、このスレッド(またはプログラム板全体)は
最適ではないです。PC初心者板などきくのがよいのでは
ありませんか。
>>213 どこからコマンドを実行してる?
OS は?
コードの中身が見れないと……
>>215 了解。もう少し自分で頑張ってみます。
アドバイスありがとうございました。
>>210 Windows なら number.py をダブルクリックするだけでは?
>>209 標準ライブラリのソースを読んで、クラスがどのように使われているかを
調べてみたらどうだろう。一部のクラスは継承することを前提に書かれている。
単にインスタンス化するためだけのものもある。そういう用例をたくさん
知っていれば自分でクラスを設計するときに役立つよ。
Python では必ずしもクラスを使う必要はないから、最初はいつ使えばいいのか
分からないかも知れない。ひとつの指針として、こういうのはどうだろう。
関数が増えて大域変数をいくつも使う必要が出てきたら、
それらをクラスとしてまとめることを考えてみる。
つまり、大域変数をメンバ、関数をメソッドにして、プログラムをクラスとして
再構成してみる、ということ。オブジェクト指向の方法論からすれば邪道だけど
実践的なアプローチとしては「あり」じゃないかなと思う。
>>221 どこらへんが支離滅裂か指摘してもらえると助かる。
丸一日レスを待っていたわけだが 「sakito並」と言ってみたかっただけのお花畑だったのね。ヽ(´ー`)ノヤレヤレ ご愁傷様。>sakitoタソ
教えてください! [1,2,3,6,7,10,11]みたいなリストがあったとして、 [[1,2,3],[6,7],[10,11]]みたく、連続した部分を切り出すような処理をしたいんです。 再帰使ったりとかの定石的な書き方ってありますか?
自力で辿り着いたのは、 1 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 こんな感じなんですけど。なんか再帰感薄いっつーか、逆から回してるだけじゃんかと。 そんなもんなんですか?
何がなにやら…
>>225 全角スペースかタグを使ったスペースよろしく!
>>225 キーワードに注目すれば
ブロックが見える
こんなかんじ?
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
無理に再起使う必要ないんじゃ?
pythonの人は早起きっすね ひっくり返ってんのは、入力データを降順にするからいいです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 あんまりリスト操作ってやったことないので、すいません
汎用性あるかなと思ったけど、単純なときにしか使えないかな。 >>> 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]]
おお...python寄りの頭だといきなり
>>230 まで辿り着けますか
なんか全然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文で取り出した時に
メモリに乗るのか...長くてすいませんできたら教えてください
おれは230ぢゃないが、 ・pthonの関数はreturnはオプションで、やるべきことを済ませば勝手にreturnする。 ・pythonのfor文はシーケンスの終わりにstop iterarion例外を捕らえてループを抜ける。 ・リストコンプリヘンションはlistを生成するための表記法の一つなので、代入した場合の格納されるオブジェクトは当然list。 すなわち230の例ではstop iteration例外によってfor文を抜けて暗黙のreturnで関数を終了してる。 resultは(リストコンプリヘンションで生成した)listオブジェクトその物を指している。 、、、なんか答えになってねーっぽい。
returnは他言語のreturnと同じ。関数を頭から実行して、値を返して終わり。 yieldを含んだ関数は、関数の値を計算しないで、ジェネレータを返す。 ジェネレータは、nextメソッドを呼ぶと、関数を頭から実行して、yieldのところで値を返して一時停止する。 もう一回nextを呼ぶと、一時停止した直後から実行再開。 関数の終わりに到達すると、もう実行再開できなくなる(StopIteration例外がでる)。 最後のyield文じゃなくて、あくまで関数の終わりね。 普通の関数なら、暗黙の無返値のreturnがある位置。 あと、内包表記はresultにバインドした時点で全部メモリに乗る。 ジェネレータは呼び出すたびにいちいち計算するもんなので、計算結果全部をメモリに乗せない。 for i in split_list(...): print i と、内包表記を経由しなければOK。 for文がnextとかStopIterationとかの面倒を勝手にやってくれるから。
個人的には
>>229 の方法がシンプルで好きだな。
>>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)))
あのさぁ python にも CPAN みたいなサイトってあるの?
>>232 ,233
どうもわかりやすかったです。
yieldが含まれる関数はジェネレータオブジェクトを返すってことなのか。
それでdefのかわりにgeneraterって予約語作ったほうがいいって話もあったりするんすね。
pythonはじめてから一番違和感ある...そんなことないのかな。いやあるなあ。
むしろ内包表記なんかも全部ジェネレータ的に動いてくれりゃいいのにとか勝手なこと思いますけど。
バインドした時点ではジェネレータオブジェクトを抱えたジェネレータオブジェクトで、
みたいな感じだとむしろ理解しやすいっつーか巨大ファイル扱う時も内包表記でいけるじゃんと。
>>234 だと隣あってる要素の比較っていうのが固定されるんすね。
普通どのへんで手を打つべきなんだろう。
ちなみにこれはgeniconvtblのcondition以下の生成をしようっつーので必要なんです。
どうもありがとうございました。
リストはリストで、メモリを食う代わりにランダムアクセスできるメリットが
あるので、全部ジェネレータというのもちょっと……。
PEP 289が入れば
>>239 の望みもかなうかな。
>>239 Python のファイルオブジェクトは実質的にジェネレーターの一種だと思う。
辞書の iterxxx 系統とか。
>>240 ,241
ああそう、こんな具合で。いいっすねー。
>>242 そもそも指摘の意図がわかんないですすいません。
巨大ファイルってとこになんかあるですか
後、そもそもジェネレータとイテレータの違いってyieldの特性によるもの?
ジェネレータはイテレータの一種。 (一定の規則に則って)繰り返し値を返してくれるオブジェクトをイテレータといって、 イテレータの中でも、予めメモリ上に全部乗ってるデータを順番に返すのではなくて、 値が必要になったらその都度計算して返すオブジェクトをジェネレータという。 最近のファイルオブジェクトは、値を全部メモリに読み込んで返す他に、 必要な分だけその都度読み込んでは返すことができるので、そういう意味で ジェネレータに近いんじゃないかと。メモリも圧迫しないし。
そもそもジェネレータってどの言語が元祖なの? C# にもつくらしいけど。
>>245 漏れの知る限りでは、Smalltalk-80には既に存在していた。
80ねんごろにはすでにあったのか、、、
>>247 yieldを使って構成するようなものではなくて、例えば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で実装されていた。
っつうかclosureが発明されたころまで遡れるんじゃ
起源はわからないけど、PythonはジェネレータをIconから拝借したそうな(PEP 255)。
>C# にもつくらしいけど。 ソースきぼn
>>251 yield はゲネレータ かと名前から思っていたのだけど、今調べたら、単なるイテレータのようですね。
スマソ。
>>249 じゃあ lisp だ (グレアムだってそう言ってるw
>>253 lisp 界隈ではジェネレータはわりとメジャーだったとは思います。
むかーし読んだ 1980 年代の lisp 入門書にもちゃんと載ってたし。
そんな漏れも Norvig タンの Python for Lisp Programmers で Python 使い
始めたクチです。ぱいそんイイ!
>>254 lisp 系の人は Python より Ruby のほうがいろいろ遊べるんじゃないの?
そんなことないですか?
>>255 lambda がダメポとかって話?そもそもリストの実装からして根本的に
違うんだから lisp らしさなんて期待しないので。クロージャとかじゃくて
クラス作って〜と頭が切り替わってるから全然平気っす。
個人的には言語仕様はバランスイイと思うし、ドキュメントや環境もひっくるめて考えると
Python 良いと思うよ。たまに Windows 相手の時も頼りになるし。計算主体の場合は Lisp
コンパイラにお出まし願えばいいわけだし。(でもなんだかんだで C++ ばっかで鬱なわけだが)
windows 相手のときに頼りにならない lisp に愛の手を. 仕様と処理系が一緒な python, ruby, perl,,, には強みが多いですね.
まぁ、Windows 相手に頼りに〜ってのは主に COM サポートの話だったので 別に Lisp が頼りにならないわけではないんだが…Allegro 買わずとも Python で済んじゃえばそれでいいやってくらい。ところで Ruby って Windows での COM サポート充実してたっけ?今 RAA で探したら RubyCOM というライブラリがあったけどリンク切れだった。
COMサーバ→(Pythonで)SOAPサーバ→LISP(or whatever)でSOAPクライアント のよう構成を妄想。
>>260 まだでたばかりだよ。
中身を見ていないのでなんともいえないけど、Pythonのスキルをどのくらいもっているかで価値が変わるかもね。
>>260 「まずはPythonからはじめよう」の購読者ですね?
発送が1〜2週間遅れるとさ(`〜´)タリィ
C++クラスをPythonに公開して、 そのクラスを使ったPythonスクリプトを C++から呼び出すサンプルを書いてくれ。 できればコールバックを使ったやつ頼む。
267 :
デフォルトの名無しさん :04/01/07 15:26
某所 (foo) で cgi に python を使おうとしました.ところが, Traceback (most recent call last): File "hoge.py", line 9, in ? import cgi File "/usr/foo/lib/python2.2/cgi.py", line 39, in ? import urllib File "/usr/foo/lib/python2.2/urllib.py", line 26, in ? import socket File "/usr/foo/lib/python2.2/socket.py", line 41, in ? from _socket import * ImportError: No module named _socket _socket.so は /usr/foo/lib/python2.2/lib-dynload にあるわけですが, これはちゃんと sys.path に含まれているんです. うちではちゃんと動きます. どうなっているんでしょう...?
人が少ないのかなぁ... 始めたばっかりで考えられる原因を挙げることさえできないんです. スレはageます.
>>267 Solaris だと機種によっては socket でちょっとはまっていたきがする。 HP-UX だったかな?
サーバーのマシンは Linux じゃないですよね?
>>270 はい.Solaris なんです.向こうは.
いやー.つい r... という言語を試してしまいました.
CGI のライブラリがあればすぐに出来るものでしたので,
python でできず本当に残念です...(⊃д`)
rexx 使いか。
Rebol では?
>>267 たぶんサイトのCGIポリシーでしょ。
cgiから直接コネクション貼りにいかせたくないんじゃない?
「某所(foo)で」とか言われても、誰も何もしてやれんし。 そのマシン管理者なり、サービス提供事業者のサポセンに訊けよ。 そしてその装置にpython2.2をインストールするのを失敗してるやつに直させろよ。 社会の掟でしょ。 ところで cgi モジュールは socket に依存しているんですね。知りませんでした。 よく見ると socket は urllib が使っていて、cgi は urllib の URL unquote 関数を 使っているだけだから(わたしはPython 2.4を見ていますが)、ワークアラウンド として socket に依存しないバージョンのcgi.py を自分で用意するのは容易(pun intended)。 (1)まず cgi.py の「import urllib」の行を消します。 (2)次に、cgi.pyの「urllib.unquote」を「unquote」のように非修飾名に書き換えます。 (3)urllib.py から 「def unquote」という関数定義部分をcgi.pyにコピーします。 (4)できあがったcgi.py を自分のCGIスクリプトと同じディレクトリに置きます。 cgi.py の許可モードは 0444 とでもします。 (5)python -v で起動して、(-vの意味はマニュアルを見よ) >>> import cgi します。ここで _socket が表示されなければokです。
boost/python勉強すっか。 ドキュメント和訳されないかなぁ・・・ 英語の文献だと著しく学習効率がさがるんだーわし。
日本人の英語力はアジア最低レベル。バカばっか。
>>278 どちらの国の方ですか?
日本語がお上手ですね。
>>266 オーバーヘッドがすごそうだね。
プロジェクトの中にPython信者が一人でもいると、
そういうことまでしないといけなくなるのかな…
>>280 信者云々は関係ないと思われ。Python を C++ のアプリの拡張言語として使おうとすると
>>266 のような要求が出てくる。
この主従関係は Python と Tcl/Tk にも当てはまる (Python アプリから Tk を呼出し、コールバックを Python で書く)。
ダメなやつは 何をやらせてもダメ デキるやつは 何をやってもデキる ただそれだけのことだ
>>275 次の段階に行かれました.ありがとうございます.
ImportError: No module named time
また lib-dynload の中です.
もしかすると
>>274 かも知れませんが,相談してみます.
某所というのは,某大学なんです.
python が満足に動かない環境のままでは大学全体の知的活動に関わる問題に
なってしまいますから,相談しなければと思います.
>>284 ActivePython の Solaris (SPARC) 版っていうコンパイル済みのパッケージがあってSolaris 2.6以降で使えるそうです。
superuser権限がある場合: Solaris package
superuser権限がない場合: Generic AS package
superuser権限があるかどうかさえもわからない場合: このレスのことは忘れてください。
なおこれらのインストール方法について訊かれても、ActiveStateがwebに掲載している以上の情報は知りません。
つまらないことかもしれないけど、たまに Python でプログラミングをはじめましたという人がいるけど、 あの人たちは無事 Python(やその他のプログラミング言語)を使えるようになっているのかな?
>>286 それはPythonがプログラムの入門としては適してないっていいたい?
日本での情報が足りないとか?
中級レベルの日本語での情報が少ないよね。 ……まあそこらへんは Ruby でもそうだけど。
正直適してないと思う 電卓として使うならいいかもしんないけど 型を明示的に扱う系の方が後々伸びるかと 個人的にはJava推奨、デバグが楽だと言う点で ところで、Zopeのプロダクト作るときってデフォルト引数にTrue って使えないの? def function(x, y, z=True): hogehoge.... みたいなコードで 起こられるんだけど・・ Exception type: NameError Exception value: name 'True' is not defined
python修得中。いづれは C コードの外装に使用する予定。
>>290 偉そうなこと言うわりには基本ができていないやつの典型
Python 勉強中。
別にどの言語でも、「今勉強してます」とか言ってる人がモノになったって話は聞かないなぁ。
必要に迫られて憶えた、なんか弄ってる内になんとなく分かってきた、って人が多い気がする。
>>290 そのZopeが使ってるPythonのバージョンはいくつ?
旧いPythonには定義されてないので、
True, False = (0==0), (0==1)
とか自分で定義してお茶を濁すべし。
ありがとうございます
>>294 Pythonのバージョンは2.1.3です。
Zope2.6.1のをそのままで
引数を整数にして逃げときました
>>294 True, False = 1, 0 じゃなぜダメなんですか?
True, False の定義されている Python で True=1 とすると, 組み込みの True (boolean 型) を整数 1 (plain integer 型) でオーバライドするからじゃないかな. (0==0) は真偽テストだから, True/False のある Python では True, そうでない Python では 1 を 返すので,バージョン間の定義の違いをうまく吸収できるというわけ.
>>288 ,
>>289 中級以上のレベルの話をするには
ある程度プログラムの分野を絞らないと
いけないと思うんだけど、日本のPython本は
数が少ない上に、総論・概論本ばっかりですからねぇ。
結局、Perl,Java,Cのコードをヒントに勉強していくしかない。
なら英語でも読めば。
python でも本は必要?
>>302 言語自体に慣れないうちは
手元にリファレンス本などあったほうが便利
慣れてきたら
他人のソース読むとか
ライブラリーリファレンス読むだけなので
本は不要
そりゃまぁどんな言語でも同じだわさ
>>302 本はあった方がいいと思うよ。
リファレンス本は、付属ドキュメント見ればいいだけだからいらないと思うけど。
306 :
デフォルトの名無しさん :04/01/11 17:48
Zopeから外部プログラムを起動する方法ってありますか? Zopeから Cのプログラム を起動させたいんですけど PythonならばいけるんですけどZopeから何とかならないでしょうか? import sys target = sys.argv[1] command = "ping.exe %s" % target result = os.popen2(command)[1] print result.read() Zopeでファイルシステムベースのプロダクトを作って(非ZClass このようなコードを埋め込んでも結果はNoneになってしまうのですが・・・ 環境は WindowsXP Plone 1.0.5 Python2.1.3です
sys.argv て何がはいってるの? print するとどこに表示されるはずなの? None て何?
>>> 306 ExternalMethod を使います.ExternalMethod を知らなければ,勉強するか, Zope 関連のスレッドや ML へどうぞ. import os def bar(target): return os.popen2('ping.exe %s' %(target))[1].read() を foo.py に保存して,例えば baz という ExternalMethod として登録し, print container.baz("www.spambacon.egg") のように使います. Zope の Script (python) や ExternalMethod は CGI ではないので, sys.argv にスクリプトの起動引数が入ったりはしません.Python プログラム である Zope の一部として実行されるので,sys.argv には z2.py の起動時の 引数が入ります.
そのコードはmainでテストした奴なので実際のものとは違います def invoke(): address = 'www.google.co.jp' command = "ping.exe %s" % address result = os.popen2(command)[1] print result.read() 実際はこのようなメソッドをPortal.pyに加えて dtml側で <dtml-var expr="invoke()">のように呼び出したんですけど コマンドが実行されていないようなのです そして、ページにNoneが返ってきているという意味です
>>309 printしないでreturnすれば?
return printed とか。 zope は zope スレがあったと思う。どの板か忘れたけど。
あ、すいません、書き間違えました、そこはreturnで・・・ ・・・と思ったらreturnにしたらコマンドが実行されて出力結果が表示されてました・・ お騒がせして、すいません みなさん、ありがとうございます ExternalMethodも勉強したんですけど、 どうせプロダクトを作るならコードに組み込んだ方がいいかなと思いまして やりたいことはPlone上で編集中の文章を外部プログラムで形態素解析するとかなんですけど 編集中の文章を取ってくる方法がわからなかったりつまづいています ドキュメントのURLのようなものからドキュメントが取れればいいのですが・・・ わかる人いますかね? たまに<dtml-var text>で取れたりするのですが・・ (編集中のDocumentクラス内のtextがそのまま残っているから?) CMFの海に溺れている様な状態です・・・未熟な私にはグローバルまみれでよくわからないように見える
Zope関連はスレ違いですかね? プログラム、プログラマ板にはそれらしいのはなかったです WebProg板にZopeスレがあったんですけど ”Zopeってどうよ?”なスレだったんでプログラム的な質問は違うかなと思いまして 2ch以外のZope関連サイトのBBSも結構 探したのですが 更新が止まっているものが多く、このスレが一番活発に見えたので質問した次第です
Zope使ったことないのですが、面白いの? どんなことができるの?"高性能なサイトを作れる"の? それとも、ぞーぷってうまいのか?
python の手軽に動く wiki は無いんですか? Zope では貧弱な権限で動かせません...
>>314 仕事で必要といった理由がないなら、近づかない方がいいと思う。
>>318-319 何だ、ソースコードかと思ったら「ウォーリーを探せ」か。懐かしいな。
('w') ← ウォーリー
おもしろい名前だな
ぐぐったら北ドイツの挨拶の言葉らすぃ。<Moin
>>324 ( ・∀・)つ〃∩ ヘェーヘェーヘェーヘェーヘェー
326 :
デフォルトの名無しさん :04/01/14 00:28
Emacsのpython-modeで引数を渡す方法ってありますか? C-c c でスクリプトを実行できて重宝していますが引数を渡したい場合、いちいちshellモードで実行してますので。
M-x describe-function py-shell
328 :
デフォルトの名無しさん :04/01/14 12:55
>>327 うう、まだよくわかりません。
例えば以下のようなスクリプトがあって
import sys
print sys.argv[1]
このバッファでC-u 'foo' C-c C-cとかやるとfooを表示するような機能を使いたいんですが。
py-shellによるとC-u C-!でインタープリタに引数を渡せるようですが、これはいわゆるPythonのオプションのように見えます。
>>328 M-x describe-bindings したら?
py-execute-* あたりかな。
330 :
デフォルトの名無しさん :04/01/14 17:41
プログラム自体初めてで、諸事情からpythonやることになりました。 といっても既存のプログラムを書き換えるんですけど。 で、書き換えた結果、 AttributeError: 'int' object has no attribute 'self' って出ました。属性がない?みたいに取れますけど原因がよくわかりません。 質問として足りないと思うのですが、何書けばいいのかよくわからないので。 わかりにくいと思いますがお願いします。
>>330 プログラムを見せないのはなにか狙っているのですか?
プログラム載せてもただ長くなるだけだと思いまして。 やたら長いプログラムの一ヶ所に追加しただけなので。 主に原因として考えられる例などを挙げてもらえればいいと思ったのですが。 とりあえず周辺数行を載せます。 if (self.plotDataType == "lowd"): query = "SELECT time_utc FROM ceilo " query = query + "WHERE paramset = '%d' AND " % (paramsetID) query = query + "time_utc >= '%s' AND time_utc <= '%s' AND " % \ (time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(self.options.startTime)), time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(self.options.endTime))) query = query + "cb_height_1 IS NOT NULL AND" query = query + "cb_height_l >= '%d' AND cb_height_l <= '%d' " % (self.lowLimit. self.highLimit) ←エラー出る行 query = query + "ORDER BY time_utc;" self.db.executeWithoutCommit(query) self._initGPFile()
>>332 (self.lowLimit. self.highLimit)
->
(self.lowLimit, self.highLimit)
コンマがドットになってる。
4.self.hightLimit
という風に解釈されているということですね。
>>332 self.lowLimit. self.highLimit
じゃなくて
|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で実装されていた。
っつうかclosureが発明されたころまで遡れるんじゃ
起源はわからないけど、PythonはジェネレータをIconから拝借したそうな(PEP 255)。
>C# にもつくらしいけど。 ソースきぼn
>>251 yield はゲネレータ かと名前から思っていたのだけど、今調べたら、単なるイテレータのようですね。
スマソ。
>>249 じゃあ lisp だ (グレアムだってそう言ってるw
>>253 lisp 界隈ではジェネレータはわりとメジャーだったとは思います。
むかーし読んだ 1980 年代の lisp 入門書にもちゃんと載ってたし。
そんな漏れも Norvig タンの Python for Lisp Programmers で Python 使い
始めたクチです。ぱいそんイイ!
>>254 lisp 系の人は Python より Ruby のほうがいろいろ遊べるんじゃないの?
そんなことないですか?
>>255 lambda がダメポとかって話?そもそもリストの実装からして根本的に
違うんだから lisp らしさなんて期待しないので。クロージャとかじゃくて
クラス作って〜と頭が切り替わってるから全然平気っす。
個人的には言語仕様はバランスイイと思うし、ドキュメントや環境もひっくるめて考えると
Python 良いと思うよ。たまに Windows 相手の時も頼りになるし。計算主体の場合は Lisp
コンパイラにお出まし願えばいいわけだし。(でもなんだかんだで C++ ばっかで鬱なわけだが)
windows 相手のときに頼りにならない lisp に愛の手を. 仕様と処理系が一緒な python, ruby, perl,,, には強みが多いですね.
まぁ、Windows 相手に頼りに〜ってのは主に COM サポートの話だったので 別に Lisp が頼りにならないわけではないんだが…Allegro 買わずとも Python で済んじゃえばそれでいいやってくらい。ところで Ruby って Windows での COM サポート充実してたっけ?今 RAA で探したら RubyCOM というライブラリがあったけどリンク切れだった。
COMサーバ→(Pythonで)SOAPサーバ→LISP(or whatever)でSOAPクライアント のよう構成を妄想。
>>260 まだでたばかりだよ。
中身を見ていないのでなんともいえないけど、Pythonのスキルをどのくらいもっているかで価値が変わるかもね。
>>260 「まずはPythonからはじめよう」の購読者ですね?
発送が1〜2週間遅れるとさ(`〜´)タリィ
C++クラスをPythonに公開して、 そのクラスを使ったPythonスクリプトを C++から呼び出すサンプルを書いてくれ。 できればコールバックを使ったやつ頼む。
353 :
デフォルトの名無しさん :04/01/07 15:26
某所 (foo) で cgi に python を使おうとしました.ところが, Traceback (most recent call last): File "hoge.py", line 9, in ? import cgi File "/usr/foo/lib/python2.2/cgi.py", line 39, in ? import urllib File "/usr/foo/lib/python2.2/urllib.py", line 26, in ? import socket File "/usr/foo/lib/python2.2/socket.py", line 41, in ? from _socket import * ImportError: No module named _socket _socket.so は /usr/foo/lib/python2.2/lib-dynload にあるわけですが, これはちゃんと sys.path に含まれているんです. うちではちゃんと動きます. どうなっているんでしょう...?
人が少ないのかなぁ... 始めたばっかりで考えられる原因を挙げることさえできないんです. スレはageます.
>>267 Solaris だと機種によっては socket でちょっとはまっていたきがする。 HP-UX だったかな?
サーバーのマシンは Linux じゃないですよね?
>>270 はい.Solaris なんです.向こうは.
いやー.つい r... という言語を試してしまいました.
CGI のライブラリがあればすぐに出来るものでしたので,
python でできず本当に残念です...(⊃д`)
rexx 使いか。
Rebol では?
>>267 たぶんサイトのCGIポリシーでしょ。
cgiから直接コネクション貼りにいかせたくないんじゃない?
「某所(foo)で」とか言われても、誰も何もしてやれんし。 そのマシン管理者なり、サービス提供事業者のサポセンに訊けよ。 そしてその装置にpython2.2をインストールするのを失敗してるやつに直させろよ。 社会の掟でしょ。 ところで cgi モジュールは socket に依存しているんですね。知りませんでした。 よく見ると socket は urllib が使っていて、cgi は urllib の URL unquote 関数を 使っているだけだから(わたしはPython 2.4を見ていますが)、ワークアラウンド として socket に依存しないバージョンのcgi.py を自分で用意するのは容易(pun intended)。 (1)まず cgi.py の「import urllib」の行を消します。 (2)次に、cgi.pyの「urllib.unquote」を「unquote」のように非修飾名に書き換えます。 (3)urllib.py から 「def unquote」という関数定義部分をcgi.pyにコピーします。 (4)できあがったcgi.py を自分のCGIスクリプトと同じディレクトリに置きます。 cgi.py の許可モードは 0444 とでもします。 (5)python -v で起動して、(-vの意味はマニュアルを見よ) >>> import cgi します。ここで _socket が表示されなければokです。
boost/python勉強すっか。 ドキュメント和訳されないかなぁ・・・ 英語の文献だと著しく学習効率がさがるんだーわし。
日本人の英語力はアジア最低レベル。バカばっか。
>>278 どちらの国の方ですか?
日本語がお上手ですね。
>>266 オーバーヘッドがすごそうだね。
プロジェクトの中にPython信者が一人でもいると、
そういうことまでしないといけなくなるのかな…
>>280 信者云々は関係ないと思われ。Python を C++ のアプリの拡張言語として使おうとすると
>>266 のような要求が出てくる。
この主従関係は Python と Tcl/Tk にも当てはまる (Python アプリから Tk を呼出し、コールバックを Python で書く)。
ダメなやつは 何をやらせてもダメ デキるやつは 何をやってもデキる ただそれだけのことだ
>>275 次の段階に行かれました.ありがとうございます.
ImportError: No module named time
また lib-dynload の中です.
もしかすると
>>274 かも知れませんが,相談してみます.
某所というのは,某大学なんです.
python が満足に動かない環境のままでは大学全体の知的活動に関わる問題に
なってしまいますから,相談しなければと思います.
>>284 ActivePython の Solaris (SPARC) 版っていうコンパイル済みのパッケージがあってSolaris 2.6以降で使えるそうです。
superuser権限がある場合: Solaris package
superuser権限がない場合: Generic AS package
superuser権限があるかどうかさえもわからない場合: このレスのことは忘れてください。
なおこれらのインストール方法について訊かれても、ActiveStateがwebに掲載している以上の情報は知りません。
つまらないことかもしれないけど、たまに Python でプログラミングをはじめましたという人がいるけど、 あの人たちは無事 Python(やその他のプログラミング言語)を使えるようになっているのかな?
>>286 それはPythonがプログラムの入門としては適してないっていいたい?
日本での情報が足りないとか?
中級レベルの日本語での情報が少ないよね。 ……まあそこらへんは Ruby でもそうだけど。
正直適してないと思う 電卓として使うならいいかもしんないけど 型を明示的に扱う系の方が後々伸びるかと 個人的にはJava推奨、デバグが楽だと言う点で ところで、Zopeのプロダクト作るときってデフォルト引数にTrue って使えないの? def function(x, y, z=True): hogehoge.... みたいなコードで 起こられるんだけど・・ Exception type: NameError Exception value: name 'True' is not defined
python修得中。いづれは C コードの外装に使用する予定。
>>290 偉そうなこと言うわりには基本ができていないやつの典型
Python 勉強中。
別にどの言語でも、「今勉強してます」とか言ってる人がモノになったって話は聞かないなぁ。
必要に迫られて憶えた、なんか弄ってる内になんとなく分かってきた、って人が多い気がする。
>>290 そのZopeが使ってるPythonのバージョンはいくつ?
旧いPythonには定義されてないので、
True, False = (0==0), (0==1)
とか自分で定義してお茶を濁すべし。
ありがとうございます
>>294 Pythonのバージョンは2.1.3です。
Zope2.6.1のをそのままで
引数を整数にして逃げときました
>>294 True, False = 1, 0 じゃなぜダメなんですか?
True, False の定義されている Python で True=1 とすると, 組み込みの True (boolean 型) を整数 1 (plain integer 型) でオーバライドするからじゃないかな. (0==0) は真偽テストだから, True/False のある Python では True, そうでない Python では 1 を 返すので,バージョン間の定義の違いをうまく吸収できるというわけ.
>>288 ,
>>289 中級以上のレベルの話をするには
ある程度プログラムの分野を絞らないと
いけないと思うんだけど、日本のPython本は
数が少ない上に、総論・概論本ばっかりですからねぇ。
結局、Perl,Java,Cのコードをヒントに勉強していくしかない。
なら英語でも読めば。
python でも本は必要?
>>302 言語自体に慣れないうちは
手元にリファレンス本などあったほうが便利
慣れてきたら
他人のソース読むとか
ライブラリーリファレンス読むだけなので
本は不要
そりゃまぁどんな言語でも同じだわさ
>>302 本はあった方がいいと思うよ。
リファレンス本は、付属ドキュメント見ればいいだけだからいらないと思うけど。
392 :
デフォルトの名無しさん :04/01/11 17:48
Zopeから外部プログラムを起動する方法ってありますか? Zopeから Cのプログラム を起動させたいんですけど PythonならばいけるんですけどZopeから何とかならないでしょうか? import sys target = sys.argv[1] command = "ping.exe %s" % target result = os.popen2(command)[1] print result.read() Zopeでファイルシステムベースのプロダクトを作って(非ZClass このようなコードを埋め込んでも結果はNoneになってしまうのですが・・・ 環境は WindowsXP Plone 1.0.5 Python2.1.3です
sys.argv て何がはいってるの? print するとどこに表示されるはずなの? None て何?
>>> 306 ExternalMethod を使います.ExternalMethod を知らなければ,勉強するか, Zope 関連のスレッドや ML へどうぞ. import os def bar(target): return os.popen2('ping.exe %s' %(target))[1].read() を foo.py に保存して,例えば baz という ExternalMethod として登録し, print container.baz("www.spambacon.egg") のように使います. Zope の Script (python) や ExternalMethod は CGI ではないので, sys.argv にスクリプトの起動引数が入ったりはしません.Python プログラム である Zope の一部として実行されるので,sys.argv には z2.py の起動時の 引数が入ります.
そのコードはmainでテストした奴なので実際のものとは違います def invoke(): address = 'www.google.co.jp' command = "ping.exe %s" % address result = os.popen2(command)[1] print result.read() 実際はこのようなメソッドをPortal.pyに加えて dtml側で <dtml-var expr="invoke()">のように呼び出したんですけど コマンドが実行されていないようなのです そして、ページにNoneが返ってきているという意味です
>>309 printしないでreturnすれば?
return printed とか。 zope は zope スレがあったと思う。どの板か忘れたけど。
あ、すいません、書き間違えました、そこはreturnで・・・ ・・・と思ったらreturnにしたらコマンドが実行されて出力結果が表示されてました・・ お騒がせして、すいません みなさん、ありがとうございます ExternalMethodも勉強したんですけど、 どうせプロダクトを作るならコードに組み込んだ方がいいかなと思いまして やりたいことはPlone上で編集中の文章を外部プログラムで形態素解析するとかなんですけど 編集中の文章を取ってくる方法がわからなかったりつまづいています ドキュメントのURLのようなものからドキュメントが取れればいいのですが・・・ わかる人いますかね? たまに<dtml-var text>で取れたりするのですが・・ (編集中のDocumentクラス内のtextがそのまま残っているから?) CMFの海に溺れている様な状態です・・・未熟な私にはグローバルまみれでよくわからないように見える
Zope関連はスレ違いですかね? プログラム、プログラマ板にはそれらしいのはなかったです WebProg板にZopeスレがあったんですけど ”Zopeってどうよ?”なスレだったんでプログラム的な質問は違うかなと思いまして 2ch以外のZope関連サイトのBBSも結構 探したのですが 更新が止まっているものが多く、このスレが一番活発に見えたので質問した次第です
Zope使ったことないのですが、面白いの? どんなことができるの?"高性能なサイトを作れる"の? それとも、ぞーぷってうまいのか?
python の手軽に動く wiki は無いんですか? Zope では貧弱な権限で動かせません...
>>314 仕事で必要といった理由がないなら、近づかない方がいいと思う。
>>318-319 何だ、ソースコードかと思ったら「ウォーリーを探せ」か。懐かしいな。
('w') ← ウォーリー
おもしろい名前だな
ぐぐったら北ドイツの挨拶の言葉らすぃ。<Moin
>>324 ( ・∀・)つ〃∩ ヘェーヘェーヘェーヘェーヘェー
412 :
デフォルトの名無しさん :04/01/14 00:28
Emacsのpython-modeで引数を渡す方法ってありますか? C-c c でスクリプトを実行できて重宝していますが引数を渡したい場合、いちいちshellモードで実行してますので。
M-x describe-function py-shell
414 :
デフォルトの名無しさん :04/01/14 12:55
>>327 うう、まだよくわかりません。
例えば以下のようなスクリプトがあって
import sys
print sys.argv[1]
このバッファでC-u 'foo' C-c C-cとかやるとfooを表示するような機能を使いたいんですが。
py-shellによるとC-u C-!でインタープリタに引数を渡せるようですが、これはいわゆるPythonのオプションのように見えます。
>>328 M-x describe-bindings したら?
py-execute-* あたりかな。
416 :
デフォルトの名無しさん :04/01/14 17:41
プログラム自体初めてで、諸事情からpythonやることになりました。 といっても既存のプログラムを書き換えるんですけど。 で、書き換えた結果、 AttributeError: 'int' object has no attribute 'self' って出ました。属性がない?みたいに取れますけど原因がよくわかりません。 質問として足りないと思うのですが、何書けばいいのかよくわからないので。 わかりにくいと思いますがお願いします。
>>330 プログラムを見せないのはなにか狙っているのですか?
プログラム載せてもただ長くなるだけだと思いまして。 やたら長いプログラムの一ヶ所に追加しただけなので。 主に原因として考えられる例などを挙げてもらえればいいと思ったのですが。 とりあえず周辺数行を載せます。 if (self.plotDataType == "lowd"): query = "SELECT time_utc FROM ceilo " query = query + "WHERE paramset = '%d' AND " % (paramsetID) query = query + "time_utc >= '%s' AND time_utc <= '%s' AND " % \ (time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(self.options.startTime)), time.strftime("%Y-%m-%d %H:%M:%S", time.gmtime(self.options.endTime))) query = query + "cb_height_1 IS NOT NULL AND" query = query + "cb_height_l >= '%d' AND cb_height_l <= '%d' " % (self.lowLimit. self.highLimit) ←エラー出る行 query = query + "ORDER BY time_utc;" self.db.executeWithoutCommit(query) self._initGPFile()
>>332 (self.lowLimit. self.highLimit)
->
(self.lowLimit, self.highLimit)
コンマがドットになってる。
4.self.hightLimit
という風に解釈されているということですね。
>>332 self.lowLimit. self.highLimit
じゃなくて
self.lowLimit * self.highLimitとか
self.lowLimit.highLimitとかじゃないか
>>332 〜 % (self.lowLimit, self.highLimit)
では? ピリオドとコンマが。
うが三重婚。
すまん 下の行はおかしいや、取り消し
おお!ありがとうございます! 別のとこでエラー出ましたがとりあえずこれは解決されました。 即レス感謝です!
425 :
デフォルトの名無しさん :04/01/14 20:16
>>329 キーバインディングは一番最初に調べたのですが、どうもぴんとくるものがなかったんです。
中でもpy-execute-stringあたりは怪しかったけど、これバッファ二つ開いておいてインタプリタに文字を送るようなもので、これはこれでなんかすごい便利でうれしかったんですが。。。
いや、そう考えてみると質問を変えみたりして、
Pythonインタプリタに対話的に引数を渡すのってどうするのでしょうか?
426 :
デフォルトの名無しさん :04/01/14 20:47
対話的に渡すものを引数っていうのかな?
1. a.py というファイルを開いてコードを書く。 import sys print sys.argv[1] 2. M-x py-shell として次の2行を打ち込む。 >>> import sys >>> sys.argv = ["a.py", "foo"] 3. a.py のバッファに戻って C-c C-c でプログラムを実行する。結果は以下の通り。 >>> ## working on region in file /usr/tmp/python9exnr0 ... foo >>>
428 :
デフォルトの名無しさん :04/01/14 23:05
>>341 ありがとうございますた。
これだとpy-execute-stringあたりの便利さが実感できそうです。
429 :
デフォルトの名無しさん :04/01/15 14:41
文字コードの置換について教えてください。 例えば全角スペースを半角スペースに置き換える場合、 import string mystr="わたしは ほげ" print string.replace(mystr," "," ")# 出力 "わたしは ほげ" で実現できるのですが、マルチバイト文字のコードレベルの置換ってどうすればいいでしょうか? つまり以下のようなことです。 mystr="I am a hoge" print string.replace(mystr,chr(32),chr(33))# 出力 "I!am!a!hoge" これはだめな例。 mystr=u"わたしは ほげ" print string.replace(mystr,chr(0x3000),chr(20))#出力イメージ "わたしは ほげ"
>>343 何がどうダメなのか分からないけど、少なくとも以下の例は漏れの環境では動く。
$ cat test.py
# -*- coding: EUC-JP -*-
s = u"ぴ ち ょ ん"
print repr(s)
print repr(s.replace(u" ", u" "))
$ python2.3 test.py
u'\u3074\u3000\u3061\u3000\u3087\u3000\u3093'
u'\u3074 \u3061 \u3087 \u3093'
注意点:
・Python 2.3 以降を使う。
・スクリプトの先頭に # -*- coding: エンコード名 -*- と書く。
この2点を満たさないと u"漢字" のような Unicode リテラルの書き方はできない。
代わりに unicode("漢字", "euc-jp") のように組込み関数 unicode() を使う必要がある。
あと、chr(0x3000) ではなく unichr(0x3000) だよね。
431 :
デフォルトの名無しさん :04/01/15 16:58
>>344 だめといったのはchr(0x3000)はエラーになるということでして。unichr()ですね。ありがとうございます。
string.replace(mystr," "," ")ではそのスクリプトの文字コードに依存するかなとおもったのですが、どの道スクリプトの文字コードは関与するか、あるいは明示的にエンコーディングを指定しなければならないということですね。
勉強になりました。
Implicitness is evil. Make everything explicit.
あるオブジェクトと、そのオブジェクトの 属性名のリストがあるときに、 「オブジェクト.属性名 = 0」という式を属性名に ついてループしたい場合はどうしますか? for attr in ["giko", "hanyaan", "itteyoshi"]: exec("obj.%s = 0" % attr) これをexec文なしに書ける人よろしく。
435 :
デフォルトの名無しさん :04/01/18 11:25
質問です。 Zopeではなくて、PythonアプリとしてStructured Textを扱おう と考えています。そして、このアプリは、主にWindowsを対象とし て配布したいと思っています。 その場合、Python23jpにStructuredTextのライブラリを入れる 方法と、ZopeをインストールしてZope内のPythonを使う方法のど ちらがよいと思いますか? そもそも、WindowsにインストールするZopeディレクトリ内の Pythonって、日本語化が十分なのでしょうか?十分なんだったら、 Python23jpよりもZopeを入れちゃったほうが、初心者には簡単・ すっきりだと思うんですが。。
>>> attrs = 'giko hanyaan itteyoshi'.split() >>> class C: pass >>> obj = C() >>> obj.__dict__.update({}.fromkeys(attrs, 0)) >>> obj.giko, obj.hanyaan, obj.itteyoshi (0, 0, 0)
437 :
デフォルトの名無しさん :04/01/18 13:21
>>350 いちいちstringをsplitしてリストをつくる理由がわからん
シングルクオーテーションをたくさん打つのが面倒だからか?
やべぇ,ageちまった...
>>349 Zopeインストールさせるのはやめておいた方がいい。
あれはサーバなので、影響が大きい場合がある。
あと純粋にPython利用してもらった方が後に続けやすい。
440 :
デフォルトの名無しさん :04/01/18 23:49
pythonで行列計算をさせてみようと思うのですが 最初に行列サイズを指定するいい方法はないでしょうか いまは matrix=[] for i in range(n): line=[] for j in range(m): line.append(0) matrix.append(line) とかして0行列を作ってるんだけど もっと楽な^h^hスマートな方法はないかな、と
441 :
デフォルトの名無しさん :04/01/18 23:58
はじめまして 素朴な疑問ですが Python ←なんて読むの ルソン?パイソン?
人に聞かないと分からないの? クズの親に育てられたクズですね。
443 :
デフォルトの名無しさん :04/01/19 00:20
>>356 _、_
( ,_ノ` ) まあ飲め
|^^|
 ̄
なんか ruby スレッドでもこのスレの
>>70 のあたりと同じく継承&委譲の話題になってるね。
配列をファイルに出力したいんですけど、イマイチどう調べればいいのかわかりません。 writelines()ってのやってみたんですが、定義されてないとか言われて、 定義とかよくわからんのでどうにも。 printみたいに簡単に出力できるコマンドはないのでしょうか?
どう試したのかとか、エラーメッセージを書かないのはなにか理由でもあるのですか?
writelines(a[変数名])ってやってみて、 NameError: global name 'writelines' is not defined って出てそこまで。 なんか聞き返し方がネタっぽいんですがひょっとしてここはプログラム初心者お断りですか?
>>362 fileオブジェクト作成して書けばよい
というかtut読むとファイルIOわかるかと
>>365 ,366
なるほど、そういうことですか。すいません、以後気をつけます。
で、そこ読んだのですが、既存ファイルを呼び出してそれに追加するのではなく、
プログラム内で目的のデータを書き込んだファイルを新規に作成することはできないのでしょうか?
変数(中身はデータ列)のファイル出力が目的なのですが。
454 :
デフォルトの名無しさん :04/01/19 08:59
「Pythonで学ぶプログラム作法」という本は、Python入門者が使うには 少しむずかしめなのでしょうか? (貴方が)一番良いと思うPython学習法はどんなものでしょう?
他人が書いたソースを改変する練習
PythonでOSを組む練習
>>368 プログラム初心者なのかPython初心者なのかによるとおもう。
>>372 > file('data.txt', 'w').write('\n'.join(map(lambda row: ', '.join(map(str, row)), a))
これは反則でしょう?
460 :
デフォルトの名無しさん :04/01/19 15:14
ワンライナー厨キタ━━━━(゚∀゚)━━━!
pythonの lambdaをこんなふうに使うと読み辛いものだな。
つーか、wfileのcloseをGCに任せるのってどうも抵抗感あるなあ。
>>361 > a = [[0]*m]*n
試せば分かるけどこれはNG。
>>> a=[[0]*3]*4
>>> a[0][0]=1
>>> a
[[1, 0, 0], [1, 0, 0], [1, 0, 0], [1, 0, 0]]
>>>
正解:
>>> a=[[0 for i in range(cols)] for j in range(rows)]
>>> a[0][0]=1
>>> a
[[1, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, 0]]
>>>
>>373 372ではないが、何がどう反則なのか分からん。
漏れも
>>372 のようなワンライナーはよく使う (特に対話モードで)。
>>375 この lambda の用法はむしろ簡潔な方だと思われ。
list comprehension を使うと余計に難読度が上がる(藁
file('data.txt', 'w').write("".join([",".join([str(n) for n in row]) + "\n" for row in array]))
466 :
デフォルトの名無しさん :04/01/19 15:58
まるでオナニーショーだな もっと可読性の高いコード書けや Guidoパパも 海の向こうで泣いているぞ。・゚・(ノД`)・゚・。
よく ", ".join(map(lambda (x,y): "%s=%d" % (x,y), dic.iteritems())) とかやるけど、1行 80字を越えたら考え直すようにしている。 ところでみんな引用符にはシングルクォートを使うのが普通なの? オレはときどきカンマとシングルクォートがわけわかんなくなるので、 ダブルクォートを使うようにしてます。 たとえば以下のような場合: print 'result:',a,',',b,',',c
シングル派。理由は文字列定数内で「'」より「"」を多く使うから。 「"〜\"spam\"〜"」より「'〜"spam"〜'」のが楽。それだけ。
>>371 プログラム初心者。初めて挑んだのが、今やってるPython。
470 :
デフォルトの名無しさん :04/01/19 17:41
改行込みの文字列リテラルを埋め込む時とか """〜""" ってダブルクォーテーション3つ使うけど シングルクォーテーション3つでも桶なのね さっき試してみて始めて知った ここは良スレかも(´ー`)
>>381 漏れはダブルクォート派。
文字列に " を含むときは ' で、' を含むときは " で囲う。
一文字の文字列定数のときはシングルクォートを使うこともある。
あと、トリプルクォートはダブルクォート三つで書く。
ダブルクオートが入るリテラル (HTML コードなど) は三重シングルクオート, シングルクオートが入るリテラル (SQL 文など) は三重ダブルクオート, で使い分けてるなぁ.
>>267 の Solaris さんはあのあとどうなったのだろ?
進捗状況を聞きたいな。
474 :
デフォルトの名無しさん :04/01/20 03:34
当然シングルコート。 シフトキーなんて押してラン内。
俺はダッフルコート
運動不足はテニスコートで(ry
スコート凝視
静的メンバ変数はどうやって作りますか?
>>392 「静的メンバ変数」などという変態的なものはない。
クラス変数もしくはクラス属性ならば、チュートリアル読め。
480 :
デフォルトの名無しさん :04/01/20 14:28
MySQLdbモジュールを使ってクエリー結果を出力するPythonスクリプトを書いてますが、MySQLの対話モードで表示される検索に要した時間を取得するにはどうすればいいですか? mysql> SELECT * FROM foo; ... 100 rows in set (0.01 sec) ^^^^
>>392 javaのstaticを言っているのだろうが、そんなのはないです。
クラス属性とインスタンス属性をつかいこなしてください。
class spam:
data = 'giko' <<クラス属性
def __init__(self, value):
self.data = value <<インスタンス属性
print self.data, spam.data
>>393 しかしstaticmethodはあるわけだが、これは変態的ではないのかと小一時間(ry
mysql の C レベル API には,検索にかかった時間を取得する関数が ありません.おそらく MySQLdb にもないと思います. mysql フロントエンドが表示している検索所要時間は,フロントエンド 自体が計測しているんじゃないかなぁ.
>>387 すみません.おかげで解決しました.
連絡したら,1, 2 日後にはパーミッションが変わっていました.
ポリシーではないみたいです.ところが,pydoc のパーミッションが
--x で,依然使いづらい環境です.交渉はちょっと面倒なんでそのままです.
メールでは受け付けてなく,直接交渉に言っても分かる人が常駐していなくて,
紙に書いておかなければならないんです.
r... 言語は別の学生による要望でインストールされていますが
(しかも /usr/bousho/ruby という特等席),パーミッション周りも
ちゃんと出来ていて鬱です.
485 :
デフォルトの名無しさん :04/01/21 08:46
>>397 ありがとうございますた。あきらめます。
>>399 よく分からないが google から借用すれば? >検索にかかった時間を取得する関数
import time, MySQLdb ... db = MySQLdb.connect(...) cursor = db.cursor() ... clock_before = time.clock() cursor.execute("SELECT somequery") elapsed_for_query = time.clock() - clock_before print "検索にかかった時間: %4.2f 秒" %(elapsed_for_query) とやればいいのでは?
print u"\u305d\u3093\u306a\u5358\u7d14\u306a\u56de\u7b54\u3067\u826f\u304b\u3063\u305f\u3068\u3057\u305f\u3089\u79bf\u3057\u304f\u8131\u529b\u3059\u3093\u305e\u30e2\u30eb\u30a1"
>>394 MySQLの対話モードのプログラムってソースコードないの?
あるなら読めば検索に要した時間を取得する方法が分かると思われ。
490 :
デフォルトの名無しさん :04/01/21 15:29
>>401 なるほど。そういう手がありますね。
後で試してみます。
>>402 print "".join(map(lambda x:unichr(x+12395), [1,32,18]))
>>> def f(x): ... print x ... をlambdaをつかって表すにはどうすればいいのですか? なにも考えずにやると、 >>> lambda x:print x File "<stdin>", line 1 lambda x:print x ^ SyntaxError: invalid syntax といわれてしまうのですけど。 lambda の使い道をなにか勘違いしている?
>>406 その用途では def を lambda で代用することはできないにゅ。
def の本文には文 (statement) を書くことができるのに対して
lambda の本文には式 (expression) しか書くことができない、
というのが理由にゅ。print は式ではなく文にゅ。
ちなみに print 文は sys.stdout.write() という式で代用できるにゅ。
>>> import sys
>>> f = lambda x: sys.stdout.write(str(x) + "\n")
>>> f("foo")
foo
>>>
でもこんなのは sys.stdout のアブユースもいいところにゅ。
良い子は素直に def するにゅ。
"にゅ"を脳内で削らないと、おそろしく inputされないもんだなと思った。
>>405 print "".join(map(lambda x,f=lambda y,s=[3],m=[1,6,2,3,4,1,8,2,0,4]:m[(s.append((s.pop()+7)%10),s[0])[1]]:unichr(reduce(lambda x,y:x*10+y,map(f,range(5)))),range(2)))
というか Python で lambda を使うのは何か違うと Lisper な漏れ は思うのであった。高階関数+lambda とかじゃなくてジェネレータとか 使おうよ!という気になる。itertools とか見てると。
498 :
デフォルトの名無しさん :04/01/21 22:49
このスレではガイシュツですが Guidoパパは高階関数が嫌いみたいです
漏れは、高階関数を知ったときには感動すら覚えたものだが。 まぁexecutable pseudo codeから遠ざかるってのには同意。
Win2k上でpython使ってたらwin32conないぞーって言われたんだけど、 これってActivePythonのほうにしかついてないんですかね。
501 :
デフォルトの名無しさん :04/01/23 02:40
>>90 みたいなのも飽きたな。新しい煽りはないものか。
混じれ酢しといてやるから、もうちょっと勉強して出直しておいで。
> オブジェクト指向や可読性ではRubyに負けてるし
Pythonにもオブジェクト指向機能ありますが。RubyみたいにOOPマンセーじゃないだけ。
pure OO だと何か良い事あるんですか、プププ、ってのがPython流。
可読性で負けてるとも思わないね。Pythonの方が断然読みやすい。
> 拡張つってもたとえばTcl/TkやCPANのような
> 他言語のコミュニティに依存してんじゃないの?
してません。
これはちょっと新しいな。どっからこんな妄想拾ってきた?
> 速度ではlispやperlに負けてるし。何なの?
lispは型指定できるからね。勝負にならん。perl/rubyの方がPythonより速い、と主張
する(matzみたいな)人がいるけど、それは嘘。計ってから言えよ。伝統的フィルタ
処理(テキスト読み込み→正規表現→出力とか)だとPythonの方が遅いケースもあるけど、
大体の場合はPythonの方が速いかほぼ互角ぐらいだ。パフォーマンスの話はいろいろ
あるから、一概には言えないけどね。
503 :
デフォルトの名無しさん :04/01/25 12:04
(・∀・)ニヤニヤ
偉そうなこと書いてるくせに誤爆。失せろ。
ユルセ。どうせ両方見てんだろ?
間違いを指摘されても 反省しない奴は 使用言語にかかわりなく 逝った方がいい
反省してるって。ほら。だから許せ。判ったな?
>>420
呼ばれてるよ 野良犬(w
Python-ml 2713 みて思ったんだけど、みんなやさしくていいね。(●´―`●)
(●´―`●) はPythonらしくない書き方だと思います Pythonっぽく書くと例えば以下のようになります (@´ー`@)
pythonなら (:´ー`:) だろ、と言ってみる。
PythonのSyntax的にvalidな顔文字 [ ' _ ' ] 今市かな?
514 :
デフォルトの名無しさん :04/01/25 23:20
__(´ー`)__
515 :
デフォルトの名無しさん :04/01/25 23:46
>>322 moin って、[[日本語]]だめですよね。
517 :
デフォルトの名無しさん :04/01/26 15:46
だめですよ。
[[日本語]]って何?WikiNameに日本語使えるかという話ちゃうのん?
全角のアルファベットを半角のアルファベットに変換する方法を教えてください。 たとえば、「UNIX」から「UNIX」という文字列に変換したいです。
>>434 こんなプログラムを書いてみた。
標準入力に中身をぶち込むと、標準出力からはき出す。それだけ。
適当に追加したり改造したりして使ってくれ。
--- ここから ---
#! /usr/bin/env python
# coding: shift_jis
# ↑環境に合わせて書き換えること
import sys
# ↓環境に合わせて書き換えること
srcenc, termenc = 'shift_jis', 'shift_jis'
# ↓好きな変換マップを定義すること
conv_map = {
u'A': 'A',
u'B': 'B',
u'C': 'C',
u'@': '@',
}
for line in sys.stdin:
for char in unicode(line, srcenc):
if char in conv_map:
sys.stdout.write(conv_map[char].encode(termenc))
else:
sys.stdout.write(char.encode(termenc))
>>434 漏れも書いてみた。
# -*- coding: euc-jp -*-
import re
re_alphanum = re.compile(u"[0-9A-Za-z]")
def replace(match):
return chr(ord(match.group()) - ord(u"0") + ord("0"))
print re_alphanum.sub(replace, u"Python2003")
kconv.Zen2Han() を使うのはダメですか?
>>437 それでは「変換の仕方」の説明にならないよ。
…まあそれの「ソースを見ろ」という意図なんだろうけど。
複素数に対して複素数で%(余り)を求めた時の結果が、ワケわかりません。 PythonのVers.は2.2.1(SJIS enhanced)。WinのKaaeditで試してます。 こんなコードで試しています。 ーーーーーーーーーー import random x = complex(random.choice(range(10,99)),random.choice(range(10,99))) d=0 while not d: d = complex(random.choice(range(-9,10)),random.choice(range(-9,10))) print '-- '*10 print 'x =',x,', d =',d print 'x / d =',x / d print 'x % d =',x % d print '( x / d ) * d + x % d =',( x / d ) * d + x % d ーーーーーーーーーーー 結果はたとえばこんな感じです。 -- -- -- -- -- -- -- -- -- -- x = (47+26j) , d = (8+6j) x / d = (5.32-0.74j) x % d = (7-4j) ( x / d ) * d + x % d = (54+22j) もともと、数値をマイナスで割った時の余りってどうなるのだろうと調べてて、 複素数にまで手を出してしまいました。
>>439 結果が決まったものではないと思ってプログラミングすれば良いのでは?
結果を使わないようにするんです.
でも割り算の方は正しいですよ.
一般に,剰余についてはいくつか種類があり,仕様に書いてあります.
負のときはどうなるか,調べてから使いましょう.
ところで,
>>439 さんが期待した結果は何ですか?
即レスありがとうございます。
>>440 私の期待した(複素数 % 複素数)の結果は、
(整数 % 整数)の時は割った値よりも小さい正の整数だったように、
複素数の時でも割った値よりも小さい正の複素数だと思ってました。
具体的には余りの値を a+bj としたら a,b > 0 でかつ、abs(a+bj) < abs(d) です。
ところが、実際は全くそうではなく理由も分からず驚いてました。
(私の複素数の概念の理解がいまいちなのかも知れません)
また、私の期待した値を得ようとすると、一意には定まらない事が机上で分かりました。多分!
また(複素数 / 複素数)の結果をa+bjとすると、a,bはintではなくlongで返ってくる事も整数の時と違ってて驚きました。
ちなみに、(複素数 % 整数)とすると、実数部分だけ計算されて結果が返されますね。
ちなみにこれらの使い道は、、、今から考えます。ははは
528 :
デフォルトの名無しさん :04/01/29 18:40
ありがとうございます。参考にします。
>>442 実は、上で書いた文章にも少し間違いがったあったのですが、
例えばこんな事を試してみると
lst = [[10,-10],[7,-7]]
for i in lst[0]:
for j in lst[1]:
print i ,'=',i/ j ,'*',j,'+',i%j
結果は
10 = 1 * 7 + 3
10 = -2 * -7 + -4
-10 = -2 * 7 + 4
-10 = 1 * -7 + -3
と言うワケで、除数がマイナスの時は%余りもマイナスになるようですね。
と、あれから、この整数の割り算を複素数に拡張できないかなぁと考えてます。
なにか出来たら、またここで報告しますね。では
DBについて質問なんですが、 bsddbとcdbの速度を比較したページとかあるでしょうか? cdbは速いと聞いていたのでbsddbで使っていたプログラムを cdbを使うようにしたら、逆に1.5倍から2倍遅くなってしまったので。
>>446 ワラタ
「リンク集ページを見る」という習慣が無い人間て本当に居るんだね。
Python における剰余演算の意味付けは,Python Language Reference
http://python.org/doc/current/ref/binary.html に記述されています.(和訳はまだ訳了していません)
a, b が浮動小数点数:
a%b -> 剰余は b の符号と同じ
math.fmod(a, b) -> 剰余は a の符号と同じ
複素数の場合:
Python 2.2 まで -> a%b = a - b*math.floor((a/b).real)
Python 2.3 以降 -> 撤廃
です.
535 :
デフォルトの名無しさん :04/02/02 15:46
tsumwikiでぐぐってみ。
537 :
デフォルトの名無しさん :04/02/02 17:32
>>451 以前は公開してたよ
漏れ持ってるけどあげない(w
iしもと氏は優しいから「くれ」って言ったら、くれるんじゃないかな。
540 :
デフォルトの名無しさん :04/02/04 00:29
メーリングリストって存在価値あんのか?
うん。
windows で動かしたいのですが, バイナリをそのままコピーするだけで使えますか? Windows2000 以降,一般ユーザはインストーラを実行できなくなった為, お気軽スクリプティングが難しくなりました.
あ,
>>195-198 に同じような発言が...
未解決なのは難問だから?実は python の普及率は IE を越えているとか?
ええ? 警告はでたけど、ふつうにデスクトップにインストールできたよ。
逆に管理者権限を持てないマシンに 勝手にソフトインストールしたらダメだろ。
どの encoding が分からない日本語を受け取り (cgi), 自動で判別して欲しいのですが,Kconv が唯一の方法ですか? python2.2 です. 実は使い方が良く分からないのですが, 日本語処理の教科書みたいなソースがあればキボンヌ〜〜〜v
cgi なら CONTENT_TYPE から encoding とってこれないか?
>>461 小さな wiki を拾ってきて,それを改良して使おうとしているところなんです.
狂ったユーザーエージェントに wiki ファイルをめちゃくちゃにされたく
ないのです.
rOOy って .toeuc とか書くだけで何とかなったりするらしいんですが,
ちょっと抵抗が...
>>462 > 狂ったユーザーエージェントに wiki ファイルをめちゃくちゃにされたくないのです.
なら UA チェックするとかすればいいじゃん。文字コードの話と関係ない。
あと、文字コード推測なら pykf があるよ。
550 :
デフォルトの名無しさん :04/02/06 23:00
moin にreStructuredText を使えたでしょうか? 資料などをご存知の方、いらっしゃいましたら、教えて下さい。
>>445 使用方法は、キーに文字列のパターン、その値にキーのパターンに合う
文字列のリストを持たせるようにしています。
リストは、bsddbを使っていたときは、pickle.dumps してから格納していました。
それで、cdbの方も同様に pickle を使ってみたら、bsddbより遅くなってしまいました。
でもcdbだといちいちpickleしなくてもいいようなので、
その部分を変更したら、bsddbよりも多少速くなりました。
うーん、これでもやっぱり使い方がおかしいでしょうか?
>>456 \Python23 の下をコピーすればいいです。
CD-RやUSBフラッシュメモリにコピーすれば
持ち運べます。この場合拡張子とプログラム
の関連付けはなされないので、必要に応じて
エクスプローラで関連づけるか、または、
コマンドプロンプトで 「P:\Python23\python
myscript.py 」のように実行するなどします。
Win2K/XPでAdmin権限の無い場合にPython.orgの
windows版インストーラ(Python-2.3.3.exe)で
インストールするには、「Select Components」
の画面で「Advanced Options」ボタンを押して
「Non-Admin install」のラジオボタンをチェック
します。インストーラを使った場合は、拡張子と
プログラムの関連づけが設定されます。
(もしスクリプトの実行方法がよくわからなければ
「1から学ぶ」スレか、「PC初心者板」の適当な
スレッドでお願いします。)
>>467 すごい面白かった! TV版Monty PythonのDVD買おうかな〜。
556 :
デフォルトの名無しさん :04/02/08 14:48
>>469 ありがとうございます。
でも、普通のMoin ver.1.1 にreStructuredText を使っても駄目ですよね。
このページにあるSample はどういう環境(or 設定)になっているのでし
ょうか?
>>470 よくしらんけど、見た感じだと
moin_config.py で default_markup に 'rst' を設定じゃないの。
docutils も入れとく必要があるでしょう。
(ここは「ソフト板」じゃないので、ソフトの設定が
わかりませんではなく、できるだけプログラミングぽい
話題であるかのように見せかけてくだされ。)
466といい471といいずいぶん板・スレの使い分けに神経質だね。
559 :
デフォルトの名無しさん :04/02/08 21:25
>>471 ありがとうございました。
default_markup = 'rst' で、reStructuredTextが使えました。
markup としては、plain、python、wiki、rst が使えるようです。
ただし、rstではいくつかの書式は使えませんでした。その使え
ない書式によってWiki がエラーを起こすと、ローカルファイル
を修正しなければいけないようでした。
pyBlosxomのように、文書中にparserを指定できて、エラーを起
こすとplain で表示してくれればいいのにな、と思いました。
「ここは「ソフト板」じゃないので〜」
WebProg にはZopeしかなかったのでスレ違いかなと思いつつ、つ
い(^^;
申し訳ありませんでした。
UNIX USER で Python が紹介されているのはいいのだけど、インデントが全然 揃っていないと思うがどうよ? チラッと立ち読みしただけだし、Mac はもっていないから確認できないのだけど。
まさかテストしてない・・・なんてことはないよな、まさか。 「インデントにタブを使った & ライター側と編集側でタブ幅が違う」説を推してみる。
>>475 インデントは基本的に半角4なのだけど、ところどころ4.4.3(なぜ?)となってたり、4.4.2(why?)とか
コードの細部を見なくても、明らかに縦方向で揃ってなかった。
実際に立ち読みするのが手っ取り早いと思う。
あ、そうなのれすか。 それは・・・マジで原因不明。
564 :
デフォルトの名無しさん :04/02/09 22:14
つーかアレにょ★ Pythonではインデントが重要な意味を持つというのに☆それを理解せず☆ 注意も払っていないってことにょ★ 日本語では句読点が重要な意味を持つというのに☆ それを理解せず☆ 全部星マークに置き換えてるのと似たようなものにょ★ まったく怪しからん編集者にょ★
>>478 ☆マークより個人的には「にょ」が問題だとおもうにょ。
星マークって何で JIS の文字集合に入ってるのかな。しかも二色も!
☆よりもハートマークが欲しいにょろ。
♥
にょろだったら@つかうにょろ。
仝 -> ♥
初心者にlambdaとreduceのコンボを教えるのは(ry
早く哲郎とメーテルが現れて奴を始末(ry
本文長すぎ。短く要約してくれると助かる。
574 :
デフォルトの名無しさん :04/02/11 21:41
Python のプログラムって縦に長くなる傾向があるよね。 大したことない処理でも意外と行数が必要だったりする。 トリッキーな書き方で短くするのもどうかと思うし。 読みやすいコードを示しつつ長いと感じさせないように 説明を加えるのはなかなか難しい。
>>489 > Python のプログラムって縦に長くなる傾向があるよね。
具体的には?
インデント強制するから、 可読性犠牲にして詰めこんだ場合より 行数多いってことでしょ。
つまり縦型ヂスプレイ買え、と。
rubyやってると、endで無駄に長くなる時に pythonいいなーと思うけどなあ。
>>493 from ruby to python な変換スクリプトを紹介してください
初心者にlambdaとmapのコンボを教えるのは(ry
お前は罰として一週間 lambda 禁止だ!!
>>492 むかしむかし、Ken Tompson がそういうのを使ってたと聞いた覚えがあるようなないような・・・
boolって継承できないんだねー。それ、知らんかっとってんちんとんしゃん。
Françoisタソ:
http://mail.python.org/pipermail/python-dev/2004-February/042535.html > [...] and [I] am a bit surprised that `bool' refuses to be sub-classed.
(boolが下位クラスの定義を拒否することにややビクーリ)
Guidoパパ:
http://mail.python.org/pipermail/python-dev/2002-March/020822.html > I thought about this last night, and realized that you shouldn't be
> allowed to subclass bool at all! A subclass would only be useful
> when it has instances, but the mere existance of an instance of a
> subclass of bool would break the invariant that True and False are
> the only instances of bool! (An instance of a subclass of C is also
> an instance of C.) I think it's important not to provide a backdoor
> to create additional bool instances, so I think bool should not be
> subclassable.
(昨夜このことについて考えていて、bool の下位クラスを定義することは
まったくもって許されるべきではないとゆーことに気がついた。下位クラス
が役に立つのはインスタンスがあるときだけだが、bool の下位クラスのイ
ンスタンスが存在すると bool の不変性が壊れてしまう。つまり True と
False だけが bool のインスタンスである、という性質がダメになってしま
うんだ!(C の下位クラスのインスタンスは C のインスタンスでもある。)
bool インスタンスを追加するための裏口は用意しないことがじゅーよー。
つーことで、bool の下位クラスは定義可能であるべきではないと思われ。)
586 :
デフォルトの名無しさん :04/02/13 23:56
PythonのBlogであるPyblosxomのcommentsプラグインが動かず、 apache ログにエラーがでます。でも、エラーメッセージが少な く、自分には理解ができません。 CGIで、さらに多くのログを得ることはできるのでしょうか? ご面倒ですが、アドバイスをお願いします。 Traceback (most recent call last): File "/foo/pyblosxom.cgi", line 47, in ? p.run() File "/usr/lib/bar/pyblosxom.py", line 306, in run tools.run_callback("prepare", {"request": self._request}) File "/usr/lib/bar/tools.py", line 313, in run_callback output = mem(input) File "/usr/lib/bar/plugins/comments.py", line 281, in cb_prepare writeComment(config, data, cdict) File "/usr/lib/bar/plugins/comments.py", line 148, in writeComment cfile.close() UnboundLocalError: local variable 'cfile' referenced before assignment
>>500 contrib/plugins/comments/plugins/comments.py の
バグのようですね。
関数 writeCommentの中で、ファイルのオープン
cfile = open(cfn, "w")
に失敗するとそのようなエラーが出るのだと思います。
こんな感じで書くと、良いのではないでしょうか:
cfile = open(cfn, "w")
try:
…
cfile.write("</item>\n")
finally:
cfile.close()
* * *
バグはさておき、そもそもファイルのオープンに失敗する原因として
考えられるのは、不正なパス指定とか、ディレクトリのパーミッション
不正なので、このへんの設定もチェックする必要がありそうです。
588 :
デフォルトの名無しさん :04/02/14 01:09
>>501 ご指摘をうけて、open('/tmp/foo',"w") としてみると途中まで
書き込まれてから、エラー発生。writeの問題であることを確認し
てご指摘の「ディレクトリのパーミッション不正〜」、をチェッ
クしました。
まさにそのとおりでした。たいへん勉強になりました。
ありがとうございました。:)
機械伯爵たん、苦し紛れの弁明が続いているね。
仕方ないよ 機械らしいから(w
>>505 marz、なんか丸くなったなぁ・・・
昔py-ml-jpで(以下自粛
>>505 関わりたくないPython関係者の3人目に認定しますた。もぅぃゃ。
>>507 他の二人はだれさ?
一人は想像つくけど(w
>>508 sさんはワカッタけど、Sさんがワカラネ
598 :
デフォルトの名無しさん :04/02/15 23:22
euc-jp環境で、utf-8の文字をファイルに保存するコードを書きました。 f = open("/tmp/gomi2","w") a=unicode("日本語","euc_jp") f.write(a.encode('utf-8')) f.close() もっとよい書き方があると思うのですが、アドバイスをいただけな いでしょうか。
599 :
デフォルトの名無しさん :04/02/15 23:23
>もっとよい書き方があると思うのですが
って、何が気に入らないの?
それはともかく、やっぱムネオタンスレあったほうがよくね?
>>513
601 :
デフォルトの名無しさん :04/02/16 00:43
>>514 すごく気に入らないというわけではないのですが、下のような
見やすいコードを見つけたので、お願いしました。
datafile=open(filename, "w")
print >>datafile, form.getfirst("title")
print >>datafile, '#author %s' % user2Link(getUser())
(Pyblosxomの補助ツール、weblog-add.pyより)
# coding: euc_jp import codecs f = codecs.open('filename', 'w', 'utf-8') f.write(u"全ての**は神聖なり!") f.close()
603 :
デフォルトの名無しさん :04/02/16 11:26
>>516 codecs.openってのがあるんですね。これを使わせてもらいます。しかし、
まだunicode回り(?)でエラーがあります。
このコードはCGIであり、formの文字コードをutf-8にするために
<meta 略 charset=utf-8">を指定しています。
生成されているページはutf-8なので、CGIの問題ではなく、下の
コードにミスがあるとおもうのですが。
初心者の質問がつづいて申し訳ないですが、ご教授ください。
>>>f = codecs.open(filename,"w",'utf-8')
>>>w = unicode(form.getfirst("title"),"utf-8")
>>>f.write(a.encode('utf-8'))
UnicodeError: ASCII decoding error: ordinal not in range(128)
(ASCII decoding error は見たくない。。(^^;
>>517 f.write(w) でいけると思うよ。unicodeをいちいちencodeしなくても良い。
605 :
デフォルトの名無しさん :04/02/16 13:31
>>518 ありがとうございます。そのとおりでした!
pyblosxomのツールweblog-add.pyをunicode対応にできました。ご希望の
かたは知らせてくださいね。
606 :
デフォルトの名無しさん :04/02/16 14:09
>>519 日本語化、またはunicode対応になっていないスクリプトって多いです
よね。そういうスクリプトを毎回書き直すのもいいのですが、何かも
っとスマートな方法があればいいですね。
lispだとマクロ?
>>514 どうして板内のPythonスレを3つにしたがるかな・・・
from hoop import * のhoopはどういう意味なのですか? 教えてください。
>>522 hoop はモジュールの名前。
hoop.py とかCでかかれた拡張モジュールとか何かあるんじゃない?
なぜか入会できません ワラタ(w
あれてますな。
ええと、初心者への教育がどうこうと言っているその人こそが まず初心者だった、というオチに見えて仕方がないのですが・・・。
それ、全然オチてないし(w
for について、あんなフレームまがいのこと言いあっていたら、 初心者はもろに引いてしまいそうだ。・゚・(つД`)・゚・
>>463 pykf (゚д゚)ウマー
これで r... みたいに快適にできます w
やっとアク禁が解かれたぽ.
>>458 ,466
日本語環境用インストーラしか使ったことがないので
見落としていました.ありがとうございました.ウマウマですよv
でもレジストリは使ってますね.丸ごとコピーが完璧かな.
>>459 Windows には bourne shell も awk も sed も perl もないですから.
>>529 鈴木先生もコメントしたら、収集がつかなくなりそう。
何ヶ月か前の Ruby の箱モデルの議論を思い出した。
Mさんはいたって真摯に受け答えしていると思うけど キレるとしたら機械タンの方だろ
機械タソの言いたいことがイマイチよく分からんのだが、要するに 「(x)rangeは分かりにくいから初心者に教えるのは後回しにしよう」ってこと? だったら漏れ的には+0。「好きにすれば?」って感じ。 漏れもずいぶん長い間 list comprehension を理解できずに放置してた。 もし漏れが入門書めいたものを書くとしたら list comprehension は説明しないか 一番最後に付け足す程度に留めるかのどちらかだ。
自分は初心者だけれども、初心者向けの文書で使ってほしくない 書きかたは、 ・効率とか言うな! そんなんビギナーに関係ないだろ、 しかもインタープリタで。わかりやすいかどうかが、すべてだ。 ・C では、とか perl ではとか説明するのはやめてほしい。 知らない初心者は混乱するだろ。知っている人間には便利なのは わかるけど。 ・言語の詳細についていちいち「ちなみに」とか書かなくてもけっこう。 詳しく知りたくなったら自分でリファレンス調べるだろう。 for x in range(10): これって分りにくい? 自分がはじめてチュートリアル見たときには、 「そういうものなんだ」と思っただけ。
>>535 おはよう&全面的に胴衣。
> これって分りにくい?
漏れ的には分かりにくくない&漏れも「そういうもんなんだ」とオモタ。
コレに似てるんだよな。 for i in `seq 10`; do
確かに「10回やる」というだけの例題に for x in range(10): hoge() みたいなの書かれると「その x は何?」とか聞きたくなるけどね。 でもまあそのために新たに loop 10: hoge() とかあるいは Ruby の times みたいなのを追加するよりかは今のままの方がいいとは思う。
>>539 例えば、Java の
for(int i=0; i<=10; i++){
hoge();
}
に対して、「その i は何?」という質問が成立すると思いますが?
なにか Python のものと違いがありますか?
明示的なカウンタ無しの単純繰り返しがある言語の方が珍しいのね。 ていうかRuby以外に知らないっす。
>>540 今見返したら i<=10 なんてやってるね。
なんでこんな風に書いちゃったんだろ?
この部分はスルーしてね。
>>540 for(int i=0; i<=10; i++){
の場合だと「i をインクリメントしながら10まで数えている」という
内部事情までそこに表記されているので「その i は何」という
質問にそのコード自体が答えている。
でも
for x in range(10):
の場合はシークエンスの要素を x にわざわざ代入する意味が
分からない。
別に数列でなくて
for dummy in [None]*10:
でも同じなわけで、range(10) が生成するリストの中に数列が入っている必要は無いですから。
> for(int i=0; i<=10; i++){ 所詮、whileを見やすくしたようにしか見えん
for x in range(10): の x が不要な場合は意味不明という点は、まあ同意。 しかし、カウンタ x の値がコーディングの過程で後から必要になることって 結構ある気がする。デバッグのときに何回目のループか知りたくなることがあるし、 実質的な処理のために必要であることが後から分かることもある。 例えばC言語でもブロック内が1ステートメントなら { ... } は不要なワケだけど、 後でステートメントが増えるかも知れないから敢えて括弧付きにしたりする。 それと同じ。 多少冗長な方が融通が利いて良いと思う。 カウンタ無しのループ構文が導入されても俺はあんまり使わないかも知れない。
あ、しまった。語尾を「にょ」に変えるのを忘れてた。
>> 538 wxGadfly は wxPython 2.0 のころに書かれてますね.パッケージ構成や メソッド名,引数の扱い方が今の wxPython 2.4 の設計と違うので, そのままでは動かないようです.
Pythonちゅことで「にょろ」はどうですにょろ?
>>548 そうでしたか wxPython は随分と仕様が変わってきているんですね
wxGadfly は data 操作と visual な部分がごっちゃっぽいので
理解しづらく感じるんですが
あんなもんなんでしょうか?
取りあえず新規作成とするとリストになにやら出る用にまではなりましたが、
なんか始めから作ったほうが早そうな…
作者さんはアップグレードするきないのかなぁ
た す け て く れ (喀血
なんだかよく分からないが 盛り上がっていることだけは確かなようだ
機械の身体を貰うとああなっちゃうのか…
正直、ループの話はおなかいっぱいです…。
個人的な意見ですが、初心者を引かせる状況を作ったという点では、 機械タソもM氏もたいして変わりないな。言ってる事は両者とも違うけど。 鈴木先生がもっと絡んでたら、状況はさらにひどかっただろうねぇ。 python使い(といっても一部の目立つ人たち)ってのは、 なんであんなにくどいんだ?
File "<stdin>", line 2
>>556 ^
SyntaxError: 文法的に間違っていると思われ
>>>
ワリコマレタYO!ヽ(`Д´)ノウワァァン
,,,これだからにょろ使いは,,,
>> 558 初心者専用MLじゃないんだから話題はべつにかまわんと思うけど。 機械タソのお花畑があるんだし。むしろM氏は機械タソと遊んでる暇があったら 和訳しる。
みんななかよくするにょろ
2chlinux.dtdns.netの中の人はネ申
>>567 情報ありがとうございます。
zope に gadfly が付属してくるらしいので
こういった機能を持っているかな?と思って調べたのですが、
残念ながらないんですね。いろんなエンジンを使うから仕方ないか。
658 :
デフォルトの名無しさん :04/02/20 20:43
うわ、file()なんて知らなかった世・・・ file = open(...) ってやること多かったけど改め名阿寒のかい。 ほんでさ、 for line in file(...): なんつーのは普通に使われるわけ?
>>572 厳密に言うと close() しないとまずいので書き捨てスクリプト以外ではお勧めしない。
リストの内包表記について質問があります。 def foo(func, list): for item in list: result = func(item) if result: return result return False みたいな関数を同じ計算量で内包表記で書くことはできますか? def foo(func, list): return [func(item) for item in list if func(item)] というのを考えたのですが、 1. list の要素すべてにアクセスしてしまう 2. func を 2 回呼びだしてしまう という点で元の関数と違ってしまいます。
>>574 こゆこと?
[func(item) for item in list][-1] or False
あ、いかん。インデントを推測し間違えた。
>>575 は忘れて下さい。
>>574 の上と下って同じ?
上はシーケンスの中で最初に見つかったTlueなオブジェクト
下はTlueなオブジェクトのシーケンス
な気がするけど。
上のline5はyield resultならほぼ同じかもしれんが
>1. list の要素すべてにアクセスしてしまう
と噛み合わんね。
基本的にリストコンプリヘンションは
「Listを生成する表現の一つ」なので
帰ってくるのは常にシーケンス。
>>574 > def foo(func, list):
> for item in list:
> result = func(item)
> if result:
> return result
> return False
>
> みたいな関数を同じ計算量で内包表記で書くことはできますか?
これに list comprehension を使うのは間違いでは?
itertools を使うのが最適だと思う。
def foo(func, list):
import itertools
for item in itertools.ifilter(func, list):
return item
return False
あと、好みの問題ですが、list は built-in 関数の名前なので、別の名前にした方が
いいと思います。
Tlue
元のコードを filter で書き換えただけですね ^^;
質問の答えになっていないか、、、
あと、他の人も指摘していますが、
>>574 だと何をやりたいのかはっきりしません。
関数 foo と list comprehension のコードで食い違いがあるので。
Tlueで悪いかちくしょー
珍しいタイポだねw
ええ、素で間違えましたとも。
言われるまで気付きませんでしたとも。
Traceback (most recent call last):
File "
>>577 ", line 2, in ?
Tlue
NameError: name 'Tlue' is not defined
これから全部/usr/bin/env python の次に
Tlue = Trueって書いてやるからな!
Sタンの > このとき回数カウンタとかそういった > 機械的なからくりが実装内部で動いているはずですが ^^^^^^^^^^^^^^^^^ いろんな意味でワロタ。Sタン狙ってやってるの?
>>577 ,578
ごめん、質問は 2 点あってそれを一つのコードで聞いてしまったのが間違い
でした。
1. リストの内包表記では、リストの途中で処理を打ち切ることができるかど
うか(break できるかどうか)
=> 必ずリストの要素すべてにアクセスするので、できない
2. リストの内包表記で下のようなことがしたい場合、func を 2 回呼びださ
ないためにどうすればよいか。
def foo(func, lst):
'''これをしたいけど, func を 2 回呼びだすのがまずい.'''
return [func(item) for item in lst if func(item)]
=> itertools を使え
ということですか?
Tlue!
そういえば、むかし flag のことを frag と書いてたなぁ。
>>587 ブラクラ注意
フォトンってあれか、20年ぐらい前にあったナムコのゲームか?
>>585 1. 途中で止めたい
リストの要素が10のとき止まる(10は新しいリストに含まれない)例:
>>> list(itertools.takewhile(lambda x: x!=10, range(20)))
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
2. 問題がよくわからんがこれはどう?
def foo(func, lst):
return [b for b in [func(a) for a in lst] if b]
>>> foo((lambda x: x%2==0 and x*2 or 0), range(20))
[4, 8, 12, 16, 20, 24, 28, 32, 36]
1.と2.を組み合わせて:
>>> foo((lambda x: x%2==0 and x*2 or 0),
itertools.takewhile(lambda x: x!=10, range(20)))
[4, 8, 12, 16]
なお、リスト内包がすこし難しく感じるときは、forループでリストを
作ってもよいと思います。
>>587 パイソンプログラマーならフォントすきだよな?
かと思ったよ。さすがコードの見た目に気を使う Python ユーザだなと。
>>589 1 の答えになっていないと思われ。
「リストの内包表記では,,,」なのだから。
Python使ってる人の日記とかのへのリンク集ってない? それにしても、新山さんの日記は面白いね。
ぱいそにあんてな?
>>592 胴衣。腹八分目くらいで思索に疲れてメモってる/優雅さ/がにじみ出ててイイ。
Python用のはてなアンテナを作ろうかな。 プライベートモードで。
TimおじさんてTim Petersのこと?どこで会ったんだろ?
Tim Petersって実在の人なの?
たはらさんもblog始めたのか。ネタじゃなしに、Pythonアンテナの需要は結構ある?
>>599 そうなの? URLおしえて
ていうか
600ゲトズサー
>>602 18時間後だからそんなことはないと思うが。
いかん、「にょろ」なら許せるかもと思い始めてきた。
languages = {'C': u'死', 'Java': u'邪', 'C++': u'サ', 'Ruby': u'首', 'Python': u'〜', 'Lisp': u'λ', 'perl': '駝', } Rubyは分裂した!Rubyは噛み付いた!Rubyは噛み付いた! [more] +====+ a) 呪われたタブ置換エディタ |〜首首邪| b) 「せんぷりに」と書かれた巻物 |首首死首λλλ・・・ c) 祝福されたTimおじさんの石像 |首首首サ| +==邪=+ ・ 駝 ・・・・・
>>597 「どこで」
PyCon 2003に参加されたようですよ。
www.python.org/~guido/pycon03/
>>598 「実在の人」
c.l.pyへ信じられないぐらい精力的に投稿するので、
実は barryがelispで書いたAI (timbot)で…
などという説があったね。
BeOpen/PythonLabsに移ったとき (2000年?) に
メンバーとしてTim Peters氏の写真が公表された後は、
そうしたジョークはフェードアウトしていったように思う。
Python紹介のビデオにも出演していますよ。
www.ibiblio.org/obp/pyBiblio/pythonvideo.php
lowlifeのBlog数伸びない。 それと、lowlifeの中の人のファッションセンスがすごい。
>>429 moinは、[[日本語]] は書けないけど ["日本語"] ならOK。
ファイル名を独自のエスケープ( _のあとに16進2文字 )で作るので
ちょっとうっとうしいかもしらんけど。
急に実物のロボットを動かしてみたくなったのですが、 Pythonで操れるものってありますか?
699 :
デフォルトの名無しさん :04/02/25 17:04
>>601 ,608あたり
逆効果だったみたいよ(´・ω・`)
>>612 ,614
レスサンクス。
やはりロボットは勢いだけで作れるようなものでは
なさそうですね。(´・ω・`)
702 :
デフォルトの名無しさん :04/02/27 12:09
いい書籍ないもんかね?オライリーは評判良くないみたいだし
python関連の洋書ってどうやって買ってますか? LAOXのBOOK館が有った頃はあそこで買ってたけど今は。。。
あまぞん.eBookで買えるのもあります.
件のrange-forループと、これまた件のタプルをキーとした辞書を使った しょーも無いスクリプト思いついちゃったんで晒します。あんまり丸くないです。 mat={} for y in range(-20,21): for x in range(-20,21): if x*x + y*y <= 400:mat[(x,y)]="●" for y in range(-20,21): for x in range(-20,21): print mat.get((x,y),"○"), print ""
> 配列を逆からたどるにはどうするのが一番てっとり早いのだろう。 2.3だと x[::-1]と書けるけどこれではだめ?
なんかML連動スレになってるな。
時々日記にも連動するw
>>622 肌理細かくしてみました。これはdictを使わなかった。
from Tkinter import Tk, Canvas
root = Tk()
root.bind_all('<Escape>', lambda ev:root.destroy())
can = Canvas(root, width=600, height=400, bg='white')
can.pack(expand=True, fill='both')
for x,y in [(x,y) for x in range(600) for y in range(400)]:
if (x-300)**2 + (y-200)**2 <= 16000:
can.create_rectangle(x, y, x, y, outline='red')
root.mainloop()
713 :
デフォルトの名無しさん :04/03/01 04:49
↑ここまで Python 2.3 ↓ここから Python 1.0.1
ハァ?(゚Д゚)
ML連動でsparceなdict from Tkinter import Tk, Canvas xRange = 1024 yRange = 768 iteration = yRange/5 yColors = ["red", "yellow", "green", "blue"] dots = {} for x in range(xRange): y = 0.4 for i in range(iteration): dots[(int(x), int(y*yRange))] = yColors[ i % len(yColors) ] y = y*(1-y)*(x+0.01)/xRange*4 continue print len(dots) root = Tk() root.bind_all('<Escape>', lambda ev:root.destroy()) can = Canvas(root, width=xRange, height=yRange, bg='black') can.pack(expand=True, fill='both') for (x, y), color in dots.items(): can.create_rectangle(x, y, x, y, outline=color) root.mainloop()
うわ、sparseだし………
$ python -v sparce.py Python 1.0.1 (Mar 1 2004) Copyright 1991-1994 Stichting Mathematisch Centrum, Amsterdam File "sparce.py", line 16 can = Canvas(root, width=xRange, height=yRange, bg='black') ^ SyntaxError: invalid syntax (´;ω;`)グスン
>>631 全角スペースでインデントしてるんで、そのせいかも。
$ gzip -c < logistic.py | uuencode - > logistic.py.gzip.uuencode
したんで、
$ uudecode < logistic.py.gzip.uuencode | gzip -dc
とかしてください。
begin 664 -
M'XL(`+GD0D```YV3W6Z;,!3'[_T49T$3-B6$9%DW164WU5Y@RET450XXP8JQ
MD7$:K&GOOF.@:55IFC8NX/CX?[Y^V-$'6%PZNSA(O6B]JXU>92M"CM8TL#U+
M[80%V;3&.ERF\,CU,^\(Z7]P?1)0P#)?K8E_67VY_TJ(Q!CNI-'H&'<6GXE_
M-,K8#EV[F175+(69%TJ9:[!.5@@=C(.ZB-F>D,JX(/WYBQR-A1ZD!AL2T;$N
MVQ#`QZ,DS]:#'73R57?K89*&)R3=41R)]BR%\/7)V!]C^]#KV.(.\WP$)32=
M'`SVMQRAI$_H<NY90ON[/,N7;#$VE:QOJM)H)_5%$-):K#,D"]49L<8X3+$]
MT]'.D'OUQ)6B\</WKN2M^!:GH'ASJ#B(Y\V@J43GK/&4,5+R0'7\"S1LIG"5
ME:N+L8<4:B%/M2O\M#R<BOB@>'F.A]BL19.*ON6Z*K;V@HJC5`HUQM4H"11I
MGX)'0&48/A`-G6<(M.GH1#-D*JW@3CQ943HLI<00EL+X-A>GI!;%D&.:M.%2
M*V-:G)Q$;SE$_P,B^B.)^SR_85@'.S"XUCA`/(;]#4(TG+G4A]EW.)9G\.X4
M8HG1YU]]6(KM-R0*?.01*<X_H2=)5G`'U,]7T^(!KPR&YY/RGVC&>''B%UYO
+</X&N77@`L0#````
`
end
>>632 Python-ml-jp 2815
とか。
こっちのがいいかもしんねっす。 #! /usr/bin/python2.2 from Tkinter import Tk, Canvas xRange = 1024 yRange = 768 iteration = yRange/5 yColors = ["red", "yellow", "green", "blue"] dots = {} for x in range(xRange): y = 0.4 for i in range(iteration): y = y*(1-y)*(x+0.01)/xRange*4 continue for i in range(iteration): dots[(int(x), int(y*yRange))] = yColors[ i % len(yColors) ] y = y*(1-y)*(x+0.01)/xRange*4 continue root = Tk() root.bind_all('<Escape>', lambda ev:root.destroy()) can = Canvas(root, width=xRange, height=yRange, bg='black') can.pack(expand=True, fill='both') for (x, y), color in dots.items(): can.create_rectangle(x, y, x, y, outline=color) root.mainloop()
わ。つぶれた。さっきからすまんです。 #! /usr/bin/python2.2 from Tkinter import Tk, Canvas xRange = 1024 yRange = 768 iteration = yRange/5 yColors = ["red", "yellow", "green", "blue"] dots = {} for x in range(xRange): y = 0.4 for i in range(iteration): y = y*(1-y)*(x+0.01)/xRange*4 continue for i in range(iteration): dots[(int(x), int(y*yRange))] = yColors[ i % len(yColors) ] y = y*(1-y)*(x+0.01)/xRange*4 continue root = Tk() root.bind_all('<Escape>', lambda ev:root.destroy()) can = Canvas(root, width=xRange, height=yRange, bg='black') can.pack(expand=True, fill='both') for (x, y), color in dots.items(): can.create_rectangle(x, y, x, y, outline=color) root.mainloop()
>>633 あああすんまそんぶんぽうえらーになるのはきーわーどひきすうにたいおうしていないばーじょんだからですごめんなさいごめんなさいもうしませ(NO CARRIER
# -*- coding: shift_jis -*- import marshal, binascii fleet = marshal.loads(binascii.a2b_base64( "e3MGAAAAj4SXbYrNWwMAAAAoAgAAAGkHAAAAaQUAAAAoAgAAAGkHAAAAaQYAAAAoAgAAAG"\ "kHAAAAaQcAAABzBgAAAIpqlJqSZVsBAAAAKAIAAABpCQAAAGkIAAAAcwYAAACL7JKAis1b"\ "AgAAACgCAAAAaQMAAABpBQAAACgCAAAAaQMAAABpBgAAAHMEAAAAkO2KzVsEAAAAKAIAAA"\ "BpBAAAAGkDAAAAKAIAAABpBQAAAGkDAAAAKAIAAABpBgAAAGkDAAAAKAIAAABpBwAAAGkD"\ "AAAAcwQAAACL85XqWwUAAAAoAgAAAGkCAAAAaQEAAAAoAgAAAGkCAAAAaQIAAAAoAgAAAG"\ "kCAAAAaQMAAAAoAgAAAGkCAAAAaQQAAAAoAgAAAGkCAAAAaQUAAAAw")) battlefield = {} for ship, coords in fleet.items(): for coord in coords: battlefield[coord] = ship while 1: instr = raw_input("どこを攻撃しますか? [x, y] = > ") try: x, y = map(int, instr.strip().split(',')) except: print '「3, 7」のように入力しる!'; continue if not battlefield.has_key((x, y)): print 'なにも起きまそん、艦長!'; continue ship = battlefield[(x, y)] if ship == '核爆弾': print 'あぼーん、核爆弾を撃ってしまいますた (あんたの負け)'; break print "%s に命中しますた、艦長!" %(ship) fleet[ship].remove((x, y)); del battlefield[(x, y)] if len(fleet[ship]) == 0: print "%s を轟沈しますた、艦長!" %(ship); del fleet[ship] if len(fleet) == 1: print "艦長!全ての敵を殲滅しますた!"; break
sparse の例ということで。 fleet に SJIS 入れちゃったんで、SJIS 限定でおながいします。
ja_JP.eucJP な環境の艦長は次の一行を追加しよう。ファイルエンコーディングは sjis のままで桶。 import codecs, sys; sys.stdout = codecs.EncodedFile(sys.stdout, 'sjis', 'euc-jp')
#! /usr/bin/env python # coding: base64 なスクリプトが書けるか挑戦したけどできなかった・・・(←馬鹿 # 原理的にできないのかおいらができなかっただけなのかも不明
原理的に無理だと思うにょ。 エンコードした後の字面に coding: *** が見えてないと エンコーディング名を探してデコードすることができないにょ。
>>641 そう思って、その二行だけASCIIにして、残りをBASE64にしてcatで繋げたり
してみたんだけど・・・無理ですた。こんなかんじで。
# coding: base64
aW1wb3J0IHN5cwoKcHJpbnQgc3lzLmFyZ3YK
でもNameErrorにならずに SyntaxError: 'bad argument type for builtiin
operation' になるので、実はもう一歩でできるのかも、と思ったり。
# coding: rot13 cevag h"ahqtr ahqtr?"
>>643 rot13 だとできるのね・・・む〜ん
>>640 1. default encoding でスクリプトの最初の行を読む→ # coding: base64 発見
2. (最初の2行を含む)ファイル全体を base64 でデコード
→ "# coding: base64" は "r\x87b\x9e\x06\xda\xb1\xee\xb8" になる
3. 最初の行を実行できずクラッシュ
ということだと思います. rot13 は '#' を '#' にデコードするから,
"# coding: rot13" は "# pbqvat: ebg13" に変換され,ただのコメント
として扱われるんじゃないかなぁ.
その可能性もありそうですが・・・エラーメッセージは、 File "spam.py", line 2 SyntaxError: 'bad argument type for built-in operation' なんですよね。二行目に問題があるらしいです。謎。
640 のコードの最初の行は #!/usr/bin/env... じゃないのかな? 削ったらどうなるんだろう.
すんませんややこしくて。
>>642 の二行スクリプトの結果が
>>646 です。
ちなみに中身は、
import sys
print sys.argv
だけです。
原因を追求してみたにょ。
base64コデックのdecode()がunicodeオブジェクトではなく
stringオブジェクトを返すのが原因だったにょ。
漏れの考えではこれはバク(仕様違反)にょ。
次のように修正すると動くようになるにょ。
× output = base64.decodestring(input)
○ output = unicode(base64.decodestring(input), "iso-8859-1")
>>645 調べてみて分かったんだけど、デコードの対象になるのは
エンコーディグ指定の行よりも後の行だけみたいだにょ。
よって、
# coding: base64
aW1wb3J0IHN5cwoKcHJpbnQgc3lzLmFyZ3YK
はOKだけど、
# coding: base64
# by 640
aW1wb3J0IHN5cwoKcHJpbnQgc3lzLmFyZ3YK
はNGにょ。
736 :
デフォルトの名無しさん :04/03/03 06:20
py2exeを使ってexeファイルと一緒にlibrary.zipもできます。 exeファイルを実行すると正しく動作します。そこで更に このlibrary.zipをexeファイルにまとめてしまいたいのですが 方法をご存知の方居られませんか? どうぞ宜しくお願いします。 ご参考 setup.py ----------------- # setup.py from distutils.core import setup import py2exe setup(windows=["hoge.py"]) ---------------------------
737 :
デフォルトの名無しさん :04/03/03 16:18
現在、Pythonを組み込んだアプリケーションを作っています。 このアプリケーションを配布する際に、Pythonの必要な部分だけを添付していも良いのでしょうか? 具体的には、python??.dll と、Lib 以下の必要なスクリプトのみになりそうなのですが、 こういった配布の仕方をしてもかまわないですか?
>>649 どうもありがとうございます。実は昨晩調べて同じ結論にたどり着きました。
# 思わず徹夜しちまったぃ・・・ねむ・・・
Python VM レベルでの文字コードの変換を
Python Script レベルで記述できるような仕組みが、
なかなかトリッキーな作りになっていて勉強になりますた。
岩田氏がbzeroというblogツールをutf-8化してほしいと言っていたが これpycだけでソースなし?無理ぽ。 とりあえずデコンパイラ見付けたのでギコギコしてみる。 んーうまくpyに戻せるのもあるがそうでないのも多い
つーか作者にソース呉って頼んだ方がいいと思われ。 ライセンス見てないけどデコンパイルして改造ってのはマズかろう。 改良してもパッチ投げられないし。
>>657 Thanks! おもしろそう。
・・・なぬ、Winで動かないだとぅ! 完。
>>650 library.zip は 0.5.0 になってからの仕様で,ここには pure Python の
モジュールが入ります.旧バージョンの py2exe では,実行ファイル本体に
スクリプトをまとめていたと思います.旧バージョンにしても, python*.dll
や zlib.pyd を exe に埋められないのだから,スクリプトだけを埋められた
ところでたいした違いはないのでは? 去年の今ごろに,作者の Thomas
Heller が「ディレクトリごと zip して配ればいいはずから,あまり単一
ファイル化することに興味はありません.どうしても単一ファイルにしたい
なら Gordon McMillan の Installer を使ったらどうですか」という
内容の発言をどこかでしていました.(残念ながら,Installer のページは
なくなっています)
746 :
デフォルトの名無しさん :04/03/04 13:42
>>659 どうもです。
確かに参考とするファイルやビルド方法も古い記述の物でしたの
旧バージョンじゃないとダメなのかなーとうっすら思っていましたが、
ありがとうございます。
出来れば配布するファイルは少なく、大きさが小さい物を良しと考えて
いますので。。。exeならupxで圧縮できますし。。
Gordon McMillan を調べてみます。最後にもう一度、ありがとうございました。
>>649 > base64コデックのdecode()がunicodeオブジェクトではなく
> stringオブジェクトを返すのが原因だったにょ。
> 漏れの考えではこれはバク(仕様違反)にょ。
Base64は、任意のオクテット列を、8bit目を通さない通路にも
流せるように変形するためのエンコーディングなんだから、
> 次のように修正すると動くようになるにょ。
>
> × output = base64.decodestring(input)
> ○ output = unicode(base64.decodestring(input), "iso-8859-1")
こんなことしたら本来の役目が果たせないんじゃないかね。
それにデコード後 iso-8859-1 決め打ちもちょっといただけないし。
まぁ「ソースコードの」エンコーディングに使うなんて考えてないコーデック
なわけだし、素直にあきらめるが吉だと思います。ちょっと残念だけど。
>>661 まあネタなのは重々承知の上で最後に二点だけ。
まず、「base64モジュール」と「base64コデック」の二つがあるというのが一点。
前者はbase64本来のエンコード/デコードを担当するモジュールで普通はこれを使う。
後者はコデックだからstring型とunicode型の相互変換を担当するのが「本来の目的」のはず。
(その目的を果たしてないからバグだと書いた)
デコード結果をiso-8859-1にしたのはunicode型でバイト列を表す手っ取り早い方法だったから。
(というか他にいい方法を思いつかない)
もう一点、base64は入力も出力もバイト列であることが期待される変換方式だから
そもそもコデックを使って変換を実現すること自体がおかしいと言えばおかしい。
類似のuuコデックなどについても同様。ぶっちゃけ、base64コデックの存在自体が
ネタみたいなもんだ。たぶん作者のMALも面白半分で作ったのだと思われ。
また「にょ」に直すの忘れた..._| ̄|○
>>664 うぃ。たいへんよく解りますたにょ。
>>665 忘れるくらいなら、わざわざやらなきゃいいのにw
うーん,もともとの目的は知らないけど, codecs オブジェクトが Unicode への 暗黙の変換を行わなければならないという仕様は変更されているようです. base64, uu, rot13, zip は, string to string の変換ができるように 変更されたのに伴って,MAL がサンプルに作ったパッチらしいです. そういう意味ではネタ codec なのかもね.
> codecs オブジェクトが Unicode への > 暗黙の変換を行わなければならないという仕様は変更されているようです. ソースきぼんぬ。
>>626 総天然色
from Tkinter import Tk, Canvas
import colorsys
def gen(coords):
for x,y in coords:
if (300-x)**2 + (200-y)**2 <= 16000:
r,g,b = [i*256 for i in colorsys.hls_to_rgb(y/200.,(x-160)/300., .9)]
yield x,y,r,g,b
root = Tk()
root.bind_all('<Escape>', lambda ev:root.destroy())
can = Canvas(root, width=600, height=400, bg='black')
can.pack(expand=True, fill='both')
for x,y,r,g,b in gen([(x,y) for x in range(600) for y in range(400)]):
can.create_rectangle(x, y, x, y, outline=('#%02x%02x%02x'%(r,g,b)))
root.mainloop()
>>669-670 ソースありがと。
unicode-proposal.txt には「.decode() must return an Unicode object」と
ハッキリ書いてあって、漏れの理解はこれがすべてだった。しかし、
2.2で加えられた string 型オブジェクトの .encode() メソッドと
.decode() メソッドのために混乱が生じているみたいだね。
2.2では次のようなことができるようになって嬉しいというわけだ。
>>> "test".encode("base64")
'dGVzdA==\n'
>>> "test".encode("base64").decode("base64")
'test'
それじゃあってことで改めてbase64コデックを Unicode コデックとして
使ってみたらおかしなことになった。
>>> unicode("dGVzdA==\n", "base64")
TypeError: decoder did not return an unicode object (type=str)
>>> u"\u6f22\u5b57".encode("base64")
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
つまり、base64コデックは Unicode コデックと同じ方法で実装されているけれど
実は Unicode コデック*ではない*(あるいは
http://mail.python.org/pipermail/python-dev/2001-May/014748.html のMALの言葉を借りるなら「non-Unicode related codecs」)というわけだ。驚いたw
引用したメッセージの中で /F の「your "decode" design is broken,
instead of just buggy...」という言葉が引用されてるけど全く同感だ。
MAL なんていう略仕方は始めてみた。
GvRってのもあるよ。
>>673 いやメールアドレスが mal@... てなってるしさ。
>>616 現状の docutils でもこんなことならできるようです.
here is an |image|__
.. |image| image:: hodge.png
.. __: hodge.html
<div class="document">
<p>here is an <a class="reference" href="hodge.html"><img alt="image" src="hodge.png" /></a></p>
</div>
>>675 メアドもそうなんだけど、例えば Python-Dev Summary では
MAL said ... とか MAL's proposal とか書かれたりする。GvR についても同様。
もっとも、漏れらが私信でこんな書き方したら「なにタメぐちきぃとんねん」って
怒られるかも知れない(w
コーデックの使い方が良くわかりません。 ユニコードをeuc-jpに変換して出力する場合、 s.encode('euc-jp') というのはわかりますが、 ソースコードがeuc-jpで、CGIなどを書いていて、フォームから入力されるデータの 文字コードが何かわからない場合、unicode(s).encode('euc-jp')とすれば nkf -eみたいに自動的にeuc-jpに変換されるのですか? unicode(s, 'euc-jp')とするのは、 あらかじめHTMLにcharset=euc-jpとしておくのが前提でしょうか?
>>679 RTFM って言おうと思ったけど,和訳マニュアルの大事なところがごっそり抜けて
ました.直しときます.unicode( [object[, encoding [, errors]]])
は,encoding が指定されていれば encoding を使って object をデコード
して返します.指定されていなければ,object の __unicode__() メソッドを
呼び出そうとします, __unicode__() が定義されていなければ, Unicode
オブジェクトを返す str(object) のような働きをします.つまり文字コード
推定は行いません.
一方, decode( [encoding[, errors]]) は string を encoding で指定
された文字コードでデコードしようとします. encoding を省略すると,
デフォルトエンコーディングを使うだけです.
結論として, unicode にも decode にも,対象文字列の文字コードごとに
適応的な変換をする仕様はありません.
文字コードに柔軟なデコードを実現したければ,pykf など(といっても他に
知らないけど)を使うか,「日本語文字列全般」からのデコードを実現する,
不可逆で tricky な codec を作るか,ぐらいだと思います.
0から99までの整数で、重複せずに4つ選ぶとしたら、どうするのが一番コードが 単純になりますか? 一端リストを作成してシャッフルして、4回pop()するのが一つの手だと思うのですが、 ほかにどんな方法がありますかね?
>>679 なんちゃって自動判別...
Python で CGI を書く時はこんなので胡麻化してる。
def japaneseToUnicode(s, encodingList=['utf-8', 'japanese.euc-jp', 'japanese.shift_jis', 'japanese.iso-2022-jp']):
'''Convert Japanese string to Unicode.'''
for enc in encodingList:
try:
# print 'trying', enc , '...'
u = unicode(s, enc)
# print 'done:', enc
return u
except UnicodeError:
pass
raise UnicodeError, 'codec can\'t decode: "' + s + '"'
>>680 どうも。よくわかりました。
普段Linux上でEUC-JPで完結していたため、
Web上で入出力するとどうなるかわからなかったんです。
>>684 ブラウザがどういう文字コードでフォームデータを送ってくるかはブラウザ依存。
普通はフォームがあるページの文字コードに合わせて送ってくる。
だから、ページの文字コードがEUC-JPならフォームデータの文字コードもEUC-JPだと仮定していい。
ただし、残念ながらページの文字コードとは異なる文字コードで送ってくるブラウザもあるようだ (具体的にどれかは知らない)。
よって一応文字コード判別をしておくのが無難 (683さんのコードはナイスアイデアだと思う)。
>>682 sampleには気づいていなかった。サンクスコ
773 :
デフォルトの名無しさん :04/03/06 15:33
すみません、教えてください。 test = ['a','b'] hoge = test del hoge[1] hoge.insert(1,'c') print test print hoge 出力結果: ['a', 'c'] ['a', 'c'] となります。 意図としてはtestの値を変えたくないのですが、 どのようにすればよいのでしょうか?
line 2 hoge = test[:]
明示的に新しいオブジェクトを作る。 hoge = list(test)
>>689 あ、こんな方法もあるのですか。。
ありがとうございます。
漢字を勉強しような。
>>683 JapaneseCodecs は 0x1b 以下の文字が入っててもエラーを出さないので、
それは euc、sjis、utf8 の認識には使えるが、iso-2022-jp の認識には使えないと
思いますが、どうでしょうか。
得とく(←なぜか変換できない)
取得
ptn = re.compile(u'(?<=\<font size=-1\>$)[^<]*(?=\</font\>$)', re.I|re.M) print ptn.findall(s)
>>692 HTMLページ全体を一度に得とくして page に保存し、
この page 全体にたいして re.findall すると、
プログラムがもっと単純になります。
def main(url):
f = urllib.urlopen(url)
page = f.read().decode('euc-jp')
f.close()
result = re.findall(r'(?im)<font size=-1>\n(.+?)</font>', page)
return result[0], result[1]
if __name__ == '__main__':
today, tomorrow = main(URL)
print 'Today:', today.encode('shift_jis')
>>697-700 レスありがとうございました。
正規表現関連のところはリファレンスを見ただけで書いたのですが、
面白そうなのでもっと調べてみます。
lambdaには式しか書けないことに,いまさら気づいた. うーん….
Guido御大としては、式で書ける以上のことをlambdaで書いたら読みづらい んだからやめれと。つかlambdaより関数使えと、そういうことだ。
式と文が分かれていること自体、パーサー(を作った人)の都合以上の何者でもないのだが。
>>704 Pythonだとインデントのことがあるからlambdaを使うと読みづらいのは分かるけど,
やっぱり使いたくなるときはあるんだよなぁ.
>>705 原則としては,実行順序が問題になる場合「文」なんじゃないの?
>>705 式と文が分かれてない言語だって、作った人の都合でしかないと思うんだけど。
あんたは何が言いたいの?
>
>>705 は脳内スーパーハカー
「゛」が抜けてる。
デアッ
>>707 構文解析器(の実装)の都合で式と文が分かれている、と言いたいんじゃない?(w
つまり、Pythonの文法は実装によって決まった、というわけだ。なかなか興味深い。
"Mon, 01 Mar 2004 19:23:24 GMT"のような文字列からdatetimeオブジェクトを 生成する関数ってないかな?
email.Utils.parsedate() time.strptime() and datetime.fromtimestamp()
>>711 / ̄ ̄ ̄ ̄ ̄ ミ
/ ,――――-ミ
/ / / \ |
| / ,(・) (・) |
(6 つ |
| ___ | / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| /__/ / < なわけねぇだろ!
/| /\ \__________
>>714 懐かしいな
久しぶりに見たぞ
で、ハゲドウ
1970年以前の「Time」を扱いたいのですが、どのような方法があるので しょうか。 プログラムの初学者で、epochってのをはじめて知りました(^^;
>>716 Python のバージョンは何ですか?
2.3 以降なら、1970 年を意識せずに実用上の年号ならほとんど扱えるようになったと思います。
試しに、
>>> import datetime
とやってエラーがでるか確認してみてください。
>>717 ありがとうございます。Python は2.1でした。
>>>> import datetime は"No module named datetime"でした。
実は、Windows版Plone、Zopeなんです。2.3以降にした方がいい
のでしょうか。
少し怖いです。Data.fs めちゃめちゃにならないか、心配です。
(Zope 2.6.1 、python 2.1.3)
mxDateTime を試してみてはどうですか?
808 :
デフォルトの名無しさん :04/03/09 22:10
刻一刻とデータを受けながらグラフを更新していくプログラムを 組もうとしたとき、グラフ描画は何を使えばいいでしょうか?
Flash
812 :
デフォルトの名無しさん :04/03/10 11:10
python勉強しようと思うんですが、本当に初歩の初歩から教えてくれるサイトとか本手ないですかね?
どの程度の初歩なんだい。 1. キーボードは一本指でしか打てない。 2. 「インストールって何?」 3. プログラミングって何するのかわからない。 4. いくつかの例は覚えたが何もできない。 5. 大きなプログラムを作ろうとして挫折した。 6. まだコンパイラを書いたことがない。
やべえ俺プロなのにまだコンパイラ書いたことないや
りなざうでもNokiaでもいいからまず端末を買いなさい
ネタスレ化警報!
>727 4です。
>>732 多分キミは「パソコン買ったけど何に使えばいいのか分からない」って言ってる
香具師と似た状況にあると思われ。
次にすべきことは、自分はどんなプログラムを作りたいかを考えることだ。
最初は小さな、ただ一つの機能を持ったプログラムを考えてみるといい。
普段自分のパソコンで繰り返しやっていて面倒だと思うこと、自動化できたら
便利だなーと思うことを探してみるのもよい方向だ。
やりたいこと(解決したい問題)が見つかったら、それを Python で実現する
具体的な手順を考える。大抵の問題は、あれをやってこれをやれば目的達成と
いうように、小さな問題の列に分解できる。それらの小さな問題の一つ一つを
Python のプログラムコード片に翻訳していく。
やりたいこと(の部分問題)の実現方法や書き方が分からなければ、またこの
スレで聞けばいい。
Pythonの命令、関数を詳しく解説しいるサイトとかってないですか?
そうです。
>737 どうもありがとうございます。
string.split() を拡張したような、my_split() を作りたいと思っているのですが、 エレガントな方法はあるでしょうか? というのも、string.split() はそれなりに便利ですが、 たとえば、"aaa, bbb, ccc\n" といった文字列を ("aaa", "bbb", "ccc") といったトークンに分割したい場合に、それだけでは少し機能が足らないためです。 (split()/my_split()などではない、全く違ういい方法があればご教授ください) ちょうど、C における strtok()の第2引数のように、 my_split(str, " ,\n") もしくは、my_split(str, (" ", ",", "\n")) のように指定して使える形にするには、どうすればよいでしょう? とりあえず、安易なやり方としては以下が考えましたが、あまりエレガントではありません。 (str が長く、sepの個数が多い場合、涙モノの性能になると思われます) def my_split(str, sep): for c in sep[1:]: str = str.replace(c, sep[0]) return str.split(sep[0])
実際に動かすと、 string.split("a ", " ") とやると、['a', '', '', '', '', ''] などとなるんですね。 最後に空白要素を抜く処理を加えないとダメですね。 それはそれとして、別のベタなやり方を考えてみました。 こちらはそれなりに動くようです。 def my_split(str, sep): ret_list = [] tok = "" for c in str: if sep.find(c) == -1: tok += c continue if tok: ret_list.append(tok) tok = "" if tok: ret_list.append(tok) return ret_list
分割したいパターンに正規表現を適用できるなら, re.split() を使えます.
ttp://www.python.jp/pub/doc_jp/lib/node103.html#l2h-823 >>> import re
>>> s = "V<asdfas />ia<erfsdas />g<poaacaa />ra<zdfdasd />"
>>> re.split("<[^>]*>", s) # 区切りはマークアップタグ様のパターン (<...>)
['V', 'ia', 'g', 'ra', '']
>>> s = "OIriaYnIgie AylJeirIt!"
>>> re.split("[IiYyJ]", s) # 区切りは I, i, Y, y, J
['O', 'r', 'a', 'n', 'g', 'e A', 'l', 'e', 'r', 't!']
単に末尾の改行が煩わしいだけなら,strip() で剥ぎ取れます.
ttp://www.python.jp/pub/doc_jp/lib/module-string.html#l2h-803 >>> s = "Nudge, nudge, nudge, nudge\n"
>>> s.strip().split(', ')
['Nudge', 'nudge', 'nudge', 'nudge']
ファイルのサイズが小さいなら,file.read().spltlines() すれば,
手軽に改行のないレコード列を手に入れられます.
ttp://www.python.jp/pub/doc_jp/lib/string-methods.html#l2h-197 >>> import StringIO
>>> f = StringIO.StringIO("spam\nspam egg\nspam bacon egg")
>>> for i in f.read().splitlines():
... print i.split(" ")
...
['spam']
['spam', 'egg']
['spam', 'bacon', 'egg']
>>741 ありがとうございます。
def my_split(str, sep):
returnre.split("[%s]+" % sep, str)
で、かなり近い振る舞いはできるようですね。
ただ、たとえば、my_split("#a, b, c ", " ,#") とした場合、['', 'a', 'b', 'c', ''] となって、
前後に空白要素が入ってしまうようです。
この場合、空白要素を入れないような、うまい正規表現はありますかね?
「いらないものを除く」んじゃなくて、 「いるものを取り出す」ようにしたほうが、 すっきりするんじゃないの?
みなさんありがとう! とりあえず、この2バージョンで行くことにしました。 # strtok def strtok(str, sep): return re.findall("[^%s]+" % sep, str) # strtok pre-complied version def make_strtok(sep): r = re.compile("[^%s]+" % sep) return lambda str : r.findall(str)
pre-compiled version を return re.compile(...).findall(...)に しないのは何か理由があるのかなぁ
1行バージョンだと xx_strtok()の呼び出しのたびに、 re.compile(..).findall() の全体が毎回実行されちゃうことにならないですかね? (lambda は初めて使うので、あまり自信ないですが…) 実際に手元で計測してみたんですが、746と1行バージョンで、 1.5-2倍程度の速度差が出るようです。
>>> a = [0,1,2,3] >>> b = [2,3] とした時に、配列aとbの共通する要素の数 を返すような関数はありますか?
sets がなければ [i for i in a if i in b]
実際に計測してみるというのはよい心がけですね。
アルゴリズムとは関係ないけど、コメントはdocstringにしようぜ。
840 :
デフォルトの名無しさん :04/03/13 12:25
下の用なftp用の関数を作って複数ファイルをダウンロードしようとしたのですが 2回目のダウンロードで失敗します。(1回目は成功する) なにが悪くてこうなるのか教えてもらえないでしょうか? エラー(一部): File "./autoupdater.py", line 24, in download_file self.ftp_site.retrbinary( "RETR "+downloadfile, filename.write) : ftplib.error_perm: 550 Failed to open file. 関数: def download_file(self,root,downloadfile): self.ftp_site = FTP( FTP_SITE ) self.ftp_site.login() self.ftp_site.cwd(root) filename = open(downloadfile, 'wb') self.ftp_site.retrbinary( "RETR "+downloadfile, filename.write) filename.close() self.ftp_site.quit()
一度目にダウンロードしたファイルに書き込み禁止パーミッションが掛かっていて, 上書きできないのでは?
>>754-755 「2回目」にダウンロードするリモート側のファイルが
存在しないか、読み出し権限が無いように見えますよ。
550 はFTP(RFC959)のリプライコードです。
# 550 Requested action not taken.
# File unavailable (e.g., file not found, no access).
ローカル側のファイルを開くのに失敗したなら
IOError例外が生じます。
これはTkinter PhotoImageを使った研究試作で、「example.py b r」のように二つの r g b を指定すると、グラデーションを表示します。 import sys from Tkinter import Tk, PhotoImage, Canvas, BOTH W, H = 300, 200; kx, ky = 256./W, 256./H if len(sys.argv) != 3: sys.argv[1:3] = ['r', 'g'] exprs = ['0'] * 3 exprs['rgb'.index(sys.argv[1])] = 'int(x*kx)' exprs['rgb'.index(sys.argv[2])] = 'int(y*ky)' funstr = 'lambda x, y: (%s, %s, %s)' % tuple(exprs) fun = eval(funstr) ## fun(x, y) -> r, g, b # PhotoImage.put takes an image data represented as '{#fafafa #fefefe ...} {#bababa #bebebe ...} ...' M = [] for y in range(H): M.append('{') for x in range(W): M.append('#%02x%02x%02x' % fun(x, y)) M.append('}') root = Tk() root.title('%dx%d - %s' % (W, H, funstr)) img = PhotoImage() img.put(' '.join(M)); del M can = Canvas(root, width=W, height=H, highlightthickness=0) can.create_image((0, 0), anchor='nw', image=img) can.pack(expand=True, fill=BOTH) root.bind_all('<Escape>', lambda ev:root.destroy()) root.mainloop()
844 :
デフォルトの名無しさん :04/03/13 17:08
>>755 ,756
ありがとうございました。エラーの出るファイルを削除した所、無事に動きました
こういった問題(ファイルが見付からない)に対してtry〜exceptで躱すことは
できるんでしょうか? ちなみに
try:
____self.ftp_site.retrbinary( "RETR "+downloadfile, filename.write)
except ftplib.error_perm:
____print "Can't Find File", filename
だと、
NameError: global name 'ftplib' is not defined
になります。
このNameErrorをtry文で捕獲すればいいとか?
>>758 from ftplib import FTP, error_perm
して
except error_perm:
にすれば?
846 :
デフォルトの名無しさん :04/03/13 17:36
>>759 同じ結果です
NameError: global name 'error_perm' is not defined
>>760 本当にちゃんと
from ftplib import error_perm
してる?
つーか、エラーメッセージの意味、わかる?
class A(list): ... という風にリストを継承したクラスをつくって、 a = A() a[:] とやったときのインスタンスのコピーをカスタマイズしたいのですけど、 どこをいじればいいのですか?
849 :
デフォルトの名無しさん :04/03/13 18:35
>>761 おお、直った。ありがとうございました
>つーか、エラーメッセージの意味、わかる?
チュートリアルに載ってる範囲ならなんとか...
>>762 Python言語リファレンスの「3.3.5 コンテナをエミュレートする」と
「3.3.6 配列型をエミュレートする」辺りかな。
__getitem__ とか、必要なメソッドを再定義すればおーけー。
>>758 いわゆるエラーには
・実行時の条件次第で発生するエラー(例えばFTPのエラー)
・プログラムそのもののエラー(文法間違い、バグなど)
があるよ。
前者は try/except で捕捉して処理する必要がある。
後者は発生しないように直す必要がある (try/except で対処するのは誤り)。
書き忘れ。
>>758 のNameErrorは後者(バグ)です。
854 :
デフォルトの名無しさん :04/03/13 20:40
globで取得したリストから各要素のパーミション調べたりファイルかディレクトリかを調べたりって どうすればできますか?
python で blog つくれる?
>>766 どっちもエラーというか
前者はエラー
後者はバグ
という位置づけで十分ではなかろうか
>>770 前者は例外
後者はバグ
のほうが適切かな
>>769 どんな blog をイメージしてる?
漏れは手元で月別(日付は昇順)の HTML ファイルを手書きして
Python スクリプトで最新一週間分のダイジェスト(日付は降順)を作ってるよ。
FTP でうpするのも別の Python スクリプトで自動化。漏れ的には結構快適。
あと、独自 DTD の XML で日記を書いて PyXML アプリで HTML や TeX に変換したりもしてる。
こちらはパソコン上で使うだけの単なる日記帳 (一時期 blog 用に使っていた)。
文字列の結合って + 演算子でできないんでしょうか? readline で各行を読みとって、それを変数にどんどん追加していきたいんですが。 while 1: line = fi.readline() buf += string.lstrip(line) こんな感じで。するとこんなエラーが出ます。 TypeError: can only concatenate tuple (not "str") to tuple
>>776 buf が tuple なんじゃないの?
buf を list にして、 buf.append(foo)とするとか、str 型にして、buf += foo としたら?
あと、文字列の結合はパフォーマンスがむちゃくちゃ悪いので、出来るだけさけた方がいいです。
>>776 ループに入る前に buf="" で初期化するとどうなる?
>>780 文字列はimmutableだからだよ。Javaと同じ。
StringBuffer/cStringBufferモジュールを使うべし。
>>776-781 レスサンクスです。
ループの前に
h1 = re.compile("^<h1>(.*)</h1>$")
result = h1.match(line)
if result:
buf = result.group(1)
こうしてます。result.group(1)が tuple を返してるんですよね。
list に追加していく方法も考えたんですが、最終的に TextWrapper の
wrap で折り返しを調整したいので、str型の変数にどんどん追加
していこうと思いました。
この場合は tuple を str 型にキャストするのが普通なんでしょうか。
>>781 > StringBuffer/cStringBufferモジュールを使うべし。
何それ?
>>782 > result.group(1)が tuple を返してる
ソンナコトハナイト思ワレ。
$ cat string.py buf = "" for i in xrange(20000): buf += str(i) $ cat tuple.py buf = [] for i in xrange(20000): buf.append(str(i)) buf = "".join(buf) $ time python2.3 string.py real 0m19.112s user 0m15.510s sys 0m3.600s $ time python2.3 tuple.py real 0m1.067s user 0m1.010s sys 0m0.050s この例では15倍の差が出た。
やった!! gnomeの(正確にはgarnomeの)auto-updaterできた〜! 質問に答えていた方々、ありがとうございます 自分で作っといてなんだけどできたのがうそみたいだ さて、機能拡充するか
#stripper.py
#usage:python stripper.py
http://www.python.jp/Zope/ > pujug.html
import string,urllib,sys
def stripAndPrint(url):print "".join(map(string.lstrip,urllib.urlopen(url).readlines()))
if __name__ == "__main__":stripAndPrint(sys.argv[1])
>>783 そうなんですか。。
buf = result.group(1)
buf += string.lstrip(line)
だと
TypeError: can only concatenate tuple (not "str") to tuple
こういうエラーが出て
buf = result.group(1)
buf = ""
buf += string.lstrip(line)
だとエラーが出なかったもんで。型情報を含めて変数の内容を
ダンプしてくれるような関数ってありますか?
なんだか PyJUG のドキュメントって検索できなくてすごい不便
だと思ってるのは漏れだけかな。
意図不明
割り込まれちゃった。
>>788 宛なので悪しからず。
readline と書くつもりで readlines って書いてるとか
>>789 まさかmatchがNoneだったりしてないだろうな・・・
>>789 ヲレもmatch オブジェクトが None に +1
それはともかく、
> buf = result.group(1)
> buf = ""
> buf += string.lstrip(line)
これはなに?
buf で何をやりたいの?
$ python -c "None + ''"
Traceback (most recent call last):
File "<string>", line 1, in ?
TypeError: unsupported operand type(s) for +: 'NoneType' and 'str'
>>782 にもどるけど、
buf を定義しているのは、
buf = result.group(1)
この場所が最初なの?
それ以前で、buf を定義していない?
それと、
result = h1.search(line)
とやったら、結果が変わると思われ。
>>787 One-linerで真似してみた。
python2.3 -c 'import urllib, htmllib, formatter, sys; \
p = htmllib.HTMLParser(formatter.AbstractFormatter(formatter.DumbWriter(sys.stdout))); \
p.feed(urllib.urlopen("
http://www.python.jp/Zope/ ").read() + "<BR>"); \
print "\n".join(["[%d] %s" % (i+1, j) for i, j in enumerate(p.anchorlist)])'
>>796 あのさ、matchがNoneってのは、
>>782 で言えばresultがNoneということで、
buf = result.gourp(1)が実行されていないという可能性を指摘しているんですが。
それがどうしてNone + ''になるんですか?
皆さん親切にレスしていただいたのに、非常に申し訳ないのですが buf = result.group(1), と、なぜか後ろに , をつけてるのを見落としていました。こいつが いけなかったようです。すいません。。 ついでに質問なんですが # coding: EUC-JP import textwrap wrapper = textwrap.TextWrapper(width=100) hoge = "文字列" print hoge print wrapper.wrap(hoge) このスクリプトを実行すると、1行目は正常に表示されますが、2行目は文字化けします。 ['\xca\xb8\xbb\xfa\xce\xf3'] こんな感じに。何かとんでもない使い方してるんでしょうか。
>>798 > resultがNoneということで、
> buf = result.gourp(1)が実行されていないという可能性
そんな可能性はありえない。
>>> None.group(1)
AttributeError: 'NoneType' object has no attribute 'group'
>>799 for line in wrapper.wrap(hoge):
print line
とすればよいと思われ。wrapper.wrap() は文字列のリストを返す。
> ['\xca\xb8\xbb\xfa\xce\xf3']
厳密にはこれは文字化けではない。
日本語を含んだ文字列定数は普通このように表示される。
>>800 > そんな可能性はありえない。
あのさ、
>>782 の"if result:"の意味、わかる?
っていうか、ひょっとして釣りのつもりか?
盛り上がってまいりました。
buf = result.group(1) のうしろにカンマが入ってたりして。
やべぇ、出遅れた
802 名前:デフォルトの名無しさん[sage] 投稿日:04/03/14 18:40 ID:eghUy09a
盛り上がってまいりました。
803 名前:デフォルトの名無しさん[sage] 投稿日:04/03/14 18:41 ID:eghUy09a
buf = result.group(1)
のうしろにカンマが入ってたりして。
804 名前:803[sage] 投稿日:04/03/14 18:41 ID:eghUy09a
やべぇ、出遅れた
805 名前:デフォルトの名無しさん[sage] 投稿日:04/03/14 18:45 ID:eghUy09a
>>803-804 ひょっとして釣りのつもりか?
806 名前:803[sage] 投稿日:04/03/14 18:49 ID:eghUy09a
>>805 ほっといてくれよ
サンクス。 >for line in wrapper.wrap(hoge): > print line >とすればよいと思われ。wrapper.wrap() は文字列のリストを返す。 うまく出力できました。文字コードのことはあまりよく分かってないので 勉強の必要がありそうです。 最後の質問なんですが re.gsub() で後方参照する方法が分かりません。 hoge = re.gsub("<a href=\"(.*)\">(.*)</a>","url:$1 \n title: $2",hoge) みたいなことがしたいんです。よろしくおながいします。
>>801 > あのさ、
>>782 の"if result:"の意味、わかる?
なるほど。誤解してますた。
>>808 import re
hoge = '<a href="URL">ANCHOR</a>'
def rep(match):
return "url: %s\ntitle: %s" % match.group(1, 2)
print re.sub('<a href="(.*)">(.*)</a>', rep, hoge)
thread.start_new_threadで開始したスレッドを、 メインスレッドから任意のタイミングで殺したりしたいのですが、 スレッドIDが判明しててもそれをどうしたらいいのか分からない。
>>785 ところで、tupple.pyという名前の由来は?
(・∀・)えっ?
ああ、そうか。tuple ぢゃなくて list だよな。寝ボケてますた。
サンクスコ! pythonには名前で後方参照できるナイスな機能があったんでつね。
902 :
デフォルトの名無しさん :04/03/15 09:44
他サイトのRSSを作成しようとしておりまして、itemの更新日付を取得したいと思っています。
import urlilb, time, rfc822
u = urllib.FancyURLopener()
url = "
http://localhost/index.html "
lmdate = u.open(url).headers['Last-Modified']
date = time.strftime('%Y-%m-%dT%H:%M:%S', rfc822.parsedate(lmdate))
print date
こんな感じでやるとグリニッジ標準時間になっちゃうので東京のタイムゾーンにあわせたいのですが
rfc822.parsedate_tz()でタプルの値から9時間足して整形すればいいのはわかるのですが、そうなると処理がまわりくどくなります。
もう少し簡単な方法があるように思えますがいかがでしょうか。
タプルって素敵だよね
タプルタンハアハア(;´Д`)
たぷるたん擬人化きb
ウホッ、いいタプル
たぷるたんはimmutable。 変身するにはリスト君とのフュージョンが必要です。 だけどたぷるたんはお年頃。 リスト君とフュージョンするときのあの格好が ちょっと恥ずかしかったりするのでした。 そんなある日、
817 名前:デフォルトの名無しさん[sage] 投稿日:04/03/15 13:40 ID:Kj0IOP58 タプルって素敵だよね 818 名前:デフォルトの名無しさん[sage] 投稿日:04/03/15 14:04 ID:Kj0IOP58 タプルタンハアハア(;´Д`) 819 名前:デフォルトの名無しさん[sage] 投稿日:04/03/15 14:15 ID:Kj0IOP58 たぷるたん擬人化きb 820 名前:デフォルトの名無しさん[sage] 投稿日:04/03/15 14:43 ID:Kj0IOP58 ウホッ、いいタプル
>>822 l = []
for i in tup:
l.append(i)
こんなフュージョンの仕方は
たしかに恥ずかしいな(;´Д`)
class tupletan(tuple): pass
912 :
デフォルトの名無しさん :04/03/15 19:07
>>821 ttp://www.python.jp/pub/doc_jp/lib/module-time.html にPython2.3から使えるようにあるんだけど
Python 2.3.3 (#1, Mar 14 2004, 12:40:47)
[GCC egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import time
>>> dir(time)
['__doc__', '__file__', '__name__', 'accept2dyear', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'gmtime', 'localtime', 'mktime', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname']
使えないっす。glibcのバージョンとかも関係あるのかな。
>>824-825 class tupletan(tuple):
def fusion(self):
listkun = []
for asoko in self:
listkun.append(asoko)
return listkun
・・・・・(((´д`;)))'`ァ'`ァ
l = [x for x in tpl] 長官 「見よ! これが我々の新しい必殺技,コンプリヘンシブ・フュージョンだっ!」 たぷるタン 「長官!」
スレの目的を見失っている 流浪のスレだな
__,,,,_ /´  ̄`ヽ, / 〃 _,ァ---‐一ヘヽ i /´ リ} | 〉. -‐ '''ー {! 。 | | ‐ー くー | 〜゚ ヤヽリ /// ,r "_,,>、 ゚'} ヽ_」 ト‐=‐ァ' ! ゝ i、 ` `二´' 丿 r|、` '' ー--‐f´ _/ | \ /|\_ / ̄/ | /`又´\| |  ̄\ 皇太子様がたぷるタソに興味をお持ちになったようです
917 :
デフォルトの名無しさん :04/03/16 01:17
Pythonを実行してできたデータを保存しようとして保存方法を調べた所 色々と見付かりましたが使い分け方とか長所、短所とかがいまいちわかりません こういうときにはこう、みたいなアドバイスをもらえませんか? 下に行く程速くなって大規模向けなのかなぁと思ってみたり -普通にopen〜writeで書き込み -pickleを使用 -データベースへアクセス -CへのAPIで読み書き用の関数をCで書く
保存したデータをどうしたいかに依ると思われ。 > 普通にopen〜writeで書き込み そのアプリだけで使うデータならこれでいい。あるいは、同じデータを 利用する別アプリでも同じ入出力処理を書く気があるなら可。 > pickleを使用 これはお手軽で良い。ただし、別アプリの方も Python に限定される。 > データベースへアクセス 別アプリが他の言語(Javaなど)だったりデータが大規模(スケーラ ビリティが重要)だったりするなら RDBMS はいい選択肢。 > CへのAPIで読み書き用の関数をCで書く これも Python に特化してるけど Python だけで書いたのでは遅い 場合に有効。まず Python で書いて、遅いところ(ボトルネックの 部分)だけ C の拡張にするのがいい。
追記。 > 普通にopen〜writeで書き込み 読み書きするデータを XML にするという選択肢も重要だと思った。
pickleって素敵だよね
(´∇`) たぷるタソ [・∀・] リスト君 ヽ(*´ω≡∀・]ノ フュージョン! [´∇`] mutableナノ♥
[for]ヽ(´∇`)ノ[in] スチャチャッ!! −=≡[for≡*´ω`*≡in]≡=− コンプリヘンシブ・フュージョン! 説明しよう! コンプリヘンシブ・フュージョンとは、たぷるが可変オブジェクト に変身するための究極の必殺技なのだ! たぷるがフュージョン・ポーズを取ると for-in ブロックが全身を覆う! この間わずか0.01秒! さらにローカル変数に エネルギーが充填され、たった0.2秒という驚異的なスピードでコンプリヘンシブ・ フュージョンは完了する! [´∇`] mutableナノ♥
> 日本はRuby発祥の地ということでRuby優勢のようですが > ほかのアジアの国々ではどうなんでしょうか? スレ違い。 > CJKcodecsの作者は韓のひとなんだっけ? そそ。
>>82 date = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(time.mktime(rfc822.parsedate(lmdate)) - time.timezone))
>>826 tzset() が使えるシステムは UNIX 系のみって,
書いてなかったかな...
>>841 > [GCC egcs-2.91.66 19990314/Linux (egcs-1.1.2 release)] on linux2
Python 2.3.3 (#1, Mar 14 2004, 18:23:33) [GCC 2.95.3 20010315 (release) [FreeBSD]] on freebsd4 Type "help", "copyright", "credits" or "license" for more information. >>> import time >>> dir(time) ['__doc__', '__file__', '__name__', 'accept2dyear', 'altzone', 'asctime', 'clock ', 'ctime', 'daylight', 'gmtime', 'localtime', 'mktime', 'sleep', 'strftime', 's trptime', 'struct_time', 'time', 'timezone', 'tzname', 'tzset'] >>>
Python 2.3.3 (#2, Feb 24 2004, 09:29:20) [GCC 3.3.3 (Debian)] on linux2 Type "help", "copyright", "credits" or "license" for more information. >>> import time >>> dir(time) ['__doc__', '__file__', '__name__', 'accept2dyear', 'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'gmtime', 'localtime', 'mktime', 'sleep', 'strftime', 'strptime', 'struct_time', 'time', 'timezone', 'tzname', 'tzset'] >>>
RedHat系でpythonて入力するとpython 1.5.*が起動するよねぇ。
934 :
デフォルトの名無しさん :04/03/16 18:57
>>811 「他のスレッドを殺す」
それはcomp.lang.pythonでよく見かける質問なのですが、そういうことはできないという回答以外はみたことがないです。ワークアラウンドとしては自殺を教唆する方法があり、具体的には例えばこんな感じでしょうか。
import sys
from threading import Thread, Event
from time import sleep
def Child(shouldQuit):
i = 1
while not shouldQuit.isSet():
sys.stderr.write('child: %s\n' % ', '.join(['spam']*i))
i += 1
sleep(1.)
else:
sys.stderr.write('child: exitting now\n')
def main():
shouldQuit = Event()
child = Thread(target=Child, args=(shouldQuit,))
child.start(); sys.stderr.write('main: started child\n')
sleep(10.)
shouldDie.set(); sys.stderr.write('main: set event\n')
child.join(); sys.stderr.write('main: terminated child\n')
if __name__ == '__main__':
main()
>>849 【誤】
shouldDie.set(); sys.stderr.write('main: set event\n')
【正】
shouldQuit.set(); sys.stderr.write('main: set event\n')
済みませ
たぷるタソは人気者だな。いいな。
ところで
>>781 のはStringBufferじゃなくてStringIOだよな。
まあJythonならどっちもあるけどな。
誰か虹絵にして。。。(´д`;)
あれ、
>>849 がそのままのスペースで圧縮されてないのはなんで?
def my_getc(): import tty, termios fd = sys.stdin.fileno() old = termios.tcgetattr(fd) try: tty.setcbreak(fd) c = sys.stdin.read(1) finally: termios.tcsetattr(fd, termios.TCSANOW, old) return c これでよかったのか。スレ汚しスマソ。
この頭悪そうなのは誰?
きこうでんみさ
>>811 サブスレッド側の終了処理をメインからコールするだけやん
そろそろ次スレのスレタイでも考えるか。 Pythonがこの先生きのこるには?Part5 Pythonって死滅しちゃうの???Part5 Pythonなら俺に聞け!Part5 【たぷるタソ】Pythonお勉強レPart5【ハァハァ】 萌える!PythonプログラミングPart5 フリーザですよ。Pythonしなさい。Part5 Python!Python!のガイドラインPart5 やったーボクにもPythonできたよ!Part5
Pythonって死滅しちゃうの???Part5 に1票
この先生? きのこるって動詞?
>>860 タイトルというより、あんたが考えてるのはネタだ・・・
950 :
デフォルトの名無しさん :04/03/17 14:23
すみません。 Pythonのこれ↓について解説してあるページをご存知でしたら紹介してください。 C/C++アプリケーションへの組み込みが簡単
>>864 C++Builder なら Python for Delphi おすすめでつ
5分で組み込めます
952 :
デフォルトの名無しさん :04/03/17 17:35
>>866 付属のTutorial.txt、分かりやすいので読むのが吉でつ。
高卒のおいらでも読めたので大丈夫だと思います。
>>869 問題の文字を適当な別の文字に置換すればいいと思われ。
>>> print u"\uff21\u2014\uff3a".encode("euc-jp")
Traceback (most recent call last):
File "<stdin>", line 1, in ?
UnicodeError: EUC-JP encoding error: invalid character \u2014
>>> print u"\uff21\u2014\uff3a".replace(u"\u2014", u"\u2015").encode("euc-jp")
A―Z
>>>
957 :
デフォルトの名無しさん :04/03/18 00:38
たぷるタソの虹絵まだあ? マチクタビレターマチクタビレター (・∀・)っ/凵⌒☆チンチン
いみゅーたぶるしーけんす・たぷるタソ がいしゅつスペックのまとめ: 名前:たぷるタソ 性別:おにゃのこ 年齢:?才 必殺技: ・フュージョン 可変オブジェクトに変身するための技。ポーズがちょっと恥ずかしいらしい。 ・コンプリヘンシブ・フュージョン 高速フュージョン。0.2秒で完了するらしい。要 for-in ブロック。 サブキャラ: ・リスト君 たぷるタソがフュージョンする時の補佐役。 ・長官 たぷるタソとリスト君のボス。ちょっと熱血ギミ。 ・皇太子様 中の人。とてもエラいらしい。 おい、お前ら!肝心の年齢が決まってませんよYO!何才がいい? 漏れは12才に+1。
>>873 何でもいいからさっさとネタスレつくってそっちでやれ。
>>873 新キャラ追加ヨロ
・番長
「何でもいいから〜やれ」が口癖。でも本当はたぷるタンが好き。
新スレタイは
【はきゅ〜ん】Python関係でハァハァするスレ【はきゅ〜ん】
ぐらいか?
\ ∩─ー、 ==== \/ ● 、_ `ヽ ====== / \( ● ● |つ | X_入__ノ ミ 貴様ごときに釣られクマ━━━━━!!!!! 、 (_/ ノ /⌒l /\___ノ゙_/ / ===== 〈 __ノ ==== \ \_ 番長\ \___) \ ====== (´⌒ \ ___ \__ (´⌒;;(´⌒;; \___)___)(´;;⌒ (´⌒;; ズザザザ
はきゅんヤメレ。あの動画脳内消去したい。
馬鹿が一匹紛れ込んでるみたいだけど消えるか ネタスレ立てそっちでやれ。
>>878 ムネオたんスレを復活させろと主張するのか!
966 :
デフォルトの名無しさん :04/03/18 21:39
>880 そっちではないとおもうにょろ。 Python for Delphiに附属してる文書にょろ。 ネタかにょろ?
"""Mandelbrot set""" # 2004-03-20, placed in the public domain. from Tkinter import Tk, Canvas, PhotoImage from math import log from colorsys import hsv_to_rgb def iteration(z, maxiter): c, i = z, 0 while True: i += 1 if i >= maxiter: return None z = z*z + c if abs(z) > 2.0: return i def map_color(n): if n is None: return 'black' else: hue = log(n)*128%128/128 val = 0.8 + 0.2*(n%2) return '#%02X%02X%02X' % tuple( [int(elem*255) for elem in hsv_to_rgb(hue, 1.0, val)])
def pixels(w, h, dx, dy, zoom, maxiter): zoom = float(zoom) for y in [(y-h/2)/zoom for y in range(h)]: yield '{' for x in [(x-w/2)/zoom for x in range(w)]: yield map_color(iteration(complex(x+dx, y+dy), maxiter)) yield '}' W, H, dx, dy, zoom, maxiter = 300, 300, -0.7454265, 0.113009, 5.0e4, 250 root = Tk() img = PhotoImage() img.put(' '.join(pixels(W, H, dx, dy, zoom, maxiter))) can = Canvas(root, width=W, height=H, highlightthickness=0) can.create_image((0, 0), anchor='nw', image=img) can.pack() root.bind_all('<Escape>', lambda ev:root.destroy()) root.resizable(False, False) root.mainloop()
これ移植できますか? Set theNatter = CreateObject("HNetCfg.NATUPnP") Dim mappingPorts Set mappingPorts = theNatter.StaticPortMappingCollection '192.168.0.1を自身のプライベートアドレス '12345を空けたいポートに mappingPorts.Add 12345, "TCP", 12345, "192.168.0.1", TRUE, "XXX" 'mappingPorts.Remove 12345, "TCP" MsgBox("Total number of ports after add is " & mappingPorts.Count)
974 :
デフォルトの名無しさん :04/03/21 06:47
( ,,´ω`)っ888
socketモジュールで(間違って)存在しないホストに繋いだとき、 エラーがでるまでの時間を短縮したいんですが、そのような方法はありますか?
timeoutを使えばいいんですね。スレ汚しスマン
977 :
デフォルトの名無しさん :04/03/22 11:08
申し訳ありません一つ質問させて下さい Mac OX10.3.3、Python 2.3の環境で import EasyDialogs EasyDialogs.Message("ほにゃらら") で文字化けしてしまうのですが、どうしたら日本語表示できますか? ネットで調べたり、文字コード変えたりと試したのですが…(つд`)デキナイヨー
文字コードを直接書くか、変換のコードを使用するしかないでしょう
漏れマカーじゃないんだけど、 間違いなく日本語使えるんだよね?>EasyDialogs ユニコードで文字列渡したらどーなる? EasyDialogs.Message(unicode("ほにゃらら", "euc-jp"))
>>892 すみません例えばどのようにすればいいですか?
>>893 OS9のときは使えたのですが、
OSXでは確認できませんでした・・・モウシワケアリマセン
ユニコードで渡したら
SyntaxError: invalid syntax
ってなりした(つд`)エラーデター
>>894 SyntaxErrorってことはプログラムの書き方が間違ってるよ(w
どういうコードを書いた?
カッコ抜けてました(^_^;)ゴメンナサイ 訂正してもう一度・・・ >>> EasyDialogs.Message(unicode("ほにゃらら","euc-jp")) UnicodeError: EUC-JP decoding error: invalid character 0xe381 in JIS X 0208 一応utf8でも >>> EasyDialogs.Message(unicode("ほにゃらら","utf-8")) TypeError: Str255 arg must be string of at most 255 chars つд`)マタエラーデス
> >>> EasyDialogs.Message(unicode("ほにゃらら","euc-jp")) > UnicodeError: EUC-JP decoding error: invalid character 0xe381 in JIS X 0208 こういうエラーが出るってことは "ほにゃらら" の部分の文字コードは UTF-8 だね。 > >>> EasyDialogs.Message(unicode("ほにゃらら","utf-8")) > TypeError: Str255 arg must be string of at most 255 chars unicode("ほにゃらら","utf-8") は正しい unicode オブジェクトのはずだから、 TypeError になるってことは EasyDialogs.Message は unicode オブジェクトを 受け付けない、つまり 全 然 ダ メ ポ ってことだね(w
>>897 ダメダメですかぁ(´・ω・`)ショボーン
お教えいただきありがとうございました
つд`)オサワガセシマシタ
unicode オブジェクトを受け付けないなら、文字列オブジェクトにデコードするとか。 ファイルの文字コードが UTF-8、Message() の受け付ける文字コードが EUC-JPだとして、 EasyDialogs.Message(unicode("ほにゃらら", "utf-8").decode("euc-jp")) とか(文字コードは環境に合わせて適宜読み替えて下さいな)。 更に、ダイアログのフォントが欧文になっている可能性もある。
>>899 AttributeError: 'unicode' object has no attribute 'decode'
エラーで動かないです(つд`)マタマタエラー
ダイアログのフォントいじるには、
どうすればいいんでしょうか?
>>900 すんません deocde じゃなくて encode でした(_ _)
>>901 euc-jp、utf-8、sjisどれも文字バケバケでした・・・
つд`)ナンダカモウシワケナイ
すみません解決シマシタ AppleScriptの文字化けの直し方を真似したら 一応日本語表示できました。つд`)ヤットデキター (ちなみに文字コードはsjisでした) アリガトウゴザイマシタ(TдT)
Pythonで比較的大きなゲームを作ってみたいのですが、 おすすめの本とかありますか?
>>905 > て、今気づいた。Lightweit Languageの本が出るんだ・・・
> 以前やった、LL Saturdayと関係あるのかな。
ASCIIのサイトにおもいっきりそう書いてあるじゃん。
あと、柴田さんのCOREBlogに本の写真が載ってるよ。
・・・ちょっとまてよ、HaskellってLLか?(板違い
目次とかってどこかにでてる?
>>908 ざっと調べたが、見つからん。
出版社のサイトはダメダメだし。
てか、LLMってMagazineだから雑誌? それとも実はムック?
いずれにしろオンライン書店には載りづらいしなぁ・・・。
どうせ今週末には出るんだし、それまでの辛抱。 ついでに来週頭には、クイックリファレンスも出るね。
cursesの事で質問です。 これって描画する時、XのKterm上ではCOLOR_WHITEが灰色で見ずらいんですが どうすればいいですか?curses.can_change_color()がFALSEで init_color()もできない。 X上では背景が水色で黒文字ぐらいしかうまく表示できないから、 実質使いものにならないのかなあ。
Pythonでどうにかなる問題かなぁ。素直にcolor ktermを使ったら?
Kterm に色が出るのと出ないのとがあるの? 漏れの Kterm (赤帽の kterm-6.2.0-28) では curses.start_color() curses.init_pair(1, curses.COLOR_RED, curses.COLOR_WHITE) stdscr.addstr(1,1, "spam", curses.color_pair(1)) とやったらちゃんと白地に赤の文字が出たよ。
>>912 ktermは普通に色が付いていますが?色指定してaddstr()は特に問題ありませんが、
白だけは灰色です。多分コンソール上の白の色設定をそのまま持ってきているようです。
demoフォルダのサンプルを試しても当然同じです。
現在のシェル上の色設定をそのまま引き継げる方法でもあればいいのですが。
RSSや2chのdatファイルのビューワーのを作ってみたかったのですが、
これではカーネルやネットワークの設定コマンドみたいな画面になってしまいます。
メーリングリスト見ても、curses自体の話題が5件のみ。
他に端末表示のライブラリありましたっけ?slangのバインディングみたいのが
ありましたがドキュメントが見付かりませんでした。
漏れの環境ではコンソールの文字は灰色だけど Kterm ではちゃんと白色が出てるよ。 何が違うのかな。
>>913 Debian Linuxのkterm6.2.0です。設定ファイルに問題があるのかもしれません。
色関係はデフォルトで使っているはずですが。
スマソ。よくよく見たら灰色だった。逝ってきm(NO CARRIER
解決しました。 .Xresourcesに KTerm*VT100*textColor7: LightGray の1行を追加。デフォルトはgray80みたいです。 whiteでもいいのですが、Chaliceがまぶしくなるのでライトグレイ。 Python単独での変更はは無理かもしれませんね。
1005 :
デフォルトの名無しさん :04/03/25 00:04
よくサンプルのメインルーチンの先頭で if __name__ == '__main__': function() 等をやっていますがそのメリットがいまいちわかりません 教えてエライ人
1006 :
デフォルトの名無しさん :04/03/25 00:08
>>919 スクリプト言語でよくやる手法。
サンプル自体をインタプリタの第一引数に指定して実行すると、
その条件が真になる。インクルードしたときなどには、負になる。
>>919 ちなみにPerlだとこう書く。(スレ違いだが、表現が似ているのは分かると思う)
function() if __FILE__ eq $0;
Rubyなんかでも似たような定型句がある。知ってて損は無いぞえ。
>>919 主にライブラリとして import して使うモジュールのテスト用ルーチンを書いておくのに便利。
import せず直接使うのに限るファイルなら
if __name__ == '__main__':
は不用。
>>920 > その条件が真になる。インクルードしたときなどには、負になる。
それじゃどっちも真じゃん!
真の対義語は、偽、な。
つかインクルードとか言ってる時点でアウト
書きこみテスト
復旧したね。
質問が消えてしまった。 curses.textpadやcursesで日本語を入力する方法を教えて下さい。 getch()はキー入力1文字だけ捕捉なのでうまくいきません。 調べてみてもskkなど特殊なものしか例がなかったです。
926 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25 14:51
Pythonの場合requireだろ?
927 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25 15:14
>>926 cat だよ.
928 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25 16:10
useだってば
929 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25 16:30
.だろ。
930 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25 16:35
おめーらくだらねぇ論議してるヒマあったら早くOpenMotifとOpenCOBOL使ってCOBOL版かちゅーしゃ作れよ!
うるせー.NET野郎!
キレェオだろ?お前なんで所詮はキレェオなんだろ?
早く言えよ!カミングアウトしちまえよ!
抜くぞ?いいのか?抜かれちまうぞ?本当にいいんだな?絶対だな?
証拠出せよ!早く出せよ!
六角クランクと四角クランクの互換性が無い事くらいド素人でもしってるんだよ!
それを何が飼育係だ?糞以下!うんこ未満!ベクトル演算装置に土下座して謝れよ!馬鹿!
日9ゲそえよ!見えねーじゃねぇだんろ?う?あ?あ?あ?
931 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25 17:21
>>930 もちつけ。キレェオ山タソかあんたは。
932 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25 17:48
そこでまたブチ切れですよ。
933 名前:デフォルトの名無しさん[sage] 投稿日:04/03/25 20:31
cursesライブラリの質問をしている者ですが、これの日本語入力のやりかたを教えて下さい。
getch()ではうまくいかないし、特にcurses.textpadで入力を可能にしたいです。
curses.meta()あたりか、unicodeに変換してごそごそやるのか。。
あとは文字の折り返しでの文字化け対策もかんがえなきゃいけないな。
日本語(というか2バイト文字)のcursesライブラリのいいサンプルしりませんか?
934 名前:デフォルトの名無しさん[sage] 投稿日:04/03/26 02:37
>>933 redhatのanacondaなんか参考にならんかな?
中身みたことないけどね。
935 名前:デフォルトの名無しさん[sage] 投稿日:04/03/26 07:12
>>930 議論はあまり行われておらず、どちらかというとくだらない雑談と質問でしょう。
936 名前:デフォルトの名無しさん[sage] 投稿日:04/03/26 12:57
>>934 slang使っているみたいでした。
某所でもうわさになってましたが、新しい nutshell はどのあたりが2.3対応なんでしょうか? 実際に購入して気づいたひとはいますか?
さっき買ってきました. 全くの初心者には向かず,他の言語も含めて小規模の プログラムを書いた 経験のある人向け,実践的に Python を使いたい人向けの 本に思えました. 「Python テクニカルリファレンス」と同じような位置づけです. 2.3 の対応状況は以下の通り(o: 載っている x: ほぼ確実に載っていない): 1 PEP 218: A Standard Set Datatype ... x 2 PEP 255: Simple Generators ... o (p81) 3 PEP 263: Source Code Encodings ... ? 4 PEP 273: Importing Modules from Zip Archives ... x 5 PEP 277: Unicode file name support for Windows NT ... x 6 PEP 278: Universal Newline Support ... o (p230) 7 PEP 279: enumerate() ... x 8 PEP 282: The logging Package ... x 9 PEP 285: A Boolean Type ... o (p47) 10 PEP 293: Codec Error Handling Callbacks ... x 11 PEP 301: Package Index and Metadata for Distutils ... o (p681) 12 PEP 302: New Import Hooks ... x 13 PEP 305: Comma-separated Files ... x 14 PEP 307: Pickle Enhancements ... x 15 Extended Slices ... o (p57) 16 Other Language Changes ... ほとんど x (作者のAlexが提案した sum() も入っていない!) 16.1 String Changes ... x 16.2 Optimizations ... x 17 New, Improved, and Deprecated Modules ... x 17.1 Date/Time Type ... x (mx.DateTime を取り上げている) 17.2 The optparse Module ... x 18 Pymalloc: A Specialized Object Allocator ... x 19 Build and C API Changes ... x 19.1 Port-Specific Changes ... x 20 Other Changes and Fixes ... ほとんど x
>>932 サンプルコードが原書とことなり、2.3ベースでかかれているとかそういったことは
ないということですか?
2.3対応といっても、たとえばジェネレータの説明で
「2.3以降ではfrom... はいりません」
とちょっとした一行コメントがついているとか、その程度?
>>933 サンプルコードが 2.3 ベースで書かれている,ってどういう意味ですか?
原著を全然読んでいないからよく分からないんですが,ほとんど 2.2 でも
2.3 でも動くコードみたいですよ.とはいえ,if 文に True/False を
使っているコードはいくつかあるようです.
ジェネレータの説明は,まさにそんな感じでした.が,訳注でつけた文章では
ないようです.原著も同じように書いてあるのでは?
>>934 > サンプルコードが 2.3 ベースで書かれている,ってどういう意味ですか?
2.3ではいったものを使えば簡単になる部分があれば書き換えるという意味です。
原著との違いは、ソースコードはいじらずにコメント的な補足説明が追加されていると理解すればいいのかな?
もちろん、英語が日本語になっているというのもあるだろうけど。
>>933 > 2.3ではいったものを使えば簡単になる部分があれば書き換える
932にも書いたように, enumerate() や csv や sum() や Set は
そもそも取り上げてないし,サンプルにも入ってないようです.
だいたいそんなことをしたら 2.2 ユーザが理解不能なコードが多くなって
こまるんじゃないのかなぁ. 2.3 ユーザ専用の本じゃないと思いますよ.
> 原著との違いは、... 追加されていると理解すればいいのかな?
さぁ...原書もってないから知りません.細かい書き方が気になるなら本屋で
調べてください.
「2.3 ユーザにも役立つし,2.1 以降の全てのユーザにおすすめできるが,
2.3 を完全網羅した本ではない」と思います.
1024 :
デフォルトの名無しさん :04/03/31 05:56
pythonで”Hit Any Key”みたいなトリガー処理ってどうやるんですか?
>>938 try:
raw_input("Hit Enter to continue (or Ctrl-C to abort)\n")
except (KeyboardInterrupt, EOFError):
# abort
return False
# continue
return True
とか。文字通り「任意のキー」にしたいなら curses 等を使う必要があると思われ。
>>939 トリガーが萎れてました
処理できないです
>>939 パンツを脱いだところで母がいきなり部屋のドアを開けるという例外が発生しました。
どのように例外処理を記述すればいいですか?
| try: | book = self.bed.get_item(dir=UNDER) | self.serve_forever(book) | except: | self.mother.destroy(book)
クイックリファレンス、訳が怪しい。 True と False が 1 と 2 になっていたり、0 と 1 になっていたり。
'\x61'を'a'に変換するPythonらしい方法はありますか?
>>947 質問の意図が分からない。
その二つは文字列リテラルとしては等価だよ。
>>> '\x61' == 'a'
True
>>>
>>948 リテラルとしては同じもだったんですね。
'MZ\x90\x00\x03\x00\x00\x00\x04\x00'のような文字列があったのですが、
英数字や記号以外はreprの際に'\x..'とあらわされているだけなのか、、、
すんまそ。
そろそろ新スレかも。
ここまでの集計 Pythonがこの先生きのこるには?Part5 0票 Pythonって死滅しちゃうの???Part5 1票 Pythonなら俺に聞け!Part5 0票 【たぷるタソ】Pythonお勉強レPart5【ハァハァ】 0票 萌える!PythonプログラミングPart5 0票 フリーザですよ。Pythonしなさい。Part5 0票 Python!Python!のガイドラインPart5 0票 やったーボクにもPythonできたよ!Part5 0票 【はきゅ〜ん】Python関係でハァハァするスレ【はきゅ〜ん】 1票
どのスレタイも悲惨だなぁ・・・でもどれかを選べといわれれば フリーザですよ。Pythonしなさい。Part5
たぷるタソハァハァ
【コルト】Python【モンティ】Part5
【牌】Python【孫】Part5
【たぷるタソ】Pythonお勉強レPart5【ハァハァ】 +1
【たぷるタソ】Pythonお勉強レPart5【ハァハァ】 +1 3票で断トツだし決まりっしょ。
はきゅ〜んは勘弁……。あの頭悪そうな女が脳内再生されちまった。
たぷるっていう意味を知らないが
>>961 のうpでたぷる決定(;´Д`)ハァハァ
>>961 と
>>964 のおにゃのこ、どこから誘拐してきたの?
ちゃんと描き起こしたたぷるタソきぼんぬ〜。
Python初心者なのですが、
>>952-965 はPythonに関係ありますか?
初心者なので、教えてください。
後腐れがないように、ここはPython自信にスレタイを決めてもらおう。 ということで、 ↓スレタイ決めるプログラムをささっと書いてくれ。
(´∇`)ノPythonのお勉強 Part5ヽ[・∀・]
import codecs ENCODING = "EUC-JP" encode, decode, BaseStreamReader, BaseStreamWriter = codecs.lookup(ENCODING) class Codec(codecs.Codec): def encode(self, data, errors="strict"): # unicode to string data = data.replace(u"\u3002", u"\u306b\u3087\u3002") data, size = encode(data, errors) return data, size def decode(self, data, errors="strict"): # string to unicode data, size = decode(data, errors) data = data.replace(u"\u3002", u"\u306b\u3087\u3002") return data, size class StreamReader(Codec, BaseStreamReader): pass class StreamWriter(Codec, BaseStreamWriter): pass def getregentry(): return Codec().encode, Codec().decode, StreamReader, StreamWriter if __name__ == "__main__": import sys sys.stdout = codecs.EncodedFile(sys.stdout, ENCODING, "nyo")
$ python2 -i nyo.py >>> print """\ ... 埋め立てのためにこの前作ったスクリプトうpしとく。 ... みんなも自慢のヤシをはって欲すぃ。 ... じゃあ、あとよろしく。 ... """ 埋め立てのためにこの前作ったスクリプトうpしとくにょ。 みんなも自慢のヤシをはって欲すぃにょ。 じゃあ、あとよろしくにょ。 >>>
よーし、パパも新スレ立てちゃうぞー
そこでまたブチ切れですよ。
お前らな、「ぱいそん!ぱいそん!」っていいたいだけちゃうんかと。
もう見てらんない。
1069 :
デフォルトの名無しさん :04/04/08 08:43
(´・∀・`)ヘェー
ネタスレにするなら >(´∇`)ノPythonのお勉強 Part5ヽ[・∀・] の方が良かったのぅ…
漏れは 番長避けに 【はきゅ〜ん】 が良かった
パッキュンワッ! チュッチュ〜ン♪
微妙に堀江に似てるとオモタ
タプルを捜すためだけで Python を入れた漏れって orz