3 :
デフォルトの名無しさん :04/04/07 16:09
(゚∀゚)タプル!!
>>3 > python って関数内部で、引数の値を変更することはできますか?
呼出し元の引数として与えられた局所変数の値を呼び出された関数の中で変更する
ということなら、できません。
そういうことが必要だとしたら、クラスを定義することを考えるのがよいです。
その変数は、二つの関数(呼び出す側と呼び出される側)から共に操作される対象、
すなわち一個のオブジェクトである可能性が高いからです。その変数をメンバ、
二つの関数をメソッドとしてクラスを定義すれば、呼び出される側から変数の値を
変更することが可能になります。
引用のリンク先の__call__や__repr__の用例はあまりいい用例とは思えません。
参考程度に留めるのがよいと思います。
(余談:Pythonでもどの言語でもそうですが、変だなと思うことをしたくなったら
プログラムの設計や問題へのアプローチを見直すのがよいと思います。妙なことを
しなくても自然に書ける解が往々にしてあるものだからです。)
>>5 やはり出来ないですか。
で、今回は、関数の戻り値を (゚∀゚)タプル!! にして解決しました。
関数を class method にする方法も考えましたが、
引数受け渡しのためだけにクラスとクラス変数を作るのは、
global 変数を作のとあまり変わらない気がしたので、今回は見送りました。
もちろん、class に括った方がいい場合は、そうします。
余談、参考になりました。ありがとうございました。
>>6 def func(x):
x.append(4)
a = [1,2,3]
func(a)
print a
としたら、何が表示されるでしょうね?
本スレ認定
++本スレに激しくやる気復活++
11 :
デフォルトの名無しさん :04/04/07 21:21
5と7の「引数」の解釈=呼び出す側の変数 10の解釈=呼び出された関数の中の変数
>> 11 _| ̄|●" スンマセンスンマセン
13 :
デフォルトの名無しさん :04/04/07 22:48
>>13 少なくとも10はネタじゃない。引数の解釈が違っただけ。
つーかネタに見える方がどうかしてる。
喪前がネタスレに逝け。そのまま帰ってくるな。
15 :
デフォルトの名無しさん :04/04/07 23:34
ばばんばばんばんばん ハァ〜 ビバノンノン
おまいらのお陰でPythonスレも四つに分裂したぞ もうちょっとがんばればperlに勝てる
敗北者スレも立てるか・・・
Pythonで作られたゲーム・エミュレーターはありますか?
(゚∀゚)tuple!
22 :
デフォルトの名無しさん :04/04/11 18:28
いい加減意地を張るのをやめてRubyに統一しようよ。 リソースの分散はあまりにももったいない。 Rubyに対する明確なアドバンテージを示せないなら今すぐ開発をやめるべきだと思うがいかがかな?
統一言語 RuPy のスレはここでつか?
( ´,_ゝ`)プッ rubyだって…pythonの利用者数を知らないのかね?
Parrot や .NET の時代に「言語の統一」なんてもはやナンセンス。 好きなのを使えばいいだけ。
>>22 いい加減意地を張るのをやめてハングルに統一しようよ。
リソースの分散はあまりにももったいない。
ハングルに対する明確なアドバンテージを示せないなら今すぐ会話をやめるべきだと思うがいかがかな?
とか逝って欲しいんだろ? このマゾヒストが。
おまいら、コピペ厨ごときに釣られるなよ。
>>25 Parrotキタ━━━━(゚∀゚)━━━━!!
絵に描いた餅とはこのことだな(プププ
RubyとPythonもどっちも使っています。 正直、自分でも何でかわかりませんよ
"""Koch curve""";# 2004-04-11, placed in the public domain. from math import cos, sin, radians from Tkinter import Tk, Canvas CosA = cos(radians(60)); SinA = sin(radians(60)) def koch(d, (x0, y0), (x4, y4)): if d == 0: draw_line(x0, y0, x4, y4) else: rx, ry = (x4-x0)/3., (y4-y0)/3. x1, y1 = x0+rx, y0+ry x2, y2 = x1+CosA*rx-SinA*ry, y1+SinA*rx+CosA*ry x3, y3 = x0+2*rx, y0+2*ry koch(d-1, (x0, y0), (x1, y1)) koch(d-1, (x1, y1), (x2, y2)) koch(d-1, (x2, y2), (x3, y3)) koch(d-1, (x3, y3), (x4, y4)) D, W, H = 5, 1000, 500 root = Tk() can = Canvas(root, width=W, height=H, highlightthickness=0, bg='black') can.pack(expand=True, fill='both') def draw_line(x0, y0, x1, y1): can.create_line(x0, H-y0, x1, H-y1, fill='cyan') koch(D, (0, 100), (W, 100)) root.bind_all('<Escape>', lambda ev: root.destroy()) root.mainloop()
>>28 すでにJythonもあるし、方向性としてはおかしくないとおもうけど。
(´-`).。oO(訳の分からない返しをする厨が混じってるな。。。)
わざわざこんな辺境のスレまで来てご苦労なこった
win32apiのモジュールでGUIくつれんの?
うぉおおお wxPythonってFlash見れるじゃん! まじちびったと思ったら、 ジョイスティック扱えるんですか! うんこぶりぶりです!!!!!!!!!!!
python での 2chブラウザってあるの?
KittyWalk Monarch BBS browser たぶんこれだけ。 Monarchは動かしたこと無い。
eclipseで使えるpython plugin でお勧めのヤツありますか?
43 :
デフォルトの名無しさん :04/04/16 19:48
(^Д^)ぬるぽ
Pythonで、文字列のコーデックを自動的に判別して、 Unicodeに自動的に変換してくれるような拡張モジュールあったら教えて
くださいお願いします。
48 :
デフォルトの名無しさん :04/04/23 22:48
pykfはUnicodeへの変換できないよ pykfでguessしてPythonでunicodeに変換しるしかねい
〃〃∩ _, ,_ ⊂⌒( `Д´) < ヤダヤダ! `ヽ_つ ⊂ノ ジタバタ
パーン
_, ,_ ∩
( ‘д‘)彡☆))Д´) ←
>>49 ⊂彡
甘ったれるな。
import codecs class Codec(codecs.Codec): def encode(self, data, errors="strict"): # unicode to string raise NotImplementedError def decode(self, data, errors="strict"): # string to unicode if filter(lambda c: "\x80" < c < "\x8e" or "\x8f" < c < "\xa0", data): decode = codecs.getdecoder("Shift_JIS") elif filter(lambda c: "\xa0" < c, data): decode = codecs.getdecoder("EUC-JP") else: decode = codecs.getdecoder("ISO-2022-JP") return decode(data, errors) class StreamWriter(Codec, codecs.StreamWriter): pass class StreamReader(Codec, codecs.StreamReader): pass def getregentry(): return Codec().encode, Codec().decode, StreamReader, StreamWriter if __name__ == "__main__": u = u"ABC\u6f22\u5b57\u3072\u3089\u304c\u306a" assert u == unicode(u.encode("ISO-2022-JP"), "guess") u = u + "\uff76\uff80\uff76\uff85" assert u == unicode(u.encode("EUC-JP"), "guess") assert u == unicode(u.encode("Shift_JIS"), "guess")
unicode("....", "guess") 的に使用可能。 decode() 内の文字コード判別は pykf 等を使って書き直すのがいいかも。 エンコード時の文字コードは推定できない(笑)ので未実装エラーとした。 guess.py は public domain software とする。
おやおや ずいぶんと宵っ張りの朝寝坊さんですこと ちゃんと社会生活できているんでしょうか(プププ
54 :
デフォルトの名無しさん :04/05/03 16:52
Gentooで使われているPythonを勉強してみようと思いました。 ところで、ノーマルの状態では日本語は通らないらしいですね。 dev-pythonの下に cjkcodecs iconvcodec japanesecodecs 3つのcodecsがありましたがどれがいいのでしょうか?
JapaneseCodesc をインストールすると、日本人におなじみの
euc-jp, iso-2022-jp, shift_jis も使えます。 CJKCodecs を
インストールすると、日本語のコーデックの他に、中国、韓国の
コーデックも利用可能になります。
また、Python 2.4 以降は、CJKCodecs が Python 標準配布物に含まれ、
新たなコーデックの追加インストールも不要になる予定です。
http://www.python.jp/Zope/articles/japanese/Python4Japanese-2 だそうですので、2.3.3とcjkcodecsの組み合わせて使うことにしました。
お騒がせしました。
JapaneseCodecs/CJKCodecs は JIS X 0213:2004 には対応せんのかな。 てか、Python 以外でも対応したとこってあるのかな?
Perlは?
>>56 CJKCodecsは JIS X 0213 に対応してるんじゃない?
> Supported Encodings
> Japanese: cp932 shift-jis shift-jisx0213 euc-jp euc-jisx0213 iso-2022-jp iso-2022-jp-1 iso-2022-jp-2 iso-2022-jp-3 iso-2022-jp-ext
この shift-jisx0213 と euc-jisx0213 って
JIS X 0213 対応版の Shift_JIS と EUC-JP じゃないのかな。
>>59 それは JIS X 0213:2000 だから、
ところでみんなPythonで何作ってんの?
>>61 最近作った(変更した)ものを ls -lt ~/python/*.py | head の出力から抜粋。
以前似たようなカキコをしたので一部かぶってるかも。
guess.py - 文字コード判別コデック。
>>51 に貼った。
dump_folha_online.py - 某ネット新聞の記事をテキスト化。htmllib/formatter使用。
tuple_anime.py - たぷるタソのテキストアニメ。反応がなくて悲しかった。
tr.py - 翻字コマンドtrの実装。他スレに貼った。反応がよくてうれしかった。
cannalib.py - Cannaクライアント。Cannaプロトコルでサーバと直接おしゃべりしてかな漢字変換。
namiki.py - IRCログ取りロボット。某チャンネルに常駐。
dml2latex.py - XML形式の日記をLaTeXに変換。某blogの製本サービスに触発されて古いコードを更新。
nyo.py - 語尾を「にょ」に変換。Unicodeコデックとして実装。過去スレに貼った。
dailynews2tex.py - NHK国際放送のニュース原稿をLaTeXに変換。二段組でコンパクトに印刷。
live.py - 随時更新されるウェブカメラの静止画像を定期DLして表示するビューワ。犬板に貼った。
dlpo.py - 某オンライン辞書のクライアント。古いネスケだと利用できないので仕方なく作った。
romaji.py - ローマ字をかなに変換。辞書で状態遷移図を作ってみたがアプローチとしてはイマイチ。
dml2html.py - XML形式の日記を閲覧用HTMLに変換。すこしずつ手を入れながら5年近く常用。
gtkhtmlconv2.py - 多国語テキストをHTML文字参照に変換するためのGUIエディタ。GTK+ 2.x使用。
今までPerlを使ってきてPythonをちょっと勉強始めたんですが、 Perlのようなデリファレンス時のごちゃごちゃしたものが 一切ないのがいいですね<Python
Monarch。潜水艦ゲーム。あと吉野家マーリン。
>>64 こんな感じでした。
31 guess.py
58 dump_folha_online.py
22 tuple_anime.py
23 tr.py
190 cannalib.py
334 namiki.py
320 dml2latex.py
30 nyo.py
70 dailynews2tex.py
78 live.py
156 dlpo.py
221 romaji.py
458 dml2html.py
89 gtkhtmlconv2.py
2080 合計
すくな!
楽な言語だ。
俺もPython使おう。
オレも見てみたけど Python で 500行超えるコードってほとんど書かないな。
おまいらは 他の言語ではバリバリコード書くわけですか?
必要な機能が満たされていれば、コードの行数なんて関係ない。 問題はおまいの作るプログラムに課せられた機能量のこと。
そうだにゃ
だが、必要な機能が複雑になれば
コード量もそれに比例して大きくなってゆくだろ
つまりだにゃ
Python以外では複雑なコードを書いていて、Pythonでは単純なことしかしないから行数が少ないのか
そもそも複雑なコードを書く能力がないから少ない行数しか書かないのかを
知りたかったわけだにゃ
>>72 なんか厨房のいいわけみたいだにゃ(w
>>73 > 必要な機能が複雑になれば
> コード量もそれに比例して大きくなってゆく
一般論としてはそうだけど、Pythonではこれは当てはまらない稀ガス。
少ない行数の割に多くの機能が得られることがある一方で
たくさん書いた割には大した機能の量にならないこともある。
実感として、Pythonでは得られる機能の量と行数とが一致しない。
その理由としては高度な機能が集められたモジュール群が大きい。
既存のモジュールをうまく使いこなすと行数と機能量が解離する。
urllibモジュールやreモジュールはその典型。
逆に、大きな辞書や文字列を定数としてコード中に列挙すると
小さな機能の割にやたらと行数の多いプログラムになったりする。
ついでに付け加えると、GUIライブラリはどれを使っても行数が多くなるっぽい。
機能量<行数となる(作るのが面倒くさい)プログラムの典型。
その点、GUIとして既存のブラウザが利用できるWebアプリケーションは楽でいい。
とりあえず行数が少なくて済むからPython∩(・ω・)∩ばんじゃーい C/C++/Javaはうんこ、とか言ってるやつは厨房ケテーイですか。
>ついでに付け加えると、GUIライブラリはどれを使っても行数が多くなるっぽい。 そうだね コード量は,機能の組み合わせ数と絶対数に比例するんだよね >一般論としてはそうだけど、Pythonではこれは当てはまらない稀ガス。 PythonでもGUI作ろうとすると行数多くなるだろ けっきょくPython以外でも複雑なコードは書かないってことだな よくわかった希ガス(ブワッハッハッハッ
ジョーは酒場で論理学の教授と知り合った。 「論理学ってのはどういったもんですか?」 「やって見せましょうか。お宅には芝刈機があります?」 「ありますよ」 「ということは、広い庭があるわけですね?」 「その通り!うちには広い庭があります」 「ということは、一戸建てですね?」 「その通り!一戸建てです」 「ということは、ご家族がいますね?」 「その通り!妻と2人の子供がいます」 「ということは、あなたはホモではないですね?」 「その通り!ホモじゃありません」 「つまりこれが論理学ですよ」 「なるほど!」 深く感心したジョーは、翌日友人のスティーブに言った。 「論理学を教えてやろう。君の家には芝刈機があるか?」 「いや。ないよ」 「ということは、君はホモだな!!」
それはアメリカンジョークというより、落語。
>>75 あんたが Python そのものを組んだり
MMX命令を使おうかどうか悩むような
類いのプログラムを作ったりしている
のでないならそれでいいよ。
世の中にはうんこまみれにならざるを
えない分野もあるっていう事で。
C で拡張モジュールを作ったことがあるヤシが真の Python プログラマ。
お尋ねします。 ftpサーバでファイルを受信したら、そのファイルに対して いろいろ実行してくれるようなものが欲しいと思ったのですが、 普通のftpサーバでは、自分で勝手に機能をアタッチできるようなものなんて 無さそうなので、試しに自分で作ってみようと思いました。 でも、ネットワークのことなんて余り知らないしどうしようと思ってたら pythonっていろいろライブラリが用意されていて便利ということを聞いたので python勉強してみようと思いました。 でも、調べて見たらftpクライアントのライブラリは合ったのですが、ftpサーバ用の ライブラリって見当たらないんですが、やっぱりないのでしょうか? あるいはpythonで書いたftpサーバのスクリプトとかどっかに落ちてないでしょうか? ご存知の方、よろしくお願いします。
>>83 Zope
ウソ
Twistedあたりを探してみれ
いずれにしろ
そういうことするためにはネットワークの知識が必要だという希ガス
ftp いじるなら rfc959 に目を通しといたほうがいいような希土類 www.ietf.org/rfc/rfc959.txt
>>84-86 んー、やっぱりいろいろ勉強する必要がありそうですね。
特に、rfcはヒトスジナワではいかなそう…
pythonとrfc、じっくり勉強してみます。
どうもありがとうございました。
>>87 そこまでして自作のサーバを作りたいのは何か特別な理由でもあるのですか?
普通のftpサーバに手を入れる方が百倍簡単だと思うけど。
90 :
デフォルトの名無しさん :04/05/07 11:56
>>87 小手先の知識でもなんとかなるかも試練が
詳細を知っておかないと、はまった時に抜け出せない
ま、プログラミングに限らず、
根気のないやつはなにやっても駄目だがな...
>90 ほんとに出来る人ってこういうこと言わないんだよね。 こういうこと書くやつって、大抵口先だけの奴しかいない。
>>88-90 あ、いえ、どうしてもって訳でもないんですけど、
もともとはftpサーバで受信ファイルに何かさせる機能ぐらいは
あると期待していたのに、意外とないもんなのね。
ということで、せっかく良い目標が出来たので、いろいろ勉強しながら
自分で作ってみたかっただけです。
で、導入としてはお手軽な方法が良いと考えて、何かないかと探してた訳です。
締め切りのある作業は嫌いなんですが、自分のペースで勉強しながら
何かやるのは好きなんです。
お騒がせしました。
>>91 ゴメンね、
なにか気に障っちゃったのかな?(プププ
口先だけのやつってホントにムカつくよね(プンスカ!
>>93 えらい!
がんばれ!
ついでにいうと、
締め切りなんて多めに見積もっておけば何とかなる!(w
>>93 > 締め切りのある作業は嫌いなんですが、自分のペースで勉強しながら
> 何かやるのは好きなんです。
理想としてはね。
なかなかそんなこといってられないけど。
締め切りが迫ってきたら そこそこいい感じにまとめあげる能力は重要(w 延々手元で開発して 成果を出せない奴は厨 あ、決して91のことじゃないからね(プププ
粘着質が一匹いるみたいだな GW早く終わらんかね
3匹くらいだと思う。
>>96 >締め切りが迫ってきたら
>そこそこいい感じにまとめあげる能力は重要(w
これ若い時の俺!!!(・∀・)イイ
>延々手元で開発して
>成果を出せない奴は厨
今の俺だ・・・(´・ω・`)ショボーン
>>96 Python自体が
自ら締め切りをもうけつつ、着実に成果を出力している成果物の好例だと思う
Guidoパパは優秀な開発者であると同時に、優秀なプロジェクトマネージャーでもある
>>93 亀レスだけど、
FTP鯖のログを見てうpが記録されていたら××するというスクリプトを
cronで定期実行するのが簡単でいいのではないだろうかとオモタ。
os.systemって終了ステータスを返すんですね。 コマンドの出力文字列を得るにはどうするのが手軽でしょうか?
commands.pyというのがあった。
正規表現オブジェクトを dump, loadってできるでしょうか? marshalモジュールではサポートされてないようですが。
レスどうもです。 こちらでも先程見つけて試していたのですが、dumpされたファイルを覗くと、 どうも reオブジェクトの元になった文字列の形で保存してるようなので、 コンパイル済みのオブジェクトを使い回して 高速化しようという目的には合わなそうでした。残念。
どうでもいい話だけど、正規表現のコンパイル時間を節約したい状況ってどんなの?w
情報ルータでも作りたいのかな?
PythonからDirectXを直接使う方法ってありますか?
>>111 pygameとかのライブラリ経由じゃなくて直接ってんなら、
C/C++で拡張するか、COM経由(実用的かはしらん)になる。
マルチプラットホームで使えるCursesみたいなテキストベースのインターフェースを 提供するライブラリはないでしょうか?
curses を使って、 Windows 用は cygwin でごまかす。
よく見たらcurses非互換でした・・・ 誤情報スマソ
164, 162 という数字のペアから 'あ'を得るには どうしたらいいのかな。
chr(164)+chr(162)
120 :
デフォルトの名無しさん :04/05/24 02:54
>>> import lib2ch >>> thread = lib2ch.open("tech", "1081312810") >>> thread.age() >>>
>>> thread.age() Traceback (most recent call last): File "<stdin>", line 1, in ? StopIteration >>>
lib2ch保水
保守
124 :
デフォルトの名無しさん :04/05/27 23:26
hottondo baguphiqqusu dane
print u"\u305d\u3046\u3060\u306d\u3001\u30d0\u30b0\u30d5\u30a3\u30c3\u30af\u30b9\u30ea\u30ea\u30fc\u30b9\u3060\u3057\u306d\u3002"
中国語plz
print u"\u662f\uff0c\u8fd9\u662f\u4fee\u6b63\u9519\u8bef\u7684\u7248\u672c\u3002"
welldone
hoge.fugaと同じ事を、 hoge に "fuga"という文字列を使ってやりたいのですが、 どうしたらいいのでしょうか? rubyでの hoge.send("fuga")相当の事です。
>>131 そうです。ありがとうございました。
組み込み関数ぐらい、把握しとかなきゃダメですね……。失礼しました。
133 :
デフォルトの名無しさん :04/05/31 00:05
stackless python を使ってみようと思ったんですが、落としてきたアーカイブの中にある python23.lib,python23.dll,python23.expをどこに置けばいいんでしょうか?特にpython23.exp。
.libや.expは削除しても問題ない。
135 :
デフォルトの名無しさん :04/06/01 00:23
ありがとうございます。とりあえずpython23.dllをc:\windows\system32 に入れたら サンプルは動きました。
[Python-Dev] pre-announce: Python 2.4a1 is about a month away
http://mail.python.org/pipermail/python-dev/2004-May/045028.html これは、約一ヵ月後に迫った Python 2.4 の最初のアルファ版の事前アナ
ウンスです。この告知の目的は、皆さんの注意を喚起することです。もし
2.4で修正してほしいバグがあるならば、今から検討を始めて下さい。
このリリースサイクルの間ずっとバグ修正を歓迎します。ただし、最初の
ベータ版以降は、振舞いの変化をともなうバグ修正が認められる見込みは
比較的少なくなります。
では、修正してほしいバグがある場合、あなたは何をすべきでしょうか?
○ そのバグが SourceForge (SF) に登録されていない場合は登録して下さい。
○ 登録されたら、その問題を修正するパッチ、または少なくともそのバグを
例証する単純なテストプログラムを追加することを検討して下さい。
○ もし他の誰かがバグ修正を提供してくれたら、その修正があなたにとって
具合のよいものかどうかを調べて調査結果をバグ情報に追加して下さい。
○ うまく機能するバグ修正がある場合は、遠慮なくその修正をCVSに移すこと
を依頼するメモを追加して下さい。SF の Python 用バグ追跡システムには
*大量*のバグが登録されていて、バグが見過ごされやすいのです。
単に2.4で何が起こるのかに興味がある場合は、現行の開発バージョンの文書
「What's New in 2.4」を見て下さい。
http://www.python.org/dev/doc/devel/whatsnew/whatsnew24.html Python 開発チームを代表して感謝の意を表します!
Anthony
[選り抜きのバグ修正を遅れずに提出する機会を皆さんに与えるために、この形式の
事前アナウンスが今後の Python の全バージョンのリリース工程の一部となることを
期待しています。この工程に関する意見があれば、遠慮なく私にメールを下さい]
--
Anthony Baxter <anthony at interlink.com.au>
“幸せな子供時代を過ごすのに遅すぎるということはない”
質問です。 pythonでファイルをアップロードするCGIを作りたいんですが、 便利なスクリプトや情報があれば教えてください。 (簡単なセキュリティとしては、ファイルサイズとか何が考慮 されているのかな?)
けこーん
>>143 >>144 ファイルサイズのチェックだけ、というのが順当な線のよう
ですね。ありがとうございました。
エロい人にしつもん でこれーたーしんたっくすって何?
例えば def hogetahogeo(foo, bar) as classmethod: みたいに書くと(書式は未定らしい) classmethod() 使わなくてもクラスメソッドにしてくれる機能らしい。 正直要らん気がする。 def public static hanamogera(): なんて気分悪い。 まして def hodgepodge(){'type': 'classmethod'}: なんてやめてくれよ。
αではいろんな書き方できるようにして みんなに試してもらえばいいジャン とか言ってる香具師がいてなえた(;´Д`)
新しい言語仕様はもうお腹いっぱい、という人は挙手して下さい。 ノシ
pythonって日本語ちゃんと使えない時点でアウトだね hoge = ['DQN', 'ドキュン', 'いやーん'] とかできないでしょ rubyだとできる
釣ってるつもりでしょ。
ruby 使いって、どうしていやらしい人たちばかりなの?
153 は釣りかもしれないが、じっさいそう思ってる人もいるのかもよ。
>>157 unicode()使ったり,バイト列で書かなければならないと思っている人多い。
PythonでWindowsの音量をコントロールしたいのですが, 可能でしょうか
iconv_codec と CJKcodecs入れてみたけど, ドキュメントないし,ソース見てもよくわからないし 文字コード変換の仕方を解説してあるところアリアますか?
>>162 >>159 のリンク先の解説では不足かな?
コデックの使い方は全部共通でコデック名だけが違う。
意図したコデックを指すコデック名を与えればいいだけだよ。
例:unicode("日本語EUC", "iconvcodec.euc-jp")
日本語の解説が見当たらないんだけど codecs.open() と codecs.EncodedFile クラスは知ってると便利だと思われ。 例えば、日本語 EUC のファイル (filename.txt) があったとして、 >>> import codecs >>> file = codecs.open("filename.txt", "r", "euc-jp") のようにファイルを開くと file.readline() は Unicode 文字列を返す。 つまり EUC-JP → Unicode 変換を自動的にやってくれる。また、 >>> file = codecs.EncodedFile(open("filename.txt"), "sjis", "euc-jp") のようにファイルを開くと file.readline() は Shift_JIS のバイト列を返す。 つまり EUC-JP → Unicode → Shift_JIS 変換を自動的にやってくれる。 codecs.open() は以下の処理と等しい。 >>> Reader = codecs.getreader("euc-jp") >>> file = Reader(open("redhat73")) ファイルオブジェクトが StringIO クラスのインスタンスなどの場合は この Reader クラスでラップする方法が使える。 以上は読み出しについての話だけど書き込み時にも同様の自動変換ができる。 Writer クラス (入手するには codecs.getwriter()) というのもある。 興味があれば調べてみてちょ。
うへ。ミスった。 >>> file = Reader(open("redhat73")) このファイル名に意味はないです。
>>163 >>164 ありがとうございました。
UTF-8な文字列をshift_jisでかいたスクリプトを使って,
shift_jisで書き出すときに
# coding: shift_jis
hoge = unicode(utf8string,"UTF-8")
print hoge
としたらうまくできました。
>>165 ありがとうございます。
ファイルを読み書きしていたので,
これは透過的にできていいですね。
googleで見つけたtransliterate (@ → (1) のような変換)もやって見ます
でも,UTF-8にあって,shift_jisにない文字が入っているとエラーはきますね。 たとえば ñ (nの上に〜)が入っていると UnicodeEncodeError: 'cp932' codec can't encode character u'\xe3' in position 12: illegal multibyte sequence と怒られる アクセント付きの文字はアクセントなしの文字に変換するとか, ない文字は豆腐にしてだすとか,そこまで親切にはやってくれないのですね。 出力先がhtmlブラウザの場合は,そういった文字たちをUnicode実態参照に変換する ような処理をかませばいいんでしょうけど。
hoge = unicode(utf8string,"UTF-8", 'replace') でトウフ
hoge = unicode(utf8string,"UTF-8", 'ignore') で無視
hoge = unicode(utf8string,"UTF-8", 'xmlcharrefreplace') でXMLエンティティ
hoge = unicode(utf8string,"UTF-8", 'backslashreplace') でバックスラッシュエスケープ
ttp://www.python.jp/pub/doc_jp/lib/module-codecs.html
>>171 ありがとうございます。
もっとドキュメント読み込みます。
IDLEではうまくいきますが,なぜかコマンドプロンプトではうまくいきません コマンドプロンプトでは,errorをstrictにしたのと同じ結果が出ます。 replaceやignoreが聞いていないようです。 もう少し試行錯誤してみます
unicode() で Unicode 文字列を作っているところじゃなくて,別の (cp932にエンコードして) 書き出すところがエラーになっていませんか.
子プロセスの STDOUTを、自プロセスから /dev/nullあたりに 繋ぎ直す事は可能でしょうか?
>>178 おぉ、fileno()を加えたらできました。
……とはいうものの、cursesアプリなんですが、
curses.endwin()がうまくいかないや。ちょっと考えてみよ。
linux初心者なのですが、JapaneseCodecsをインストールしようと思うのですが /usr/lib/python2.3/config/Makefile (No such file or directory) と表示されてインストールできません。 どうすればいいのでしょうか、どなたか教えてください。
情報少ねーな、おい。
>>180 もしpythonをパッケージで導入しているなら、
python*-devel や python*-dev
が入っていない。
どうもありがとうございます。できました。 二重かきこみすみません。
asm --> C --> C++ or Python ? (゚∀゚)Python!!
186 :
デフォルトの名無しさん :04/06/10 02:56
(゚∀゚)ノシ PyPython!!
187 :
デフォルトの名無しさん :04/06/10 03:07
Pythonって、ギガトンブローとか使えるんですよね?
java.....(-_-) perl.....( ´,_ゝ`) ruby.....('A`) python...(*´ω`*)
SmallTalk... [x x]
PHP... ($ $) PostScript { % _ % } def
日本語以外の文字も含んだユニコード文字列に対して、 中に含まれる所謂半角カナ部分を全角カナにして返すようには、 どうするのが速くっていいですかね。 日本語だけなら pykf そのままですが。
よくやるのはこんな感じ: h2z = {} for (z,h) in zip(u"アイウエオ", u"アイウエオ"): h2z[h] = z def conv(s): return "".join([ h2z.get(c,c) for c in s ]) 「プ」→「プ」などの変換もやりたいとすると、ちょっと面倒だな。
'import site' failed; use -v for traceback これは何ですか?
じゃあこんな感じで。(手作業)ワ行の解釈は適当。 z = list(u"ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ・ー、。「」") h = [u"ァ", u"ア", u"ィ", u"イ", u"ゥ", u"ウ", u"ェ", u"エ", u"ォ", u"オ", u"カ", u"ガ", u"キ", u"ギ", u"ク", u"グ", u"ケ", u"ゲ", u"コ", u"ゴ", u"サ", u"ザ", u"シ", u"ジ", u"ス", u"ズ", u"セ", u"ゼ", u"ソ", u"ゾ", u"タ", u"ダ", u"チ", u"ヂ", u"ッ", u"ツ", u"ヅ", u"テ", u"デ", u"ト", u"ド", u"ナ", u"ニ", u"ヌ", u"ネ", u"ノ", u"ハ", u"バ", u"パ", u"ヒ", u"ビ", u"ピ", u"フ", u"ブ", u"プ", u"ヘ", u"ベ", u"ペ", u"ホ", u"ボ", u"ポ", u"マ", u"ミ", u"ム", u"メ", u"モ", u"ヤ",u"ャ", u"ユ", u"ュ", u"ヨ", u"ョ", u"ラ", u"リ", u"ル", u"レ", u"ロ", u"ゥァ", u"ワ", u"ウィ", u"ウェ", u"ヲ", u"ン", u"ヴ", u"カ", u"ケ", u"・", u"ー", u"、", u"。", u"「", u"」"] z2h = dict(zip(z, h)) h2z = dict(zip(h, z)) def hanzen(ustr): return ''.join(h2z.get(uc, uc) for uc in ustr) def zenhan(ustr): return ''.join(z2h.get(uc, uc) for uc in ustr)
折れはよく re.sub() を使うんだが、この場合は list comprehension の方がずっと速いね。 $ cat a.py import re, time, sys HAN = u"\uff71\uff72\uff73\uff74\uff75" ZEN = u"\u30a2\u30a4\u30a6\u30a8\u30aa" MAPPING = dict(zip(HAN, ZEN)) n = int(sys.argv[1]) s = HAN * n def replace(match): return MAPPING[match.group()] re_aiueo = re.compile(u"[\uff71-\uff75]") t = time.time() r = re_aiueo.sub(replace, s) print time.time() - t assert r == ZEN * n t = time.time() r = "".join([MAPPING[c] for c in s]) print time.time() - t assert r == ZEN * n $ python2.3 a.py 100000 32.1520619392 5.83971500397
>>197 それは濁点あつかえないし、UCS-2/4の半角/全角カナの配置から考えると
苦しくないか?
問1.タプルと配列の違いが良く分かるように書きなさい 答え.萌え度が違う
>>198 > それは濁点あつかえないし、UCS-2/4の半角/全角カナの配置から考えると
> 苦しくないか?
そかな。コード値の並びに依存しないために辞書(変数 MAPPING)を使ったんだけど。
濁点は re.compile(u"[\uff61-\uff9f][\uff9e\uff9f]?") のような正規表現と
それに対応する MAPPING の内容を準備することを考えていた。
むしろ濁点を扱うのが難しいのは list comprehension の方では?
一文字ずつ処理されるから、例えば
>>196 のコードの h2z[u"ガ"] というエントリは
実際には参照されないと思われ。
タプルとはPerlでいうと何に相当するんでしょうか?
あのぅ・・・
>>195 のメッセェジが必ず出るんですが何故でしょうか?(結果には支障はない今のところは)
% ./hoge.py
'import site' failed; use -v for traceback
Hello World!
こんな感じ
消したい
>>201 Perlにはない。MLとかHaskellにはある。
>>202 use -v for traceback
>>195 site.py にエラーがあって import に失敗している。
site.py は Python の起動時に自動的に読み込まれる設定ファイル。
python -v hoge.py とするとエラーメッセージが(他の大量のメッセージと共に)表示される。
エラーの内容を確認して site.py を修正するべし。
206 :
デフォルトの名無しさん :04/06/12 01:13
>>200 Σ('o' これでどうかな
uc_ptn = re.compile(u"[\uff61-\uff9f][\uff9e\uff9f]?")
def hanzen(ustr):
return ''.join([h2z.get(uc, uc) for uc in uc_ptn.findall(ustr)])
def zenhan(ustr):
return ''.join([z2h.get(uc, uc) for uc in ustr])
s1 = u"デッドパロット"
s2 = u"デッドパロット"
print hanzen(s2).encode('shift_jis')
print zenhan(s1).encode('shift_jis')
findall() は良さげだね。list comprehension と正規表現のいいとこ取りだ。 あとは重箱の隅だけど「ア゙」とか「ン゙゙゙」みたいな変な文字の並びはどーなる?
z = list(u"ァアィ ... 「」゜゛") h = [u"ァ", u"ア", u"ィ", ..., u"「", u"」", u"゚", u"゙", ] にしといて、 def hanzen(ustr): firstpass = ''.join([h2z.get(uc, uc) for uc in uc_ptn.findall(ustr)]) return ''.join([h2z.get(uc, uc) for uc in firstpass]) なんてどうでしょう?
なんで Python 2.3.4 (final) なの? ~~~~~~~ 開発停止?(((; ゚Д゜)))ガクガクブルブル それとも次が 2.4.1 or 3.0.1 だから?(*´ω`*)
211 :
デフォルトの名無しさん :04/06/12 06:00
>>203 Haskellはちょっと触ったことがあるけど、
Haskellのタプル、およびリストというのは
どんな型でもOKの配列、統一された型による配列
という違いかと思いました。
(1,"abc") [1,2,3]
Pythonもこういう感じなんでしょうかね。
>>210 2.3.4 (final) というのは、2.3 系列の最終版という意味ではなくて
(alpha, beta, release candidateと続いてきた)2.3.4 のリリースの最終版という意味。
当然ながら一つ前のバージョンの 2.3.3 にも (final) があった。
これはすべての Python のリリースについて言える。
あ、待てよ。2.3.4 には alpha は中田かも。まあいいよね。 一般には final リリースまでそういう流れでダメ出しするということです。
unicode化した文字列での、各文字の全角半角を判定したいのですが、 何か、いい方法がありましたら、教えて頂けませんでしょうか。 文字列の桁数をそろえたくて、 今のところ、re.( '........', hogehoge )てな感じで、やってるんですが、 桁数をを全角に合わせると、半角の分、短くなっちまうもんで。 unicodeにこだわるものでもないです。 どなたか、ご教示をお願いいたします。
>>212 >統一された型による配列
それはuniform vectorでは?
リストもタプルも型混在可能だよん
>>213 ややこしいね
fixed の表記にしてほしいよ
整数(int, long)は 2.4 で統合されるみたいだけど、リストとたぷるは統合の話はない?
スレちがいだけどStringBufferとStringも統合されたほうがいい?
>>219 今から書くコードはlongで統一しておいた方がいいかな?
backward compatibility はあるにしても
>>220 リストとタプルって、mutable と immutable を区別するためのものなんですか?
>>223 コンパイラや実行環境がね。
暗黙の型変換があるから利用者はあまり意識しなくてもいける。
あとタプルなら辞書のキーにもつかえたりするね。
>>218 Pythonに限らずほかのソフトでもたまにみかけるぞ(final)って表記
>>216 ありがとうございます。
参考にさせて頂きます。
>>216 読んでみたけど、日本語に限った判定法みたい。
>>> def iswide(c): >>> return 1 < len(c.encode("japanese.ms932")) ... >>> iswide("a") False >>> iswide(u"\uff71") # ア False >>> iswide(u"ア") True >>>
なんで PyDS は Python 2.2 系じゃないとダメなんだよヽ(`Д´)ノ ぶっちゃけ断念したヽ(`Д´)ノ付属品がおおすぎてダルいんだよヽ(`Д´)ノ
>>223 General Python FAQ
4.15 Why are there separate tuple and list data types?
http://www.python.org/doc/faq/general.html#why-are-there-separate-tuple-and-list-data-types 4.15 なぜタプルとリストという別個のデータ型があるのですか?
リストとタプルは多くの点で似ていますが、普通は根本的に異なる方法で用
いられます。タプルは、Pascal のレコード、もしくは C の構造体と似たよ
うなものであると考えることができます。すなわち、タプルは互いに関連す
るデータの小さな集まりであり、一個のグループとして操作される別個の型
となり得るのです。例えば、デカルト座標は二つ乃至三つの数値のタプルに
よりうまく表現できます。
一方、リストは他の言語における配列に似ています。リストが保持するオブ
ジェクトの数は随時変化し、それらのオブジェクトはみな同じ型を持ってい
て一つずつ順に処理される傾向にあります。例えば、os.listdir('.') はカ
レントディレクトリにあるファイル群を表す文字列のリストを返します。こ
の出力を処理する関数は、普通はそのディレクトリにファイルが一つや二つ
増えても動作しなくなることはありません。
タプルは不変 (immutable) です。これは、一度タプルが作られるとその要
素を新しい値で置き換えることはできない、ということを意味します。リス
トは可変 (mutable) であり、リストの要素をいつでも変更することができ
ます。不変の要素だけが辞書のキーとして使えるので、タプルはキーとして
使えますがリストはキーとして使えません。
>>230 Python に class がなかったころの名残?
質問なのですが、javascriptでいうescape()や unescape()の代わりになる関数はありますか?
>>231 別にclassの有無とmutable/immutableの区別の有無は関係ないだろ…
tupleは使い捨て構造体みたいなものと思っている。 本来ひとつの値しか入らない場所 (リストの要素とか、 関数の返り値とか、辞書のキーとか) に複数の値を入れたいとき ごく自然にタプルを使う場面が出てくる。 例: 1. ", ".join([ "%s=%s" % (k,v) for (k,v) in dic.items() ]) 2. return (value, flag) 3. dic[(2,3)] = 8 (1.の例はやや冗長)
>>228 をを、1バイトunicode以外は、全角と見なすのですね。
参考にさせて頂きます。
h2z って、\u00a5 や \u203e は考慮する必要ないの?
カタカナ変換だろ。記号が入ってるのはサービスだよ!(逆ギレ)
if os.unlink(mailFile): print "removed: " + mailFile else: print "could not remove: "+mailFile で,削除が成功したのにcould not removeが表示されます os.unlinkは成功するとFALSEを返すのでしょうか?
インデント消えちゃいました if os.unlink(mailFile): print "removed: " + mailFile else: print "could not remove: "+mailFile
python ではふつうその手の手続きは失敗すると例外を発生するので、 返り値をチェックしても成功したかどうかわからないよ。perl とは流儀が違う。 たぶんやりたいのはこうでしょう。 try: os.unlink(mailFile): print "removed: ", mailFile except OSError, e: print "could not remove: ", mailFile, "error:", e
かぶった・・・しかも後出し負けっぽい適当レス・・・orz
>>242-243 ありがとうございました。
じつはこういったモダンなエラー処理を備えている言語を本格的に使うのは初めてでした
このような場合にも使えるのですね。勉強になりました。
wxPythonでカーソルをプログラムから動かすにはどうしたらよいでしょうか?
dirdict = {wxUP: "上", wxDOWN: "下", wxRIGHT: "右", wxLEFT: "左"} def moveCursor(direction, mickey=0): dirstr = dirdict[direction] mickeystr = "" if mickey: mickeystr = " %d ミッキーだけ" wxMessageDialog("カーソルを%sに%s動かしなさい" %(direction, mickeystr), "黙って言うとおりにしなさい")
真面目に回答するならこれ。 from wxPython.wx import * import time, math class TestApp(wxApp): def OnInit(self): self.frame = wxFrame(None, -1, '', size=(800, 600)) EVT_CHAR(self.frame, self.OnKey) self.SetTopWindow(self.frame) self.frame.Show(True) id = wxNewId() self.timer = wxTimer(self, id) EVT_TIMER(self, id, self.OnTimer) self.timer.Start(10) return True def OnKey(self, evt): self.ExitMainLoop() def OnTimer(self, evt): hw, hh = map(lambda x: x/2, self.frame.GetSizeTuple()) x = int(hw + 0.8*hw*math.sin(5*time.clock())) y = int(hh + 0.8*hh*math.sin(3*time.clock())) self.frame.WarpPointer(x, y) if __name__=="__main__": app = TestApp(0) app.MainLoop()
wxPython てみんなどれくらい使ってんの?
wxPythonはまだないんだけど、 Windowsでも見た目がおかしくないからWxはよくつかう。 上のソースをみてもインターフェースはまんま一緒みたいだね。
252 :
デフォルトの名無しさん :04/06/24 04:11
Tkinterに関して教えてください。 100×100のキャンバスに最大サイズの矩形を描くプログラムですが from Tkinter import * root = Tk() c = Canvas(root, width=100, height=100, bg='#ffffff') c.pack() c.create_rectangle(0, 0, 99, 99) #この数値がおかしい。 root.mainloop() 左上の座標が(0, 0)で、右下の座標が(99, 99)だと思ったのですが、 上のようにすると、矩形の上辺と左辺が描かれず、右辺と下辺が Canvasの端から離れてしまいます。 5行目を c.create_rectangle(2,2,101,101) に変えると、思いどおりの矩形が描かれるのですが この 2 と 101 は、どこから出てくる数値ですか?
誰かオジさんにOOPを分かり易く解説してくれ
>>252 Tcl/Tk の Canvas の座標系は (1, 1) が原点だと思われ。
漏れの環境 (Python 2.3.4、Tcl/Tk 8.3.4、X Window System) では
c.create_rectangle(1, 1, 100, 100)
とすれば100×100のキャンバスいっぱいに黒い線の矩形が描かれる。
c.create_rectangle(0, 0, 99, 99) だと左と上の辺が欠ける。
c.create_rectangle(2, 2, 101, 101) だと右と下の辺が欠ける。
255 :
デフォルトの名無しさん :04/06/24 05:55
>>253 データ+手続き=クラス
データとそのデータを直接操作する手続きをひとつのクラスにまとめるナリ。
オブジェクト指向プログラミングの基本はこれだけナリ。
クラス外からデータを操作したい場合はそのクラスが提供している手続きを呼
び出すことによってデータ操作を行なうナリ。この取り決めによって、データ
がクラス内に隠されるナリ。その結果、手続きの名前や引数を変更しない限り、
クラス内のデータの表現や処理方法をどのように変更しようと、クラス外のプ
ログラムに変更が必要になることはなくなるナリ。つまり、クラスの独立性が
高まるナリ。
ここでクラス外のコードは、別のクラスの手続きかも知れないし、Python の
場合は関数やスクリプトの地の文かも知れないナリ。
このようなアプローチ、すなわちオブジェクト指向でプログラムを書く場合、
何をクラスとするかが設計上の問題になるナリ。つまり、データと手続きとを
どのようにクラスにまとめるかということナリ。
解決したい問題のなかに現れるデータと処理とをいくつかのクラスにまとめて
クラス間の呼び出し関係を破綻なく構成するのは実は簡単なことではないナリ。
そのため、どのような関係のクラス群を構成すればうまくいくかという経験則
を知っておくのが重要ナリ。オブジェクト指向関係の書籍で扱われているのは
この経験則に他ならないナリ。片手間に読んでおくと設計の善し悪しに大きな
差が出るナリ。もちろん失敗から学べることも多いナリ。
分かったナリか?
>>254-255 ありがとうございます。
c.xview('moveto', 0)
c.yview('moveto', 0)
を追加したらうまくいきました。
>>256 分からん。
> データ+手続き=クラス
なぜ可読性を犠牲にするのかが分からん。
手続きとデータを分離した方がプログラムの論理が明解になるし
データも任意のものを用意できると思うのだが。
> データがクラス内に隠される
データ保護はある意味で汎用性が全くない気がするが?
> 経験則
要はアホのひとつ覚えのように手当り次第に組めばいいということか。
エレガントでないな。まず仮説というか理論を適用するような方法が確立できないものか。
ク、クマー 黒箱に可読性とかいってるの(プ
>>258 > > データ+手続き=クラス
> なぜ可読性を犠牲にするのかが分からん。
可読性とオブジェクト指向はまったく別の問題(直交した概念)だと思われ。
まあしかし、読みにくいオブジェクト指向のプログラムが多いのは認める(w
> 手続きとデータを分離した方がプログラムの論理が明解になるし
> データも任意のものを用意できると思うのだが。
具体例を挙げよう。
Python のファイルオブジェクトはオブジェクト指向的なものの一例だ。
組込み関数 open() で開く普通のファイルオブジェクトに加えて、
urllib.urlopen() で開くネットワーク越しのストリームや
StringIO.StringIO() で作る疑似ファイルオブジェクト(実体はメモリ上の文字列)もある。
ファイルオブジェクトを処理対象にするクラス外のプログラム(別クラスの手続きや
モジュール関数)は、与えられたファイルオブジェクトが特定の手続きを持つことを
要求する。よく用いられるのは readline() や write() などの手続きだ。逆に、必要と
される手続きをそろえたクラスは何でもファイルオブジェクトになることができる。
クラス外のプログラムを書くときに仮定することは、
そのクラスが所定の手続きを実装しているということだけ。
クラス内のデータ構造がどうなっているかは考える必要がない。
> > データがクラス内に隠される > データ保護はある意味で汎用性が全くない気がするが? ポイントは「データの保護」ではなくて「データの隠蔽」にある。 Python では他の型付きオブジェクト指向言語と違ってデータ保護機能が弱い。 ぶっちゃけ、無理にアクセスしようとすればいくらでもアクセスできてしまう。 それよりも大事なのはデータがクラス内に隠されているということ。 上のファイルオブジェクトの例で言えば、Python でファイルを操作するプログラムは 与えられたオブジェクトが readline() や write() を実装していれば動く。 手続きを介して内部データにアクセスするという「取り決め」を守っているからだ。 readline() や write() を実装したファイル的オブジェクト (file-like object) であれば 何でもよいという汎用性はオブジェクト指向プログラミングによって生まれた利点だ。
よく分からん
なんか知らんが相当たまってるんだな。
データを隠蔽したら何も見えないじゃないか!
隠蔽するデータと見せるデータは別に
脳味噌に電極ぶっさして直接信号を送り込むのではなく耳や目といったインタフェースを使って情報を送るということだ
全ては闇の中
248さんのプログラムの def OnTimer(self, evt): hw, hh = map(lambda x: x/2, self.frame.GetSizeTuple()) x = int(hw + 0.8*hw*math.sin(5*time.clock())) y = int(hh + 0.8*hh*math.sin(3*time.clock())) self.frame.WarpPointer(x, y) のところを、 def OnTimer(self, evt): x , y = wxGetMousePosition() self.frame.WarpPointer(x, y) とすると、マウスポインタが斜め下の方に勝手に行ってしまうのですが、 ポインタをその場に居させるようにするにはどうしたらよいでしょうか?
うちだと self.frame.WarpPointer(x-5, y-21) で静止します。 wxGetMousePosition()でとれてる値は正常なのでWarpPointerのほうの問題? 5と21ってなんだろ。
wxGetMousePosition() はスクリーン座標で、 window.WarpPointer() は window の座標系。 >> 272 の 5, 21 はウィンドウの(タイトルバーや淵より内側の)左上端 の座標でしょう。 window.ScreenToClientXY() を使って座標変換してください。 あと、単にカーソルを動かしたくないのなら、タイマよりマウスイベントを 拾ったほうがよいでしょう。また、イベント処理の中でカーソルの位置を 調べても泥縄で、最初から動かしたくないのなら OnInit() の段階で wxGetMousePointer() しないといけません。 たとえばこんな感じにです。 def OnInit(self): ... cx, cy = wxGetMousePosition() self.x, self.y = self.frame.ScreenToClientXY(cx, cy) EVT_MOTION(self.frame, self.OnMotion) return True def OnMotion(self, evt): self.frame.WarpPointer(self.x, self.y)
大量の定数があってそれを元にさまざまな機能を実現したい時とか 変数をグローバルにする事無く実装できるのがいいと思うんだけど。 似たような関数がたくさんあってどれも捨てられないような時、 使う変数も似通っているので変数をまとめて集中管理できるところとか。 なんでもかんでもオブジェクトには大反対ぃ〜
>>274 そういうごっちゃなコードがあったとしても、
モジュール化してネームスペースは分けましょう。
コードも日本語も読み手に負担をかけないように心がけるのです。
pythonのcgiでhttpのリターンコードをいじる方法ってありませんか? phpの header("HTTP/1.0 404 NotFound"); とか、 javaの response.setStatus(404); のようなことがやりたいのですが。
>>277 おお、なるほど。
即レスありがとうございます。解決しました。
そっち方面から調べれば良かったんですね。勉強になります。
6 名無しさん@お腹いっぱい。[sage] 04/06/26(土) 20:35 ,.. 、 ( ... \ , - 、 ヽ ::::... ヽ ( :::... \ ヽ ::::;... `ー‐- 、 \ :::.... ン´ `丶、 \ ::/ ヽ ソ ', | l / ̄ ̄ ̄ ̄ ヽ ● ●| < ぬるぽ ', ,○、 | \_____________ l (_人_)| } └┘ | | | | l /´ヽ / L.__,,ゝ、 _ r 〈 "'' ‐- 、__{__}‐'′
>>280 かのOSでも動くんだっけ?
こんどはメットをかぶったバージョンをよろ。
「ぬるぽ」はPythonだとどうなるん? None ・・・??
オレはこんなのよく出すけど。 AttributeError: 'NoneType' object has no attribute 'strip'
284 :
デフォルトの名無しさん :04/06/27 02:13
wxgladeをつついてみたけど使いかた、っていうか いままでやってたCUIとしての(この表現で合ってるのか?)pythonとの 連携のしかたが分からん。マニュアルみてもボタンの項目には ボタンのウィジェットの説明しかないし。 これってどうやったら実用レベルになれるんでしょうか(私が)
>>284 100% Python の wm のソースコードでも眺めていれば?
286 :
デフォルトの名無しさん :04/06/27 02:42
>283 じゃあ「のんた」ってとこか?
このスレは「ぬるぽ」はスルーで「のんた」がガッされるのか
\_WWWWWWWWWWWWWWWW/ ≫ のんたぁぁぁぁぁぁぁー! ≪ /MMM| /MMMMMMMMMMM、\ |/ ''''''─- .....,,,_ __人_人,_从人_.人_从._,人_人_  ̄"゙'"''''''─‐- ゙"ニ ─__ ) r──--- ...___ ) 待ちやがれ! 三 /レi ニ | ニ ≡ ) 頭叩かせろ! .ニ ( ´∀)| ニ |!カ_ ろ 待ってくれー!! | / つ つ Lニ-‐′´ )/⌒Y⌒Y⌒l/⌒Y⌒Y⌒Y⌒ '''''゙゙゙゙゙ ̄ _,, -‐'''∧_∧ っ ゚ --─="゙ ̄ ⊂(Д´;) ゜ {三} ニ─ _,.. ゝ、 つ===回 _,.. -‐'" しへ ヽ .{三} __,, -‐''" , ゙ー' , ' /
'''''| | .....,,,_  ̄| |''''''─‐- ゙"ニ ─__ | |─ガッ- ...___ | |/レi ニ | ニ ≡ | |`Д)| ニ |!カ_ | | つ つ Lニ-‐′´ ''| |゙゙ ̄ _,, -‐''' --| |"゙ ̄ ニ| | _,. | | _,.. -‐'" __,,| |''" | |
ぬるぽほどインパクトがないなあ…
294 :
デフォルトの名無しさん :04/06/28 01:42
>285 申し訳ない 煽るつもりはないんだけど でもたぶん煽ってるみたいに聞こえちゃうんだろうけど pythonでGUIプログラムを始めたい人って 皆、そんな遠回りしないと始められないんですか?
>>294 何?そしたら何かい、漏れに python/{tk, gtk} のガイトサイトを探してこいと
296 :
デフォルトの名無しさん :04/06/28 02:20
「日本語」という属性を捨てていいなら、 tkinter でも、pyfltk でも、pygtk1 でもいくらでも手軽な選択肢はある。 本当の原因は、日本語をきちんとサポートしているクロスプラットフォームの gui ツールキットが少ないことにあると思う。 ちなみに wxpython はまだ発展途上という気がする。 Windows版は安定してるのかもしれないが、linux では gtk まわりの assertion で落ちることが多い。ドキュメントも少ない。 pygtk2 のほうが安定して動くしドキュメントも多いし、まともだと思う。 でもこっちは Windows 版がインストールしづらい。見た目も Windows 標準じゃないし、 一長一短。
つぅか M$ とニホンゴは捨てるだろ普通。 どっちもしょぼいから切ったほうが良い。 一体なんのための UI なのか・・・
> 一体なんのための UI なのか・・・ 商売ということを考えたとき、 しょぼくても ui があるのとないのでは 売れる数が違うと思うけど?
>>294 > pythonでGUIプログラムを始めたい人って
> 皆、そんな遠回りしないと始められないんですか?
Python はマイナーな言語だよ。そのマイナーな言語用の、さらにマイナーな
GUI ライブラリのドキュメントなんて無くて当たり前。「あったらラッキー」
ぐらいのつもりで、むしろ最初から既存のコードを読むつもりでないと。
というか、既存のコードを読まずに習得できるプログラミング言語や
ライブラリなんてほとんど無いと思うんだけど、オールドタイプなのかな(俺が)
import してから help() を呼んでみると良い。例えば >>> import Numeric >>> help(Numeric)
pydoc ……って、winではどうしてるのかな。
help()、便利だよなー。 前は print hoge.fuga.__doc__ とかやってたけど面倒だった。
>>301 > Python はマイナーな言語だよ。
そう卑屈になるなよ。かの google の保守も Python で行っているっていう話
もあるし他も凄い処で Python が使われてる(例えば NASA のあるプロジェクトで)。
日本というごく狭い意味のない制限を付けるとマイナーに見えるかもしれないが
それは君が世間知らずだからという他あるまい。
> そのマイナーな言語用の、さらにマイナーな GUI ライブラリのドキュメントなんて無くて当たり前。
>>299-300 を見れば判るように初心者向けの読み物はわりとしっかりとしているし数も豊富だよ。
> 既存のコードを読まずに習得できるプログラミング言語やライブラリなんてほとんど無いと思うんだけど、
> オールドタイプなのかな(俺が)
敢えて君に勧めるが CPAN の資源を Python で利用できるように働きかけなさいな。Python 修得のために。
世界で一番普及してるスクリプトじゃなかったの?
漏れはPythonには「地味にメジャー」って印象がある。残念ながら使ってないけども。
>>306 Zope を捨てて PHP をマージしたときに Python は真の意味でそのような地位を築くことができる
辺境にあって中央にあり。
>>305 あなた、Python の開発経験にとぼしそうだね。
ドキュメントの少なさに苦労したことがある人間のことばとはとても思えない。
> CPAN の資源を Python で利用できるように働きかけなさいな。
意味不明。
>>310 あなた、Python の開発経験がほうふそうだね。
ドキュメントの少なさに苦労したことがある人間のひとりに思える。
打開策を披露しなさい。
ネタスレでやれば? 最近立場が逆転している希ガス。
>>311 > 打開策を披露しなさい。
>>284 さんも書いてるけど、ライブラリのマニュアルは機能の羅列で
何と何をどう組み合わせたらいいのか分からないことがよくある。
GTK+ のマニュアルはその典型だね。Tutorial は必読だけど量的に全然足りない。
なので用例を探す。
所望の API の使用法を解説したページが見つかればラッキーな方で、
無ければそのライブラリのアプリを探してコードを読む。
それでもダメならライブラリのソースを読むしかない。
そーいや GTK+ 2.x で Input Method (IM) の切替方法を調べたときは大変だった。
それっぽい API 関数がいろいろあるんだけど組み合わせ方が分からない。
用例も見つからない。試行錯誤の結果、何とか動くものができたけど挙動がぁゃιぃ。
仕方なくライブラリのソースコードを読んでみたら予想外の答えが得られた。
実は「どの API 関数も呼ばなくていい」の(w
何のことはない、最初からテキストウィジットに IM 切替メニューが組み込まれてて
右クリックすればデフォルトで出てくんの! もうね、アボカド、バナナかと。
そういう重要なことはマニュアルにデカデカと赤文字で書いとけYO!なんてね。
メニューの内容は環境変数 GTK_IM_MODULE_FILE で指定した設定ファイルで
変更できるんだけど、それについてもドキュメントが見当たらなかった(当時)。
まあこんなことは日常ちゃめしごと(←なぜか変換できない)。もう慣れっこだ。
やっぱオールドタイプだな、俺は。
>>313 > 何と何をどう組み合わせたらいいのか分からないことがよくある。
そのまえに何がやりたいのかが決められないのでは?
> Tutorial は必読だけど量的に全然足りない。
具体的にはどのような事が不足していると感じて理想の(必要十分な)ドキュメントはどのようなものなのか教えれ
> 所望の API の使用法を解説したページが見つかればラッキーな方で、
どうやら君には自分でテストしてみるという概念が欠けているように見える。
さらに何故マニュアルの記述が極めて抽象的であるかという理由を良く理解していないように思える。
> そういう重要なことはマニュアルにデカデカと赤文字で書いとけYO!なんてね。
それは君が単に無知だったからだろ?ソースコードを読んでなかったからだし
それにマニュアルは君だけの為に存在する訳でもないからね。
> 変更できるんだけど、それについてもドキュメントが見当たらなかった(当時)。
で、君のしたことはちゃんとドキュメントのかたちで表明したのかね?
してないならその不満を言える立場に居ないということを自覚して貰わないとね。
> やっぱオールドタイプだな、俺は。
だからそう卑屈になるなって(w
ク、クマー(ズザザ
開発経験がなくて日本語も出来ない上に粘着質ってことだね。 世界的視野に立っているんだね。 森を見て木を見ずってこのことだね。
> Python23jp.chmギったんですが表示できません。 それはギったとは言わん。 > つかtext/plainの時点でぶっ壊れているような。 これはsourceforge.jpの設定の方がおかしい。 こっちでは普通に表示できたけど……。 とりあえずチェックサムは一致してる? もし一致してないなら、「間もなくダウンロードが開始されます」 のページの時にブラウザの読み込み停止ボタンを押して、 リンクを右クリックして、対象をファイルに保存してみ。 あるいはダウンローダを使うか。 それでダメなら……Windowsがおかしいか、WindowsじゃないOSかだ。
320 :
デフォルトの名無しさん :04/06/29 04:47
>>310 > あなた、Python の開発経験にとぼしそうだね。
乏しいどころか全くありません。
ライブラリリファレンスを読まなければならないのですが読む気が失せる。。。
> > CPAN の資源を Python で利用できるように働きかけなさいな。
>
> 意味不明。
えぇと、単純に 100% Pure Perl "PPython" みたいなのが既にあるのかなぁ〜
ということです(JPython のような感じで Perl の資源も Python 側から全部使えればなぁ)
>>310-321 ,.. 、
( ... \
, - 、 ヽ ::::... ヽ
( :::... \ ヽ ::::;... `ー‐- 、
\ :::.... ン´ `丶、
\ ::/ ヽ
ソ ',
| l / ̄ ̄ ̄ ̄
ヽ ● ●| < またーりしよう
', ,○、 | \_____________
l (_人_)|
} └┘ |
| |
| l
/´ヽ /
L.__,,ゝ、 _ r 〈
"'' ‐- 、__{__}‐'′
>>322 氏ねや
誰だpythonなんて1日でマスターできると逝った奴は!!!!!!!!!!!!
324 :
デフォルトの名無しさん :04/06/29 09:25
>>323 いきなり『氏ねや』って、どういう事ですか?君には社会の常識がないのですか?
普通は、『あのう、すいませんけれども氏んでくれませんか?』とか
『あなたはには、氏ぬという選択肢もありますよ』とか言うものですよ。
あなたみたいに最初から喧嘩腰だと、言われた方は『じゃぁ氏んでみようかな』
とかいう気持ちがなくなるものです。
まずは、親切丁寧に『氏んで』と頼むべきだと思いますよ。
そこから、人の輪と協調が生まれ、『よーし氏んでみるか』という気持ちが生まれるわけです。
>>324 ,.. 、
( ... \
, - 、 ヽ ::::... ヽ
( :::... \ ヽ ::::;... `ー‐- 、
\ :::.... ン´ `丶、
\ ::/ ヽ
ソ ',
| l / ̄ ̄ ̄ ̄
ヽ ● ●| < warota
', ,○、 | \_____________
l (_人_)|
} └┘ |
| |
| l
/´ヽ /
L.__,,ゝ、 _ r 〈
"'' ‐- 、__{__}‐'′
import 2chaa
aa = 2chaa.new('nullpo_plan9')
aa.compose('warota')
aa.anotateComment('hoge')
aa.2chPost('
http://pc5.2ch.net/test/read.cgi/tech/1081312810/ ',None,'sage')
327 :
デフォルトの名無しさん :04/06/29 12:29
>323 > 誰だpythonなんて1日でマスターできると逝った奴は!!!!!!!!!!!! おそらく英語圏の意見が翻訳されただけかと
パロット
絵に描いた餅。
取り敢えず C/C++, Java, PHP, Perl の主要言語へのラッパーは存在するようだ。 ということで Python をそれらの言語インターフェイスと考えれば Python を習熟すれば 他の5つの言語を使えるようになる。尤も整合性は他の言語への理解度の深さに依存するが(^^;
sackit的。
>>321 > ライブラリリファレンスを読まなければならないのですが読む気が失せる。。。
具体的にどんなことがしたいんだ、え? 言ってみな。
寄ってたかってお節介してやっから。
>>333 取り敢えず kernel の全てを Python で書き換えてまともに動かしたいです。
あ、そのまえに shell を、ってこれはもう既にありますね;-)
kernelをPythonで実装するのなら、そのkernelを実行するPythonは どこで実行されるんだろうね?
kernelをCで実装するのなら、そのkernelを実行するCは どこで実行されるんだろうね?
カーネルモジュールを python で書こうとしたことはある。
Pentium7辺りではぴちょんインタプリタがハードに実装されているんだよ。 みんなもう少し待つんだ。俺は要らないけど。
をいおまいら Tkinter, PyGTK, wxPython ,PyGUI の中から好きなの選べ
をいおまいら SWIG, Jython, Mod_python, PyPerl の中から好きなの選べ
じゃ、PyPanで。
漏れだったらPyGTKとJythonを選ぶかな。
PyGUIとPyPerlをステ
346 :
デフォルトの名無しさん :04/07/01 22:29
wxPython(使えてないけど) なんだかんだ言って今の世の中windowsとの互換性は大事よ? 職場で仕事効率化のツールを組んでも Linux入れなきゃ使えないとなれば誰も使わないし
漏れ native linyxer だから M$ との互換性なんて概念すら無いよ。 sf.net も POSIX の方が M$ よりも大規模だしな。
自分自身が完全にLinuxで完結できたとしても、他人と関わる以上M$との互換性は
気にせざるを得ない。
>>347 のように他人との接触がないヒッキーならともかく。
>>348 君ねぇ〜分かってないね。M$ なんか無視して良いんだよ。
めくらの OS 上に乗っけてまともに保守する気あんの?
良いものを創るんだったら POSIX で実装しないとね。いろんな意味で。
言語レベルで互換性が保たれてるからぶっちゃけ移植は後まわしでいいし。
さすが,世界的視野に立っている香具師は言う事が違うね(;´Д`)。
気概*だけ*は立派だけどね;-)
帝國ポストンは絶対狙ってやってると思うんだけどなぁ。
>>353 マジだとしたら相当イタいね。
全然成長している気がしないからね。
pyqt は?
帝國ポストンは人を使うのがうまいんだよ。
357 :
デフォルトの名無しさん :04/07/05 01:04
ある一定期間中にキー入力やマウスクリックがあったか、なかったかを チェックしたいんですが、pythonで可能でしょうか?
可能 環境もろくに書かないんだからこういう回答を期待してるんだよね?
win32comでの質問です。 COMを使って、すでに起動しているIEを制御するにはどうすればいいですか? ie=win32com.client.Dispatch("InternetExplorer.Application") じゃ新しいのが立ち上がっちゃうよね?
ここで聞くより他の方がいくないか?
>>360 いえ、いったん繋がった後は、他の言語と同じなのでいいのですが、
すでに起動しているものへのアタッチの仕方がわからないのです。
rubyのwin32oleでいうところのconnect()がPythonでは何かがわかりません。
2.3.3から2.3.4にあげるときは、いったん、以前のものをアンインストールする必要があありますか? OSはWindows 2000です。
No new features have been added in Python 2.3.4. The 2.3 series is now in bugfix-only mode.
2.4がもう完成しつつあるんだろうね
なんのこっちゃ?
もう2.3系ではバグフィックス以外やること無いってことでしょ
2.4系でバイトコード実装 2.5系で2.4系の虫取り 2.6系で 犬核みたいだな…
バイトコード実装て何? あと、Pythonは2.0頃からずっと、しっくり来る安定点を探って 言語仕様を模索しつつ変化し続けている印象が。 おかげで面白い反面安心して使いづらい……。
もう5年になるんだね。
>>371 その略し方は激しく間違っとる
普通は「多バイト文字」とかの言葉を使う。
「バイトコード」というと全く別の意味に解釈されてしまう。
あるいは「2バイト文字コード」だね。ところで、
>>369 > 2.5系で2.4系の虫取り
これのソースある?
Python のバージョンには「マイナーバージョンが奇数なら開発版」という
決まりはなかったと思うので。いつの間に変わったのかな。ってことで
ソースきぼんぬ。
バグフィックスのみのリリース (patch releases) のことは
PEP-6 で定義されています。
(知る限り、奇数が開発版という風習はありませんでした。)
http://www.python.org/peps/pep-0006.html Version Numbers
Starting with Python 2.0, all feature releases are required to
have a version number of the form X.Y; patch releases will always be
of the form X.Y.Z.
Perlって @array = `cat hoge.txt`; みたいにコマンドの結果を変数やら配列に格納できるじゃないですか。 pythonではどうやるんですか?
> あるいは「2バイト文字コード」だね。 > EUC-JPとかは1〜3バイト可変長だよ、と無粋なつっこみしていい?
普通にマルチバイトっていえや。
381 :
デフォルトの名無しさん :04/07/09 17:17
[Python-Dev] RELEASED Python 2.4, alpha 1
http://mail.python.org/pipermail/python-dev/2004-July/046013.html Python 開発チームと Python コミュニティを代表して Python 2.4 の最初の
アルファ版を披露することをうれしく思います。
Python 2.4a1 はアルファリリースです。ダウンロードして離陸前のテストを
行ない、見つけた問題を知らせてもらえると大変ありがたいです。しかし、
このリリースは業務での利用には向きません。
http://www.python.org/2.4/ このリリースには、多くの新しいモジュール、高速化のためにCで再実装され
た多くの既存モジュール、多数の改良、既存モジュールへの機能追加、そして
修正されたバグの数々が含まれています。ハイライト、「the What's New in
Python 2.4」、または詳細な NEWS ファイルを参照して下さい。
少なくともあと1回、数週間以内にアルファリリースを行ない、最初のアルファ
版に入れられなかった若干の新しい機能を取り込む予定です。
このリリースで見つけたあらゆる問題を是非 SourceForge のバグ追跡システ
ムに登録して下さい (2.4a1 を使っていることを明記して下さい)。
http://sourceforge.net/bugs/?group_id=5470 新リリースをお楽しみ下さい。
Anthony
Anthony Baxter
anthony at python.org
Python リリース・マネージャ
(Python-dev チーム全体を代表して)
>>381 翻訳ありがと。チェック早いね。
> [Python-Dev] RELEASED Python 2.4, alpha 1
むぅ、CJKCodecs は最新じゃないのか……。
cjkpython.i18n.org の方の CVS じゃ、JIS X 0213:2004 対応のコードが
一昨日辺りに入ったんだが、さすがに α1 には間に合わなかったようで。
でもそれ以外の日本語コーデック達は入ってるからいいけど。
とりあえず generator expression が良いな。
組み込み集合型: 2.3 での set 型を C で実装.組み込み型 set/frozenset の提供 (PEP218) 整数型と長整数型の統合: 整数型演算は結果に応じて長整数型を返す (PEP237) ジェネレータ式: 内包表記 x(i) for i in S がジェネレータを返す.[x(i) for ...] の内包表記は撤廃へ.(PEP289) reversed(): 配列の末尾から順に要素を返す組み込み関数 reversed() の提供. (PEP322) decimal モジュール: 浮動小数点数の 10 進表現 (0.1 が 2 進表現によって 0.10000000000000001 にならないような数値表現). (PEP327)
dict.update(): dict() と同じ引数,map, イテレータ,(key,value) リストをサポート. string: ljust/rjust/center のマージン文字サポート,末尾から split する rsplit() の追加. sort() のキーワード引数: sort() 時に cmp (比較関数の設定), key (比較する前に要素をフィルタ), reverse (逆順). sorted(): sorted(x) が x のソート済みコピーを返す(sort() は in-place で,値を返さない). cjkcodecs: cp932, shift-jis(-jisx0213), euc-jp(-jisx0213), iso-2022-jp-(1,2,3,ext) 他中韓国語 codecs の提供. collections.deque: 汎用コレクション型,特に双端キュー(deque). モジュールの C 実装: heapq, bisect. imaplib: THREAD 命令の実装. itertools.groupby(iter, func): iter の要素から,同じ値を持つ隣接する要素同士をリストにして返すイテレータ. itertools.tee(iter, N): iter からイテレータを二つ生成して返す. logging.basicConfig: 基本的な機能を備えた logger. operator.attrgetter(a)/itemgetter(N): インスタンスの属性 a や N 番目の要素を返すオペレータ. posix.os.getsid(): プロセスのセッション ID を返す. poplib: POP over SSL のサポート. profile: C extenstion 中の関数をプロファイルできるようになった. random.getrandbits(N): randrange() よりも効率的に N ビットの長整数乱数を返す. re: (?(grp)A|B) grp の後ろに正規表現 A または B が来ればマッチ. weakref: 関数,インスタンス,set, frozenset, deque, array, file, socket, 正規表現パターンをサポート. xmkrpclib: 複数の XML-RPC 呼び出しを一つの HTTP 操作で行えるようになった. cookielib: HTTP cookie 処理のサポート. C/API: Py_RETURN_TRUE/FALSE/NONE の追加,PyTuple_Pack(o1,o2,...) のサポート インタプリタのプロファイル: --enable-profiling ビルドで gprof プロファイリングをサポート Win32 コンパイラサポートの追加: MSVC++7.1 ビルドの提供 timeit: タイミングループ中にガベージコレクションを抑制 base64: RFC 3548 準拠の Base64/32/16 符号化をサポート
いつからライブラリリファレンスにサンプルコードがあんなについてきたんだろ? とても嬉しいからいいけど
> [x(i) for ...] の内包表記は撤廃へ. これはいくらなんでも嘘だろ。 ざっと見どこにもそんなこと書いてないし。
390 :
デフォルトの名無しさん :04/07/10 02:44
列データ型linesをループにかけるとき for x in lines: としてxとかlines.count[x]を使うのと for x in range(len(lines)): としてlines[x]とかxとか使うのとでは 善し悪しとかあるんでしょうか?
for index, line in enumerate(lines): がモアベター。ただし2.3以降限定。それ以前なら、 for index, line in zip(range(len(lines)), lines): で代替できる。ループ内でどちらかを自前で計算するより、 このイディオムを使う方が見やすいしバグも入りづらいと思われ。
それって月額500円のプランからだよ 125円のは無理
なぜFedoraをサーバーに使うのか、使えるのかが不思議 > さくら
今日はさくらたんの日ですよ
> Ruby、Python、PHP(※2)、MySQL(※2)の利用が可能。 > ※2 スタンダードプラン、プレミアムプランでのみ対応。 > プラン名 ライト スタンダード プレミアム > 月額料金 125円(※1) 500円 1,500円 だから 125 円でいいんじゃないの?
ライトの場合は sqlite 使えばいいか。
Python がある事より Perl が無い事が驚きだな。
>・CGI、SSIはもちろん、Ruby、Python、PHP(※2)、MySQL(※2)の利用が可能。 > プログラム作成も思いのまま。 ここでCGI==Perl説を推してみる。
perl は PHP に吸収されました Java は Python に吸収されました
2.4a1は予定通りOld Macのコードがごっそり消えてる……。
ファイル名を変更したいときはどのメソッドを呼べばいいんですか?
結局decorator syntaxってどうなるの? まだ仕様でもめているのかな。
Perlが書けない こんなサーバじゃ
アプリ開発の場合CPANあってのPerlだから、レンタルだと辛いね。
Python は CPAN 資源まで利用可能です さよなら Perl・・・
ポイズン
そっちか
411 :
デフォルトの名無しさん :04/07/13 01:20
入出力時の方法として f.readline() と f.readlines()の様に 一行毎の取り込みと一括取り込みの2パターン用意されていることが 多い様ですが、これらの使い分けはどの様になっているのでしょうか? イマイチ2パターンあることの必然性が理解できないと言うか...
1行10bytesのデータを10万行処理したければreadlines 1行100Kbytesのデータを10万行処理しようと思ったらreadline
Python で業務してるところってないね・・・ たいていは C/C++ とか Java とか PHP だね・・・ Python だったらそれらのどれにもラップできるのにね・・・
∧ ∧ ┌───────── ( ´ー`) < わざわざラップしなくてもいいんじゃネーノ? \ < └───/|──── \.\______// \ / ∪∪ ̄∪∪
Python のほうがコード読むの楽だし・・・
googleのスタッフ募集条件ってかなり厳しいものじゃなかった?
419 :
デフォルトの名無しさん :04/07/15 11:18
pythonでホームページ中のFORMを自動入力してsubmitする様なスクリプトを 組めないかと思っているのですが、そういったことはできるのでしょうか?
できると思います。
421 :
デフォルトの名無しさん :04/07/15 11:45
>420 方法を調べたいのですがそのあたりの情報源などありますか?
はい、ありますね。
419 (11:18) -> 420 (11:22) 応答4分 421 (11:45) -> 422 (12:07) 応答22分 >421で深く突っ込まれた後の>422の心の動きが目に浮かぶようだ
420 (11:22) -> 421 (11:45) 応答23分 この、応答時間も考慮に入れるべきでは?
ちなみに>419の具体的な方法はどういったものですか>知ってる人
そんなこと、どうでもいいじゃないですか。
〜只今考え中〜
暫くお待ち下さいな
>>419 FORMに入力するまでが自動なのか
送信するのも自動なのかハッキリしろ。
仕様が曖昧だハゲ
>〜submitするスクリプトを なんだから送信するのも自動じゃないの?
ブラウザのアドオンなのか、それ自体Webクライアントなのかも不明 前者ならブラウザ環境も書かなきゃね
要約すると他のスクリプトを引数つけて起動したいということか? htmlを経由しなくてもいいんじゃねーの?
>>433 は打ち間違いです。失礼しました。
とりあえず419のスクリプトですがブラウザのアドオンではありません
というかそんなことができるなんて今はじめて知りました (^ ^;
普通にurllibで巡回ソフトを作っているうちにURLを直接指定できない所
(上記のようにフォームを入力してsubmitのボタンを押すことで開くページ)
があったので質問しました。正直方法があるならこだわりません。
でもせっかくpythonの勉強してるしpythonから離れたくないなー
>>434 他でもない urllib で出来るわけだが。
URL にパラメタを ? と & で列挙すれば HTTP の GET メソッドで、
urllib.urlopen() の第2引数に & でつないだパラメタ文字列を渡せば PUT メソッドで
それぞれ CGI を呼び出せる。
import urllib, sys
ACTION = "
http://www.google.co.jp/search "
DATA = "q=%(q)s&hl=%(hl)s&lr="
q = "Python"
hl = "ja"
urlopener = urllib.FancyURLopener()
urlopener.addheaders = [('User-agent', "Mozilla/3.0")]
print urlopener.open(ACTION + "?" + DATA % locals()).read()
Google は User-agent を見てるみたいなので小細工をしている。
User-agent を見ない CGI なら
print urllib.urlopen(ACTION + "?" + DATA % locals()).read()
で OK。PUTメソッドを使うCGIの場合は以下の通り。
print urlopener.open(ACTION, DATA % locals()).read()
詳しいことは urllib のマニュアルとソースを見てちょ。 FancyURLopener クラスを継承すると HTTP レスポンスの挙動を変えたり クッキーを処理したりといった芸当もできる。
>>435 ありがとうございます。上のサンプルいじくりながら
使い方を調べてみます
guido: Yeah, I've already told Anthony that I'm out of time to look at recent discussion & proposals, so let's try again for 2.4a2. 結局decoratorは2.4a2以降に持ち越し。
>>438 ありがとうございました、ずっと気になっていたんです。
2.4に盛り込まれないってことじゃないようなので、ひとまず安心しました。
440 :
デフォルトの名無しさん :04/07/20 20:01
関数 FncA, FncB, FncC ・・・があるとします。 文字「A」が入力されたら FncA を返し、文字「B」が入力されたら FncB を返し・・・ という関数を(場合分けじゃなく)エレガントに作るにはどうしたらよいのでしょうか? Perl だと &Fnc{$X} みたいに簡単にできるんですけど。
lambda c: {'A': FncA, 'B': FncB, 'C', FncC ・・・}[c]
あ、ちょいtypoった。まぁ適宜読み替えてくれ。
>>440 そういうトリッキーなことをしたがる頭を切り替えた方がよいと思われる。
441-442さんありがとうございます。 eval を使ったら出来ました def FncA(): return 'AAA' def FncX(X): return eval('Fnc' + X) print FncX('A')() トリッキーなことをしたいわけじゃなくて、思った通りのプログラミングをしたいんですよ
eval は不正な入力のチェックが面倒じゃないかな。 折れだったら辞書にするか、あるいはクラスにして getattr() する。 class InputHandler: def invoke(self, key): try: method = getattr(self, "handle_" + key) except AttributeError: method = self.handle_unknown method() def handle_unknown(self): print "unknown" def handle_A(self): print "A" def handle_B(self): print "B" if __name__ == "__main__": handler = InputHandler() handler.invoke("A") handler.invoke("B") handler.invoke("C")
>>444 の場合において、FncX()の引数が文字列である事が保証されてるとしてだけど、
どういう事チェックする必要あったりしますか?
元質問者じゃないけどちょっと興味あり。
>>> def FncX(X): ... return eval('Fnc'+X) ... >>> FncX('X') <function FncX at 0x0093DDF0> >>> FncX('X')() Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: FncX() takes exactly 1 argument (0 given) >>> エレガントすぎて涙が出ますね
FuncX('X(); some_evil_method();') とかできないのかなぁ。
涙を拭いてこうしてみたよ。 >>> def FuncX(s): ... return globals()['Func'+s] ... >>> FuncX('X') <function FuncX at 0x0093DCB0> >>>
>>446 想定してしないコードの含まれた文字列が渡される可能性があると思われ。
def hack():
print 'BBB'
print FncX('A, hack()')()
もし eval のスコープ内に os モジュールがあることを攻撃者が知っていたら
os.system("rm -rf /") などの邪悪なコードが含まれた文字列を渡されるかも。
return eval('Fnc' + X) でなく return eval('Fnc%s' % X) ならでーじょーぶなのではないかな?
いまだにlambdaの使い方がわからないのですが, わかりやすく説明してください お願いします。
答えになってないけど、 Pythonのlambdaは存在自体の受けはいいけど機能が中途半端だから、 直前にローカル関数定義したほうがPythonぽくていいと思う。
文字列 ls=['spam', 'egg', 'bacon'] を長さで並べ替えたいとします. ls.sort(func) として,func に文字列の長さで比較を行う関数を 指定すれば実現できます.def を使うなら:: def lengthcomp(a, b): return len(a)-len(b) としておいて,ls.sort(lengthcomp) としなければなりません. lambda を使うと, ls.sort(lambda a, b: len(a)-len(b)) で 実現できます.その場で作成されてすぐ使える関数のようなものだと 考えてください.lambda とコロンの間には好きなだけ引数を 入れられます.コロンの後ろには,式しかかけません.戻り値は 式を評価した結果です.map, reduce といった関数を引数にとる関数の他, list comprehension や generator expression でも,lambda が 便利なことがあります. def func(x): return x**2 a = [func(x) for x in range(10)] のように,func をあらかじめ def で定義しなくても, a = [lambda x: x**2 for x in range(10)] とかけるからです.
>>452 だめぽ。eval は文字列の内容を評価するから
式として成り立つ文字列は何でも実行されてしまう。
(´-`).。oO(ほんとに危険か試してみてるんだろか?)
[(1, 1), (2, 1), (3, 1)] というのを (1,2,3)と(1,1,1)の2つに分解させるうまい方法はありますか?
>>458 >>> a = [(1,1),(2,1),(3,1)]
>>> apply(zip, a)
[(1, 2, 3), (1, 1, 1)]
zip(*a)よりかはapply(zip, a)の方が好み
私は zip(*a) 派なんだけど、私の知ってる限りは apply(zip, a) 派の方が多い。 後者の方が Lisp 的だから? 明示指向だから? それとも昔からあるから?
小学生のころポインタが理解できなくて苦労したからじゃない?
単にzip(*a)なんて書き方知らないだけ、という人も多いのでは?
小学生までだよね ポインタが許されるのは
Pythonのコード書くのにエディタは何を使ってますか? 私は、Eclipseのpydevとかいうプラグインを試してるんだけど、 import sys とかやると sys が見つからないとか言われちゃう。 もちろん実行は出来るんだけど。
emacs 気分次第でvim
>>471 紹介サンクス。エイプリルフールのParrot事件懐かしいっす。
日本語的には「グイド」でいいの?
「ジム・ピーターズ」にショボーン
>>471 の骨子
1 Ruby に一言: カスだね.眼中にない
2 データ構造ライブラリがないよ: ディクショナリとリストで我慢しれ
3 Jython どうよ?: CPython のプロトタイプ.汚れ役をやらすのだわよ
4 CPAN みたいなのないやん: カタログ作るのマンドクセ
5 パイソンのスケッチネタですよ…: スレ違い
6 ライセンスどないなっとんのや?: 承諾の儀式なんか要らんやろ >CNRIの弁護士
7 インデントを文法に組み込んだ理由教えれ(可読性以外で): コーディングスタイル論争は不毛だろ?!
8 ジムの禅と PEP のこれから: 中庸で
9 最萌 Python コードは?
>>>
http://www.linuxwiki.dk/Python_2fObfuscatedPython >>> Digital Creations(Zope)
>>> でも教育上でプログラミング原理を学ぶのに使われるのが本望だ
>>475 ひどい要約だな。インタビュー記事を勝手にいじるな。
そんなことせずに本文読めばいいのに。
もしかして
>>475 は要約orまとめのつもりなのかw
>>479 >>475 の全うなabstract or summaryを自分で
さらっと作ってみて晒してみてよ。1レス分量でね。
1 蓼食う虫も好き好き。お互いに。 2 木が必要になるころには自作できるでしょ。 3 興味深いプロジェクトだしいい関係じゃないかな。 4 PyPI作ってるところだからもうちょっと待って。 5 その手のくだらない質問はもう答える気がしない。 6 CNRIの解釈は善意があって妥当だね。FSFの態度にはちょっと不満だ。 7 構文解析器でもないのに波括弧ブロックの方が読みやすいのがFAなんて思えないね。 8 変更はゆっくりやるつもりだから心配しないでね。 9 すごい実装はある。でも大事なのはもっと基本的なことなんだ。
475は無駄に敵をつくるタイプ。
>>475 は、もしもグイドたんが2ちゃんねらだったら・・・ っていうネタでしょ。
ワロタよ
さっきまで Larry Wall の電波インタビュー読んでた(鬱) 時間の無駄だたーよ。肥大化言語の末路を垣間見た気がする。 やはりバーゲンセールよりもエレガントに生きたい。グイドタソ萌え。 ――Python だけで全言語の代替が実現可能だと信じて疑わない者より
>>484 >全言語の代替が実現可能だと信じて疑わない
Python 自信は何で書くの?
>
>>484 それのPythonをRubyで置き換えた文章見たことあるよ。ダサー
なんだか484は475と同じ臭いがするな。
このスレって流れてたのか!
(゚∀゚)タプル!!
今日、大学でPythonの試験があったよ。
>>493 ・テキストファイルを読み込んで、特定の文字列を置換した上で表示しろ
・テキストファイルを読み込んで、m行目からn行目までを表示しろ
・九九の表をHTMLファイルに書き出せ
・テキストファイルを読み込んで、1行づつ文字列を反転させて表示しろ
ちなみに、プログラミング初心者向けの授業です。
ふうん
「づつ」ってゆーなー
grep, head, tailの実装とループの練習とリストの練習かな あんまり興味なし
小学生向きの問題だな……
なるほど
492が494の答え合わせをしたいそうだ。
ご冗談を。
といいつつも必死に494を解き始める505 漏れは余裕で静観(´ー`)
お前って…
494は出題者本人だろ。学生があれほど詳細に問題文覚えているわけないし。
>>508 (#゚Д゚)ハァ?バカデスカアナタハ?
ワラタ
いつの間にか高知大学スレッドに!
高知大学に通報しますた。
>>494 何が悪いってコードを書きたいと言うモチベーションが湧かない。
いくら小学生レベルとはいえこれではな。授業も相当つまらないと思われる。
そんな喪前のために書いといた。 python -c 'print file("input.txt").read().replace("foo", "bar")' python -c 'print "".join(list(file("input.txt"))[m-1:n])' python -c print "<html><body><pre>\n"+"\n".join([" ".join(["%2d" %((x+1)*(y+1)) for x in range(9)]) for y in range(9)])+"\n</pre></body></html>"' python -c 'print "\n".join(["".join([s[0-i] for i in range(1, len(s)+1)]) for s in file("input.txt").read().strip().split("\n")])'
ずいぶんと古いネタだなあ。 SoldamのショッピングサイトはPythonだったり NSI JapanはZopeだったり。
517の書くコードはもっと酷いからね…
>>518 Zopeと一緒にするなよ。
Zopeと一緒にするなよ。
Zopeと一緒にするなよ。
な。頼むよ。
Zopeを要求しないPythonで書かれたblogが欲しい
自分で調べられない521はJUGEMで十分。
おまい岡山大学の学生だろ。 煽り方が小学生レベルだ(プ。
漏れは飯台 でも小学生レベルのレスを敢えてする こんなところでマヂになってどうするんだ 懐の浅い人間にはなりたくないものだな
底 = 深い/浅い 懐 = 広い/狭い
(゚∀゚)タプル!!
>529, >531 reモジュール内のメソッド達のこと
さんてん。 いまどきようちえんじでもわらわない。
別にTabじゃなくてもスペースでもいいんだ・・・
どちらかというとスペース推奨 Python的にはタブ=スペース8つだからね
見た目の問題ではない
2ちゃんねるでは pep のことを「別府」と呼ぶよう提案したいのだがどうか。
PEP勇午?
警部と呼びたいが。
加齢臭が。
>>> a = "xyz" >>> b = "xyz" >>> a is b True ちょっと意外.当然, >>> a = "xyz" >>> b = "xy" + "z" >>> a is b False
へーそういう最適化はされてるんですね。
a というモジュールがあって A というクラスが定義されている。B というクラスが定義された b というモジュールを a 内にインポートした時、A に B を継承させたい。この時新しいクラス C は作らない。 ということはできますか?
549 :
デフォルトの名無しさん :04/07/29 22:56
>>545 英数字とアンダースコアのみからなる文字列は
辞書検索の効率をあげるために intern されるのだそうな。
だから空白を含むと intern されない:
>>> a = "x z"
>>> b = "x z"
>>> a is b
False
しつれい。 ×文字列 → ○文字列定数
>>547 素直にこうじゃないの
// in a.py
import b
class A(b.B):
後略
>>548 0.6ってやっぱり60%くらいのできなの?
それとも0.4は飾りの足ですか?
>>551 最初から継承されているとまずいのです。
なんとかならんでしょうか。
>>553 A が old style class なら、
A.__bases__ = (b.B,)
でなんとかならん? new style class だとダメだった(in Python 2.3.4)。
ちなみに、基底クラスを入れ替えるより前に作成した A のインスタンスも
b.B のメソッドを lookup するようになるんで、そこんとこ注意。
それが嫌なら class C(A, b.B): とするしかない。
# てか、絶対クラス設計からして間違ってるよなぁ……
>>538 emacsとか使ってるのがアホ
メモ帳使え
なんでemacsを使うとアホなの?
cygwinでpythonを使ってます。 んで、gvimをつかってると、バックアップファイルとして、 '...txt~'てなのが作られるんです。 こいつを正規表現で引っかけようと、 re.compile( r'~$' ) とか re.compile( r'\~$' ) とやるんですが、引っかかってくれません。 代わりに、 re.compile( r'.*~$' ) とやるとうまく行きますが、ちとスマートでないし・・・。 これについて、原因をご存じの方がいらっしゃいましたら、 ご教示頂けませんか。
>>559 match じゃなくて search だと引っかかるよ
をを、ありがとうございます。 それにしても、matchともsearchとも書いてないのに・・・。(赤面
>>561 あ〜、この罠、正規表現を最初に使ったころにはまった。
まぁ、通過儀礼のようなもんだと思うしw
一皮ムケたわけだな(藁
>>559 そういう用途なら、正規表現よりもむしろ s.endswith("~") で判定する。
>>549 ( ・∀・)つ〃∩ ヘェーヘェーヘェー
>>565 あいや、コンパイル済みのマッチ・オブジェクトを
リストに格納してループで回す、ということをやりたかったんで。
またdecorator syntaxでモメてるなぁ。
LLW行く日といる?
げっ 2.4a2 出てる。予定より2日早い。
2.4a2 の Misc/NEWS.txt で、 - Patch #941229: The source code encoding in interactive mode now refers sys.stdin.encoding not just ISO-8859-1 anymore. This allows for non-latin-1 users to write unicode strings directly. というのが、やや気になるのですが、何をいっているのかよくわからないので 誰か解説してください。
>>573 コメントに2byte文字使ってもいいよ、だって
えっ、そういう事なのですか?
さあ、適当に
>>573 だけ読んで独断で意訳しただけ
ソースファイルなら先頭に -*- coding: euc-jp -*- と書いてエンコードの指定ができるから困らないけど、 インタラクティブモードの場合は困るので、 unicode strings(utf-8なのか?)が通るようにしたんだって。
ん、対話モードのときのコードは全て unicode で統一か?
PEP-0318 がついに入ったんね。 俺としてはこの構文で満足。 [ ] とか使うのはなんか好かない感じだったから。 他の人はどう?
@を使った書き方自体よりも,コードブロック に対する宣言なのにインデントしないところが気持ち悪いなぁ.
583 :
デフォルトの名無しさん :04/08/07 14:19
Pythonにいいエディタなにー
584 :
デフォルトの名無しさん :04/08/07 14:23
割り込むなボケ
>>583 オレは emacs + python-mode。慣れればそこそこ。
>>584 仕切るなボケ
vim以外考えられん
お前はそこで思考停止してろ
(゚∀゚)tuple!
http://mail.python.org/pipermail/python-dev/2004-August/046610.html より:
pje: なんだ? @表記が勝ったのか?
barry: πに似てるからだよ。ともかく動くようになったのはうれしいね。
anthony: おい、俺は Guido の決定に従ったまでだ。殿のお考えによると
とりあえず 2.4a2 に入れてみて、どうにも嫌われたら a3 では引っこめる。
pje: []表記なら python のみで実装できて古いインタプリタと互換性が保たれる。@じゃ無理。
martin: もう議論する時間は終わったんだよ。
guido: ほんと? すごいハックだね。インタプリタのデフォルトのふるまいをどうやって防ぐ?
pje: (コード提示)
skip: これを guido が「すごいハック」と呼ぶかどうかは疑問だな(w
guido: うげ、そりゃだめだ。し、[classmethod] そのものを書けない。
exarkun: (decorate() 文を提案)、でもこれはmethodにしか使えないという欠点がある。
fperez528: >>exarkun +1だ。よりpythonicだし、やっぱりぼくは ipython を変えたくない。
marktrussel: >>exarkun いままで見た中で一番いいね。
jhylton: 実装の大変さが問題なわけではないんだ、どれが好まれるのかという問題だ。
pje: >>exarkun その欠点は致命的。互換性だけが問題なら他にもやりかたはある。
guido: >>pje それなら旧式の foo=classmethod(foo) でいいじゃん、なぜだめ?
barry: >>guido +1
(
>>589 のつづき)
jim: そこだよ。なぜ @ が必要なの? 覚えることが増えるのに。この機能は強力すぎる。
guido: その議論はいままでずっとやってたでしょ。
jhylton: PEPはいまの議論を追うように更新されてる? 重複した議論を避けるのもPEPの目的。
dave: guido の考えを変えるつもりないが、言語の核をいじらない実装のほうが最初は安全だ。
guido: そういう実装はあったよ、でもそれは後置記法だった。前置記法がほしかった。
pje: >>guido なぜ新しい文法か、可読性を上げるため、でしょ。それでも互換性にはこだわる。
guido: そんなに後方互換性を考えるのは制約がきつすぎるからいや。
guido: >>exarkun それじゃ曖昧だからという理由で却下された [classmethod] と同じだ。
decorate() がなにか遠くで関数を操作してるように見える。いまさらそれをなぜ提案?
pje: [foo] は現行の python でなんの副作用もないが [foo()] は副作用があるから。
guido: 微妙すぎな理由。それに sys.settrace は実装の機能であって言語の機能ではない。
nidoizo: Python3 で as が使われるようになったら、@ とは機能的に重複するの?
guido: as が使われるとしても decorator としてではない予定。たぶん型指定かrename。
exarkun: >>guido decorator() は言語じゃなくライブラリに置けるからいいと思った。
しかしそもそもこの機能はなぜ今すぐ必要なのか?
(
>>590 のつづき)
guido: @deco や [deco] の利点のひとつとしてコンパイル時に決定できるというのがある。
あらかたのアイデアは出つくした。どれも一長一短だ。今後待ってもどうせ解決しない。
exarkun: だからそもそも本当に必要なのかという話。もうこれは出つくしたけど。
tjreedy: @ はたしかに複雑だが、初心者は無視できるのがいい。[] じゃ混同する。
nas: 本当に必要なのか疑問。目立つ人がそう主張しているだけに見える。
barry: decorator が可読性を上げるのはたしか。でもほとんどのコードは変わらない。
guido: そのとおり。標準ライブラリでも staticmethod なんかを使っているのは少数。
jim: >>tjreedy 初心者は無視できないだろう。人はコードを理解したがるものだ。
andrew: 高度な機能はほかにもある。metaclassとか。でも、ほとんど見ないから問題ない。
jim: classmethod なんかは metaclass よりははるかに使われるよ。
...もう疲れたのでここまで。おやすみ。
いつもながら良い仕事
593 :
デフォルトの名無しさん :04/08/09 00:28
ごめん、あげてしまった… ばかばか。
">>hoge +1"って/.からの借用かい? どうでもいいけど@ってPerlにあるよね?
すごくくだらない質問かもしれませんけど、Winでpython2.3と2.4は同居させることができます?
(´・ω・`)
>>597 2.4は試したことがないけどたぶん可能。
同じバージョンでも同居可能だから。
>>599 > 同じバージョンでも同居可能だから。
これはだうと気味。
Windowsだとシステムディレクトリにpython2x.dll(インタプリタ本体+一部の
拡張モジュール)が入るんだけど、2.3シリーズはみんなpython23.dllって名前
だから、上書きされる。2.4シリーズはpython24.dllって名前なんで同居可能。
pythin2x.dll以外(*.pyなモジュールとか)はそれぞれ別なところに入るんで、
そこは上書きインストールしない限り衝突しないんだけど。
ま、2.3.3と2.3.4を同居させたい、とかなんてまずやらないと思うけど。
# LLWに行けなかった _no...
LLWのPythonの発表はどうだった? 行った人の感想きぼん!
どうでもいいからMLでやれ。
603 :
デフォルトの名無しさん :04/08/09 21:58
os.walk()というのは、「各ディレクトリ(top 自身を含む) から、 タプル (dirpath, dirnames, filenames) を生成」すると、リフ ァレンスにあります。でも、普通のタプルのように「[]」を使っ たアクセスができません。os.walk()で生成されるタプルって、 普通のタプルと違うんでしょうか? >>> t1 = ('Paul','Jim','Tim') >>> t1[0] 'Paul' >>> t2 = os.walk('/tmp') >>> t2[0] Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: unsubscriptable object
タプルじゃなくてタプルのシーケンスを(generatorで)返すので、 for t in os.walk('/etc'): print t[0]
たぷるがたっぷりある
606 :
デフォルトの名無しさん :04/08/09 23:01
>>604 理解できました。ありがとうございました。
>>607 って
Python 覚えても仕事の役にたたないよ、って言ってる?
>>608 議論の前提として、java に比べると pythonなどの job が
少ないといっているのでしょう。
>>609 jython で java の job が取れるのだけれど…
たぷるがたっぷる
この前のエッセイで,わたしは人を怒らせるようなことを書いた. つまり,Java のプロジェクトで仕事をするよりも, Python のプロジェクトで仕事をしたほうが 良いプログラマになれると. わたしは Java プログラマがアホだと言いたかったのではなく, Python プログラマが優秀だと言いたかった. 新しいプログラミング言語を覚えるのは大変な仕事であり, 誰も仕事を得ようと思って Python を覚えたりなんかしない. プログラムが純粋に好きで,すでに知っている プログラミング言語(Javaとか)に満足していない ような人が Python を覚える.
会社が雇うべきなのは,こういったプログラマだ. この法則のうまい名前が無いので,Python パラドックスと呼ぶ. 「もし,会社がソフトウェアを書くのにマイナーな言語を選んだとしたら, より優秀なプログラマを雇うことができる. なぜなら,マイナーな言語は,そういうマイナーな言語を 覚えるような人だけを惹きつけるからだ.」 プログラマの立場からは,このパラドックスはこうも言える. 「もしよりよい職を得たいなら,習得するべき言語は, 人々が単に職を得るために覚える言語ではない,マイナーな言語だ.」 [Google の事例] [友人の話だとソースの見た目がどうとか] [Perl と Python の構文の話] Perl も Python も moving target だ. Ruby とか(その他の言語)も, プログラミングを真剣に考えている人々に よって作られ,使われている点では同じだ. そして,そういった人は,仕事をうまくやる人で あることが多い.
615 :
デフォルトの名無しさん :04/08/14 02:09
Python も Java も方向性は似ていると思うな。 すなわち、ぶっ飛んだ所が少なくて、誰でも使える、ちょっと便利な言語。 Paul Graham 的には、 Java <-- 流行ってるから叩いておけ Python <-- Lisp 仲間が流れていってるから、ちょっと叩くのは止すか てな感じがする。言ってる事はかなり同意なんだけど。
C/C++ も Java も Tk も GTK も Qt もPerl も PHP も 全部 Python 側から扱えるよ. Shell も WM も Python で記述してあるよ.
617 :
デフォルトの名無しさん :04/08/14 02:48
PythonでSJISの文字列をEUCに変換するにはどうすればいいのですか?
1つ教えてください。 最近pythonを勉強し始めたのですが、よく他人のソースを見ていると 関数を定義するときに必ずといっていいほどselfという引数が使われているのですが、 このselfという引数はなにか特別なものなのでしょうか?
>Conventionally, the first argument of methods is often called self. This is >nothing more than a convention: the name self has absolutely no special >meaning to Python. (Note, however, that by not following the convention >your code may be less readable by other Python programmers, and it is also >conceivable that a class browser program be written which relies upon such >a convention.)
>>621 どうもっす。
特に意味は無いんですね。そして他の人に分りにくくなると・・・w
ところでもし良かったら、引用元を教えてもらえませんか?
>>623 有難う御座います。助かります。
とりあえず最初から順に読んでいきますね。
#selfを使う慣習は、従わないと読みにくいのか・・・読み間違えたorz
self は Python 固有のものじゃなくて OOP 関係を理解すれば分かるかと。
文字列フォーマットについて教えて頂きたいんです。 print '\s \s' % ( 'hoge', 'hoge' ) ってやりますが、こいつを hoges = ( 'hoge', 'hoge' ) print '\s \s' % hoges ってできないんでしょうか・・・。 参照すべきドキュメントなどご存じでしたら、ご教示ください。
あう。 '\s \s' -> '%s %s' でした。m(_ _)m
628 :
デフォルトの名無しさん :04/08/16 22:18
rubyではなく、pythonを使うメリットを分かりやすく教えてください。
日本代表と世界代表
思いこみの激しさが作者だけか、ユーザーぐるみか。
日本に閉じこもるか世界に出るか 初期開発者がもし死んでも開発が継続する体制があるかないか とか?
よく釣れるスレだな。
暇なんだよ
>626 やりましたよう。いろいろやったんですがうまく行かなくて。 ・・・今、やってみたら、ちゃんと期待通りに動くじゃないですか(- -; 括弧入れたりカンマ入れたり、いろいろやったけど、 正しいのだけは見事に外してたのでせうか・・・。 お騒がせしました。m(_ _)m
訂正。 626は私で、助言をいただいたのは632様でした。m(_ _)m
ruby の作者のキモさだけで ruby を使うことを辞めた漏れは Python 使いになって正解だった。
まわりも同類だから、キモさを意識する手段がないもんな…。
また戻って参りました。m(_ _)m 626, 627のやつですが、タプルやマップなら受け付けて、 リストだと受け付けんのですな。 ナゼダ。orz
>>638 ヲイ、rubistはΩ儲と同じぐらい痛い集団だぞ!
いや、読みましたとも。 仕様である、といわれればそれまでですが・・・。
PyJUGで配布している Python 日本語環境用インストーラ (Win32) ですが、
5月末に本家で 2.3.4 がリリースされて三ヶ月近く経っても未だに 2.3.3 ですね。
2.3.4 のニュースリリース
ttp://www.python.org/2.3.4/NEWS.html だと結構
バグ直ってるっぽいんですが、Windows で Python している人はどっち使ってます?
というか 2.3.4 の日本語版はリリース予定ないんでしょうかね。
バックスラッシュの問題にからむコードを書かなければ、 日本語版はとくにいらないし。
645 :
デフォルトの名無しさん :04/08/18 16:24
shade6でpython使ってるんですけど、ブーリアン演算を 書くとうまくいきません。 ブラウザで実行すると以下の文が生成されるんですが、 xshade.scene.active_shape.name"*パート" これをスクリプトから実行しようとするとエラーになってしまいます。 わかる方いましたら、お願いします。
>>645 > shade6でpython使ってるんですけど、
ほぅ、最近じゃShadeにもPythonが付いてるんか。
CG関係にも人気があるんかね、Pythonは。
> ブラウザで実行すると以下の文が生成されるんですが、
> xshade.scene.active_shape.name"*パート"
思いっきり文法違反なんだが……ブラウザがタコいんでない?
ShadeのAPIは知らないんで、正しい(とShadeが主張する)コードは、
すまんがわからない。
APIリファレンスみたいなのはないの?
IDLE の EditorWindow.py の def short_title() と def long_title() の return の返り値に unicode() を噛ませたら、今まで文字化けしていた ウインドウタイトルのパス名の日本語部分が正常に表示されるように なった。万歳。 ……でもバージョンアップして IDLE を入れなおしたらまた書き直 さないといけないんだね。本家で直してくれないかな。
>643 CJKPython
650 :
デフォルトの名無しさん :04/08/18 23:25
ふぃすろん?って読むの?
>>649 2.4系でマージされたのはどっちの方なの?
>>649 確かに CJKPython なり JapaneseCodec なりを使えば
日本語版にこだわる理由もなくなるとは思うんですが、
pykf の最新版 (0.3.4) の Windows用バイナリって配布されてないですよね。
VS 持ってないからコンパイルできないし。
pykf が必要なのは、Popee (
ttp://isrf.homeip.net/Projects/Popee ) が pykf を
使うからなんです。日本語版Pythonなら pykf が最初から入っているので。
CJKPython を使えれば pykf 必要ないですよね。ちょっとソースコード見て
何とかしてみようと思います。
>>651 「どっち」というのが JapaneseCodec と CJKPython を指すなら、CJKPythonのはずです。
653 :
デフォルトの名無しさん :04/08/19 01:05
>>650 > ふぃすろん?って読むの?
\ │ /
/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚ ∀ ゚ )< ぱいそんぱいそん!
\_/ \_________
/ │ \
∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ ∩ ∧ ∧ \( ゚ ∀ ゚ )< ぱいそんぱいそんぱいそん!
ぱいそん〜〜〜! >( ゚ ∀ ゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」
>>652 CJKPython を CJKCodecs を混同していました。というより CJKPython の存在を知りませんでした。
>>649 さんありがとう。
Python-ml-jp の過去ログだと JapaneseCodec との動作に若干の違いがあるようですが、
2.3.4 版がリリースされているのはありがたいです。使ってみます。pykf も入っているようですし。
PyJUG には CJKPython に関する記述はないようですが、僕のように Python を新しくやってみようと
いう者には混乱が起きそうですね。日本語版 2.3.4 がないのなら CJKPython へ誘導するなりして
くれるとありがたいのですが。
ずれた。。。
CもKもイラネ
>>652 Popeeでのpykfは勢いあまって入れてしまっただけなので、次のリリースからは
削除の予定〜。
658 :
デフォルトの名無しさん :04/08/19 10:54
socketでjpgとかバイナリデータを送受信した方いらっしゃいますか. テキストはできるのですが, structとsocketの使い方がいまいち理解できていません
659 :
デフォルトの名無しさん :04/08/19 10:54
socketでjpgとかバイナリデータを送受信した方いらっしゃいますか. テキストはできるのですが, structとsocketの使い方がいまいち理解できていません
>>659 struct要らないんでない?
送信側:
fileName = "hoge.jpg"
image = open(fileName, "r")
socket.send("%s %d\n" % (fileName, len(image))
socket.send(image)
受信側:
line = ""
while True:
c = socket.recv(1)
if c == '\n':
break
line += c
(fileName, size) = line.split()
image = socket.recv(int(size))
file = open(fileName, "w")
file.write(image)
file.close()
こんな感じかな?
少々間違いが。 image = open(fileName, "r") ↓ image = open(fileName, "r").read()
import struct import socket s = socket(socket.AF_INET, socket.SOCK_STREAM) s.connect('your.target.host', 101010) infile = open('binarydata_file', 'rb') # do not forget 'b' data = infile.read() header = struct.pack('<I', len(data)) # encode header (32bit uint LE) s.sendall(header) s.sendall(data) ------- # s is a socket returned by accept(). hdrsize = struct.calcsize('<I') hdr = '' to_read = hdrsize while to_read>0: # read header bytes hdr += s.recv(to_read) to_read = hdrsize-len(hdr) datasize = struct.unpack('<I', hdr) # decode header length (32bit uint LE) to_read = datasize data = '' while to_read>0: # read data bytes data += s.recv(to_read) to_read = datasize-len(data)
>>643 > 2.3.4 の日本語版はリリース予定ないんでしょうかね。
日本語版の中の人に直接聞け。日本語版は中の人がひとりで作っているもので、
「予定」なんてものは無いと思われ。ユーザからの要望がなければずっと古い
ままという可能性も大いにありうる。たぶん中の人はこのスレを見てないから
直接メールするなりしないとダメポ。
665 :
デフォルトの名無しさん :04/08/19 21:59
ちょっと質問させてください。 python1.5.2だと >>> a = ['ああ'] >>> print a ['\244\242\244\242'] python2.1.3だと >>> a = ['ああ'] >>> print a ['\xa4\xa2\xa4\xa2'] となり、出力される結果が違います。 なんとか2.1.3で出力しても1.5.2と同じ形式にしたいのですが うまい方法はありますでしょうか?
import pprint, re class Printer(pprint.PrettyPrinter): re_numeric = re.compile(r"\\(t|n|x[0-9A-Fa-f][0-9A-Fa-f])") def __repr(self, object, context, level): re_numeric.sub(pprint.PrettyPrinter.__repr( object, context, self.__depth, level), self.__replace) def __replace(self, match): s = match.group() if s[1] == "x": return r"\%03o" % int(s[2:], 16) elif s[1] == "t": return r"\011" elif s[1] == "n": return r"\012" raise RuntimeError, "should not reach here" if __name__ == "__main__": pprint.PrettyPrinter = Printer pprint.pformat(["n\n\012\0x0a\xa4\xa2"]) == "['n\012\012\012\244\242']"
最後の文が assert になって中田。全然ウゴカネーので
>>666 は無視して呉。スマソ
import pprint, re safe_repr = pprint._safe_repr re_escape = re.compile(r"\\(t|n|x[0-9A-Fa-f][0-9A-Fa-f])") def compat_safe_repr(object, context, maxlevels=None, level=0): rep = list(safe_repr(object, context, maxlevels, level)) rep[0] = re_escape.sub(replace, rep[0]) return tuple(rep) def replace(match): s = match.group() if s[1] == "x": return r"\%03o" % int(s[2:], 16) elif s[1] == "t": return r"\011" elif s[1] == "n": return r"\012" raise RuntimeError, "should not reach here" pprint._safe_repr = compat_safe_repr if __name__ == "__main__": assert pprint.pformat(["n\n\012\x0a\xa4\xa2"]) == r"['n\012\012\012\244\242']"
pprint.PrettyPrinter.__repr() みたいにアンダースコアふたつで始まる名前のメソッドは 継承できないのを忘れてた。つーか何でこのメソッドは継承不可なんだYO!(逆ギレ)
>>669 他のOO言語でいうところの private 関数だから
いや、だから質問は 「なんでこのメソッドが private なんだYO! (逆ギレ)」 ということじゃないの?
>>668 わざわざプログラムまで作成していただきありがとうございます!
文字列のコードが8進数→16進数に変わっているわけですねぇ。。。
勉強になりました。
> 「Pythonの紹介」に終始。というのが、現在の日本のPythonのポジションを表現しているような。 (w
>>673 の引用元
言いたいことはわかる。
でも、Pythonはここ一年間ですら言語仕様がいろいろ増えたし、紹介は必要
だったと思う。ただ全体を見渡す視点が足りなかったのかもというのはある。
Pythonとさっぱり変わってない言語をその教祖がホームグラウンドで比較
した色眼鏡ばりばりの寸評に、どんなまともな価値があるんだか疑問。
>>663 どうも。CJKPython で問題は解決しましたが今後参考になりそうです。
GPL な Python を Windows で使うにあたって MS のコンパイラが必要というのが
なんか残念ですね。といっても Cygwin とか使うってのもマニアックになってしまうし。
>>674 >ただ全体を見渡す視点が足りなかったのかもというのはある。
10分では無理
ていうか
2年続けてプロジェクタ真っ黒の言語オタの負け惜しみはみっともない(プ
二日目の最後に日記CGI作ってる出しゃばりおやぢが登場したり
今年はR言語は評判悪い
日本のR言語のポジションをよく象徴している
Pythonでムービープレイヤー作れますか?
>>678 漏れ的には、R陣営は教祖と最後のオヤジ以外の印象はさほど悪くなかったよ。
出しゃばり具合で言うならむしろ「俺のは79行!」とか「1時間で書いたYO!」とか
ガァガァうるさいフタデブラクダの方が目障りだった。奴がラクダ代表を自認してる間は
あちこちに敵をつくりつづけるんだろうな。合掌。
引用元だとか、なんかついてけない。 セミナーだかなんだかに参加してた人専用?
pygameすごいよpygame
688 :
デフォルトの名無しさん :04/08/22 02:24
初歩的な質問で申し訳ないのですが、 アドバイスお願いします。 >>> class c1: pass >>> array1 = c1() # ok >>> array2 = c1()[10] # damepo >>> array3 = c1[10]() # damepo >>> array4 = c1[10] # damepo C++ みたいに array = new c1[10] って、できないのでしょうか?
コピーだからこれだと配列の中身は同一のインスタンスになるね ごめん↑のは忘れて
691 :
デフォルトの名無しさん :04/08/22 03:20
>>689 さん
いえいえ、リンク先を示して頂いただけでも充分ありがとうです。
array = [c1() for i in range(10)]
ということですね。
ばっちりでした。
# たしかになんかいけてない書き方ですね w
こういのを見ると Python の [] って、やっぱ配列じゃなくて リストなんだなぁと改めて実感するな。
何度も質問してすいません。 print が出力できる情報量について聞きたいのですが、、、 from nntplib import NNTP s = NNTP("news.media.kyoto-u.ac.jp", 119, "guest", "guest") t = s.list() # OK ----------------------- fout = open("list.txt", 'w') fout.write(str(t)) fout.close() # NG (反応が返りません) ---- print str(t) ファイルにすると約2MBほどの情報なのですが、 うーん。。。 print に対して 2MB のデータを突っ込むことはできないのでしょうか? こちら側で気を付けなければならない仕様なのでしょうか? すいませんがわかる方教えてください。 よろしくお願いします。 Python version : 2.4a2 IDLE version : 1.1a2
とりあえず 693 のコードがダメなのは 私の環境では IDLE だけのようです。 ↓は OK でした。 ・cygwin の python Python 2.3.4 (#1, Jun 13 2004, 11:21:03) [GCC 3.3.1 (cygming special)] on cygwin ・Python(command line) IDLE のときは print に無理をさせないようにしたいと思います。 お騒がせしました。
695 :
デフォルトの名無しさん :04/08/22 09:48
おすすめのPythonの入門書があれば教えてください。言語経験はJavaの文法が一通りわかる程度です。
>>692 んだなぁ (´ー`)y−〜〜
リスト慣れしていない漏れたちこそイケてないんじゃないかなぁ _| ̄|○ili
イケてる人たちはみんな scheme とかに走ってしまうわけで。 イケてなくても上等、というのが Python なのかも。
最近はイケている人ほどPythonを使うような気もするんだが。 そもそも、PythonのListとLisp/Schemeのそれは違うもんだし。
www.python.jpに繋がらない。。。
自分の事を 「イケてる」 と思ってる人たちとはあまり付き合いたくない。
イッチー!
キラーン
ネタスレに逝け。
そして誰もいなくなった。
# pygame でフォント作りまくると落ちまくるんだけどこれはこういう物なの? import pygame def puttext(screen, font, text ,x = 0, y = 0, color = (255, 255, 255)): screen.blit(font.render(text, True, color), (x, y)) def rend(screen, font): screen.fill((0,0,0)) puttext(screen, font, u"spam, egg.") pygame.display.flip() while True: for e in pygame.event.get((pygame.MOUSEBUTTONDOWN, pygame.QUIT)): if e.type in (pygame.MOUSEBUTTONDOWN,):return False elif e.type in (pygame.QUIT,):return True pygame.time.wait(10) def main(): pygame.init() screen = pygame.display.set_mode((640, 480)) pygame.font.init() for i in pygame.font.get_fonts(): pygame.display.set_caption(unicode(i)) if rend(screen, pygame.font.SysFont(i, 100)):return if __name__ == '__main__': try:main() finally:pygame.quit()
pygame の Movie だけど、 使い終わったらいちいち display.quit() しておかないとタイトルバーの機能が 効かなくなったりするよ。(WindowsXP) ところで、このまま pygame のネタをここに書き落として いってもいいのかな。 それともゲ制作板にスレ立てしないと駄目?
ゲ制作板にスレ立てても速攻で落ちそうなので、ここでいいと思われ。
あの板は滅多なことでは落ちない
712 :
デフォルトの名無しさん :04/08/25 14:44
odbc経由でMS ACCESSにPythonから画像ファイルをinsertしたいのですがデータが壊れているようです。 MySQLの場合ではうまくいくのでACCESS固有の話のような気はしますが、ご存じだったら正しい方法を教えて下さい。 import sys, os, MySQLdb, StringIO import odbc # MySQLの場合 con = MySQLdb.connect(db="test") cur = con.cursor() cur.execute("CREATE TABLE IF NOT EXISTS foo (img BLOB)") data = StringIO.StringIO(file("foo.bmp","rb").read()).getvalue() cur.execute("INSERT INTO foo SET img=%s",(data)) con.close() # MS ACCESSの場合(testはODBCに設定済み) dsn = "test" con = odbc.odbc(dsn) cur = con.cursor() cur.execute("CREATE TABLE foo (img IMAGE)") data = StringIO.StringIO(file("foo.bmp","rb").read()).getvalue() cur.execute("INSERT INTO foo (img) VALUES(?)",(data)) cur = con.cursor() con.close()
最後から2番目で(Closeしていない)カーソルを一度棄ててもう一度 作成しているのには,何か理由があるのかな?
714 :
デフォルトの名無しさん :04/08/25 16:00
>>714 どこからどこへの家庭で発祥した逮捕゜なんだよ ( ゚∀゚)σ)´Д`)
脳内からアクセクへの家庭科、
或いはアクセクのコードのペインからの家庭で撃ち損じたのか?
(´-`).。oO( 後者はコピー&ペーストで済むからありえへんねやろ… )
>>715 いくら2chでも当て字多すぎ。最初見たとき誤爆かと思った。
>>710-711 なんか寂しい事になりそうなので引き続きこちらでよろしくお願いします。
ついでに一つ。
ttp://sansa.s16.xrea.com/text/pygame_sample.html の「音楽を再生」
みたく pygame.init() をせずに pygame.mixer.init() だけして音楽を鳴らす
と、鳴ることは鳴るのだけれども変な音になる。(WindowsXP)
多分、HP作者の環境だと問題無く動いているんだと思うけれど…。
pygame は自動的に初期化されるモジュールも多いけれど、
エラーも出さずに変な動作をしてくれる場合も多く危険だ。
メソッドの引数って、リストの場合は参照じゃなくて、 値渡しになっちまうんでしょうか。 下記のようなことをやって、Rootのcolumnを、 単一のインスタンスを参照するようにしたいのですが。 このとき、columnは、Rootのインスタンス変数であって、 クラス変数ではないということで。 もしかして、リストじゃなくて、タプルだったら参照渡しになりますか・・・。 class Node: def __init__( self, column ): self.column = column def addColumn( self, column ): self.column.append( column ) class Root( Node ): def __init__( self ): self.childnodes = [] column = [ 'col1', 'col2' ] self.childnodes.append( Node( column ) ) self.childnodes.append( Node( column ) ) self.childnodes.append( Node( column ) )
>>> class a: def b(Self,x):x[0]="hoge" >>> c=[1,2,3] >>> c [1, 2, 3] >>> d=a() >>> d.b(c) >>> c ['hoge', 2, 3] 普通に参照渡しだと思うけれども、こういう話とは違うの? >下記のようなことをやって、Rootのcolumnを、 >単一のインスタンスを参照するようにしたいのですが。 >このとき、columnは、Rootのインスタンス変数であって、 >クラス変数ではないということで。 サブクラス Root は親クラス Node の __init__ を呼んでいないけれど そのへんはどういうつもりの設計なの?
> サブクラス Root は親クラス Node の __init__ を呼んでいないけれど 生半可ですみません。m(_ _)m 今後、転写するコードは動作するものだけにします。 で、バグに気がつきました。 別に、clearColumnというメソッドがあって、 それを実行したときに、self.columnに新しいインスタンスを 与えてしまっていたのでした・・・。 self.column[ 1: ] = [] に修正しました。 お騒がせしました。m(_ _)m
なんのこっちゃ
print"".join([[m[i][j]==0 and(j>13 and"#\n"or"#")or(j>13 and" \n"or" ")for\ i in g(15)for j in g(15)]for n in[[(r.insert(0,n),[(len(s)and[[r.append((x+k, y+l))for m[x+i][y+j],m[x+k][y+l]in[(2,2)]]for i,j,k,l in[o.choice(s)]])or[0\ for x,y in[r.pop()]]for s in[[((-1,0,-2,0),(1,0,2,0),(0,-1,0,-2),(0,1,0,2))\ [i]for i in g(4)if[x>1,x<13,y>1,y<13][i]and m[x+[-2,2,0,0][i]][y+[0,0,-2,2]\ [i]]==1]]])for n in r]for m,x,y,r,o,g in[([[i*j==1 and 2 or i*j%2 for i in\ range(15)]for j in range(15)],1,1,[(1,1)],__import__("random"),range)]]][0])
凄い、こんなこと出来るんだ。感動した。
>>723 は神。
>>723 面白そうなので、短くしてみた。
print"".join(*[[["# "[m[i][j]/2]+"\n"[:j/14]for i in g for j in g]for n in[[(r.
insert(0,n),[s and[[r.append((x+k,y+l))for m[x+k/2][y+l/2],m[x+k][y+l]in[(2,2)]
]for k,l in[o.choice(s)]]or[0 for x,y in[r.pop()]]for s in[[(k,l)for k,l in[(-2
,0),(2,0),(0,-2),(0,2)]if m[(x+k)%15][(y+l)%15]%2]]])for n in r]for m,x,y,r,o
in[([[i*j%2 for i in g]for j in g],1,1,[(1,1)],__import__("random"))]]]for g in
[range(15)]][0])
Guido タンが嘆きそうなソースだけどね。w
scheme から逃げてきましたが何か?
字下げも無い括弧の山を瞬間的に判別できるのは十代の内だけだよね。
Schemeでも普通に字下げするし。
Cでも普通に字下げするし。
プロジェクト面接時に小さなコード記述させて、インデントがないと絶対採用しない会社が実在する
それはまともな会社に思えるが そもそもインデントしないでコードを書く人間など、 私生活でも散らかってるやつに決まっとる!
>>730 Scheme で本当にタチが悪いのは特殊構文と普通の関数の区別がつかないことだ。
たとえば set! は特殊構文だが、vector-set! は同じ破壊的な操作をおこなう関数でも
特殊構文ではない。同様に let や cond も慣れないとわかりにくいし、
慣れたあとでさえときどき間違える。これでマクロが自由自在に定義できたときには
恐しいことになるだろう。Scheme でも頑張れば Python と同じくらい
生産的になることはできるだろうが、Python にあるようなプログラマをミスから
守ってくれそうな細かい気配りが Scheme には欠けている。Emacs でバリバリ色を
つければそれなりに何とかはなるだろうが、それでも言語設計の段階からそういう
ミスについて配慮している Python のほうが印象がいい。
と最近思いましたです。
>>735 同様に扱える、というのはメリットでもあるよ
>>698 でも言われているが、基本的に Scheme は「頭がキレる」人のための
言語なのだと思う。物事を抽象的に考えるだけでなしに、カッコをすばやく認識できる
パターン認識能力とか、複雑なマクロ展開を (使うとして) 理解できる記憶力が
必要だからだ。Python はそれよりもいくぶん「バカ対策」がされている。
そこに親しみを覚えるか、それをダサいと思うかが Python ユーザと Scheme ユーザの
違いだろうな。自分がバカであると自覚している人間にとっては Python のほうが
親しみやすい。そして謙虚でないプログラマにろくなやつはいない。
昔で言えば C と BASIC の違いみたいなもんか。
確かに、「何でPython使ってるの?」って尋ねられたとき、 「LispもPerlもバカで理解できなかったから」って答えて るな・・・
俺もPythonやりたいんですが 参考書はどれを買ったらいいですか プログラミングはBASICしかやったことがないので簡単な奴がいいです 萌えるパイソン「萌えパイ」みたいな本はないですか
あと、萌え本はないので。
レスありがとう!!
>>741-743 半分ネタで書いたんだけどね。
どこかのサイトにあったPython入門を見て、
これなら俺でもいけそうだって思ったのがはじまり。
でも、書籍はオライリーのむずかしいそうなやつしかないし
「Pythonで学ぶプログラム作法」も俺にはちょっと敷居が高そうだった。
それで、もっと簡単な本はないのかなあと聞いてみたかったのでした。
結局、オンラインマニュアルか、 オライリーの「初めてのPython」しかないと思う。 「Python入門」「Pythonプログラミング」は Pythonを使って具体的に何をしていくか、 ということに主眼が向いているような気がして 初心者はきついと思う。
最近の初心者は軟弱ですか
萌えイラスト描いてくれる人がいるなら、初心者向け入門書作ってみたいね
パイ子萌え。
>>746 いくら簡単でも学校の教科書みたいに真面目な物だと駄目なんだろうね。
それと普通のユーザーが普通に使っている、つまり GUI のツールや
ビデオゲームが作れないと駄目だろうし。
SqueakToys みたいなのが必要なのかも。
あるいは高橋麻奈氏に「やさしい Python」を書いてもらうとか。
易しくみっちりと全10巻 キボ〜ン (*´3`)
752 :
デフォルトの名無しさん :04/09/02 15:52
変数を使って数字をファイルに書き込みたいのですが、 どのようにすればいいのでしょうか? x=100 f.write(x)やf.write('x') と書くとエラーがでてしまいます。 わかる方いましたら、お願いします。
str(x) とか '%d' % x とか
>>752 エラー内容をそのまま書かんとわからんよ。
f.write()の引数は文字列で、`x`は文字列だから本来エラーにはならない。
ファイルのオープンで書き込み可能にしてないとかかな?
755 :
デフォルトの名無しさん :04/09/02 16:44
>>754 type error argument must be string or read only character
buffer not int
というようなエラーメッセージが出てきます。
f.write('x') でやるとファイルには数字ではなくxそのものが
書き込まれてしまうのですが。
756 :
デフォルトの名無しさん :04/09/02 16:48
> type error argument must be string or read only character
> buffer not int
めちゃくちゃ丁寧にエラーの原因を示しているじゃないですか。。。
と、そんな野暮なツッコミは放っておいて質問です。
Python の read only character buffer って何を指しているのですか?
"STRING" ってリテラル(literal 定数) だと思うし、
これかな?と思って試してみたら
__name__ = "test"
使い道のわからない事もできちゃうし、、、
2.3.10 特殊な属性
http://www.python.jp/pub/doc_jp/lib/specialattrs.html のことを指しているのですかね?
わかる方よかったら教えてください、お願いします。
Mac OS 9.2.2 で Python 2.3.3 を使ってます。 アプレットを実行するときに、ダブルクリックしてアプレットが立ち上がるのはスムーズなんですが、 そこから実際にスクリプトが実行されるまで10秒くらい時間がかかることがあります。 その間がなくてすぐに実行されることもありますが、時間がかかることのほうが多いです。 今更、古い環境ですけど、なにか解決できるような情報ないでしょうか?
760 :
デフォルトの名無しさん :04/09/04 21:31
1gentoolinuxユーザとして質問します。 gentooのどの部分にPythonが使われているのでしょうか? また、それはPythonでなければいけないのでしょうか?
一つ目の質問: Portage。 二つ目の質問: Portage のメンテナーがそう思ってる間は Python でなければならん。
>>758 情報ありがとうございます。
しかし、『非必須組み込み関数』と書かれているせいか、
(もしくは自分が頭悪いせい)
他の文字列と目立った違いがわかりませんでした。
read only ... については、昔は違ったのかもしれませんが、
今はあんまり気にしなくてもいいのかな?
ところで a[1] = "a" に関してですが、
文字列の一部分を変えようと思ったら
a = buffer("hoge") # a = "hoge" でも同様
a = a[0] + "a" + a[2:]
としなくてはいけない?(めんどい・・・)
『オブジェクトの内容変更は明確にする』という python の思想が
あちらこちらで見受けられますね。
>>759 ,760
http://www.gentoo.org/doc/en/portage-manual.xml http://www.gentoo.org/doc/ja/portage-manual.xml Portageシステムは、Pythonのコアの部分と、
BASHスクリプトベースのebuildとの融合物であるといえます。
Makefileやmakeコマンドで処理する代わりに、Pythonのパワーと、
オブジェクト指向の特徴の一部を利用したシェルスクリプティングの使いやすさを活かし、Portageはユニークでパワフルなシステムを作り上げています。だから敢えて言いましょう。Portageは現在存在する他のすべてのportsシステムを超越しています。
一般性が強く上位層に位置するシステムについては
C や Perl とかよりも python の方が向いてるのでしょうね。
個人のクセが少なくて読みやすいだろうし。
ぐあ、番号ミスった。
764 :
デフォルトの名無しさん :04/09/05 03:09
>>762 > ところで a[1] = "a" に関してですが、
> 文字列の一部分を変えようと思ったら
MutableString が使えます。
>>> import UserString
>>> a = UserString.MutableString("hoge")
>>> a[1] = "a"
>>> a
'hage'
といいつつ、オレは実地で使ったことは一度もないのだが。
たいてい文字列の中身をいじりたい場合は一度なんらかの形で
parseしてトークン列からなるリストをつくり、最後にそれを
''.join(seq) で文字列に戻す、ということをやる。
「Pythonで学ぶプログラム作法」ってよんだことないけど、 amazon の書評をみると、あんまり初心者向けではないって 書いてあるなあ。
たぶん、文字列の特定の部位を、文字単位の位置を指定して 書き換えたくなることって、そんなにないような気がするのです。 スキャンが必要なら、正規表現の re.sub を使えばいいし、 バイナリデータを扱う場合なら ArrayType を使ったほうがずっと効率いいし。
そうですねえ。普通は 『"hoge" という文字列を "hage" に置換したい』 という欲求であって 『二文字目を "a" にしたい』 という、やたら直接的な欲求は起こりませんよねえ。 組み込み、システム屋さんには使いづらいだろうけど、 言語の棲み分けという点では上手いことやってるなあ、とちょっと感心。
自分がレビューを読んだ限りは英語版も初心者向けに感じましたが。。。 ただ 『説明が足んねぇんだよ、ゴラァ!』 みたいな書き込みがちらほらあったので、 他に初心者向けの良書があるならば、 そちらを読んでみるといいのかもしれませんね。 個人的には Web サイトのチュートリアルを一通り試してみてから 中級者向けの本でも買えばいいかと。 # ぶっちゃけ、これだけドキュメントがあるならば # 特別買わなくてもいいと思います、ハイ。
773 :
デフォルトの名無しさん :04/09/05 22:54
きついことをいうかもしれないが、 いくらやさしい本を買っても覚えられない人は覚えられないよ。 プログラミングは (最初のうちは) かなり学校の勉強に 似ていると思う。学校で勉強ができない奴を見ていると、 たいていは参考書の答えを先に見てしまったりして、 自力でしばらくがんばってみる、ということをしない。 あるいは、ちょっとやっただけですぐ飽きてしまう。 しばらく進めばそれはもう苦にはならず、楽しくなってくるのだが、 初めてプログラミングを習ったときから楽しくできました、なんて人は あまりいないんじゃないかんな。
ただし、まれに好奇心のすごくつよい人がいて、 コンピュータのようなものを見たとたんに「どうなってるんだろう」と 引きこまれてしまう人もいるね。こういう人は大して苦労せずに プログラミングを覚えられると思う。 でも、すでにあるソフトを見て「こんなことがやってみたい!」と思ったり、 プログラマーにあこがれてプログラミングを始める人は、たぶん 現実と想像とのギャップを越えるのにそれなりの努力が必要だろう。
>>773 多分その、
>たいていは参考書の答えを先に見てしまったりして、
を「入門書」に期待する層が多いんだろうね。1001Tips とか。
Perl と JavaScript の本にはその類いが多い気がする。
Python の場合問題なのは、ABCのその次を担う本が(日本では)
ほとんど無い事だと思う。
Tkinter とか pygame とかを使ってGUIツールやゲームを作るのは
日本語の資料だけだと難しいと思うし。
初心者にありがちな感情として、自分の考えているコードはもしかしたら とんでもなく無駄なことをしているんじゃなかろうか、というのがあるとおもう。 そこで無駄かどうかとか考えずに、いま一番良いと思い付いたことを書き出すこと が上達への大一歩だとおもう。
まずは英語で読めるようになることだな そのほうが後々捗るようになるし
>>778 > まずは英語で読めるようになることだな
> そのほうが後々捗るようになるし
それは真実ではあるが、いささか悲しい。
英語がまったくダメなのはさすがにつらいが、英文を参照するのは
api のリファレンスとインストールマニュアル程度で、
長い説明文のようなものはなるべく日本語で読めるようにすべき。
すべき、って、オレも翻訳やんなきゃいけないわけですが。
中級レベルになると、手取り足取りしてくれる本じゃなくて その分野の勘所を説明してくれる本こそが必要になるん だよね。 そこで、その説明に使われているコードが Java であれ VisualBasic であれそれを Python に置き換えて読める 人は既に上級者なわけで…。 「Pythonを256倍使うための本」とか出てくれるといいん だけれどね。
そんな人にはrub(ry
むしろ「pythonを0.3倍使うための本」を出してほしい
0.3という数値はどこから? で、0.3とかいいつつ256倍本より濃い罠。
256倍とかいって鼻息荒くするのはもう発想が古い。 これからは、いかに手をぬくかに主眼をおくべきだという考え。 0.3倍という数字にとくに意味はない。0.24倍でもいいよ。
0.00390625倍で
Pythonを使えばどんな事ができますか?
>>786 何でもできるが、特に目的が無いのであれば、PyGameとか使って、簡単な
ゲームなんかを作ってみてはいかが?
Web系もCGIはもちろん作れるし、なれてきたらZopeなんかを弄ってみるのもいい。
>>787 とりあえずPyGame?でパズルゲーム作ってみます。
どうもありがとう。
789 :
デフォルトの名無しさん :04/09/08 00:03
ブール代数の'!'を使用して図形を加工した後に '*'や'-'を使いたいのですが、'!'を使ったために、 *-の効果が現れません.どのような方法でやればいいのか わかる方いましたら、 教えてください。
ゴバキング?
ShadeだかTruespaceだかの話かな? Pythonつながりで。
なる
ほう、TrueSpaceもPython使えるのか。
人によると思いますが、標準以外のモジュールを使うケースって 結構多いんでしょうか? 配布するアプリを作る場合、いろんな モジュール使うと相手に負担(手間)がかかりますよね? あまり配布向きじゃないんでしょうか?
>>789 >>> True
True
>>> int(True)
1
>>> float(True)
1.0
>>>
>>794 trueSpaceのPythonスクリプトは、ちょっと癖があるけど、
特にアニメーション (tの関数) でうまく使うと、非常に良い。
trueSpaceでアニメーションするんであれば、あの Path オブジェクトでは
限界あるので、Pythonをマスターすべしってかんじ。
>>795 Windows あたりだとそもそも Python 自体が入ってないので、
どのみちインストゥールしなくてはならないのは同じ事。
py2exe でまとめちゃえばインストゥールするのは一回で済む
ので標準外のモジュール使っていても関係無し。
Windows 以外なら……モジュール入れるくらいの手間を惜しむ
人間がマイナー環境使っているはずもなし。無問題でしょう。
Shade, TrueSpace, Blender, Metasequoia 他にPythonが組み込んである3D CG制作ツールってあったっけ?
PoserとかVueとかもじゃなかったっけ?
Illustrator, Photoshop, After Effects もか…… 確かPaint Shop Proもだよね。
import _codecs で _codecs モジュール
↑
>>804 ごめんミスった
import _codecs で _codecs モジュールを取り込めますが,
これはどこで定義されているんでしょうか?
Python の lib ディレクトリ以下を探しても,
このモジュールに対応するファイルは見つかりませんでした.
PYTHON/lib/codecs.py (←これはある) のソースを見ると,
この _codecs モジュールを取り込むように書かれていました
(まぎらわしいな).
一応 print で表示させると,こうなった↓
>>> print _codecs
<module '_codecs' (built-in)>
Pythonのエンジンそのものをハックするのでなければ 只のツールにすぎないのだからそんなに深刻にお勉強しなくてもええよ 漏れはPython使うてカオスのお勉強中;-D
>>805 > 一応 print で表示させると,こうなった↓
> >>> print _codecs
> <module '_codecs' (built-in)>
惜しい
>>> help(_codecs)
built-in(組み込み)モジュール一覧はsys.builtin_module_namesで見れる。 Windowsの場合そういうモジュールはインタプリタ本体と一緒になってるんで、 システムフォルダのpython2x.dllの中に機械語で書いてあるということに。 # 各種Unix類だとどうだかは知らないっす。
なんども出てきた問題だと思いますが、WinとLinuxと(ほかのUNIXも) クロスプラットフォームな日本語対応GUIアプリをPythonで作る場合の 現実解はPyGTK2でいいでしょうか? あとWinでは配布が簡単じゃないと困るんですが、やはりPython、Gtk、 PyGTKをそれぞれインストールしてもらってから自分のアプリを入れて もらう手順はさけられないでしょうか? たとえばpy2exeで全部一緒に 配布とか。
suzukiさんはお元気だろうか?
>>809 散々ガイシュツだが現実解はTkinterかと。いやマジで。
Tkのクセに逆らわないように設計してコーディングすれば
意外なほど簡単にWindowsとUnixの両方できちんと動くGUIアプリが作れる。
何よりもPythonに標準で入っているのが強みだ。
日本語関連はUnicodeに統一すれば特に問題はないと思われ。
むしろクロスプラットフォーム性の難関はGUIよりもファイル入出力
とかユーザ設定の方法とかそういうOSごとの決まりごとがある部分に
ある気がする恭子の頃。
wxPythonじゃダメなの?
インスコめんどくさいじゃん。
cx_Freeze 使って固めればいいんじゃないの?
>>809 まともな Windows ユーザーならば、単にアプリ一つ入れるのに
無関係なライブラリを入れられるのは嫌うはず。なので、
>やはりPython、Gtk、
>PyGTKをそれぞれインストールしてもらってから自分のアプリを入れて
>もらう
なんてのはそもそもナンセンス。
>py2exeで全部一緒に
>配布とか。
というのが現実的ですね。
なのでライブラリに何を使おうが関係無し。
ですから、Linux なり Mac なりの他の環境での対応具合を主にして
決めていいと思う。
Tkinter が枯れていて無難じゃないかな。
Wine の UI 系ライブラリを Python で実装してしまうのもアリかなとオモタ。 つぅか win との互換性を考えるよりも 100% Python OS のプロジェクトをs
Linuix, *BSD系カーネル で init の代わりに Pythonインタプリタ起動(w でもやっぱりMachとかのマイクロカーネル & Python Serverってのがいいなぁ。
pygame 使ってスクリーンセーバー作ってみましたが、 コード量がめちゃくちゃ少なく済むので楽ですね、コレ。 感動しました。 # 呼び出し方法がちと考えものだったので # MFC で InitPyScr.scr を作成し、 # そこから各スクリプトを呼べるようにしました。 # だる。
もうtupleは要らないような気がしなくもないな。 [[x, y], z] = [[0, 1], 2] とか普通にできるし。
そうはい神崎。 >>> {}[[]] = 0 Traceback (most recent call last): File "<stdin>", line 1, in ? TypeError: list objects are unhashable >>>
そういえばそうだった。この前引っかかったばかりだったのにw でも、それだけのためにtupleが存在してるのもなぁ。 他にもlistでできないことってあるのかな?
実際問題としてはどちらか一方でも何とかなるだろうな。 じゃあ、なぜタプルとリストの二つがあるかと言えば 概念的に別モノだからだと思われ。 タプルの要素は典型的には互いに異なる「属性」の値だ。 例えば (2004, "September", 10) という三つ組 (3-tuple) は日付を表していて 三つの要素はそれぞれ年、月、日の三つの属性の値だとみなせる。 また、要素が増減するとそれはもう日付ではなくなる。 ここでタプルは不変 (immutable) であるという性質が利いてくる。 つまり、オブジェクトとしての同一性を保ったまま要素数を変えることは できないので、日付を表し続けることを保証できる、ということだ。 一方、リストの各要素は同じデータ型であることが多い。 例えば ["Guido", "tim_one", "effbot"] は名前の集合 (set) を表している。 名前が増減しても名前の集合であるというオブジェクトの性質は変わらない。 また、リストを扱うプログラムは要素数がいくつであっても動くことが多い (というかそういう場面でリストをよく使う)。 要するに、タプルはオブジェクトを一定数の値の組で記述するのに使い、 リストは集合を表すのに使うのがキホソということだ。 (無論、他の使い方は不可、ということではないので念のため。) 似て非なるものであるが故に一方を他方で代用せず、二つを別個の 基本データ型として採用したところに Guido の言語設計者としての センスの良さが表れている。
・・・というようなことを書いていて思ったのだけど、 タプルの不要感は、リストと似ているという点もさることながら、 オブジェクトを記述するという本来の用途がクラスと被っているという点に 起因している希ガス。
だから、いちいちクラスを設計するのが面倒くさい時に便利なのでしょ。 速度はもう完璧に一緒なのかね?
Python初心者なんですが、他言語でいうと タプル=構造体 リスト=リスト って認識してますがOKでしょうか?
漏れは タプル: 個数が一定でそれぞれの型が決まってるもの リスト: 型は同じだけど個数は不定なもの ってイメージを持ってる。実際はそんなことはないわけだけど。 Pythonは静的型付けな言語じゃないから 分けてある理由がわかりづらくなってしまってるんじゃないかなぁ。
>>823 ,824
当初pythonにはclassなんてなかったんだから仕方ないじゃん
・・・あれっ、禁句だった?
あっ、俺様のパッチが2.4a3にコミットされてるー。(´∀`)ワーイ
>>822 リストとタプルの概念的な違いは分かるんだけど、
Pythonのポリシーとしては、むしろ両者を統合したほうが自然な気が。
昔はリストでできることとタプルでできることにかなり差があった
のではないかと邪推してみる。
# 俺もGuidoのセンスの良さは抜群だと思う。
>>828 マジ?日本人でいたんだ、そんな人。
ほんとにおめ。
どうせなら文字列や辞書にも書き換え可なヤツと不可なヤツの両方を 作っておけばタプルとリストの違いなんて発展解消されるよね。 リストと辞書が統合されている言語(キーに整数だけ使うとリストとして 使えるやつ)も多いわけだし。 Python の選択もたまたま中庸を選んだらそこらへんになった、程度の ものなんだろうな。 個人的には、タプルは () じゃなくて r[] みたくリストに何か前置する形式 にでもして欲しかった。(式をまとめる () と紛らわしいのが嫌)
>>831 > 個人的には、タプルは () じゃなくて r[] みたくリストに何か前置する形式
> にでもして欲しかった。(式をまとめる () と紛らわしいのが嫌)
-1. Shine.
-10
貴殿らは (1,) という式をみて何ぞ感じまするか。
([([(), (), ()], [(), (), ()], [(), (), ()]),([], []),([])], [(), ()], [])
要素がひとつのtuple≒scalarとみなしたかったんじゃないかな?
x, y, z = f()
x, y = g()
x = h()
実際は
>>834 のような奇妙な結果になってるわけだけど。
パイスぉんを日本語かしよう計画: #!/客/瓶/燕尾 パイスぉん 輸入だ シス 輸入だ オス もし 〜〜名前〜〜 == 「〜〜主要〜〜」: 合計 = 零 まだしも い 内にある 範囲(十): プリントするぜ 合計 合計 += い もし い == 五: オス、分岐() プリントするぜ 「完了」
>>834 はじめてその表記法を知ったときは奇妙だなぁと思った。
しかし、要素数が1のタプルをコード中に書くことはほとんどなく、
事実上問題にならないということが後から分かってきた。
(1,) という表記法を避けるための方法はいろいろあったんだろうけど
敢えて () を採った Guido のバランス感覚はやはり素晴らしい。
最近はコア開発者が増えて多数決で設計している。
恐らく Guido 的でない表記や仕様もあるのだろう。
だけど最終的にゴーサインを出しているのは Guido だし、
タプルのように一見イマイチな設計でも後から良さが分かることもあるから
まずは実際に使ってみることにしている。
イヤになったら Python 捨てりゃいいんだし。
そーいや list comprehension も最初見たときは分かりにくいと思ったが
使ってみると意外に直観的だったな。もうやられっぱなし。おやじ、超クール。
zope.co.jp に入社したいんだけど? いづれは関西圏内にも拠点を立てるのだろうからそこにはいりたし。
pcをシャットダウンするモジュールとかあります?
あるよ。いま作った。 # shutdown def shutdown(): import os os.system("shutdown -h now")
Windowsだと shutdown -s -f だから、場合分けが必要だね。
シェルを Python (すでにある)にしてしまってる人にお訊ねしますが 使いにくくないですか?
>>842 shutdown -s -f
にしても動かないです・・。
IndentationError: expected an indented block
が三行目に出てきてしまいます・・。何でか不明。
全角スペースを半角スペースに置換汁
つーかここにコード片を貼るときは 行頭の半角スペースを&nbsp;に置換汁。 そーすりゃコピペでそのまま使える。 例: def f(): print "spam"
半角に気をつけたらエラーメッセージは消えましたが Python IDLE でもBlenderでも動きません(T_T)
Windows に shutdown てあったっけ?
どのバージョン?
>>842
win32apiを呼び込む悪寒
Cygwinじゃない? よく知らんけど. ちなみにNetBSDではshutdown -p nowで電源断. # pkgsrcで入れたTkinterが動かん!
動かんかったら直してパッチをdevに投げろよ
>>848 XPなら標準である。
NT以降にはなんとかキットで用意されてるはず。
cygwinにもあります。<サスペンドとかできて便利
とりあえず直した.一応Python関係なのでスレ違いではないと信じつつ, pkgsrc/x11/py-tkのパッチ貼り. begin 644 - M+2TM("]U<W(O<&MG<W)C+W@Q,2]P>2U4:R]F:6QE<R]S971U<"YP>2YO<FEG M:6YA;`E3=6X@4V5P(#$R(#`P.C$W.C$Y(#(P,#0**RLK("]U<W(O<&MG<W)C M+W@Q,2]P>2U4:R]F:6QE<R]S971U<"YP>0E3=6X@4V5P(#$R(#`P.C$W.C4R M(#(P,#0*0$`@+3(U+#<@*S(U+#<@0$`*(`D)"6EN8VQU9&5?9&ER<SU;8FQI M;F-L+"!X,3%I;F-L72P*(`D)"6QI8G)A<GE?9&ER<SU;8FQL:6(L('@Q,6QI M8ETL"B`)"0ER=6YT:6UE7VQI8G)A<GE?9&ER<SU;=&-L<G1L:6(L('1K<G1L M:6(L('@Q,7)T;&EB72P*+0D)"6QI8G)A<FEE<SU;)W1K)RP@)W1C;"<L("=8 M,3$G70HK"0D);&EB<F%R:65S/5LG=&LG+"`G=&-L)RP@)U@Q,2<L("=P=&AR 296%D)UT*(`D)*0H@"5T*("D* ` end
line = 'X(0 1 2) Y(3.5 4.5 5.5) Z(-6 -7 -8)' こんな感じの文字列があった時に values = [0, 1, 2, 3.5, 4.5, 5.5, -6, -7, -8] と数値だけを抜き出すにはどうすればいいですか?
>>855 line = 'X(0 1 2) Y(3.5 4.5 5.5) Z(-6 -7 -8)'
a = []
for x in line:
if x in "0123456789.-":
a.append(x)
else:
a.append(" ")
values = eval("[" + ",".join("".join(a).split()) + "]")
print values
正規表現使えば for ループは消せるし、結果が float型に変換されていても 良いのならば eval も消せると思うけれど取っ掛かりとしてはこんなもんかな。
どうも eval は遅くってなあ。 $ time python -c 'len([ int("%s"%i) for i in range(1000000) ])' real 0m4.992s user 0m4.320s sys 0m0.660s $ time python -c 'len([ float("%s"%i) for i in range(1000000) ])' real 0m6.175s user 0m4.520s sys 0m0.700s $ time python -c 'len([ eval("%s"%i) for i in range(1000000) ])' real 0m38.140s user 0m34.200s sys 0m1.150s
>>858 855 の
>line = 'X(0 1 2) Y(3.5 4.5 5.5) Z(-6 -7 -8)'
>こんな感じの文字列があった時に
>values = [0, 1, 2, 3.5, 4.5, 5.5, -6, -7, -8]
に拘るならば、小数点が入っていたら float() 入っていなかったら int() とするコードを加えればいいかと。
もっとも実際の所、 int が float になってしまって困る事は少ないと思うけれど。
こんなのは? def conv1(s): try: return int(s) except ValueError: return float(s) これとどっちが速いかね。めんどくさくてまだ試してないけど。 def conv1(s): if "." in s: return float(s) else: return int(s)
ご批判は承知であえてワンライナーにしてみました. >>> line = 'X(0 1 2) Y(3.5 4.5 5.5) Z(-6 -7 -8)' >>> import re >>> map(lambda x: int(x[0])+(not len(x[1]) or float(x[1]) or 0), re.findall('(\d +)(\.\d+)?', line)) [1, 2, 3, 3.5, 4.5, 5.5, 7, 8, 9]
間違えた... >>> map(lambda x: int(x[0])+(float('0'+x[1]) or 0), re.findall('([-]?\d+)(\.\d+) ?', line)) [0, 1, 2, 3.5, 4.5, 5.5, -6, -7, -8] >>>
そんなあなたに内包表記. >>> [ int(x[0])+(float('0'+x[1]) or 0) for x in re.findall('([-]?\d+)(\.\d+)?', line) ] それにしても,よくこんなの思い付くなぁ.凄い.
>>856-863 ありがとうございます。
最後の方はすごすぎて理解するのに時間がかかりました・・・
[ ("." in x) and float(x) or int(x) for x in re.findall('(-?[0-9.]+)', line) ] 割とシンプルにいける.
お前らは ruby 使ってろ。
先生っ!! Python のソースコードを見て勃起しそうですっ!!
先生っ!! 漏れのは一応硬いですっ!!
そんなにヘビを硬くしてちゃダメだ!もっとその、頭をつかってだな、 自分のヘビを〜柔軟に〜扱えなきゃいかんよ!
>>866 のコードはfloat(x) == 0.0のときおかしくなるな.
やはりlambdaや内包表記で条件分岐ができないのは辛い….
0. Cの三項演算子を導入
1. lambda内で文の記述を認める
2. 0 == Falseとなる仕様を変える
うーん.どれも望めそうにない.
とりあえず別解↓
map(eval, re.findall('(-?[0-9.]+)', line))
>>873 >やはりlambdaや内包表記で条件分岐ができないのは辛い….
というか、それこそが正に Guido の狙いなんだろうね。
どうせなら lambda なんかも ver.3 あたりで廃止すればいいと思うけれど。
>>876 君はもうそろそろ Python を卒業して scheme を極めるべきなんだよ。
…Ruby とかの半端言語に走っちゃ駄目だよ。
>>875 おぉー
ところで各 PEP の到達可能性ってのは議論のネタになりそうですか?
スコープを技術だけのアスペクトで考えるの.てかオナニーは非公開にしてく
れですか・・・あぁそうですか・・・
>>877 Ruby の中の人は LM の記事を読む限りにおいては真性だから Ruby は眼中に
ないよw てか異様に Python を敵視してんのw 哀れというか何というかw
まぁスケープゴート的にオモロイ存在ではあるがマジで拘りたくはないな
>>877 いや,SchemeからPythonに乗り換えたんだけど….
そういう人,けっこう多いと思う.
やっぱり適度な糖衣構文はあった方が見やすいし書きやすい.
Pythonはセンスよしバランスよしの構文で,俺のハートをガッチリ掴んだ.
Guidoがlambdaを廃止するというのなら,きっとそれは正しい方向なんだろうけど,
個人的には激しくショーーーック.
>>866 を改良して小数点以下を分けてみるというのはどうだろうか。
[[int(x), float(x+y)][y and 1 or 0] for x, y in re.findall('(-?\d+)(\.\d+)?', line)]
>>880 if cond then x else y
は
[y, x][cond]
と書けるのか.スバラシイ.(常にx, yとも評価されてしまうけど)
[int(x), float(x)]["." in x]
と書けないのは残念.
つーか、float 決め打ちじゃ駄目なのか? そもそも e 表記が入る可能性や、整数型の範囲を超えて長整数型 が来る可能性は考慮しなくていいのだろうか。
>>882 いや,みんな(といっても2〜3人っぽいけどw)パズル的に楽しんでるだけだから.
ちなみに,e表記や長整数もOKなコードは
>>873 (俺です)の
map(eval, re.findall('(-?[0-9.]+)', line))
とか.
普段はこんな abuse しないから楽しいな。
> [int(x), float(x)]["." in x] 代わりに {True: float(x), False: int(x)}['.' in x] でどうよ
http://www.python.jp/Zope/download/pythonjpdist ↑ここのSJIS対応版をインストールしました。
test.pyというファイルネームで、
print "あいうえお"
というソースを作って、
python test.py
で実行すると、警告がでます。
どうすれば消せますか?
sys:1: DeprecationWarning: Non-ASCII character '\x82' in file test.py on line 1,
>>885 やってみれば判るけど,問題点は「float(x)とint(x)が両方評価されてしまう」ことなので,
残念ながらそれでは解決しない.
[lambda : int(x), lambda : float(x)]['.' in x]()
と遅延評価っぽいことをすれば一応解決するが….
890 :
デフォルトの名無しさん :04/09/14 11:28:25
なんだみんな手抜きばっかりでしょうがねえな クソまじめにトーカナイザから実装するやついねえのか import re TOKEN_REGEX = re.compile(ur"[0-9]*\.[0-9]+|[0-9]+|[a-zA-Z_][a-zA-Z0-9_]|[()]|\s") T_FLOAT = 1 T_INT = 2 T_IDENT = 3 T_PAREN_BEGIN = 4 T_PAREN_END = 5 class TokenizationError(ValueError): pass def tokenize(s): while True: if not s[i:]: break m = TOKEN_REGEX.match(s, i) if not m: raise TokenizationError("Illegal character: %s at %d", (s[i:i+1], i)) t = m.group(0) if t == "(": yield (T_PAREN_BEGIN, None) elif t == ")": yield (T_PAREN_END, None) elif t.isdigit(): yield (T_INT, int(t)) elif "." in t: yield (T_FLOAT, float(t)) elif t[0].isalpha(): yield (T_IDENT, t) else: assert t.isspace(), "Impossible! t=%r" % t return
キターーーー!
ゴメソ テストせずに書き込んだらやっぱりバグありだった.. import re TOKEN_REGEX = re.compile(ur"[0-9]*\.[0-9]+|[0-9]+|[a-zA-Z_][a-zA-Z0-9_]+|[()]|\s") (T_NONE, T_FLOAT, T_INT, T_IDENT, T_PAREN_BEGIN, T_PAREN_END) = range(6) class TokenizationError(ValueError): pass def tokenize(s): i = 0 while True: if not s[i:]: break m = TOKEN_REGEX.match(s, i) if not m: raise TokenizationError("Illegal character: %s at %d" % (s[i:i+1], i)) t = m.group(0) if t == "(": yield (T_PAREN_BEGIN, None) elif t == ")": yield (T_PAREN_END, None) elif t.isdigit(): yield (T_INT, int(t)) elif "." in t: yield (T_FLOAT, float(t)) elif t[0].isalpha(): yield (T_IDENT, t) else: assert t.isspace(), "Impossible! t=%r" % t i+=len(t) return
長すぎるといわれたので 2回にわける。 class ParsingError(ValueError): pass TOKEN_NAME = { T_NONE:"?", T_FLOAT:"float", T_INT:"integer", T_IDENT:"identifier", T_PAREN_BEGIN:"'('", T_PAREN_END:"')'" } def parse(tokens): vars = {} name = None args = [] try: while True: (t,arg1) = tokens.next() if t != T_IDENT: raise ParsingError("Identifier expected: got %s: %r" % (TOKEN_NAME(t), arg1)) name = arg1 (t,arg1) = tokens.next() if t != T_PAREN_BEGIN: raise ParsingError("Open-parenthesis expected: got %s: %r" % (TOKEN_NAME(t), arg1)) args = [] while True: (つづく)
>>893 (t,arg1) = tokens.next()
if t != T_INT and t != T_FLOAT: break
args.append(arg1)
if t != T_PAREN_END:
raise ParsingError("Close-parenthesis expected: got %s: %r" % (TOKEN_NAME(t), arg1))
yield (name, args)
name = None
args = []
except StopIteration:
if name or args:
raise ParsingError("Premature end of file.")
return
使い方はこんなかんじ:
>>> list(parse(tokenize("X(3 4 5) Y(8) Z()")))
[('X', [3, 4, 5]), ('Y', [8]), ('Z', [])]
ちなみに
>>890 のコードにもバグあった。TOKEN_REGEX は正しくはこうだ:
TOKEN_REGEX = re.compile(ur"[0-9]*\.[0-9]+|[0-9]+|[a-zA-Z_][a-zA-Z0-9_]*|[()]|\s")
こうしないと 1文字の変数名がエラーになってしまう。
> ちなみに
>>890 のコードにもバグあった。TOKEN_REGEX は正しくはこうだ:
失礼…
>>891 のコードのことね。
もう頭ボケててだめだな。
それじゃ。
しまったああ! エラー処理がアホってるよ。 TOKEN_NAME(t) じゃなくて TOKEN_NAME.get(t) だ。 くそー
ああ、そういえば空白を &nbsp; にすんの忘れてた。まあいいや。 どうしても見たい人はソース見てくれ。 navi2ch で行頭のスペースを全部 &nbsp;にするような フックかけんのかなー
Aho のドラゴン本を地で行くコードだね。(・∀・) イイ! 字句解析器と構文解析器の手書きは楽しいよねえ。 文法に合致したあらゆる式がものの見事に構文木に分解される様は何度見ても感心する。 あーまた何か処理系が書きたくなってきたなー。
正規表現エンジンを Python で再構築する会
100% poor Python!
sre*.pyはPure Pythonですが。
Python 3.x で S 式を実装する.マヂで.漏れは本気だよ
「S式を実装する」の意味がよく分からん. S式パーサを作るって意味? それともSchemeインタプリタでも作るつもり?
>>904 別に 3.x まで待たなくても、与えられたリストやタプルをS式として解釈して
評価して値を返してくれる 「scheme モジュール」 でも作って公開すれば
いいんじゃない?
lambda 廃止で行き場を無くした lisper 達がこぞって使うかもしれないし。
いや、目的は唯一つ。Python 自らの言語を用いて Python 言語そのものを実装する。これが最後のラッパーになると思う。 他の主要なものはラップ済み。Python だけ知っていれば C の資源も Perl の 資源も利用可能。これ以上素晴しい言語はないだろう。
アフォと天才は紙一重。 アフォはアフォなことを言い、天才は凡人にはアフォなこととうつることを言う。
アァアフォデスヨ('A`)キニシナイケドナ
sreはCで書かれている部分もあるよ.
いっそ構文もS式にして欲しいな。 意味のあるインデントは嫌いなんで...
912 :
901 :04/09/16 11:19:31
>>902 比較してない。そもそも検索対象が文字列じゃないんで、
既存のライブラリは使えなかった。それが自作した理由だ。
が、generators とかバックトラック使いまくってるんで
とにかく遅いだろうな。速度はそんなに気にしないのよ。
python3.x って python 3000 のこと?
>>911 それはもはやPythonじゃないだろ….
S式がいいとかいってる奴がなんで Python 使ってんのかさっぱりわかんない。 さっさと scheme に行けばいいのに。 誰も止めないよ
lisp front-end for the Python programming language www.caddr.com/code/lython/ 既出だったらスマソ.S 式諸兄,使用感レポよろ
Zope と Apache を同じ鯖で同時に立てても問題ないですか?
「ニシキヘビは重要な部分でした、始め以来グーグリになる、またシステムが 成長し発展するとともに、そのように残ります。今日、ダース、グーグリにな る、エンジニアはピュートーンを使用します、また、私たちはこの言語におけ る熟練を持ったより多くの人々を捜しています。」ピーターNorvig(Google社 の探索品質の管理者)は言いました。
"Python は初め以来のGoogle の重要な部分であり、残物はためにシステム育 ち、展開する。今日Google たくさんのエンジニアはこのlanguage." で Python および技術のより多くの人々を捜すwe're を使用する; 、前述のピー ターNorvig Google の調査の質、株式会社のディレクター。
ニシキヘビ・バージョン ニシキヘビ 2.3 (医者) ニシキヘビ 2.2 (医者)
よし、スパゲティコードで proof of concept 完了! RAD 言語の真髄だなー。 ・・・・動いたからもういいや。ちゃんと仕上げるの マンドクセ ('A`)
from wxPython.ogl import * wxOGLInitialize() と書くだけで落ちてしまうのですがどうしてでしょうか。 環境: Windows2000/Python 2.3/wxPython 2.5
idle(Python GUI)からwxPythonを使うとうまくいかないと聞いたことがあるような・・・ 関係なかったらスマソです。
wx._core.PyNoAppError: The wx.App object must be created first! というエラーが出ていませんか?
>>931 右の方にある、
初めての方へ:
>>>オンラインドキュメント
を選び、それから
・ドキュメント (最新版: 2.3.3)
の「2.3.3」というバージョン番号をクリック。
そんなところにあったのか! メニューは左側にまとめてくれるとうれしいな
>934 mlで言え
Zope Japan の日々の活動の詳細報告を求む
Zopeスレで聞け
[Python-ml-jp 3027] > 数日中にPython 2.3.4 SJIS版インストーラ(***日本語ドキュメント付き***)を > リリースできると思いますので、お楽しみに。 ヨロコベ!
2.4からはCJKコーデックが入る見ただけど、いまSJIS版Pythonのメリットって何があるの?
メリットが無いと思う人には無いんじゃないか?
ボチボチ新スレ。
>>938 もう CJKPython に乗りかえちゃった。
これだと IDLE の Default Source Encoding を UTF-8 にしてもまともに動作するな。
JUG の日本語化版だと None 以外は誤動作したのに。
そうだな。 スレ乱立イクナイ!
∩___∩ |
| ノ\ ,_ ヽ | ……………
/ ●゛ ● | |
| ∪ ( _●_) ミ (=)
>>943 = 944
彡、 |∪| | J
/ ∩ノ ⊃ ヽ
( \ / _ノ | |
\ " / | |
\ / ̄ ̄ ̄ /
 ̄ ̄ ̄ ̄
>>946 マジかよ。この間、初めてのPython買っちゃたよ。
> 初めてのPython 第2版 なんかミョーなタイトルだなぁ。初体験(実は2回目)みたいな。
>>948 経験豊富な執筆者が、初体験の読者に手ほどきするのだから、問題ない。
Cookbook の日本語版ってあるんだっけ?
951 :
デフォルトの名無しさん :04/09/21 22:54:46
Pythonも三項演算子導入してくれ
イラネ
>>946 本家のお医者さんに飛べばそんなのイラネ
954 :
デフォルトの名無しさん :04/09/22 00:08:12
三項演算子がないおかげでせっかくのラムダが台無しだよ。頼むよ。
pythonの案件が増えるといいですね。
>>955 ・google に入社する
・Zope Japan に入社する
・
表には見えない保守やバッチ用のツールには 結構Pythonをつかってるけどな。 スクリプト言語では保守性いいし ・言語習得が容易 ・ソースの見通しがよい ・例外が使える など
959 :
デフォルトの名無しさん :04/09/22 01:39:32
>>958 A ? B : C
と
A and B or C
じゃ、B が空のとき違うじゃん。
{True: lambda: B, False: lambda: C}[bool(A)]() ここまでしても python 使いたければどうぞ
あまり甘やかすと、次は代入演算子が欲しいって言い出すぞ。
if (a=f(b)) is None: のよーな書き方のできる 塩山市のことだと思われ。
(B,C)[A]
966 :
デフォルトの名無しさん :04/09/23 11:33:46
967 :
デフォルトの名無しさん :04/09/23 12:31:15
>>965 >>> ([0], range(100000000000))[0]
Traceback (most recent call last):
File "<stdin>", line 1, in ?
MemoryError
>>>
>>964 if (locals().update({'a':f(b)}),a)[1] is None:
ここまでしても python 使いたければどうぞ
a=(input"あなたの名前? ") print a こんなプログラムで、文字列を入れるとエラーになります 調べてみると、inputでは数字しか入力できないみたいです 文字列を入力できるinput文ってないんでしょうか ' 'でくくると一応入力はできますが
>>968 Pythonを相当使い込んでるね….
lambdaの制約にイライラしながらもPythonを使う姿が目に見えるようだ.
>>969 input()の代わりにraw_input()を使います。
詳しくはインタラクティブモードで
>>> help(raw_input)
>>970 > Pythonを相当使い込んでるね….
> lambdaの制約にイライラしながらもPythonを使う姿が目に見えるようだ.
残念ながらイライラしてないのだ。ぼくは lambda いらない派だからね。
あんなものを書くくらいなら最初からちゃんと関数内関数を書くよ。
974 :
デフォルトの名無しさん :04/09/24 17:14:55
>>974 BREWもそうだが、携帯業界は勝手アプリ撲滅の方向のようで、至極残念。
>>973 うーん.そうなんだ.
関数内関数はコードを読むときに流れが阻害されそうで,ちょっとためらうんだよな.
map(lambda ...
となっていれば,事前にmapすることを知ってからlambdaの内容を読むことになるけど,
def func():
...
map(func, ...
となっていると,funcが何に使われるか分からないままfuncのコードを読むことになる.
まぁ実際にはそんなに違わないかも知れないけど,気分的にね.
977 :
デフォルトの名無しさん :04/09/24 21:46:44
>>975 >BREWもそうだが、携帯業界は勝手アプリ撲滅の方向のようで、至極残念。
業界サイドからみると、勝手アプリ増やしても利益にならん、と
いうことなのかな。それにしても個人には40万は高すぎ。
Forum Nokia AMATURE ディベロッパー プログラム ってので4万位
でなんとかならんか? あるいは言語別とか。それとも windows
mobile phone に期待するか。
>>976 > funcが何に使われるか分からないままfuncのコードを読むことになる.
それは普通の関数定義でもそうだと思うがね。
たしかに関数内関数は lambda ほどには map との関係が強く示せない。
ぼくは map などのイテレータに使う関数は、名前を「なんとか1」とすることで
単一のアイテムに適用されることを示すようにしている。
conv1 とか、 disp1 とかね。
そもそもぼくはもう map も使わずに内包表現なんだけど。
あと、これは map と関係ないが、ぼくは再帰をよく使うので、
そういうときだと関数に名前をつけられない lambda は使いにくい。
たとえばこんなのだな:
def disptree(treeobj):
def disp1(node1):
print node1.name
for c in node1.children:
disp1(c)
disp1(treeobj.root)
return
OOPにすればいいと思うよ
>>978 なるほど.関数名に軽い規則を作っておくのは悪くないね.
ぶっちゃけ関数内関数を使いたくない一番の理由は,名前をつけるのが
面倒臭いからだったりw
再帰するときだけ関数内関数にするのも,考えてみれば格好悪いかも.
# でもやっぱり三項演算子は欲しい….
981 :
デフォルトの名無しさん :04/09/24 23:21:32
なんつーか、Pythonって凄いね。hackerから初心者まで。 最初の言語としてPythonに触れる人は幸せだなぁ。
>>984 いや、981さんみたいな初心者(ごめん。悪意はないんだ)から
新山さんみたいなhackerまで、いろんな人が使ってるんだなーって。
手に職をつける目的で学校でJavaを教えるんじゃないのか。 OOもC++とJavaくらいしかまともな参考書無いじゃん。 Python使ったOOの解説書とかあんの?
>>986 余計なお世話だけどcurseじゃなくてcursesなので念のため。
Windows に curses ってあるの? あるとしても DOS窓の上では遅いような気がする。 結局 Tkinter のキャンバスを使うのが楽なような。
>>981 import curses
scr = curses.initscr() # 初期化
scr.addstr(y, x, str) # (y, x)にstrを書き込み
scr.refresh() # 画面更新
とりあえずこれだけ覚えとけばOK.
>>993 on cygwin ならあるけど,ネイティブのはどうなのかな.
>>994 cursesというモジュールがないというエラーがでます。
どこからか拾ってこないとだめなわけですね。
昔のBASICで簡単にできたことが意外と難しくて
初心者がそこまで手を出すのはまだ早かったような気がします。
オブジェクトが持ってるメソッドやプロパティの一覧を見るようなことは 可能でしょうか。Pythonの対話シェルで作業してる時に見れると便利なんですが・・・。 例えば、tclshでは存在しないサブコマンド(メソッドみたいなもの)を書くと、 そのコマンドの持ってるサブコマンド一覧が出てこの中から選べと言われたり、 引数が違ってたら例文が出たりするんですが、このような入力補助(?)みたいな 事ができればと思ってます。よろしくおねがいします。
dir(obj) # 一覧のみ help(obj) # 一覧と説明文など
>>998 おおまさしくこれです。ありがとうございます。
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。