やっと21世紀か
1スレ消費に100年使うのか?
と言う以前にこのスレA.D.1から始まったのか
_______ , -‐' ´ __, -―‐ 、 r‐,―` ‐、 / , - '  ̄/!\ ̄ \_ / /、!∠ _, - ´ ̄ ̄ ̄ ̄`´ヽー、_フ _/ / /!`イ / ヽ \ / \! // ,/ / | ヽ  ̄`<,ト/ _、i/ / / ,./ / /l! ト、 / ,) /!! , / / / / / , .! ! ! ! l! | | f --,ノ_-_,,∠ , /// / ∧ lノ li l | ! ̄、-..==、- /´//,< | ! l' //li ! |リ r:ッr/ ノメ、._`j / / / //! \, ! /// `ー' トジ/ / / / / ! liヽ│/ lト、 \ ` j/,イ / / l li ‐┼‐ li \`ー` __ ´ .ィイ .| おっ、Pythonスレですぅ。 !/ |イ!/│ヽ.l! | \ 'ー' , イ | | !! / ∧! liノ! ` 、__, イ_ /:| │ | i' /:| ! リ / ` 、_,. -―'´ ̄V /ヽ/ ::| │ | //:::| j:/ リ三f::::f三ヽ / ,,/ヽr、! | | //rーfく /!/イ!!l::\ \ヽ! / r ' / フ |
6 :
デフォルトの名無しさん :2007/10/22(月) 02:40:00
.
>6 ed?
9 :
デフォルトの名無しさん :2007/10/22(月) 11:58:23
ファイルから1行読み込んで正規表現にマッチしたものを リストにしたいんですが [ url_re.match(line).group(1) for line in some_file if url_re.match(line)] もっとシンプルに書く方法は無いでしょうか?
わざわざリスト内包で書く意味あるんですか?w for 展開したらもっとシンプルだと思う。
ruby使え (ruby | perl)は正規表現を明示的にコンパイルする必要ない
12 :
デフォルトの名無しさん :2007/10/22(月) 12:23:10
>>11 >(ruby | perl)は正規表現を明示的にコンパイルする必要ない
それはオブジェクト指向言語として正しいのか?
Perlの正規表現はどう考えてもバッドノウハウ 手軽であるが故に,あらゆるテキストのパースを正規表現で行おうとする力学が働く 結果として,再利用性が低いブラックボックスなコードが量産される そのバッドノウハウを受け継いじゃったのがRubyというわけだなwwwwwwww
>>9 その場合なら一気読みしちゃうとか
import re
url_re = re.compile(url_re_ptn)
html = open(some_file_name).read()
url_re.findall(html)
>>12 Rubyはリテラルで /abc/ みたいに生成もできるし
r = Regexp.compile('abc') みたいにもできる
ただ面倒だから誰も使わないだけ
Perlはそもそもオブジェクト指向言語を標榜していないはず
言語仕様なんだからバッドノウハウというのはおかしいんじゃないかな。 ま、釣りなんだろうけど、それにしても間違ってるので。
FreeBSDにしようかと思ったんだけど結局Fedora3に した俺が質問です。みんなOSは何を使ってますか?
みかんOSに見えた…
>>16 逆に考えるんだ
言語仕様にバッドノウハウが組み込まれていると考えるんだ
おまえ頭いいな
Py.py
>>8 ダサクなら解けた
import sys
def sameval_in_list(lst):
if len(lst) == 0: yield [ str(0),str(0) ]
n, c = 0, 1
for cnt in xrange(0,len(lst)):
if len(lst)-1 == n or lst[n] != lst[n+1]:
yield [ lst[n], str(c) ]
c = 1
else:
c += 1
n += 1
def lookandsay(ilist):
res = []
for line in ilist:
for exl in sameval_in_list(line):
res.extend(exl)
return res
sl = [x.strip() for x in sys.stdin]
for c in xrange(0, 12):
print("".join(sl))
sl = ["".join(lookandsay(sl))]
26 :
デフォルトの名無しさん :2007/10/22(月) 18:39:29
俺はうぶんつ
28 :
デフォルトの名無しさん :2007/10/22(月) 19:56:54
俺はAmiga
BeOS
OS/2 Warp
MS Windows 1.0
MonaOS
正規表現が外部モジュールなのは個人的にがっかりしたな。 願望としては予約語の少ないperlみたいのが欲しかった
つうか正規表現が言語に組み込まれてるのってはっきりいってすごく汚いと思う
正規表現なんて俺は使わないからどうでもいいよ
正規表現はどんなときでも使う訳じゃないから言語コアからは外したってGuidoが言ってた(ソース失念)
今後しばらくは大規模言語で 正規表現を組み込んでいるのなんて出ないだろ。
そして相変わらずPerlの天下は続く・・・
>>25 を参考にしてやってみたよ。
v = raw_input("")
for t in [0] * 12:
print v
s = v + "."
v = ""
h = ""
d = 0
for c in s:
if d and c != h:
v += str(d) + h
d = 0
h = c
d += 1
TsXcって名前で入れといた。
難しい。
155。これが精一杯。 g=lambda s,i=0:len(s)==1 and str(i+1)+s[0] or s[0]==s[1] and g(s[1:],i+1) or str(i+1)+s[0]+g(s[1:],0) a=raw_input("") for i in range(12): print a a=g(a)
短いなぁ。 ちなみに or や and 前の半スペは削れるよ。
>>39 日本国内だけだろ。
海外の開発者はみんな「Perlはもういやだ」と言っている。
>>40 内容変えずにゴルフの定番的に短くしてみた。
v=raw_input("")
for t in [0]*12:
print v;s=v+".";v,h,d="","",0
for c in s:
if d and c!=h:
v+=str(d)+h;d=0
h=c;d+=1
>>45 もう一発
v=raw_input()
for t in[0]*12:
print v;s=v+".";v=h="";d=0
for c in s:
if d and c!=h:v+=str(d)+h;d=0
h=c;d+=1
>>43 あぁー、俺はまた邪悪な技を覚えてしまったw
1andなんて書き方だとIDLEで色がつかない
ところでルール見るとホワイトスペースは計上しないらしいので、これで131となりました。
g=lambda s,i=0: len(s)==1and str(i+1)+s[0]or s[0]==s[1]and g(s[1:],i+1)or str(i+1)+s[0]+g(s[1:])
a=raw_input()
for i in range(12):
print a
a=g(a)
100切るにはアルゴリズム変える必要があるかもね。 それにしても python でゴルフって python の思想に反すること甚だしいなw
でも課題によってはPやRより短く書けるゴルファーが居るんだよな
最近お気に入りなzipでやってみた100くらい c=raw_input() for n in [1]*12: print c;t,c=c,'' for a,b in zip(t,t[1:]+'.'): n,c=a!=b and (1,c+str(n)+a) or (n+1,c) forの中身をifにすれば92くらい? c=raw_input() for n in [1]*12: print c;t,c=c,'' for a,b in zip(t,t[1:]+'.'): if a!=b: c+=str(n)+a;n=0 n+=1
別解。暗黒面に落ちようとしたけど、どうも落ちきれない感じ。 import re;a="0123456789 ";v=raw_input() for t in a:print v;v="".join(a[len(u)]+u[0]for u in re.findall("+|".join(a),v))
おお、一瞬理解不能だった。
ホワイトスペースは数えないんだから無理に一行にしなくても…見づらいし… セミコロンは数えるからむしろ増えているw
ホワイトスペース、数えられてるよ。
>>51 a='0123456789 ' がrangeの代わりとstr()の代わりを兼ねてるのに感心した。
57 :
デフォルトの名無しさん :2007/10/24(水) 20:02:07
なるほど、安価でつけたのか 納得した
>>57 いまさらAFXそっくりでWindowsしか動かないファイラーを出しても使わないなあ。
Windows以外でも動くようだったら使いたいけど。
JythonとCPythonの違いをまとめたものってありませんか?
>>57 まるでAFXだ。DYNA派なのでスルー。
>>61 基本となるバージョンと、javaバインディングのアリナシくらいし違わないでしょ。
じゃないと、意味ないし。。。
ていうか、Jython ってあまり開発してないっぽいよね。今2.2だっけ
地味にアップグレードはしてるよ。ペースはたしかに遅いけどね。
>>62 今は、2.2.1。2.2は正式バージョンをリリースしたのに、
日本語がまったく使えなかったんだよなwww
次は2.5で 、Django Pylons TurboGears Twistedを動くようにするらしい。
.pycってファイルができないんですけど変わったんですか?
importしてもできない?
>66 サンクスできました。 はじぱいには普通に実行すればできる、と書いてあったのでとまどいました。
初めてのPythonには、トップレベルのファイルは 実行してもpycを生成しないってきっちり書いてあったと思うぞ そういえば海の向こうじゃ新版出るんだよね
Python初心者(他の言語は経験あり)です。 MySQLdbを使ってデータベース処理をするプログラムを練習がてらに組んでいるのですが、 データを取り出すときに、どうもよくわからない文字コードになってしまいます。 具体的には、utf-8をMySQLに叩き込むのはうまくいき、ターミナルで確認しても文字化けは既知のやつ(utf-8)が出るだけです。 おそらくデータベース内に登録されているデータには問題はなさそうです。 ちなみに、その文字化けはファイルに書き出すと問題がないからターミナルの都合みたいです。 ですが、select文でutf-8のデータをとりだすと、 asciiをunicodeに出来ませんみたいなエラーが出ます。 unicode()でエンコーディングしてみても、状況は何もかわらず、このunicode()の文でエラーが出てしまいます。 ファイル処理の場合は読み出す時にエンコーディングを指定する方法は知っているのですが、 MySQLからデータを取り出す時は同じ方法が使えません。 何かいい解決方法はあるでしょうか? よろしくお願いします。
環境なり再現コード貼ったらいいと思うよ
すいません。 環境は MacOSX Python2.5 MySQL4.0 コネクタは最新版です(昨日落としたので) 即興で作ったコードでちょっと汚いのですが、 #!/usr/bin/env python import MySQLdb import sys import codecs db_name = "nounindex" user_name = "root" mypasswd = "" writePage = "/Users/yuichi/Desktop/dbOutput.txt" charCode = "utf-8" o = codecs.open(writePage,"w",charCode) sys.stdout = codecs.getwriter(charCode)(sys.stdout) print "getConnection" con = MySQLdb.connect(db=db_name, #host="localhost", port=3306, user=user_name, passwd=mypasswd)
cur = con.cursor() s = "SELECT * FROM mytable" cur.execute(s) r = cur.fetchone() while r != None: print r o.write(str(r) + "n") r = cur.fetchone() cur.close() print "disConnect" con.close() print "disConnected" o.close print "all processes are finished. good bye!" です。
エラーは File "output.py", line 37, in <module> o.write(item);o.write(" ") File "/usr/local/lib/python2.5/codecs.py", line 638, in write return self.writer.write(data) File "/usr/local/lib/python2.5/codecs.py", line 303, in write data, consumed = self.encode(object, self.errors) UnicodeDecodeError: 'ascii' codec can't decode byte 0x82 in position 1: ordinal not in range(128) 出力(listの直出し)はこうなりました。stringに変換しようとしたらエラーが出てしまって。 上のエラーは、これをストリングにしようとしたらおきたものです。 この出力を得られた時はエラー無しですが、役に立ちませんので。 (1L, 'test', 'a', 3L, 8L) (2L, 'test', 'a', 3L, 8L) (3L, 'test', ' \x82X\n', 2L, 10L) (4L, 'test', ' \x8bB\n', 2L, 10L) (5L, 'test', ' \x83\x8c\x83|\x81[\x83g\n', 1L, 10L) (6L, 'test', ' \x91\xac\x95\xf1\n', 1L, 10L) (7L, 'test', ' \x8d\xb6\x8a\xdd\n', 1L, 10L) (8L, 'test', ' \x93\x9d\x8d\x87\n', 1L, 10L) (9L, 'test', ' \x91O\n', 4L, 10L) (10L, 'test', ' \x89\xba\x97\x8e\n', 3L, 10L) (11L, 'test', ' \x8d\xec\x90\xed\n', 1L, 10L)
書き忘れましたが、MacOSXはインテルです。 バンドル版はライブラリをインストール(?)できなかったので、新しくPython2.5を入れ直しました。
俺はcodecs.pyに手を加えて対処した。 ちなみにこの問題はOSには依存しないようだ。
codecs.pyですか。 色々調べてみたんですけど、 sys.setdefalutencoding() ってのがあれば、楽勝みたいなんですけど、 どうも入ってないようなんですね。 pythonを始めたのも数日前ですので、ライブラリの中まで調べるのはきつそう。 ググリ疲れた。
>>77 つ sitecustomize.py
つかMySQL関連のとこで聞いた方がいいと思うよ
うーん、いけそうで行けない。 コメントアウトを#にしてみても特に反応しない。 もう一回インストールし直すとか必要ないですよね? ライブラリもスクリプトだから関係ない気がするんだけど。 よくよく考えたら、エラーがおきている場所を修正すりゃいいんですね。初体験だwww もう少し試行錯誤してみますね。 解決できても出来なくてもまた来ます。 ありがとうございました。
>>79 それもなかったんで、自分で作ってみたんですけど、
スクリプト内にsetdefaultencoding()が必要みたいですね。
卵と鶏の論争みたい。
そうですね、MySQLからutf-8で抜き出せりゃ万事OKですから。
こういうエラーが一番面倒ですね。
ありがとうございます。
謎だ #data, consumed = self.encode(object, self.errors) としているのに、 File "/usr/local/lib/python2.5/codecs.py", line 303, in write data, consumed = self.encode(object, self.errors) UnicodeDecodeError: 'ascii' codec can't decode byte 0x82 in position 1: ordinal not in range(128) ってなってしまう。パスも合っているはずなのに。 なぜ?
>>81 sitecustomize.pyはユーザが設定する初期化コードだよ
そこでsys.setdefalutencoding呼べばいいだけ
>>83 そいつが環境によっては常時latinを返しやがるんだ。
>>83 そもそも、それができない。
スクリプトが書いてあるサイトを見つけて、その通りにやってみた
import sys
sys.setdefalutencoding('utf-8')
みたいな感じなんだけど、
それを
python2.5 sitecustomize.py
とやると、エラーがでる。
>>84 どんな環境だよ
>>85 sitecustomize.pyは
>>> sys.path
ってやって出てくるパスの中に突っ込むもの
ユーザ定義の環境初期化 'モジュール' だから
あとsetdefalutencodingじゃなくてsetdefaultencodingだから
なるほど。 環境を作るための環境みたいなものか。 それはただのタイプミスだwww 間違えないようにコピペで作った。 結局、もう一回pythonをビルドしてみることにしました。
がんばれユウイチ
名前で呼ぶなwww 気づいたんだけど、ライブラリってPython2.5の下にあるわけじゃないみたいだ。 libってとこの下にあった。 パスが似ていたから気づかなかった。 で、変更したら呪いにあってしまった。 出力が utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8 utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8 utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8 utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8 utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8utf-8 ってのが続いている。
原因が発覚 o = codecs.open(writePage,"w","utf-8") o.write("sample") ってやると、 utf-8 と書き込まれている。なんて無情なんだ。
解決。 o = codecs.open(writePage,"w") って、エンコード指定を外すと解決した。 printも同様で、utf-8でエンコードをかけると全てアウトになる。 本当にありがとうございました。 やっと寝れる。
おやすみ
こんにちは。 昨日お世話になったものです。 ライブラリを書き換えたら、今度は他の物が動かなくなって、 バグがバグを呼ぶというような状態になってしまいました。 無理矢理utf-8にこじつけるのではなく、きちんとライブラリを読んでから変更することにします。 ありがとうございました。
OS XならPythonを自分でソースからビルドするんじゃなく、 おとなしくインストーラを使うか、macport使った方がいい。
>>93 そこまでするぐらいなら、MySQLとその周辺の上手く動く組み合わせを探したほうが楽そうだわ。
MySQLスレ行けば?って向こうでpythonスレ行けって言われそうでw
97 :
デフォルトの名無しさん :2007/10/28(日) 19:23:13
何かパイソンのことばかり考えてたら 斬新なギャグを閃いた おっぱいそん
>>97 速くかけよ?
下のおっぱいそんってのがそれじゃないだろうな?
おっぱいは前世紀で既出だろ
マイク・パイソン
マリリン・パイソン
モンティ・パイソンDVD-BOX発売だってな
しかし斬新なだけのギャグは勘弁な
おっぱいそんは ここの住人にはレベルが高すぎたようだね。
|, ,_ |∀゚) |⊂ノ
93です。 叩かれるかもしれないけど、Rubyで作ったら一瞬で作れました。 Pythonでは日本語処理以外を扱うようにします。フレームワークが良さげです。
なんと斬新なギャグ(ry 両方使えるっていいなあ
全部Rubyでやっとけって
「VIPでやれ」みたく無謀にもPyshonで日本語扱おうと質問しにくる香具師に 「Rubyでやれ」って返そうぜ AAよろしく
ここ一週間でPythonとRubyを両方やったんで、良くわかったんですけど、 基本的に文法に違いはないですね。たいして。 Javaに似ているんで、Javaを使えりゃ余裕で覚えられるような気がします。 C++とはちょっと違うような気がする。
パイション
別に無謀じゃないだろ・・・
日本語処理をしたいのなら、マゾでもない限りはRubyのほうがいいと思う。
wxPythonのサンプルで日本語入力がきちんとできないのがあるけど、 できるのとできないやつとの違いは何ですか?
マゾというか、残り少しで「おっぱい」なのに諦めちゃう人大杉
>>94 MacPortsのPythonは腐ってね?
自分でコンパイルした方が断然いい。
簡単にベンチマークしたらかなり違いがでた。
119 :
94 :2007/10/30(火) 06:52:57
>>118 macportsのは確かに速度以外にも色々な面でおすすめできないけど、
自力ビルドで失敗してるようだったから紹介してみた。
普通に使うなら、インストーラからで十分だと思う。
関係ないけどLeopard標準搭載のPythonは2.5になってるそうな。
try: fuck!=you except: print(1)
121 :
デフォルトの名無しさん :2007/10/30(火) 23:45:38
>>121 言ってる事変わってなくね?
でも.NETのロードとか含めるとCPythonより遅くなるんだろ、どうせ・・・
123 :
デフォルトの名無しさん :2007/10/31(水) 18:59:53
>>122 変わってるね。
>ronPythonを開発したのは、動的言語が.NETでうまく走らないという説が間違っていることを暴くためだったと語った。
これは元々自身の論文(動的言語が.NETでうまく走らない)を証明するために開発したらうまく動いたのが開発経緯だったはず。
記事自体が信用できない。
そういやそうだったな
単にC言語はIronPythonより30倍速いと言ってるだけでしょ CPython関係ない
> Although a similar implementation of the C language runs probably 30 times faster that IronPython,
127 :
デフォルトの名無しさん :2007/10/31(水) 22:37:55
ploneにファイルをアップするpython scriptの書き方をどなたか教えていただけませんか?
129 :
デフォルトの名無しさん :2007/10/31(水) 23:41:58
わからない人はレスしなくていいです。 どなたか教えていただけませんか?
130 :
デフォルトの名無しさん :2007/11/01(木) 04:12:58
2つのリストに共通要素があるかどうか判定したいのですが 一つずつ取り出して比較しないとダメですか?
set(a) or set(b)
set(L1) & set(L2) か set(L1).intersection(L2) じゃないだろうか
2つのリストを1つのsetにぶち込んで、 そのsetの要素数が元のリストの合計より少なければ共通要素がある。
set って NoneType 渡すと例外出すからいつも import sets で sets.Set使ってる。 import sets as = sets.Set(al) ds = sets.Set(bl) dif = as - ds if len(dif): print "diff"
いやその考え方はおかしい
リストの要素にリストがあったりすると難しいな
ま、unhashableなインスタンスが入ってると駄目だな
リストで各要素の隣同士を比較し続けるような for i in range(len(seq)-1): item0 = seq[i] item1 = seq[i+1] item0 と item1 を比較•処理 っていうのをもっとエレガントにイテレータを使って書くことはできますか。 ぱっと思いつくのは item0 = seq[0] for item1 in seq[1:]: item0 と item1 を比較•処理 item0 = item1 とかしかないんだけど。。。
for a,b in zip(seq,seq[1:]): print a,b しかしコピーを伴うのが気にいらん
developerWorks(日本)のPython記事が出てこないけど消された?
developerWorksのPython記事ってインデントぐちゃぐちゃじゃね? Pythonの記事としてはそれ、致命的だろと
>>139 def zipped(a, b):
for i in xrange(min(len(a), len(b))):
yield a[i], b[i]
とするとか。
import itertools seq = [ 'a', 'b', 'c', 'd', 'e' ] for a, b in zip(seq, itertools.islice(seq, 1, len(seq))): print a, b
144 :
143 :2007/11/02(金) 10:50:16
zip -> itertools.izipのがいいのかな
そういえば、そんなライブラリがありました
>141 んじゃ次は よーしパパ python のワンライナー記事書いちゃうぞー
ワンライナーの邪悪さも見てもらったら面白いと思うけどな
unhashableって何?
ワンライナーとか言ってる奴に限って基本的なことが理解できていないことが多い。 ワンライナー厨は典型的な中二病。
>150 辞書のキーにできないとかそんな風に覚えておけばおk
で >151 はどういう高尚な主張をするのかな???
大抵のワンライナーはDQNレヴェルのスクリプトを一行にして得意気になってるアホです。 見づらいとか分かりづらいといった意見を読めないアホが悪いと無視するマジもんのアホです。 別にワンライナー以外が高尚でもなんでもなくただワンライナーがDWNなのです。
DQNなのです。
自分はもう未熟者じゃないと思ってる未熟者の熱弁って 微笑ましいよな。
というか誰もワンライナーがそんないいもんだと思っちゃいないっていうかなんていうか
じゃあいちいち作るんじゃねえよ目立ちたいだけの内容ゼロ野郎がwwwwwwwwwwwwwww
その文末より目立ちたいだけで内容ゼロなもんもないよな。
ここで聞いて良いのか微妙な質問なんですが、 なぜ皆さんはRubyじゃなくてPythonを選んだのですか?
取り立ててRubyを選ぶ理由もなかったですし
>>140 今は出て来るね。
リニューアルしたみたいだからタイミングが悪かったんじゃない?
163 :
デフォルトの名無しさん :2007/11/02(金) 20:55:03
Pythonはメジャーな鳥とは大体友達 素で使えてフリーなアプリとも大体友達 連携もイケるからRubyでは未来栄光体感し得ないほどに楽チン カルトでねーマジもんの軽くて軽量、手軽なライトウェイト言語なのよ
お前が既にカルトっぽい
>>160 昔、RubyはMacOS9で使える実用的なのがなかったからさ
166 :
デフォルトの名無しさん :2007/11/02(金) 21:12:01
>>160 個人的には
・記号が少なく明快。
・Rubyよりスタンドアローン分野に強い。
というところだろうか。
>>166 で挙げられてることごとくPythonの美点だと思うんだけど
>>160 悪意を持って言えば
お前みたいのがいないから
他の言語をこき下ろす人間が作ってないから
盛り上がってまいりました
Pythonの中の人は ⊂二二二( ^ω^)二⊃ ブーン とかやらないから すまん俺両方使ってる
配列とハッシュで間に合うならPerl、 データ構造がネストの予感あればPython。 Rubyは使い道がない
>168 おれも、というか正直このオッサンの 「○○地獄」の感性には学ぶべき何かの匂いがない…
カルト言語だからしょうがないよ。 多言語は全部ポアしないと気が済まないんだろ。
Rubyは今でこそRaisがあったりしてるけど・・・・俺がPythonかRubyかどっちを使うか考えたときはそんなもの全然無かったんだよ。
とりあえず、
>>168 の
「proc.call」を「proc.()」と書けてもちっとも嬉しくない人はPython向き。
つーかProcイラネ、関数内関数よこせって人は間違いなくPython向き。
でもlambdaはもう少し便利になって欲しいなって人もPython向き。
Pythonでさっさと作業を済ます若い子に萌えるから。 RubyはWEB屋ばっかりでつまらん(しかもおっさんの声がでかいし)
lambdaは後方互換のためだけでいいけどな。 新規のコードで使うことある?
>>180 lambdaのかわりに何を使ってるの?
lambdaが使える場合ならlambdaのがタイプ量短くて済むじゃん lambdaならデフォルト引数にも出来るし(それがいいやり方かどうかはともかく)
クラスをパッケージぽく使うことって不可能? class Fruit: class _Base: pass class Banana(_Base): pass class Apple(_Base): pass a = Fruit.Apple() b = Fruit.Banana() みたいな階層構造にできるとうれしいんだけど。
副作用が無いという目印としてlambdaを使ってる。 とくにpred funcを引数にする関数に対して。
class A: class B: def __init__(self): pass class C(B): def __init__(self): A.B.__init__(self) class D(B): def __init__(self): A.B.__init__(self)
188 :
デフォルトの名無しさん :2007/11/03(土) 00:56:33
>>179 だってGUIアプリをやろうとすると
hoge.method(:fuga)を沢山書くかProcを使わないといけないwwww
どっち使ってもいいと思うけど、 Rubyみたいな認定試験がないから。 日本産のプログラミング言語だから盛り上げていきましょう、 っていうお金のにおいみたいなのがないから。
191 :
デフォルトの名無しさん :2007/11/03(土) 12:28:54
>>189 >っていうお金のにおいみたいなのがないから。
「お金のにおい」ってRuby使いが一番嫌ってた言葉じゃね?
>>180 GUIのコールバック関数を組むときに名前つきの関数を使うと
手がつけられないほど関数が増えるから自分はlambdaをよく使う
193 :
デフォルトの名無しさん :2007/11/03(土) 16:04:44
>>191 そんなわけなだろ。
リファレンスマニュアルを書かずに同程度の本を大量に出版させる奴らだぞwww
るびーの本が出た〜 と買ってはみたものの 最初の章すら読めなかった… まあ俺の問題なんだろうけどさ…
おまいらがPythonの話をしたくないのはよく分かった
Rubyを使うぐらいならJavaを使えばいいのに。
マジレスする気にもなれん。
RubyがJavaより優れてる点ってなんなの? Pythonは可読性で優れているだろうが・・・・Rubyはオブジェクト化が徹底してるとかその程度か?
スレ違いです
言語を選ぶかの指標 •自分の欲する機能が標準で提供されているかどうか •ライセンスはどうなっているか ソースを公開しなくても良いのか 商用利用可能なのか •GUIアプリを作ろうとしたときに対応はどうなっているのか •優秀なGUIデバッガが存在するかどうか •Cアプリに組み込もうとしたとき、APIをどれだけ簡単に利用できるか •日本語ドキュメント(せめてチュートリアルだけでも)の充実度 •Eclipse のプラグインが存在するか(俺にとっては結構重要) あとは優先順位の付け方と好み。
Cアプリはもはや重要性薄いと思う。 いまどきアプリ開発にC/C++を使うメリットも薄いし。
>>203 あんたの言う「アプリ」がどんなだかわからん
Webアプリだの携帯アプリだの請負システムの専用アプリなら、
C/C++はいらんだろうな確かに
ライブラリが充実してることといろんなOSで動くことも重要だよね。 自分のやりたいことを全部自分でプログラム組まなきゃいけないのはだるい その点ではruby, python, perl, javaはどれもレベル高いよなぁ まあrubyは比較的新しいからライブラリは他の言語に比べると見劣りするけど なんかrubyの話題で盛り上がってるけど、rubyにできてでPythonでできな いことのうち、あったらいいなと思うものはある?個人的にはlambdaの中 で文を書きたい。あと関数呼び出しの括弧を省略できるようになると楽だ と思っているんだけど。
>>205 お前にはrubyがオススメって言われるだけだと思うよ
>関数呼び出しの括弧を省略 ありえない。
Pythonを使うかRubyを使うかなんて、まつもとゆきひろと柴田敦のどっちが好きかできめればよくね?
Pythonはクロージャがないのが許せん。 lambdaじゃ役に立たん。
クロージャの概念が今一理解できんのだけど。 あと有効性も。 おせーて
>>209 クロージャの定義によるのかもしれんが
普通の関数自体がクロージャの性質をもってるよ?
それとも無名じゃなくいやってこと?
def hoge(n): def _hoge(i): _hoge.n = _hoge.n+i return _hoge.n _hoge.n = n return _hoge a = hoge(5) b = hoge(100) print a(1), b(2) print a(3), b(4)
ブロックを投げまくるのが楽しい。スコープの継承もそれなりにスマートだ
枕投げの方が楽しい
なんでguidoじゃないんだ
開発者対決ならLarryの圧勝だ
explicit better than implicit
pythonのソースコードをC++のソースコードに変換するソフトが見つかりません ホームページのアドレスをおしえてもらえないでしょうか? よろしくお願いします。
223 :
デフォルトの名無しさん :2007/11/04(日) 17:26:25
perlでいう $ret = `cat hoge`; とか open(IN, "cat hoge | tail -n 5 |"); pythonでどうやんの?
224 :
223 :2007/11/04(日) 17:33:49
Pythonは括弧省略には中々行かないんじゃ? Rubyは括弧省略出来る換わりに 関数への参照を取り出すのが method(:名前) なんて言う 面倒な書き方になってしまってる。
226 :
デフォルトの名無しさん :2007/11/04(日) 18:08:29
227 :
デフォルトの名無しさん :2007/11/04(日) 18:13:24
>>205 括弧を省略したかったらエディタで関数を入力した後、自動的に括弧を入力させればいいだろ。
たしかにエディタに括弧を挿入させるほうが賢いのかもしれない。 括弧があれば変数の参照とメソッド呼び出しを明確に区別できるし。 ・・・.emacsいじるの面倒なんだよなぁ。meadowより設定をしやすくて しかも高機能なエディタあるよって人いない?
229 :
デフォルトの名無しさん :2007/11/04(日) 18:44:16
>>228 scribesちょっと使ってみたけど良い感じ。しばらく使ってみるよ
サンクス
前に使おうとした時は、scribesのsnippetはタブしか使えなかったが今はどうなったかな?
pythonのコードを出先のマシンでvi(デフォルト)で編集すると いつのまにかTabが混じってたりして困る。なんとかして。
>233 使ってるSCMにタブとっぱらうフィルタ仕込んだら?
235 :
デフォルトの名無しさん :2007/11/05(月) 01:01:41
其れでは始めます…
236 :
デフォルトの名無しさん :2007/11/05(月) 01:04:04
`server.に影響がでない様に「超`local.」で行います…
237 :
デフォルトの名無しさん :2007/11/05(月) 01:07:01
変ですね…(+ФyФ)?質問が無いです…
238 :
デフォルトの名無しさん :2007/11/05(月) 01:25:58
さて…(+ФyФ)!改めて始めます…
239 :
デフォルトの名無しさん :2007/11/05(月) 01:26:54
何故でしょう…(+ФyФ)?質問が無いです…
240 :
デフォルトの名無しさん :2007/11/05(月) 02:32:40
或る参考書を実行していたら`send-mail.して居たのですが… どうしたら…(+ФyФ)?良いのですか…
241 :
デフォルトの名無しさん :2007/11/05(月) 02:35:38
>>240 「追加」 若しも…(+ФyФ)!`win.で実行して居たらと考えると…
わからない人はレスしなくていいです。 どなたか教えていただけませんか?
変ですね…(+ФyФ)?質問が無いです…
244 :
デフォルトの名無しさん :2007/11/05(月) 19:23:23
すみません 中学2年になるんです、パソコンを覚えようと思ってPHPの参考書を買ったんです はじめにCentOSをインストールまでは友達に聞いて出来たけど、その友達がそれから先を教えてくれないくて携帯で2chを知ったのですけど、ここで聞いて教えてもらえるのですか?
>>244 死ね役立たず。
人の足引っ張って楽しいかゴミクズ。
今すぐ死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。v死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。死ね。
246 :
デフォルトの名無しさん :2007/11/05(月) 19:32:23
買った参考書の題名が必要なんですか?
247 :
デフォルトの名無しさん :2007/11/05(月) 19:33:11
え
248 :
デフォルトの名無しさん :2007/11/05(月) 19:47:26
テキストを作らなくちゃいけ無い事までは知ったのですけど
教えてもらえません
250 :
デフォルトの名無しさん :2007/11/05(月) 20:04:03
でも、お勉強って
ここで日本語のお勉強方法は教えていないのですが。
ここはPythonスレですが。
いいか、みんな (゚д゚ ) (| y |) 彼の言ったPHPという字をよく見てみよう PH ( ゚д゚) P \/| y |\/ PHはPhishingの略であることは間違いない ( ゚д゚) PHishing (\/\/ 日本語で言うと ( ゚д゚) 釣り (\/\/ 一方、残ったPはPythonスレであることは疑いようがない Pythonスレ( ゚д゚) \/\/) つまり、そういうことだ。 (゚д゚ ) (| y |)
254 :
デフォルトの名無しさん :2007/11/05(月) 21:10:24
え〜と どんな質問だったら良いんですか
>>212 良く分からんが、普通にやるなら、・・・
class Hoge:
def __init__(self, n):
self.n = n
def __call__(self, i):
self.n += i
return self.n
a = Hoge(5)
b = Hoge(100)
print a(1), b(2)
print a(3), b(4)
>>212 はPythonの関数がクロージャである(関数を返す関数を作れる)事を示すためのコードでしょ。
>>212 ってクロージャっていうのかなあ
関数がオブジェクトであることを利用して、関数の属性を明示的に設定してる
だけだよな
普通、関数が定義されたときの環境(ローカル変数とか)を後で参照できるように
封じ込める仕組みをクロージャっていうんじゃないの
そういう意味のクロージャはPythonにもあるだろ
クロージャから束縛されてるレキシカル変数を「変更」する際の制限はあるけど
>>257 関数を返す関数ってのは、単に高階関数っていわないか?
Pythonの場合はクロージャを書く側だと クロージャの"実装"を書かないとあかん。 使う側からだとクロージャではある。
def re_replacer(pattern, replacement, flags): import re reobj = re.compile(pattern, flags) return lambda x: reobj.sub(replacement, x) こんなのは普通にクロージャと言っていいんじゃないの。
261 :
デフォルトの名無しさん :2007/11/05(月) 23:00:14
262 :
261 :2007/11/05(月) 23:12:00
ごめん間違えた nじゃなくて_hoge.n
>>262 それは関数オブジェクトの属性を参照しているだけなので、
クロージャが無い言語でも動くと思われる。
例としてあまり適当ではないのでは。
勘違いならすまん。
>>263 =
>>256 でいいのかな?
だとすると自分でクロージャの実装を書いておいて
それがクロージャだと気づいてないように思えるだがw
265 :
デフォルトの名無しさん :2007/11/05(月) 23:23:21
すみません質問です 01: import sys 02: 03: f = open(sys.argv[i]) 04: x = f.read() 05: f.close() 06: 07: y = x.split('\n') 08: for i in range(len(y)): 09: z = y[i].split(',') 10: print '%4d: %s' % (i, '\t'.join(z)) のテキストを作って a,b,c d,e,f g,h,i のテキストを作ったら pytmp>sample.py data1.txt のコマンドライン実行で 0: a b(空白)c 1: d e(空白)f 2: g h(空白)i 3: の結果が見れないんです 何故ですか?
266 :
264 :2007/11/05(月) 23:24:39
>自分でクロージャの実装を書いておいて」
>>256 Pythonのレキシカル変数ごにょごにょあたりは同意。
>>265 タブ使ってるから。言葉じゃ説明しづらいけど
タブが8文字分なら import sys のあとに
print ('*' + '-' * 7) * 5
とか書き加えてからそのプログラム実行したらわかると思うよ
271 :
デフォルトの名無しさん :2007/11/06(火) 05:32:30
すみません 01: import sys print ('*' + '-' + 7) * 5 02: 03: f = open(sys.argv[1]) のでいいのですか?
クロージャとオブジェクトの違いがわからん。 実現出来る事はどっちも変わらんように見える。
273 :
デフォルトの名無しさん :2007/11/06(火) 07:17:07
すみません 01: import sys 02: 03: f = open(sys.argv[1]) のテキストを実行したら SyntaxError: invalid syntax となります何故ですか?
まさかとは思うが 01: などの行番号はいらないぞ ともかくもう少し勉強してから質問しろ
俺の後輩も、そのまま写せと言ったら行番号まで写してたな。 行番号Basicしか知らないような初心者なら仕方ないかもしれん。
>>272 同じことを、少ない手間でできるのがポイント。
Cプログラマが、C++のclassとCのstructの違いが判らないのと同じ。
データに関数がついたのがクラス 関数にデータがついたのがクロージャ と見ることもできる。
Perlだと分かりやすいかと。 実現方法が身も蓋もない
>>277 関数にデータが付けられるということだけじゃない。
関数を変数に入れて持ち運べる言語で、
関数を宣言したときに、関数の外側にある変数を関数宣言の中で使用したら、
自動的にその変数が関数にくっついて持ち運べるようになる。
>>212 は_hoge.nを手動でくっつけてるからクロージャじゃない
>>260 は自動でreobjとreplacementがくっついてるからクロージャ
>>278 分かりやすいかどうかはともかく、
Perlのクロージャは$f->()
のように呼び出さなければならないのが美しくないんだよな。
Pythonのように、関数もメンバ関数もクロージャも__call__を持つ
ファンクタも同じように扱えて、単に()で呼べたほうがいい。
デリゲートが、単に
f = obj.memfunc
だけで済んでしまうのは素晴らしい。
高階関数をクロージャと勘違いしている人がいるみたいだけど、基本的には
>>279 が正解です。
でもクロージャの説明って難しいよね。
>>279 の説明読んでもふつうは分からない。
ところでPythonの場合、クロージャの外側の変数は、参照はできても代入はできないじゃん?こんな場合でもクロージャっていえるのかな?
個人的にはPythonのそれは厳密にはクロージャといえないと思っていたから。
>>281 破壊的代入はできんが、破壊的操作は出来るので、別に困らないといえば困らない
クロージャからレキシカル変数を変更したいようなケースでは、リストを使えば良い
リストの中身は変更できるから
レキシカル変数を変更できるかどうかってのは、別にクロージャの要件では
ないような
Pythonの代入は代入じゃなくて名前束縛だから
>>283 その理解は疑わしい。
i = 1
f = lambda x: x + i
f(0)
---> 1
i = 2
f(0)
---> 2
MLのように単一代入の関数型言語では、このような動作にはならない。
PerlやJavaScript, C#のようにクロージャが使える手続き型言語では、
Pythonと同じ動作になるのがほとんどだと思う。
手続き型言語と関数型言語を比較してるのか 代入と束縛を比較してるのか、よく分からない俺ガイル。
>>265 あの本のやつでしょ?
俺もそれで困ってる。
まったく0から言語学ぶの難しいよな。
287 :
284 :2007/11/06(火) 14:26:24
>>285 Pythonの代入が少なくとも破壊的であって、単一代入でないのは
>>284 を
見れば明らかだと思う。
普通は束縛と言えば単一代入のことだと思うが、
>>283 が一体何を代入/束縛だと考えているのか、
Pythonが束縛であるというのは何を根拠に言っているのかは俺は知らない。
>>283 に聞いてくれ。
>>265 ,
>>286 なんの本の話題かしらんけど、最初のsys.arg[i]のところを写し間違ってるんじゃない?
念のため言っておくが、行番号は書くなよ。
>>265 の01〜09までは理解できたんだが
10: print '%4d: %s' % (i, '\t'.join(z))
これがわからん。
'%4d: %s' ってなに?
>>287 =演算子はJavaの参照型に対する=と同じで単一代入。
そんでもってPython整数はimmutable object。
>>284 のlambdaは、1への参照を持っているのではなく、毎回global名前空間
からiを解決してオブジェクトへの参照を取得しているので、globalの影響を受ける。
del i
f(0)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 1, in <lambda>
NameError: global name 'i' is not defined
PythonをEclipseのPydevでコード書いてるんだけど、Eclipseの表示で日本語を上手く表示できません。 コマンドラインからならきちんと思い通りに動作するんですが。 上手く日本語のメッセージを表示させられてる人はいますか?
書式付フォーマットってperl用語だっけ? 言語に依存しないなんか一般的な名称ってなかったっけ?
294 :
デフォルトの名無しさん :2007/11/07(水) 02:56:03
行番号を無くしてみました y ^ SyntaxError になってしまいます…
295 :
デフォルトの名無しさん :2007/11/07(水) 06:32:43
すみません 簡単に進められました買った参考書が説明不足だっただけでした 続けて質問です pythonを起動して >>>print y をしたら 2ch管理人は実は鬘を必要とします とpythonが出力したのはどうしてですか?
296 :
デフォルトの名無しさん :2007/11/07(水) 08:18:19
任意のシーケンス seq があって、その要素を n 個区切りで操作したい場合って for i in xrange(0, len(seq), n): x = seq[i: i+n] print x ってやるしかない?なんかこう、もっとうまくできる気がするんだけど。。。
while seq: print seq[:4] seq = seq[4:]
>>291 >=演算子はJavaの参照型に対する=と同じで単一代入。
これ、ほんと?
というか、何をもって単一代入といってる?
>そんでもってPython整数はimmutable object。
>
>>284 のlambdaは、1への参照を持っているのではなく、毎回global名前空間
>からiを解決してオブジェクトへの参照を取得しているので、globalの影響を受ける。
1行目と、この3行とのつながりがわからん。
299 :
291 :2007/11/07(水) 09:19:42
ごめん、忘れてくれ。完全に単一代入を勘違いしてた。
よくわからんが、>279の説明と>281の説明を読んだら、 安易にクロージャを使うとバグの温床になるんじゃないか、 という気がした。
うん、それは正しいと思うよ。 安易にクラスを使っても、安易に代入を使っても、安易にPythonを使ってもバグの温床になる、 それらと同じ程度には。
>>300 少なくともPythonのクロージャは、代入不可能だし外から勝手に別の
オブジェクトに変更されることもないから、Java7のクロージャ以上に
安全だよ。
(Java7のクロージャは多分代入可能)
イカ臭い。
お、俺じゃねえよ
>>296 n = 3
seq = range(10)
for i in seq[0::n]:
print i
# 0
# 3
# 6
# 9
>>296 個人的には折りたたみジェネレータを作るのがいいんじゃないかと思ってる。
ビルトインでコレって言うのはない気がする
def fold(x, n):
i = 0
j = len(x)
while i < j:
yield x[i:i+n]
i += n
for x in fold(range(100), 7):
print x
297
みたいなseq = seq[4:]なやり方は多分アルゴリズム的に微妙に遅いので、
素直にインデックス計算したほうがいいと思う
高々数個のシーケンスを扱う処理に「アルゴリズム的に遅い」もクソもないよな 頭の使い方を考えろwwwwwwwwwww
頭を使うと草生やすようになるのかな
>>308 >>296 のお題は「任意のシークエンス」となっているのに
いつの間に「高々数個」に化けたんだ
311 :
308 :2007/11/07(水) 13:33:06
ごめん俺中学生なんだ
pythonのソースコードをjavaのソースコードに変換するソフトのホームページ教えてください。
www.py2j.com
314 :
デフォルトの名無しさん :2007/11/07(水) 16:16:07
すみません 簡単に理解できます アレだった… 忘れてください 質問です h = open(...) y = h.read() hをオブジェクトに追加出来るのは知れました オブジェクトを二桁にしてもPC.壊れ無いですか?
お前はまず病院行って薬もらって来い
まともな日本語を書けるようにする方が先かと
317 :
デフォルトの名無しさん :2007/11/07(水) 18:08:30
すみません 病院ってなんの事ですか? 中学2年になるし、日本語は喋れます
下手な釣り師がいるなwwwwwwwwwwwwwwwwwwwwwwwwww
>>317 もうちょとさぁ・・・なんていうかさぁ・・・
Python厨が顔真っ赤にして反論しそうな感じでいかない?
この板ID無いんだしさ
暇人は氏ねよw 10000回くらい氏んでいいよ どうせ暇なんだろwwwwwwwwwwwwwwwwwwwwww 氏んで暇つぶせwwwwwwww
list("a b c") ->['1', ' ', '2', ' ', '3'] これを、一発で下記のようにする方法ありますか? ->['1', '2', '3'] join の逆ができればいいのに。。。
"1 2 3".split()
323 :
デフォルトの名無しさん :2007/11/08(木) 12:59:27
すみません 質問です 友達の所に来てPHP.教えて貰ってるんだけど 基礎構文て言ってたかな? それは教えてくれるんだけど 基礎構文に附いて聞くと教えてくれない どううしてですか? あ、書き込みも友達のデスクトップ借りています
>>> a=['1', ' ', '2', ' ', '3'] >>> filter(lambda b:b != " ",a) ['1', '2', '3'] >>> a=['1', '', '2', '', '3'] >>> filter(None,a) ['1', '2', '3']
>>> a=['1', ' ', '2', ' ', '3'] >>> [s for s in a if s.strip()] ['1', '2', '3'] >>> [s for s in a if s != ' '] ['1', '2', '3']
お前ら楽しそうだな
abcが123になってることはスルーか?
328 :
CERN :2007/11/08(木) 18:03:04
L = list("a b c") "".join(L).split(' ')
>>>a=['1', ' ', '2', ' ', '3'] >>> re.findall(r'(\b\w+?\b)',"".join(a)) ['a', 'b', 'c']
list("1 2 3".replace(' ', ''))
333 :
デフォルトの名無しさん :2007/11/08(木) 23:40:15
a=['1', ' ', '2', ' ', '3'] a = a[::2]
a = list("1 2 3") del a[1::2]
[x for x in list('1 2 3') if not x.isspace()]
やっぱpythonやるなら英語使えないとまずい・・かな?
a=['1', ' ', '2', ' ', '3']
filter(lambda x : x != min(a) and x, a)
>>327 次の質問は
list("あ い う") がうまく表示されません
と予想
338 :
デフォルトの名無しさん :2007/11/09(金) 12:13:55
すみません 質問です 中学2年になるので PHP. を覚えているのですが? s = 'I`m a boy' で読むには問題ないと思うのですが? 此れでは駄目なのですか?
339 :
デフォルトの名無しさん :2007/11/09(金) 12:24:11
私の教え子に…(+ФyФ)!全くを以って無礼な…
‘バーカ
>>329 名前:デフォルトの名無しさん :2007/11/08(木) 18:11:10
すれ違い消えろ
>>338 俺小学生だけど年下に聞いて恥ずかしくない?
341 :
デフォルトの名無しさん :2007/11/09(金) 14:07:04
すみませんが、質問させてください。 pythonでは多次元配列を扱うときはリストのリストを使いますよね。 [ [1,0,2],[-1,2,3],[5,7,2] ]こんな風に。 リストのリストで、ある要素が何行目に入っているのか調べるにはどうしたらよいでしょうか? 例えば上の場合は「5」を入力すると「3」を返すような。 要素は数字だけに限らず文字列の場合もあります。 どなたか上手い方法を教えてください。お願いします。
>>> lst = [ [1,0,2],[-1,2,3],[5,7,2] ] >>> (lambda x, lst: [x in s for s in lst])(5, lst).index(True) + 1 3 冗談だ。
>>341 a=[ [1,0,2],[-1,2,3],[5,7,2] ]
普通(.は半スペね)
for n,l in enumerate(a):
.if 5 in l:
..print n+1
リスト内包大好き
sum([1 for l in a if not 5 in l])+1
調べ方がまるでわからないというならご参考に a=[[1,0,2],[-1,2,3],[5,7,2]] for x,y in enumerate(a): if 5 in y: print x+1
345 :
344 :2007/11/09(金) 14:59:03
いやん、超かぶった・・・
346 :
343 :2007/11/09(金) 15:04:46
スマソ・・・ だが、enumerate 使うのが正しい思考だと確認できてご満悦。
条件に合うのを全部求めたいんならfilterかリスト内包 最初の一個ならenumerateって気がする 関数化してもいいかも def findif(seq, pred): for i, x in enumerate(seq): if pred(x): return i return -1
348 :
デフォルトの名無しさん :2007/11/09(金) 15:17:52
>>340 :デフォルトの名無しさん:2007/11/09(金) 13:22:03
俺小学生だけど年下に聞いて恥ずかしくない?
すみません
私の先生が小学生が教えられる言語だから小学生に聞けと言っています
349 :
デフォルトの名無しさん :2007/11/09(金) 15:29:26
>>320 :デフォルトの名無しさん:2007/11/07(水) 19:13:24
暇人は氏ねよw
10000回くらい氏んでいいよ
どうせ暇なんだろwwwwwwwwwwwwwwwwwwwwww
氏んで暇つぶせwwwwwwww
350 :
デフォルトの名無しさん :2007/11/09(金) 15:44:11
>>345 名前:344 :2007/11/09(金) 14:59:03
いやん、超かぶった・・・
>>338 PHPとPythonはまったく別の言語です
>>338 「ネット関連」カテゴリー
のWebProg板 に
PHP.
関連のスレッドが?
たくさんあるので、
そっちで聞いたほうが
丁寧に教えてくれると思うよ
python で試せばいいだろ
355 :
デフォルトの名無しさん :2007/11/09(金) 17:20:55
>>343-347 ありがとうございます。今までリスト内包記はめんどくさそうなので敬遠してました。
勉強します。
>>353 条件に適合する全てのインデクスのリストが欲しいんなら、俺ならこう書く
seq = [[1,2,3],[4,5,6],[7,8,9]]
found = [i for i, x in enumerate(seq) if 5 in seq]
357 :
デフォルトの名無しさん :2007/11/09(金) 17:30:31
教え子に見せる前に確認…(+ФyФ)?斯様な知識を持ち合わせるとあの様に…
>>352 名前:デフォルトの名無しさん :2007/11/09(金) 15:53:15
>> 338
「ネット関連」カテゴリー
のWebProg板
>>356 thx
最後のseqはxかな?
でも簡潔でいいねそれ
リスト内包って癖になるよね。 最近ファイルから読み込むときも無意味に allist=[l for l in sys.stdin] for l in allist: ... って書いちゃう。イミネー
一般化してみた。 def search(mtx, cmp_v, idx=0): if isinstance(mtx, list): hitidx = [] for rowidx,item in enumerate(mtx): srchidx = search(item, cmp_v, rowidx) if isinstance(item, list): tmp = [] for i in srchidx: if isinstance(i, list): tmp.append([rowidx]+i) else: tmp.append([rowidx]+[i]) srchidx = tmp else: srchidx = srchidx hitidx = hitidx + srchidx return hitidx else: if callable(cmp_v) and cmp_v(mtx) or cmp_v == mtx: return [idx] else: return []
a = [0, 5, 2, 3, 4, 5, 4, 2, 9, 5] b = [[ 1,5,5], [-1,2,5], [ 5,7,2], [ 0,1,2], [ 8,5,0]] c = [[ 1,5,5], [3,4], [4,8,[0,2,5],2], [5,4,7,2]] d = [[1,5,5], [3,4], [4,8,[[0,8,7,6,5],2,5],2], [5,4,7,2]] >> print search(a, 5) [1, 5, 9] >> print search(b, 5) [[0, 1], [0, 2], [1, 2], [2, 0], [4, 1]] >> print search(c, lambda x: x==5) [[0, 1], [0, 2], [2, 2, 2], [3, 0]] >> print search(d, lambda x: x==5) [[0, 1], [0, 2], [2, 2, 0, 4], [2, 2, 2], [3, 0]]
リスト内包はめったに使わない。 ジェネレータ式なら頻繁に使う。
>>361 そういうのはジェネレータで作らないと、調べたいリストがでかいときに不便になる。
あと、再帰してるのに3回もlist判定をするのはなんかおかしいと思う
def search(x, test, index=()): if isinstance(x, list): for n, y in enumerate(x): for i in search(y, test, index+(n,)): yield i elif x == test or (callable(test) and test(x)): yield index ... >>> d=[[1,5,5],[3,4],[4,8,[[0,8,7,6,5],2,5],2],[5,4,7,2]] >>> list(search(d, 5)) [(0, 1), (0, 2), (2, 2, 0, 4), (2, 2, 2), (3, 0)]
perlのCrypt::RC4 モジュールみたいな $ref2 = Crypt::RC4->new( $passphrase ); $decrypted = $ref2->RC4( $encrypted ); pythonこのような可逆暗号モジュールってあるのでしょうか。
解けない暗号に意味はあるんでしょうか
>>366 opensslの実装に使われてるはずなんだが、標準では
暗号モジュールとしての機能がエクスポートされてないようだねえ
非標準のは探せば色々あると思うよ
python cryptography
とかでぐぐれ
pycrypto-2.0.1.tar.gz
java勉強したらpython使う理由が見当たらなくなってしまったのですが pythonの利点ってなんですか?
>>371 むしろ、そこまでしてPythonを使おうとする理由は何ですか?
pythonとjavaを同時に利用してアプリケーションを作ることはできますか?
>>371 python勉強したらjava使う理由が見当たらなくなってしまったのですが
javaの利点ってなんですか?
>>373 つ jython
マルチプロセスのサーバアプリのようなものなら、別にどんな言語の
組み合わせだろうと可能だけどね。
pythonってJavaと比べてどれくらい速度遅いの? BitTorrentとか使うとJavaよりよさそうと思えるけど。
そう思っていた時期が俺にもありました
>>376 ベンチマークサイトなんていくらでもあるだろ。
単純に言語自体の機能を使って計算能力を比較したら、お話にならないほど
Javaのが速い。
とは言っても、I/O律速になるタイプのプログラム(ネットワークやらDBやら
を使うようなプログラムは大体そうだ)ではその違いは大した問題ではないし、
メインのボトルネックになる部分をCで書かれたライブラリに丸投げできるなら、
同じく大した問題ではない。
Pythonで正規表現とかが使いやすい分、気楽に使っちゃうと遅くなっちゃうのよね。 そんなのもあるんじゃない?
みんなだまされるな アンサイクロペディアになってるぞ
でも書いてあることは正しいからなぁ
それ書いたの新山さんでしょ
新山さんってなに?どういうやつ?
新山祐介でぐぐれ
>>379 JavaとPerlの特徴がマッチしすぎだな
>>390 何か別の人っぽいな
新山ってpygame実況中継の人だったんだね
>>391 その実況中継戸やらも中途半端だし
390みたいなパーソナリティ、日記を見てても愚痴ばっかり
リアルでは絡みたくない人種だなwwww
>>392 それまでpython知っててもさわる気になれなかったけど。
pygame実況中継が俺にとってのきっかけになった。
大変感謝している。
>>379 わろた。しかしこれを書いてる人の労力がもったいないような。
もったいないことに労力をつぎ込める奴ってのは 労力が余ってる奴だから大丈夫。
とあるソースでこんな風に書いてあるんですが、buffer()を使う意図 は何なんでしょうか?単にos.write()で全バイト書き込まれるのでは ないのでしょうか? def writeall(fd, data): while len(data) != 0: n = os.write(fd, data) data = buffer(data, n)
>>396 os.write()はシステムコールを直接呼ぶから、一般には1度の呼び出しで
全バイト書き込まれることは保障されていない。特にfdがソケットであったり
するような場合は、partial writeはごく普通に発生する。
本当はEINTRの場合の処理もやったほうがいい筈だが、割り込まれた時に
システムコールのwrite()を自動的に再送するかどうか、といった挙動が
Unixでもシステムによって様々なので、移植性のあるコードを書くのは
難しいかもしれん。
C:/app/foo/main.py の中から C:/app/foo/db/data.dat にファイルアクセスしようとして、 open('db/data.dat') と書いてみたのですが、'db/data.dat'をmain.pyを実行したディレクトリを基点とした 相対パスと解釈されてしまうらしく、意図どおりの動作をしてくれません。 foo ディレクトリ以下をコピーさえすれば、main.py がどのディレクトリパス上にあっても 使用できるようにしたいため、open() に渡すパスをフルパスにはしたくありません。 何かよい方法はないでしょうか?
setuptools の pkg_resources.resource_stream を使いましょう __file__ は zipimport できなくなるのでオススメしない
scribesの機能貧弱すぎて萎えた やっぱemacs
401 :
396 :2007/11/11(日) 15:11:25
>>390 しんやまさんは昔から香ばしい人だったんだな(www
C++勉強したらpython使う理由が見当たらなくなってしまったのですが pythonの利点ってなんですか?
おもしろくpythonの利点を聞きたくなるには何を勉強すればいいんですか。
>404 Lispなど勉強されては? Lispを極めれば他の言語など無用の長物にございまするよ
ブラジリアン柔術勉強したらpython使う理由が見当たらなくなってしまったのですが pythonの利点ってなんですか?
>>407 ブラジリアンが気に入ったのならLuaにでもしとけ
クラスインスタンスって結構メモリ食いますかね?食いますよね? def sample1(): for x in range(1000000): ary.append(DummyClass1('TestTest%09d' % (x))) print "last" def sample2(): for x in range(1000000): ary.append(DummyClass2('TestTest%09d' % (x))) print "last" def sample3(): for x in range(1000000): ary.append('TestTest%09d' % (x)) print "last" sample1() time.sleep(5) DummyClass1, DummyClass2 ともに引数の値をインスタンス変数に渡すだけですが、 DummyClass2 のほうでは10個以上のメソッドを作ってあります。 今編集中のプログラムに上記と似たような箇所があり、(実際はループも引数ももっと意味のあるものですが) クラスの処理がクラスメソッドでなく関数で行われていたためクラスに移動しようかと思いましたが、 クラスのメソッドの数で更にメモリを使うものかと思って上記のようなものを作った次第です。 タスクマネージャで見た結果では sample1(), sample2() が250MB超えるのに対して sample3() は80MB程度で済みます。 できれば今のままクラスで扱いたいと思っていましたが、こんな差が出るなら見直しは必要かと思います。 オプションか何かでクラスインスタンスの使うメモリの量を減らすことってできませんかね?
410 :
デフォルトの名無しさん :2007/11/12(月) 00:59:47
>>409 新クラスか旧クラスかで全然違うと思うけど
>>409 重要なのはsample1とsample2の差なんじゃないの?
sample3が小さいのは当たり前の話
100万インスタンスで+200MB弱なら1インスタンス200Bytes未満。 それっとわりと優秀じゃんとか思った。 (仮想メモリサイズじゃなくてメモリ使用量見てるとかかな) 例示のように結果としてインスタンスを保持する必要があるなら メモリ使うのはしょうがないけど メソッドの返り値だけほしいならコーディングが悪いな。
>>410 object継承してるんで新クラスですかね。
でも上の例だと継承してるほうが20MBほど軽くなってるみたいです。
>>411 その通りなんですが、効果があるなら配列&辞書にしてしまってもいいかなと。
コードは多少汚くなりますが、今のクラスでは特別な処理はしてないんで軽量化も狙えると思いまして。
>>412 最大メモリ使用量見てました。
クラスへのメソッド追加はメモリ使用量に殆ど関係ないようなので、
当初の目的通りの修正を入れたあと状況を見て作り直そうかと思います。
wxPythonのScintillaベースバージョンをあげてくれないかな。 そうすればIMEの使い勝手がよくなるのに。
>>398 import os
datafile = os.path.join(os.path.dirname(__file__), 'db/data.dat')
でどうでしょう?
>>409 この数値を信用するとして、sample1()とsample2()は100万個のオブジェクトの配列、sample3()は100万個の文字列の配列だから
文字列1コあたり 80MB / 1,000,000コ = 80byte/コ
オブジェクトのほうは 250MB / 1,000,000コ = 250byte/コ
オブジェクトはインスタンス変数として文字列を含んでいるからそれを除いても 250 - 80 = 170byte/コ
配列のメモリ消費量を考慮していない大雑把な計算だけど、こんなものではないの?減らす方法はなさげ。
インスタンス変数が文字列ひとつだけで、大量のオブジェクトを生成し、メモリも節約したいということなら、クラスを使わないという選択肢はありでしょう。
>>409 rangeだけで相当メモリ食ってそうだな
(python起動) # <= 1.7M a=range(1000000) # <= 17M a=['TestTest%09d'%x for x in range(1000000)] # <= 66M class X: def __init__(self,x): self.x=x a=[X('TestTest%09d'%x)for x in range(1000000)] # <= 242M って感じだった・・・ ちなみにニュースタイルクラスにしてもサイズはほぼ変わらなかった(1M差以内)
>>417 PythonのGCはreference count方式だから、range() がつくるlistはすぐに解放されるため、計測するときにはでてこないと思う。
xrange()にかえても結果は一緒だよ。この場合は。
python勉強したらC++使う理由が見当たらなくなってしまったのですが C++の利点ってなんですか?
速い
動的言語と静的言語比較してもなぁw 確かにバカには使えないところ。ってのは面白い。間違ってないよw
動的言語でもバカはバカなりにしか使えません
python勉強したらRuby使う理由が見当たらなくなってしまったのですが Rubyの利点ってなんですか?
入門本が多い
バカでも使えるところ
RailsがJ2EEやその他の何じゃもんじゃに対して いかに便利かを鼻息荒く力説できる YARVキタコレとか言える
バカはバカなりに使えるのが素晴らしいんだよpython。 バカにc++触らせたらとんでもないことになる。 本当にpythonは素晴らしい。 別にrubyでもいいんだけどさ
C++はコンパイラに大量の仕事を与えて「このドジでのろまなカメめ」とか言って 言葉攻めにしてみたり 半年前に自分で書いた<>とか使いまくったソースの意味がさっぱり分からなくて うろたえたりとかして遊べるよ
世の中に自分の能力以上に実力を水増ししてくれるような道具なんてないよ。 PythonだろうがRubyだろうがC++だろうがHSPだろうがね。 > バカはバカなりに使えるのが素晴らしいんだよpython。 ユーザーにこういう勘違いさせてしまうんだったらPythonは糞言語の一角だな。
意気揚々と的外れなこと書かれてもなー。
バカがバカなりに使ってるのに実力水増しなのか
根本的なところで誤読してるんだろう、たぶん。
プログラミング言語の前に自然言語を(ry
>>430 バカは面白いな(wwwwwwwwwww
PythonとかRubyとかPerlが真価を発揮するのは,スキルの高い少数精鋭のチームが開発に使ったときだと思う。 430みたいなバカのいる大集団の開発チームではJavaとか使った方がいいぞ。
なんでPerlが入ってるのかと小(ry
Perl使いにもオールドタイプとニュータイプがいてだな
>>438 賢いこと言えないハンデを単語レベルのトゲでカバーしても
あんまりかっこよく見えないですよ
>>438 バカは面白いな(wwwwwwwwwww
バカって怒った方が面白いんだなwwwwwwwwwwww
>>441 バカだからそんな反論しかできないんですね.ご愁傷様です...
_ ∩ ( ゚∀゚)彡 おっぱい!おっぱい! ⊂彡
>>444 441が「論に対して反論してる」ように見えてるのは君だけだと思うよ。
他の人には「ヒステリーをたしなめてる」ように見えているもの。
そうだね バカ呼ばわりされたら相手をたしなめないと気が済まないよね もっともなことだ
バカはバカなりにwwwwwwwwwwwwwwww
>>447 喧嘩売られたからって全力で買ってんじゃないって言ってんだって。
>>449 449(wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
>>447 んー、それは熱くなっちゃってる人の発想だと思うよ。
一所懸命逆撫でを頑張ろうとするのはわかるけど(今さら冷静になると負けた気になるものね)、
あんまり意味無いよ。他の人喧嘩する気無いし。
447が「熱くなっちゃってる人」ように見えてるのは君だけだと思うよ。 他の人には「バカをからかって遊んでいる」ように見えているもの。
_ ∩ ( ゚∀゚)彡 おっぱい!おっぱい! ⊂彡
>>452 Pythonとちっとも関係ない話題な時点で大差ないだろそれは。
暇つぶしならMixiでやってろ。
なんか楽しそうな事してんなぁw 仕事でストレス溜まってんのか?おっさんにいってみろw
なんだなんだぁ?俺も混ぜてYO
_ ∩ ( ゚∀゚)彡 おっぱい!おっぱい! ⊂彡
>>455 溜まってるのかもねえ。なんかオウム返しとか始めちゃってるし。
_ ∩ ( ゚∀゚)彡 PyPy!PyPy! ⊂彡
>>452 ごめん俺他の人だけど超必死にしか見えないw
このレスに対するキャラ付けもだいたい読めるから期待してるw
すげえ(w
_ ∩ ( ゚∀゚)彡 おっぱいそん!おっぱいそん! ⊂彡
もうやめてええええええええええええええ
>>462 >他の人だけど
ウンウンw
>キャラ付けもだいたい読めるから
で?w
誰かいないの?誰か返事をしておくれよおおおおお
ID出ないのをこれほど残念に思ったのは久しぶりだ。絶対面白いのに
バカ寝たのか?wwwww
pythonお勉強したらニート3年目の僕にも就職できますか?
勉強しなくていいから履歴書書け
おはようございます 今日もがんばって煽ってください
はい分かりました 今日もよろしくお願いします
ま、PythonよりはRubyだな。
test
>>440 Perlほど人間性が露になる言語も珍しいよなw
480 :
デフォルトの名無しさん :2007/11/14(水) 00:13:01
>>477-478 初心者なんですけど
得られた値がunicodeかどうかって調べる方法あります?
それともそんなの気にしなくてもいいんですか?
しかしJythonも引っかかる
その方が有難いかも
>>480 s = "foo"
print isinstance(s, str) #=> True
s = u"foo"
print isinstance(s, unicode) #=> True
>>480 unicode かどうかは大いに気にする必要がある。
うっかり str と混ぜると暗黙の unicode → str 変換が起こって
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
みたいなエラーが出る羽目になる。要注意。
>>485 >>> u"うにこーど" + "ばいとれつ"
u'\u3046\u306b\u3053\u30fc\u3069\u3070\u3044\u3068\u308c\u3064'
起こらない。
起こった。 Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> u"うに" + "ばい" Traceback (most recent call last): File "<stdin>", line 1, in <module> UnicodeDecodeError: 'ascii' codec can't decode byte 0x82 in position 0: ordinal not in range(128) >>> "うに" + "ばい" '\x82\xa4\x82\xc9\x82\xce\x82\xa2' >>> u"うに" + u"ばい" u'\u3046\u306b\u3070\u3044' >>>
file = u'ほげ.txt' fullpath = u'%s/%s' % (os.path.abspath(os.path.dirname(sys.argv[0])), file) みたいな書き方をしたとき、 実行ファイルの場所のパス名がすべて半角英数なら問題なさそうなのですが、 日本語が含まれていると、 UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128) が出てきてしまいます。
Python 2.5.1 です。
path = os.path.abspath(os.path.dirname(sys.argv[0])) print isinstance(path, str) print isinstance(path, unicode) if isinstance(path, str): path = unicode(path, 'mbcs') file = u'デスマ.txt' fullpath = u'%s/%s' % (path, file) print fullpath とりあえずこれでどちらでも正常に動くことが確認出来ました。
本物のPythonプログラマは日本語を使わない
string <-> unicode変換でasciiコーデックが使われてしまう奴は、 sitecustomize.pyに sys.setdefaultencoding('cp932') とか記述汁 詳細はsitecustomize.pyでぐぐれ
僕は中学二年生なんですが。 >sitecustomize.pyに >sys.setdefaultencoding('cp932') とやったら文字が化け化けになっちゃいました。 僕は中学二年生だけどMac Book Proに4Gバイトメモリを載せて使っています。 家がお金持ちです。 アドバイスください。
'cp932'てのはただの例だ。環境に応じて適切なエンコーディング名を指定しろ。 utf-8とかeuc-jpとかな
ところでみんな今日の昼飯はなに? おれは親子丼だよ
おいらはカレーライスだよー
スレの空気がアレだが、無視して質問させてください。 浮動小数点の精度の悪さにムカついているのですが、分数をちゃんと扱えるライブラリはないですか?
「精度」「ちゃんと」 なんか理解してない気がするな
pythonって日本語処理が苦手ってどっかで多々見たんですがどうなんですか?
>>501 別に苦手ってほどのものでもないと思うが。
ちゃんとUnicodeに対応していて、それが使いにくいわけでもない。
個人的には、Javaよりは落ちる。Perlよりはマシ。という印象。
Python3000になれば、今より良くなる(はず) 現状でもちゃんと調教すれば素直なんだけど、それがめんどくさい。
Pythonでマルチバイト文字列をうまく扱えない人は、頭の悪い人だと思います。
僕が一番Pythonをうまく使えるんだ!
だが日本じゃあ二番目だ
みんなsitecustomize.pyをいじる派? ひょっとして、人に渡すスクリプトには、 assert sys.getdefaultencoding() == 'cp932' とか書くのだろうか。
入出力には codecs を通す。 print は本番コードには使わない。 動作をちょっと見たりとか、 デバッグの時だけしか使わんから無問題。
副作用ありそうで怖くていじれない派 デフォルトのエンコーディングが ascii であることを前提として 書かれているモジュールなんていくらでもありそうだし
>500 〜 >501 の流れで「精度」とか「ちゃんと」を pythonが解釈して処理する話かとオモタ…
Windows使ってるけど sys.setdefaultencoding('utf-8') にしてるよ
>500 まぁ、文系出身のオレなので、理解してないかもしれないが、理解しているかもしれない。 単に分数で厳密に扱える量を含む行列を1000乗ぐらいしたいだけなんだがな‥‥‥。 >499 ありがと。Numeric.dot 相当は自分で書かなきゃだめかね...
515 :
デフォルトの名無しさん :2007/11/15(木) 01:30:11
>>509 asciiならまだまし
pymacsなんてLatin-1前提に作ってたからsetup.pyすら動かなかったwww
>>492 賢いこと言えないハンデを単語レベルのトゲでカバーしても
あんまりかっこよく見えないですよ
単に「本物のプログラマはPASCALを使わない(Real Programmers Don't Use PASCAL)」のパロディだろ 出来がいいかはともかく
本物のプログラマはプログラムを書かない
プログラムを出力するプログラムを書くのだよ
>>520 や、意外と矛盾しないんじゃないか?
「無駄な車輪の再開発を避ける」って意味なら。
>>522 たしかに。
同じものを延々と作ってるうちの会社の某氏にいってやりたいw
>>523 直接言えよこの社内ヒキコモリめwwwwwwwwwww
言えないなら氏ねよM字ハゲwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
突然変なのわいたな
526 :
デフォルトの名無しさん :2007/11/16(金) 02:09:41
静的メソッドを使う前にクラスを初期化したいのですが メソッドを呼び出す前に初期化を行う(C#の静的コンストラクタ)みたいなものって作れますか?
>>528 自己レス
class Hoge:
の下にそのまま処理を書いていけばいいだけだった
バカな発言だがAndroid上でJythonが使えたりとかあるのかねえ。
pythonでMS Ofiiceは操作できますが 他に作図ソフトでpythonで操作しやすいインターフェースの充実した ソフトはないでしょうか? 図はtexに貼り付けるので texのままかepsで出力できるとうれしいです
OfficeファミリーだけどVisioは? epsで出せたかしらんけど、ダミーのPSプリンタセットアップしてそこへ印刷掛けて 出力をファイルにできればPostScriptファイルは得られるでそ。
>>531 Pythonで操作しやすいって、Pythonでお絵かきしたいってことじゃなくて
Pythonでドローソフトやのマクロみたいなのを書きたいってこと?
使ったことは無いが、Python製のSkencilというドローソフトもあるよ
ファイルのフォーマットは、pstoeditで変換すれば、大概どうにかなるんじゃね
>>535 SkencilはWindowsで動くのか?
>>537 X 鯖立てて Linux box からディスプレイ飛ばす・・・・・のは動くうちに入らないよな、やっぱw
cygwin, coLinuxあたりでなら動くんじゃね
OLEとか対応してればなんでも動かせるんでねえの?
ありがとうございます vmwareでubuntu linux動かしてskencil動かそうと思ったら駄目でした
542 :
デフォルトの名無しさん :2007/11/18(日) 09:39:57
pyrexの最新バージョンinstallしようとするとエラーになる。
543 :
デフォルトの名無しさん :2007/11/18(日) 21:14:56
文字列の各文字を、数値に変換したいのですが、何かいい方法はありませんか? 例) x = " " y = henkan(x) # ASCIIでスペースは20なので、yには数値で20が入ってほしい
y = ord(x) SPACEは数値32、16進で0x20
ord
arigatou
printで一文字ずつ表示させると、間にスペースであいてしまうのはなぜ? 例) x="hoge" for y in x: print "%c" % ord(y), 出力: h o g e
print i, j, k, l としたときに見やすいから
printは主にデバッグ用だから くっつけたいなら、print''.join("%c" % ord(y) for y in x)
sys.stdout.write()でもいいよ
ありがとうございます。
553 :
デフォルトの名無しさん :2007/11/18(日) 23:47:50
おお、すばらしい、
TurboGearsの本がいまいちだったから不安だなぁ
pythonはデザインパターンの本が無いのが、 pythonのレベルの低さを露呈してるよなwww
残念だがPython Programming Patternsって本がある
みんpyの最後のほうの章みたいなノリだときついな これが売れないとPython関係の本が出にくくなりそうで嫌だから 良書であることを願うよ・・・
ミンpyは良書じゃないって噂をよく効くが本当だった実怠惰ね
じゃあ初心者の俺は何を参考にすればいいのさ
初心者にとっては、なんでも参考になる
何はなくともチュートリアル読め。 Pythonではなく「プログラミング」初心者なら知らね。
プログラミング初心者向けなら「インスタント・ハッキング」でいいんじゃないの。
hspならやった事ある
Haskellをずっと使ってました
まずインタラクティブモードからどうやって情報を引き出すかを勉強するのが重要
pythonは値のコピーがいつ発生するかがわかりにくい。 x = [1,2,3] y = x はポインタコピー?
ポインタコピーかどうかは、yに値をappendしてみて、xがどうなったか調べれば分かる
>572 それ読んでも、いつdeep copyが起きて、いつshallow copyが起きるかはわからないよ。 言語仕様書のどこかに書いてなかったっけ?
一部のビルトインオブジェクトを除いて全て参照でしょ int,long,complex,bool,basestringとか。こういうのなんて言うんだっけ?
代入でコピーが発生する言語の方が少ない希ガス。
C/C++/C#あたりか
>>571 ,573
>>> x=[1,2,3]
>>> y=x
>>> id(x)
11749376
>>> id(y)
11749376
通常copy.deepcopy使わないと深いコピーは起こらないので、 差し当たって浅いコピーだけ考えればいい。 まず代入文でコピーが起こることはない。 変更不能なオブジェクトがコピーされるかどうかはどうでもいい。 変更可能なオブジェクトを返す関数や演算はコピー以外を返すことはない。 組み込みの挙動についてはこれで全部だろう。
なんで気にするの?
>>581 変数の(ユーザが)予期しない書き換えが起こるときがあってかなり悩む時があるから
>>> lst = [[0] * 3] * 3
>>> lst
[[0, 0, 0], [0, 0, 0], [0, 0, 0]]
>>> lst[0][0] = 1
>>> lst
[[1, 0, 0], [1, 0, 0], [1, 0, 0]]
これが複雑なルーチンの中に入り込むと・・・
×予期しない ○理解できていない
○理解できていない ◎日本語でおk
うーん。 タプルとリストがあるのは潔くない、というのなら分かるけど。 Pythonで悩むなら、JavaでもC#でも悩みそうなもんだ。
>>562 ,563
くやしいのう(w
くやしいのう(w
初心者の俺にはどうしても参照渡しがよく理解できない。 本の上ではなんとなく分かるような分からないような状態で・・・・何かトレーニングに向きそうな練習問題か何かないでしょうか?
C言語でもやれ
a=[1,2,3] b=[1,2,3] def F( ar1, ar2 ): ar1[0] = 9; ar2[0] = 9; F( a, b[:] ); でどうかな
code golfの問題をサイズを縮めることを考える事を考えずに普通に解くとか
>>587 >>590 アルゴリズムとデータ構造関連の本に掲載されている例題や練習問題なんかは手頃なんじゃないかな?
ソート、グラフアルゴリズム、動的計画法とか何か他の問題に取り組むにしても、考え方として参考になる
ものが多いかと。
これらをやり尽くして退屈しているんだったら、パズルのソルバを作ってみたりするのも面白いかも知れないよ。
ニコリっていうパズルの本が有名かな。ここでも見てごらんよ。
http://www.nikoli.co.jp/ja/
os.path.os.path.join("hoge","hage") なんてコードを見つけた これで動いちゃうんだな・・・
urllib.socket.os.path.join("hoge", "hoge")
>587 (C言語方面の)ポインタの話をつらつら見れば…
ポインタの概念を理解できる奴と理解できない奴がいるよな。 ポインタの概念を理解できない奴は参照渡しも理解できないと思う。
>>598 ポインタはもっと低レベルな感だな。
型のサイズやメモリ配置を意識しないといけない。
オブジェクト→箱 オブジェクトの中身→箱の中身 参照→ひも 変数→ひもに付けたラベル 変数への代入→もう一本ひもを用意して同じ箱に結び付ける (関数/メソッド呼び出し時の引数も代入相当) とかじゃダメかね? >>> a = [10] # (・▽・)/<a>~~~[10] >>> b = a # (・▽・)/<a>~~~[10]~~~<b>\(-▽-) >>> a += [20] # (・▽・)/<a>~~~[10, 20]~~~<b>\(-▽-) >>> print b [10, 20]
>>601 みんぱいにもそういう解説が図入りであったな。
他の入門書はどうだかしらんが。
参照と言うと大抵は型の概念がある気がするね。 ポインタはただのメモリ上のアドレス(プロセスに割り当てられた仮想アドレスでも良いけど)。
Cで拡張モジュールを書けば「参照」の何たるかが分かると思われ。
質問です。 list = [ value1, value2 ] とあった時に 下記のように出力するには どうすればいいですか? value1 = ... value2 = ... 要は、Cのマクロで言うところの #に該当する機能が欲しいのですが・・・。
>>606 質問がさっぱりわからない。
Cの#って何?#includeでも#defでもなさそう。
#define printdebug(N) printf("%s is %s", #N, N); char a[] = "string"; printdebug(a); という風に使うときの # です。 変数名を動的に出力したいってことなんですが。
def printdebug(var): print "%s is %s" % (var,eval(var)) printdebug("a") とかじゃだめ?
>>606 それ、Cでも出来ないっしょ。
出来そうな言語ってLispぐらいか?
>>609 それの逆がしたいんです・・・。
printdebug(a)
>>610 マクロでできるんです。
# は文字列化のマクロなので。
613 :
597 :2007/11/21(水) 13:20:59
>600,603 なるほどね.そういわれればそういう側面もあるかな. (ポインタが難しいとかいわれるのはその辺も絡むからか?) ま,実態としてどういう受け渡し(参照先の情報だけ or 中身丸ごと) ってとこは当然ながら同じだよね >601 そういうのを否定はしないけど、得てして置き換えすぎて よく分からなくなることってある気がする
>>608 Cみたいにプリプロセッサ使うか、
Lisp みたいにシンボル型が扱える言語じゃないと無理じゃね?
そこのlistってところは、Cだと配列でいいんだよな? Cで配列に突っ込んだ変数から、どうやって名前を引っ張ってくるんだorz ぎぶみーmacro #define PRT(N) printf("%s %i\n", #(N[0]), N[0]) int main() { int value1=1, value2=2; int lst[] = {value1,value2}; PRT(lst); }
配列じゃなくていいなら python でもおk? #define prn(N) printf("%s is %s", #N, N); int a = 1; prn(a)
いいこと思いついた PythonでLispを動かそうZE
配列のそれぞれの要素に文字列が入っている状態で、 文字列の中で文字数一番でかいのを知りたいのですが、 def m(x, y): return max(len(x), len(y)) print reduce(m, [u'あああ', u'いいい', u'うう']) とすると Traceback (most recent call last): File "<stdin>", line 1, in ? File "<stdin>", line 2, in m TypeError: len() of unsized object となります。どこが悪いんでしょうか?
結局
そもそもの状態を文字列にして
>>609 さんのようにすることにしました。
>>619 m(x,y)の返値が整数になってる。
文字列を返したいんでしょ?
>>619 reduce 使わなくても
max([u'あああ', u'いいい', u'うう'], key=lambda o: len(o))
max([u'あああ', u'いいい', u'うう'], key=len)
csvをcrlf改行で作りたいのだけれど、どうするのがエレガントですか。 csvライブラリだとfileオブジェクトを渡してwriterつくってwriterow みたいな流れですが、これだと改行までcsvライブラリが出力しちゃう のでどこで手を出していいかわかりません。 perlの:crlfレイヤみたいのがあればいいんですけどね。
625 :
デフォルトの名無しさん :2007/11/21(水) 19:09:13
PerlのCPANのようなものはありますか? コマンドラインから、 pyinstall USPP とかでUSPPがインストールされちゃうみたいなヤツです
626 :
624 :2007/11/21(水) 19:33:54
自己解決。 Dialectのlineterminator属性で指定する。そしてデフォルトのDialectがexcelなので 特に何もしなくてもcrlf改行になる。
>>625 setuptools の easy_install
>>606 listじゃなくていいなら、python的には辞書じゃないか?
d = dict(value1=value1,value2=value2)
print d
三項付いた2.5出てるどころか3k見えてる今ごろ何だけど… 2.4以前の三項代用構文A and B or Cって、なんで働くのかよくわかんない。 後ろから評価してんのかな?Aが偽でもCに飛べない気がする。 いつも一行で書くの諦めて、普通にif else使ってるけど。
630 :
デフォルトの名無しさん :2007/11/22(木) 01:49:44
まとめwikiのFrontPage、Googleのキャッシュ見ながら復旧させてみた。 最近かなり頻繁にspam投稿されてるから履歴が消える前に 管理人さんが気づいて凍結してくれるといいな…(´・ω・`)
>>629 A and B or C は
(A and B) or C と同じ。
X = A and B
X or C
だと思えばおけ。
text = [] for line in text: text.append(line.rstrip().decode('utf-8')) を map を使って書き直した場合、どうなりますか?
ループの読み込み元のリストと、追加する先のリストが同じだと・・・無限ループになる?
当然そうなる
意味は変わっちゃうけど、実のところ、 text = map(lambda line: line.rstrip().decode('utf-8'), text) みたいなのを期待してるんじゃないのかなあ。 mapを使わないで、無限ループにすることもできるけど。 text.extend(line.rstrip().decode('utf-8') for line in text)
>>628 これってどういう意味? 初めてみた・・・。
そのまんまの意味だ
d = {"value1":value1, "value2":value2}
借りてたレンタルwikiが管理放棄っぽく、不具合続出で逃げ出したい でも当然シェルというかファイルには触れない、ソースで落とすしかない 一括修正できないから、書式変えるたびに個別手作業で泣けてた 分量は1000ページ弱で、ただでさえ応答が遅く怪しく、手動DLは論外 例え終わっても、他のwikiと文法違い、エディタ手修正じゃ追いつかん Pythonをやらなきゃと思ったきっかけ、しかし借り先鯖完全崩壊までに、 こんなの作れるほどの上達が間に合うか…、ダメか… 今度はファイル触れるように、自鯖wiki設営も勉強せなならんし チラ裏愚痴でお目汚しすまん
>>639 面白そうだなあ
ここじゃチラ裏どころかスレ違いっぽいので
WikiのURL晒せるならPythonの宿題スレにでも持っていったら?
確かに楽しそうな課題だ。 しかし、データ抜き出しまではクローリングのツール設定で何とかならんかな? 抜き出したデータをいじる、としたほうが敷居は低い気がする。
どうせ鯖乗り換えなきゃならんのなら 新鯖側でDjangoでも使って 旧鯖から吸い上げと同時に 修正まで済ましてしまうのが吉
d = dict(value1=value1, value2=value2)
≡
d = {"value1":value1, "value2":value2}
かー。
dict の初期化の仕方が納得できないが、そういうものか。
ていうか、
>>606 のやりたがってた変数の文字定数化って
この過程がわかればできそうだ。
ちょっと質問です。 あるファイルの中身を日付ごとに分割して保存するには、 どんな感じでやればいいでしょうか? ちなみに日付は 200711221930 のような感じです。(2007: 年, 11: 月, 22: 日, 19: 時, 30: 分)
>>643 こういうのも面白いかも。
>>> def values():
... value1=1
... value2=2
... return locals()
...
>>> print values()
{'value2': 2, 'value1': 1}
>>608 の文字列化、一応出来てる?
import traceback
import re
def debugprint(value):
stack = traceback.extract_stack(limit=2)
name = re.search(r"debugprint\((.*?)\)", stack[0][3]).group(1)
print "%s: %s" % (name, value)
def f():
a = 5
debugprint(a)
b = "hoge"
debugprint(b)
debugprint("foo")
f()
list(u'あいうえお') の逆の操作(リストを文字列に戻す)をしたいのですが、効率のいい方法を教えてください。 t = u'' for c in list(u'あいうえお'): t += c では効率が悪いような気がして...
>>647 t = ''.join(list(u'あいうえお'))
>>> u = '%s' % (list(u'あいうえお')) >>> print u [u'\u3042', u'\u3044', u'\u3046', u'\u3048', u'\u304a'] >>> t = list(u'あいうえお') >>> print t [u'\u3042', u'\u3044', u'\u3046', u'\u3048', u'\u304a'] >>> for c in t: print c ... あ い う え お >>> if (t != u): print 'yes' ... yes >>> なぜですか?
t.append(u'か') print t print u
・・・・・・
t != uは自明だろ
>>649 >>> type(u)
<type 'str'>
>>> type(t)
<type 'list'>
> for c in u: print c これやると大変なことに・・・
厨ですみませんが質問させてください。 Pythonを、ローカル環境でCGI稼動させるには どーいう感じにしたら良いんでしょうか? OSは窓なんですが。
win版のApacheをインストール or VMwareなどでLinuxやFreeBSDを動かす
657 :
デフォルトの名無しさん :2007/11/23(金) 00:38:29
>>655 import BaseHTTPServer
import CGIHTTPServer
BaseHTTPServer.HTTPServer(('', 80), CGIHTTPServer.CGIHTTPRequestHandler).serve_forever()
自作moduleをIDLEとかで再importするには どうすればいいかな? ファイルを書き換えてもう一度importしても うまく変更を反映してくれません… >IDLE
reload
>>660 どもIDLEだとCtrl+F6でrestart shellみたいなのが
ありましたd
662 :
デフォルトの名無しさん :2007/11/23(金) 11:50:17
655です。 めでたくCGI稼働はしたんですが、 この場合だとcgi-binフォルダ以外(下部階層も含め)が 読み込めないっぽいですが、仕様なんですかね? 下部フォルダから画像とか読み込みたいんで、 できればアクセスできるようになりたいんですが、 win側の設定かなぁとかいう気もするんですが、 お教えいただけたら嬉しいです。
>>662 Apacheなら仕様だよ。他は知らない。
HTMLや画像を置くフォルダとスクリプトを置くフォルダは分けるのが原則。
それが嫌ならAddHandlerやOptionsなどの設定が必要。
Pythonとはまったく関係ない話なので、以後はHTTPサーバのスレにどうぞ。
ああそうか、CGIHTTPServer使ってる可能性もあるのか。
だとしたら
>>663 はスルーで
そういうあなたには Django をおすすめしますよ
いや Pylons だろ
>>662 CGIHTTPRequestHandler を継承して
適当に機能を上書きすればできるようになるけど、
正直 Apache や他の簡易ウェブサーバを使ったほうが早いと思う。
unicode 文字列に、他の言語でいう tr をやりたいんですが、かしこい方法はありますか? 以下のようなことはやってみました。 >>> 'hello'.translate(string.maketrans('l', '_')) 'he__o' >>> u'hello'.translate(string.maketrans(u'l', u'_')) Traceback (most recent call last): File "<stdin>", line 1, in <module>
import re s = u'hello' print re.sub(u'l', u'_', s)
>>> u"hello".translate({ord(u"l"):u"_"}) u'he__o'
何でPythonにtrが無いのかずーっと不思議に思ってる。 引数順はre.subに沿って書いた。 最適化の余地はまだあるかな? def tr(pattern, repl, string): m = dict(((p,r) for p,r in zip(pattern, repl))) return ''.join((m.get(c,c) for c in string)) print tr('lo', '_0', u'Hello, world')
tupleにする必要はないよ - m = dict(((p,r) for p,r in zip(pattern, repl))) + m = dict(zip(pattern, repl))
#
>>670 , 671 を混ぜてみる
def tr(pattern, repr, text):
return text.translate(dict(((ord(p), r) for p, r in zip(pattern, repr))))
print tr(u'lo', u'_0', u'Hello, world') # => He__0, w0r_d
tr/a-z/A-Z/ ができるようにならないか
>>674 集合をA-Zで略記できるのってキモくない?
そういうのはテキスト処理系ツールの中だけでいいよ。
tr(f('a-z'), f('A-Z'))で精一杯でしょ。
>676 正規表現を否定されても困る
>>675 >>669 は2つ以上の文字置換ができん
>>673 変なものを混ぜるなwww
というわけで、
>>671-672 を混ぜてみた
def tr(pattern, repl, string):
m = dict(zip(pattern, repl))
return ''.join((m.get(c,c) for c in string))
import re s = u'1富士2鷹3茄子' for frm, to in zip(u'123', u'一ニ三'): s = re.sub(frm, to, s)
ジェネレータにしろって言ってんだろ - return ''.join((m.get(c,c) for c in string)) + return ''.join(m.get(c,c) for c in string)
だが断る - return ''.join(m.get(c,c) for c in string) + return ''.join((m.get(c,c) for c in string))
682 :
デフォルトの名無しさん :2007/11/23(金) 19:16:15
tr('abc','*','abcdef') >>> *bcdef まともに動きませんwww
>>674 こうですか?!わかりません><
>>> u"Hello, world".translate(dict(zip(map(ord, string.lowercase), map(ord, string.uppercase))))
u'HELLO, WORLD'
>>674 こうですか?!わかりません><
>>> u"Hello, World.".upper()
u'HELLO, WORLD.'
upperがここまで回りくどくなるとは
Python 2.5.1 をダウンロードして eclipse 3.3 に PyDev を突っ込もうとしたのですが PyDev のページをみると Python 2.3 とか 2.4 とか書いてあるのに 2.5 は何も書かれていないので心配です ちゃんと動きますか?使ってるひといますか?
Python 2.5 syntax supportedって書いてあるように見えるのだが featuresのとこ
print u"\u00e1gua".translate(dict(zip(map(ord, string.lowercase), map(ord, string.uppercase)))) print u"\u00e1gua".upper() 結果が違う。
>>686 うちは
Python2.5
PyDev1.3.10
eclipse3.2 (PyDev本家では3.3使えと書いてあるけど)
で問題なく動いてるよ
ProjectでPython2.5選べる
>>688 つまりもっと回りくどくしろと言うのだな!?
二次元配列を初期化するスマートな方法はありますか? ar2 = [[0] * 16] * 8 とかやって、2時間ぐらいはまったところ。
リスト内包使えば?
>>671 def tr(pattern, repr, text): return text.join(pattern.split(repr))
でやってる
>>691 わかるわかるw
>>692 がいいと思うけど、
とりあえず っ numarray, numeric, numpy
でもこっちもはまるぜw
>>691 import numpy
ar2 = numpy.zeros((8,16),numpy.int).tolist()
>>691 冗長でもいいからわかりやすいコードの生成関数をつくる。
そっちのがスマート。
>>696 >そっちのがスマート。
でも696はデブオタ。
for a,b in zip(alist, blist):     msg = b.join(msg.split(a)) for a,b in dict.iteritems():     msg = b.join(msg.split(a)) どっちのほうが速いかな? iteritems() はあまり速くない印象があるけど…
実測が基本
ar2 = [[0]*16 for x in range(8)] で、浅いコピーが起こらない [[0] * 16] * 8 だと、(行列とみなせば)各行は同じものになる
>>698 つうか、その処理の前の時点で、alist、blist、dict、が全部あるのっておかしくないか?
alist = dict.keys(); blist = dict.values()で作るんだったら多分遅くなるでしょ
split処理のコードを全く書いたことのない人には何がポイントかが 解りにくいと思うので解説します。仕様の問題ともいえるのですが、 区切り文字列候補が [abc,b,bcd] のように重複する部分があると この処理コードは大変複雑になり、区切り文字を含む解モードでは 非決定性のアルゴリズム(プログラム)になります。具体的にいうと、 頭から、abcが見つかったとして、それ以後の文字列を処理してしまうと bcdのd部分を見失ってしまうということです。それ以後ではなくabcを 含んだそれ以後の文字列を対象にしなくてはなりません。しかもそこで いきなり現れるabcは無視して2文字目以降に[abc,c,bcd]が現れるか 調べますが、今度はa+bcd+...のaをどう処理すればよいかの問題も生じます。 abcdを区切り文字と見なして良いのなら事前にそう作り替えておけば 済みますが。Prologのsub_atom/5はこの問題を一述語でやってしまうので、 splitに初めて使ってみましたが、そんなにうまくはいきませんでした。 詳しくは知りませんが一般には、split の区切り候補にこのような重複を 含むことを仕様で禁じることでこの問題を回避しているのではないかと 思います。
b.join(msg.split(a)) == msg.replace(a, b)
区切り文字列集合→NDFA→DFA では駄目なの? prologならbacktrackで素直にかけそうだが。
mmapで共有メモリ使いたいんですが、 他のプロセスを排他するやり方が分かりません。 import mmap FNAME="hoge" f = open(FNAME, "r+") data = mmap.mmap(f.fileno(), 20) data[0:3] = "foo" data[10:13] = "bar" 最後の2行の実行を他のプロセスから見てアトミックにしたいんですが、 どんな感じに書けばいいんでしょうか。
別にロックファイルを使うとか。 MMAPしたファイルはロックされないし、ふつうファイルロックの 実装はアドバイザリロックだったりで完全にアトミックではないけど。
>>709 それって標準モジュールのmutex?それとも広義の?
前者ならサンプルコードちょっと書いてみてよ。
711 :
706 :2007/11/24(土) 13:23:40
712 :
706 :2007/11/24(土) 13:24:30
mutexとかセマフォは環境依存かもしれません。 Linuxです。
ロックファイルはよく使われるから大丈夫だよ。 エラーが発生したときの ロックファイル消し忘れに注意。 Pythonライブラリのmutexはスレッド系のもので他のプロセスには無理。
今だとwithを使って、ロックファイルの生成・削除をすればいいのか
716 :
706 :2007/11/24(土) 13:54:56
grep結果: 1件 Python-2.5.1/Lib/test/test_sundry.py: import mutex どう見ても使われていません。本当に(ry
POSIXを仮定してよいのなら、fcntl.lockf()が無難かと。 ロック用のファイルは適当に作っておく。何ならスクリプト自身でも良い。 ロックはディスクリプタをクローズしたときに解除される。 プロセスが死ぬ時は、いずれにせよkernelによってディスクリプタは クローズされるので、kill -KILLで殺されようが何しようが、ロックが 残ったままにはならずに済むよ。 これより移植性が高いが後始末を考えると面倒くさいプロセス間排他制御の 手段としては、mkdir()などが考えられる。
habu とか 熊野古道 スレはどこかにないでしょうか。 誰か誘導して。
国内旅行板とか害虫害獣対策板とか@の溜まり場IIで聞け
>720 には失望しました。
どんだけ手広いんだよ
724 :
デフォルトの名無しさん :2007/11/24(土) 18:24:57 BE:869338548-2BP(999)
無通信状態で5秒経ったらポップアップでお知らせとか pythonで通信状態の監視って出来ますか?
725 :
719 :2007/11/24(土) 18:28:13
そういうのはソフトウェア板の領分ではなかろうか
>>724 自前のsocketなら自明だからNICの通信状態ってこと?
Win32ならパフォーマンスカウンタ
Linuxとかなら/procか/devあたり読めばいけるんでない?
skencil とmatplotって組み合わせられるのかな? matplotで折れ線グラフ描いてskencilで編集ってできるなら便利なんだけど
>>725 作りっぱなしの放置プロジェクトに興味示すのなんて、今時幼稚園児くらいですよ。
ひょっとしてsetsモジュールって、もういらない子?
threadを使ってみようと思ったんですが、 #!/usr/bin/env python import thread def threadA(): for i in range(100): print "threadA()" def threadB(): for i in range(100): print "threadA()" def main(): thread.start_new_thread(threadA, ()) thread.start_new_thread(threadB, ()) if __name__=="__main__": main() を走らせると、 Unhandled exception in thread started by Error in sys.excepthook: Original exception was: Unhandled exception in thread started by Error in sys.excepthook: Original exception was: となってしまいます。 Linux/OS X(python 2.5)ともに同じ症状です。 どこが使い方間違っているんでしょうか。
>>731 プログラムを終える前にthreadの終了を待つんだ。
threading.Thread.join() で、期待通りに動きました。
>>732 Set()はsetsモジュールに定義されている訳だが。この知ったかバカが。
入門書くらい嫁。おまえがいらないこ。
737 :
706 :2007/11/25(日) 14:41:25
>>716 のやつを使ってみましたが、
Cの知識と同じでうまく動作しました。
ただし、threadingを使ってマルチスレッドにしようとすると、
Pythonの疑似マルチスレッド?のせいか、
P()とP()がぶつかり合いデッドロックするという問題があります。
2つのセマフォを用意して、
それぞれが異なるスレッドで走るのは問題ないですが、
1つのセマフォが複数のスレッドに現れると駄目です。
この問題を除いては、なかなか便利そうです。
IPCでマルチスレッド制御はしないだろ、常考
>>738 スレチだが、muti threadのものをmulti processで走らせる場合は?
で、全部のthreadで協調動作。
本を書きました。 (この数ヶ月ホームページの更新をサボっていたのはこの本を書いているためでした。) はじめての Python という本で工学社から出ています。 題名が O'Relly Japan の "初めての Python" にそっくりですが、 細かいことは気にしないでください。
>題名が O'Relly Japan の "初めての Python" にそっくりですが、 >細かいことは気にしないでください。 わざとかよ。糞野郎氏ね。
特殊メゾット・・・
なんかおいしそうだな
確かにうまそうだ・・・ まあ、タイトルは出版社が決めたんじゃないかなぁ・・・
題名、出版社、著者とも三流(w 内容はどうなんだろうな(wwwwwwwwwwwww
特別付録CD-ROM ●Python2.5.1(Windows) ●Python2.5 ドキュメント(英語) ←英語のままですか?^^; ●Python2.4 ドキュメント(日本語) ●本文ソースコード ●解答 収録
751 :
デフォルトの名無しさん :2007/11/26(月) 02:24:30
752 :
デフォルトの名無しさん :2007/11/26(月) 02:39:21
>>741 きょうたまたま立ち読みしてきたけど
糞本だったので別のを買ってきた
今日本屋で見かけた。装丁がパッとしなかった。
>>752 >>> 1 == 1
True
>>> 1 or 1
1 # True じゃなくて
知らなかった。
perl の hoge() or die(); みたいなことができるようになってんだな。
誰が書いたものが誰に分かりやすいか分からないからね、・・・ あと、純粋に1冊よりは3冊ぐらいあったほうが分かりやすいという人も居るし・・
>>> 3 or 5 3 >>> 5 or 3 5 >>> 3 | 5 7 >>> 5 | 3 7 >>> 0 or 1 1 >>> 1 or 0 1
>>> True or False True >>> False or True True >>> False or 3 3 >>> 3 or False 3 >>> False or 0 0 >>> 0 or False False >>>
流れがよめてないかもだけど some() or else ready() and go() こんなんでTrue/Falseが返ってきたらおかしいだろうと。
python ReportLabがあったらtexいらない気がしてきた しかし過去のtexのドキュメントとか図とかも活用したい 困ったな
自動コンバートできるでしょ
>>752 Pythonでシンタックスシュガー?について書いている時点で糞だし
そもそもシンタックスシュガーじゃなくて式展開してるだけだしwww
>>763 本来 not (a is b) と書けば済むところを、
プログラマの利便のためにわざわざ is not なんて比較演算子を用意してる
そういうのをシンタックスシュガーっていうんだろうから別に噛み付くところじゃないと思うけどな
まぁ、そこはかとなく草壁臭がする気がしないでもない。
isと==は違いますか?
>>> a = [0] >>> b = [0] >>> a == b True >>> a is b False "is"はオブジェクトが一致するかどうか
a is b は id(a) == id(b) と等しい。
ReportLabってそんなにいいの? TeXの偏執狂みたいな「割り付け」へのこだわりは、やっぱり 使ってて安心感があるんだけど、そこらへんいかがでしょうか > 761 とは言え俺も、これpythonでやりました、って言いたい気もするな :-D 仕様書ジェネレータみたいなの書くのは趣味と実益を兼ねてていいかもしれん。
個人的印は reStructuredText と docutils で満足してるんだが、 図を書いたり張ったりしたい人たちには足りないのかなあと思うy
rubyのpやppに相当することはpythonではどうやればいいですか?
>>771 print repr(obj)
なんだけど、インスタンス変数が表示されないんだよな。そこが残念。
まあインスタンス変数とインスタンスメソッドの区別がないから仕方ないけど。
pprintってモジュールもあるよ
>767-768 ありがとうございます。 すっきりしました。
775 :
デフォルトの名無しさん :2007/11/26(月) 22:29:12
pythonはRubyみたいに 整数や文字列はメソッドを持っていないんですか? 型変換をstr()のような関数を使わず それ自体のメソッドでやりたいんですが
rubyでやれ
777 :
デフォルトの名無しさん :2007/11/26(月) 22:37:13
え…まじでないんですか? rubyはどうも好きになれなくてpythonをはじめたのですが…
好きなだけ__int__と__str__を呼べよ
python は正規表現や範囲がライブラリでのサポートになってるとか、 ruby とかゴリゴリに高級言語してるような言語よりは C++ のようなものに近い感覚。
文句は使いこなしてから言え。
>>775 たしかにそれ欲しいよな。
俺なんか、strタイプするの苦手だから、str関数ラップしたsっていう関数作ってそれ使ってるぜ。
これならマジ簡単。お前もやってみな。
>>775 print u'しね'.endoce('utf-8')
>>775 str(obj)は、実際には obj.__str__() を呼び出している。
ただ、RubyのようにすべてのルートとなるObjectクラスみたいなのがPythonにはないから、RubyのようにObjectにメソッド定義すればどのクラスでも使えるようになるという便利機能はない。
>>749 とりあえず
マルチバイト文字列は内部的に「Unicode(UTF-8)」として扱われます。
なんて記述が許せないなら跨いで通った方がいいよ
サンプル三枚目の日本語にいらいらする
>>783 Rubyってルートオブジェクトに属性追加して拡張するのが普通なの?
だとしたらとてもuglyだね
787 :
デフォルトの名無しさん :2007/11/26(月) 23:51:34
>>784 そうなのか。初めて知ったよ。
ずっとファイルで指定したエンコーディングか
sys.getdefaultencodingが使われていると思っていたよ。
788 :
デフォルトの名無しさん :2007/11/26(月) 23:53:19
内部的にはUTF-16だろ。
>>789 サロゲートペアに対応してない気がするが
UCS-2というべきか。 UCS-4の可能性もあるみたいだな。 UTF-8はありえないが。
>>784 >>749 すくなくとも著者はコンピュータ素人
たまたま何かのきっかけでPython触って
俺にも書けそうだと思って本書いただけ
本の中身だけじゃなくてネーミングが許せない
Pythonもメタクラスあるんだからメソッド追加しろよ
と思ったら、ビルトインなクラスは無理なんだな
ちなみに
>>786 さんはAOP嫌い?
メタクラスプログラミングは賛否両論あると思うけど
他のプログラムに対して影響を与えないのなら、ありだと思うけどね
795 :
デフォルトの名無しさん :2007/11/27(火) 00:22:40
Pythonのポケリファ本出してくれよ ライブラリ探すの大変なんだよ
>>793 Objectへのメソッド追加以外にも
未知のメソッドが呼ばれたときにでも
それをあるものとして実行する方法があったよね
と思ったら5195円か すまそ 直輸入してください
Pythonに限らずUnicodeって言葉だけで
中身が分からんものが多いよな。
公式配布のCPythonは
>>791 のUCS-2(16bit)orUCS-4(32bit)相当。
どれだか忘れたけどUCS-4コンパイルされているLinuxディストリも確かにある。
サロゲートペアなどには対応してないから、UTF-16ではない。
JythonはJavaに準じるのかな?
>>791 configureで--enable-ucs4を付けたらUCS-4で、デフォルトはUCS-2だったと思う。(うろ覚え)
Unicode関係のゴタゴタ見るたびに関係者死ねよって思ってしまう
etreeってあるだろ? これUnicode喰ってくれないんだぜ……
Pythonは日本語処理が苦手っていうのが あちこちのブログで書かれてるんだけど 1)それは過去の話で今のPythonはそんなことはない 2)いまだにその状況は続いている 3)プログラム書く香具師が分かってないのでPythonに濡れ衣 どれだと思いますか? 私的には 1)-3) だと思ってるんですが
文字コードの自動判定をする関数がデフォルトで用意されていないのが大きいと思う。
言語の内部処理形式のUnicodeっていうとUCS-2が多い・・・はず。
UTF-8みたいな、可変長文字コードは内部形式としては扱いにくいんじゃないか・・・
でもPerlはUTF-8なんだよな。
もともとはUnicode イコール UCS-2のことだったはずだが、
今は必ずしもそうとはいえない・・・まあ、UCS-2が多いと思うんだけど。
>>794 は書いてあるとおりソースコードの文字コードを処理系に認識させる仕組みの話。
最近の言語処理系はソースコードをUTF-8で書くことが推奨されているものが多いけど、
内部形式はまた別の話。文字コードを認識したら処理系は内部形式に変換してしまう。
あと、python の defaultencoding は、標準入出力なんかのデフォルトコードを指定して
いるだけ。terminal出力時の文字化けなんかへの対応に使われる。ロケールってやつ?
処理系内部の文字コードが制御できるわけではない。
sjisコードの中でsjis日本語のパス名にos.path.normcaseを使うと文字化けすることがあるし 未だに尾を引いてるように感じる
807 :
デフォルトの名無しさん :2007/11/27(火) 01:12:02
minna ro-majide kaiwasureba yokune???
Ruby流の obj.to_s() はホントに文字列を返してるのか疑ってしまう str(obj) はちゃんと __str__() の返値をチェックしてるのが好き そんなワケで俺はRでも String(obj) 派だな
>>806 ちゃんと Unicode に変換すればそんな事にならないよ
つまり ascii のみと Unicode 文字列にしか対応しない
という点で首尾一貫している
811 :
デフォルトの名無しさん :2007/11/27(火) 01:37:07
Pythonて if !式: みたいな書き方できないの?
Rubyでやれ!
813 :
デフォルトの名無しさん :2007/11/27(火) 01:42:39
ってかfalseでも受けつけないんだ・・・ どんだけセンシティブだよ ガラスの小瓶か
>>803 Python だとバイト文字列をバイト文字列のまま扱おうとするとはまる
でもスクリプト言語だとそれが出来る
(本当は出来てないけどたまたま通ってしまうというのも含めて)
のが多いから
そこらへんの常識のギャップでそういうイメージが出来てしまっているのだと思う
>>806 それはSJISの問題であってPythonの問題ではないし
Windowsの環境だけで動けばいいやっていうひとは
(そういうひとにとって)意味不明なトラブルを回避するために
プログラム中ではすべてutf-8で処理して
入出力だけsjisにする習慣にするといいと思う
(決して内部コードがutf-8という意味ではないよ)
マルチバイト文字列ってstrのことだよな。 内部的にUCS-2orUCS-4に変換してるのか。
strはただのバイト列だそ?
そこにマルチバイト入れるのは勝手だけど。
>>816 Unicodeじゃなくてutf-8(str)なの?
まんどいことこの上ない。
pythonはRubyみたいに 整数や文字列はメソッドを持っていないんですか? 型変換をstr()のような関数を使わず それ自体のメソッドでやりたいんですが
ループ開始 おれはキャストしてるような今の形の方が自然に感じるなあ
そんなにやりたきゃ __str__() 直接呼べばw
822 :
デフォルトの名無しさん :2007/11/27(火) 09:20:32
WxPython 使ってる? 命名規則で悩むんだけど、WxPython を組み込む時って WxPythonの流儀(キャメルスタイル)に合わせる? それとも、あくまでも Python標準と思われる小文字+アンダースコアで統一する?
>>822 Python標準にしてる。
それと、WxPythonじゃなくてwxPythonだろ。
もうひとつ。いま、GUIプログラムを作っていて、これは4つのレイヤにわかれてるのよ。 •レイヤ0 -- アプリケーション根幹部分を実装したモジュール(プラットフォーム非依存) •レイヤ1 -- コマンドラインによってアプリケーション根幹部分を操作するためのCUIモジュール(プラットフォーム非依存) •レイヤ2 -- マウスからの入力情報をコマンドライン文字列に変換したり、描画のための情報を生成するGUIモジュール(プラットフォーム非依存) •レイヤ3 -- WxPython や Win32Api などを使って実際に GUI 情報を生成するためのモジュール(プラットフォーム依存) 俺は今 core/main.py core/sub.py cui/main.py cui/sub.py gui/main.py gui/sub.py wx/main.py wx/sub.py こんな感じにしてるんだけど、wx っていうパッケージ名(wxライブラリと同じ名前)とか、 パッケージ名が違うだけでフィアル名は同じとか、なんか混乱の元になりそうな気がする。 みんなだったらどういうふうにファイル&パッケージ命名する?
>>823 あ、失礼 wxWidgets/wxPython だった
やっぱりPython側で統一か
826 :
824 :2007/11/27(火) 09:48:13
>>824 に追加。それぞれの main.py には class Main が、
それぞれの sub.py には class Sub があるんだけど、このクラス名も
同じ名前がたくさんあって
確かにパッケージ名によって区別は付けられるんだけど、
なんか混乱の元になりそうで怖い。
>>> a=1 >>> a.__str__() '1' >>> b='abc' >>> b.__len__() 3
>>822 使ってますよ
あと WxPython じゃなくて wxPython だよ
>>824 core/main.py
core/sub.py
cui/main.py
cui/sub.py
gui/main.py
gui/sub.py
frontend/main.py
frontend/sub.py
とか
>>824 に追加。それぞれの main.py には class Main が、
>それぞれの sub.py には class Sub があるんだけど、このクラス名も
>同じ名前がたくさんあって
>確かにパッケージ名によって区別は付けられるんだけど、
>なんか混乱の元になりそうで怖い。
ここは同感
ubuntuがフォルダー名を日本語で「デスクトップ」とかつけるからpython使うの怖い
macosx でもファインダー(Windowsでいうエクスプローラ)上では「デスクトップ」ってなってるけど、 コマンドラインでアクセスすると desktop って名前になってる。 > cd デスクトップ ってやってもアクセスできない。 本名は desktop だけど、GUI上でのみ通用する別名が定義されている感じ そういうシステムが windows にもあればなあって思う事が多々ある
>>831 > そういうシステムが windows にもあればなあって思う事が多々ある
あるよ。「マイ ビデオ」とかはそうなってる。
でもなぜかデスクトップの実体は「デスクトップ」なんだよ。
API経由で特殊パス取得すればいいんだけど謎ではある。
>>830 ubuntuは基本utf-8だから問題はおこらないような。
>>783 >ただ、RubyのようにすべてのルートとなるObjectクラスみたいなのがPythonにはないから
Pythonで「ほぼ」すべてのオブジェクトのルートになってるのは「object」だろ。
アトリビュート追加したりして変更できないけど。
デスクトップは自分で変更すればおk 何かと便利になる
Macの勝ち
はじぱい
ほんとだ・・・こりゃ黒い
実物はたいしたことないだろうけど、webで見ると何このアレさ加減…
ま、まあ・・・ 大事なのは中身だよ!中身!
はじぱいよりはましだといいけど
842 :
デフォルトの名無しさん :2007/11/27(火) 17:11:52
centos4に入ってるpythonが2.3で古いんですが システム管理に使ってるので削除しない方がいいらしいです パッケージ版とソースからと二ついれるのが普通ですか?
新旧ぶつからないように入れればいいんじゃないの
なぜか巻き添え喰らってるLutzカワイソス こうjなるとネーミングに問題ありと言わざるを得ない 自分はとりあえずApressから出るDjango本に期待。
845 :
デフォルトの名無しさん :2007/11/27(火) 17:26:08
Zopeをめちゃめちゃ親切に教えてくれるサイトってあるかなあ?
848 :
デフォルトの名無しさん :2007/11/27(火) 17:32:21
めちゃくちゃハードル高そうなんでつが
>>842 ./configure --prefix=$HOME
>>847 サンプルはみんな import wx 前提だよ。
from wxPython import wx とかはしてない。
元のみんぱいのRGBの輝度反転しただけなんかな
>>841 その略称は「初めてのPython」のためのものです
似たようなタイトルの本は存在しません
恥ぱい にしようよ
中身の質以前に、ネーミングの根性が気に入らないから、 俺の脳内略称にはそれ採用させてもらうよ
>>837 なんというためになりそうな本。
ぜひみんな購入するべき。
pythonのリストのスライシングは [開始インデックス:終了インデックス+1] のようですが、何故終了インデックス+1なんでしょう? わかりにくくないですか? [開始インデックス:終了インデックス] にしたらいいのに。
スライスだからさ
|A|B|C|D|E|F| ここからCDE(index:2,3,4)を取り出すとしたら、index:2とindex:5の仕切りでスライスするから。
[2,5) みたいな表記だと分かりやすかったとは思う
解析器には分かりにくそうだ
数学表記に逆らってるんだよな。 他の言語とも違うし。
index を 0 からじゃなく 1 からにするべきだったな
C++のSTLの begin と end のしきたりに慣れている人なら自然に受け入れられると思う 空っぽの区間も表現できるので表現力が高いし
>>868 C++もSTLも知らない人間には何の根拠にもならん
あーなるほど 空っぽの区間が表現できるということか・・
>>869 ここでいう「C++やSTLのしきたり」は決して独特なものではないから、
それは「C++もSTLも知らない人間」の意見というより、それも含めてろくにモノを知らない人間の意見、
という感じだね。
Pythonてブロックがインデントだけに規定されてるから うっかりインデントを削除しすぎてしまった時に その行がどのブロックに属するのか分からなくならない?
うん、分からない。
バックアップくらいとるだろ不通
分かっててもやっちゃうのが 「うっかり」
>>872 if、while、defの次ならインデントとか、勝手にきまるんじゃね?
つか、コロンで終わる行の次がインデントな希ガス。
>>878 インデントは決まるけどアンインデント(インデントを1個引っ込める)のは決まらない
>>878 終わりが一意に決まらない
意図的に空行で切ってるケースもあるみたいだけど
大抵の言語でもうっかり{}消したら分からなくなる
>>879 マグカップの文は何て書いてあるんだろう
商品説明みても全文がわからん
Cからの流れで用意してあるのだろうけど、 ビット演算のための演算子[&, |, ^, ~, >>, <<]が存在することに 違和感を感じるようになった。 ビット演算の対象はビット幅固定だと思うが、 組み込みの数値は型拡張される。 バグが混入しやすいし、気づきにくい。 (安全にやるには、専用のクラスと関数を用意することになる) もう非推奨→廃止にしてもいいと思わね? で、そのあとに新しい使い道でも…
>>872 の問題ってさあ、ソースをコピペしたあとにソースを整形するのにこまるんだよね。
そうですか
>882 すばらしい洞察
ブロックの無いアセンブラ最強
emacsだとpassがアンインデントの機能を持つ。 だからpassを書けばオートインデントも効くのだけど 毎回passを書くのはちょっとpythonらしくない。 rubyのendを思い出してしまう。
return とかもアンインデントのヒントだね。emacs では。 pass は書きたくないけど、書いたほうがなんとなく安全だなあ。 と、最近思い始めてる。 ただ、下記のようなコードが if 0: if 0: exec(...) passで明示するために下記にまでなるってことだよね。。。ひどい。 if 0: if 0: exec(...) pass else pass else pass
elseのとこにpassを書くんじゃだめなの?
892 :
デフォルトの名無しさん :2007/11/28(水) 12:40:39
オートインデントに頼らない
ここにはモグリとヒキコモリしかいません。
イモリならここに。
タモさんはアルタに。
Pythonをやれるオハケンってありますか?
あるわけないだろ常考(wwwwwwwwwwwwwwww
if 0: if 0: exec(...) pass pass pass これはOK
オハケンならJAVAのほうがいいんですか?
ま、いずれにせよ、インデント壊れるのを防ぐのに pass 入れるっていう選択肢は選びにくいな。 実際のところ、たまに ruby とか書くと end がウザいな ってちょっとは思う。ってことはやっぱ python のインデント 式はオレに合ってる。それだけのこと。
endのウザさと ブロックが壊れるリスクのトレードオフってことっすか
普通にやってりゃ壊れないし
インデント破壊ウイルス 発症すると画面上の文字が左に落ちる。 環境: MS-DOS
>>884 ビット演算を使う時というのはビット毎に意味のある場合だから
最初にマスクしてから使うのでそんな事が問題にはならない
そこらへんは INT のビット数が処理系で変わる C でも同じ
>908 壊れるリスクってのは python 使ってない 脳内君の世界での話だと思う…
viだったらCTRL+Z効かないから うっかり壊すことあるじゃん
すみません インデントするときに参考にしたいのですが a)タブ4 b)タブ8 c)スペース2 d)スペース4 e)それ以外 みなさんどれですか? あとスペース2とタブ2を同時に使うと 見た目は同じ位置でも インデント違うとみなされますよね?
>>912 逆じゃない?
壊れるリスクがないって言ってるのは使ってても趣味レベル
917 :
624 :2007/11/28(水) 19:18:55
カッコとインデントが両方あるのは冗長といえば冗長だが、どっちかがおかしくなった ときにもう片方があるとなにかと心強いんだよな。ソースは基本的に人間がいじるもの なのでいくら気をつけたつもりでもたまには間違う。 pythonのようにインデントのみだとずれたらそれっきりで、相当気合入れて読まないと 直せないのがつらいね。
>910 cascadeか・・・懐かしい。実際に見たことはないけど(そして落ちる方向違うけど)
>>914 俺は d だ。
「タブは使わないほうが良い」とかなんとかというのが、どっかPEPかなんかに書いてあったと思う。
>>837 なんというためになりそうな本。
ぜひみんな購入するべき。
>>923 上の方で俺の気分を害すレスが合ったが、なんか癒された。
ありがとうございました
>>911 反応あってよかった。
C だと変数に型があるから、マスクしないケースがあるじゃない。
int のビット数も typedef で依存を吸収しようとするし。
そうでない場合でも、アーキテクチャの自然の大きさに収まることを当てにしていると思う。
Python の int は多倍長拡張されて、どこまでーも大きくなっていくけど。
それに C と Python を比較すると、
ビット演算の頻度・重要性が逆方向を向いてると思うんだ。
Cなら > UINT8 ch = 0xAA 0xAA > ch = ch << 4 0xA0 > ch = ch >> 5 0x05 > ch = ch * ret_float_fn(1.1) 0x05 Pythonの組込み数値だと、うれしくない現象が何かとある。 > ch = 0xAA 0xAA > ch = ch << 4 # どこまでも大きくなっていく 0xAA0 > ch = ch >> 5 # 当然↑の値で右シフトされる 0x55 > ch = 0x05 > ch = ch * ret_float_fn(1.1) # floatになってしまう 5.5
アホくせ
組込み数値ではなくて、 クラスとメソッドと関数の方がいろいろと便利な気がする。 > ch = Bit(0xAA,width=8) 0xAA > ch = ch.sft_l_logic(4) # 論理左シフト 0xA0 > ch = ch.sft_r_arithmetic(4) # 算術右シフト 0xFA > ch = ch.rot_l(ch, 1) # ローテートだって出来る 0xF5 > ch = Bit(0x05,width=8) > ch = ch * ret_float_fn(1.1) RuntimeError > ch = int(ch) * ret_float_fn(1.1) 5.5 > ch = Bit(ch, width=8) 0x05 このケースだと、別に演算子を使ってもいいけど、 使わなくてもいい訳で。 少なくとも組込み数値に対しては、C のような簡便な記法にはないない。 マスクの必要があったり、型が変わったりしないかと心配事が多い。 それで自由になった演算子を、さて、何に使うか……
Haskell [x,y,z | x <- xs, y <- ys, z <- zs, z > 0] Python [x,y,z for x in xs for y in ys for z in zs if z > 0] Haskellに嫉妬中w [x,y,x | x << xs, y << ys, z << zs, z > 0] 例えば、こんな感じに使えないかなーとか妄想。('|'の右のコンマは無理か?) 長文 糸冬 了..._〆(゚▽゚*)
マスクすればいいだけじゃん C言語との互換性を気にしてる癖にわけわかんないことしてるし
ビット演算子は無くてもいい気がするけど、それを別のに使うってのは嫌だ
要素が1つしかないとわかっている集合から、 その唯一の要素を取り出す上手い方法はないでしょうか? 今は for x in singleton_set: the_element = x とやっていますが、もう少しましな方法があれば教えてください。
iter(singleton_set).next() tuple(singleton_set)[0] singleton_set.__iter__().next()
ありがとうございました
>>930 C言語との互換性を気にした理由は、
・Pythonのビット演算に対して影響がある
・アセンブラの次にビット演算を多用している言語
・ビット演算子はC言語のように振る舞うべき
(同じ表現に対して同じ結果が得られるべき)
と考えているから。
でも、Pythonで3番目の結果を得られない。
似てるようで似ていないというのが、
いい状態なのかという疑問がある。
マスクの必要性があるというのは、C言語から乖離があるわけだし、
いちいちマスクするなら、専用のクラスを設けた方が楽になる。
そしてビット演算子を無くしてしまえば、C言語のそれと混同することがない。
>>929 は、無くなったら別の使い道もあるだろうという、一石二鳥の考え。
まぁ、今のPythonの(劣化)ビット演算が無くなって、
混乱する人がゼロになるだけでもいいと思うんだけど。
>>935 要するにこういうことか。
bit演算で俺は混乱した。俺は悪くない。悪いのは言語仕様だ。
四の五の言う暇でPEPと「専用のクラス」を書いてpython-devに投げろ。
その通り。 PythonでBitクラスを作ったが遅い。 Cで実装したやつを配布しろ。 [x,y,z for x in xs for y in ys for z in zs if z > 0] それとこれは自分で書いても読めないぞ。 Haskell程度にしてくれ。 この2点だ。
>>937 いきなり投げられないからここに投げたんよ。
[x,y,x | x << xs, y << ys, z << zs, z > 0]
こういうのが書けるか俺には分からんし。
かわいそうなメーリングリスト・・・
forループ書けよ的な
>>741 amazonにどんなレビューが載るかwktkが止まらないwww
>>935 C言語のように振る舞ってるだろ
ビット数決め打ちのCソースがそもそも間違っているわけだから
本来CでもPythonでやるようにしないと駄目なわけで
Python と C の両方で有効な式は両言語において同じ値を持つべきだ、という意見は 理解できるし部分的には賛同するけど理想論だね。 個人的には Python の << 演算子でビット長がどんどん拡張される仕様は合理的だと思う。 C で同じ挙動を得ようと思ったらかなり大変だけど、Python で C と同じ挙動を得るのは 簡単(マスクするだけ)だから。
C言語と挙動が違うのは、Pythonが通常の整数→多倍長整数への自動拡張を するからであって、ビット演算だけでなく足し算のオーバーフローの挙動が違う。 0xffffffff + 1 が 0x100000000 なのに、 0xffffffff << 1 が 0xfffffffe になるべき とかいうヤツはバカ。 だいたい、C言語なんていう環境依存を許容しまくりの言語の挙動をマネる なんて理想からかけ離れている。
>>945 同意。Cの制限をわざわざPythonに持ち込む必要はないと思う。
Cにマシン依存の制限がでるのはしょうがない。でもPythonはより高水準な言語なんだからそういうのはうれしくない。
CとPythonは違うもんだと思えばよくね?
>>943 CがUnix記述のために作られて
今は全てのハードに使われていることを考えると、
Cは間違ってないし、
またCがPythonのように振舞うべきでもないと思う。
>>944 マイナス値なども合理的かつ有用な振る舞いだよね。
# ----
ところでビットが左に成長するなら、
右の成長も小数点を中心にして
あるんじゃないかと思うんだけど。
> ((1 << 100) >> 100)
1
> ((1 >> 100) << 100)
0
> 1.0 >> 1
TypeError
>>947 確かに、将来 3/2 が 1.5 になったら、その仕様もアリかもね。
でも、基本的に数値とbit列は違う概念で、bit列を扱うのに整数の
型に入れると便利というだけだから、bit演算を実数の世界に
持ち込む必要は無いと個人的に思う。
固定小数点? に類似概念を適用するのは チョビッとだけ興味深い気がするけど ビット演算の意味を考えると意味がない気がする
> 1.0 >> 1 TypeError このTypeErrorpは浮動小数点数はshift出来ないっていう意味であたりまえ 問題は 1.0 が binary だということを明示したとき たとえば 0b1.0 >> 1 とかを許すか ということ
`バッククオート`ってstr()と同じなのかな。 str()自体のタイプ数が少ないせいか ありがたみを感じないけど、使っている人いる? (変なディスプレイとフォントだと'シングルクォート'と間違えそう) ↓特殊効果があるかと思ったけど違うみたいだし…… >> a = 1 >> b = 2 >> print "a+b=`a+b`" a+b=`a+b` a+b=3 ×
>>952 thx
特に効能は無いのですな。残念。
でもよく考えると
>>951 はセキュリティホール…
py3ではバッククオート自体が無くなるので注意
使われてないし、存在意義が無いと…
strとかreprあればそっちのが分かりやすいしなあ
わざとオーバーフローしたいときのために ビット数を制限できるようにもできたら面白いかも
>> a = 1 >> b = 2 >> print "a+b=%d" % a + b
ありがとうございました
>> a = 1 >> b = 2 >> c = 1000 >> print "(a + b) * c = %d" % (a + b) * c
10進数をN進数に変換するもっともいい方法はどんなのでしょうか。 int(str(val), N) をつかっているのですが、もしよりよい方法があったら教えてください。
>>961 すみません、これ間違いですね。これだとN進数を10進数に変換してしまいます。
やべー、今まで大間違いしてた。
>>961 もっともよいか知らんが
easy_install gmpy
で、入れて
from gmpy import digits
digits(val,N)
っていうのだったらあるよ。
MLで自分の本の宣伝とな。 今回は取り急ぎじゃないのか。
Zope関係者ってまだ生きてのか。
>>965 本のタイトルパクったり、萌え絵を表紙に使うよりマシだと思う.
>>965 くやしいのうwww
くやしいのうwwwwwww
Browse Sourceでシンタックスハイライト。 - Macで開発したいんです。 - 骨格部
http://framework.g.hatena.ne.jp/soundkitchen/20070321/1174486359 このページの通りやってみたんだけど
シンタックスハイライトできないんだ…
[mimeviewer]
enscript_modes = text/x-dylan:dylan:4,text/x-php:php:4
enscript_path = /usr/bin/enscript
max_preview_size = 262144
mime_map = text/x-dylan:dylan,text/x-idl:ice,text/x-ada:ads:adb,text/x-php:php, 'rb':'text/x-ruby'
php_path = /usr/bin/php
silvercity_modes =
tab_width = 4
[components]
tracpygments.* = enabled
php も rubyも駄目ぽ… orz
970 :
969 :2007/11/30(金) 19:03:43
2007-11-30 19:32:31,525 Trac[loader] DEBUG: Loading egg plugin tracpygments from /usr/lib/python2.3/site-packages/TracPygments-0.3-py2.3.egg 2007-11-30 19:32:31,528 Trac[loader] ERROR: Failed to load plugin tracpygments from /usr/lib/python2.3/site-packages/TracPygments-0.3-py2.3.egg Traceback (most recent call last): File "/usr/lib/python2.3/site-packages/trac/loader.py", line 101, in load_components entry_point.load() File "/usr/lib/python2.3/site-packages/setuptools-0.6c7-py2.3.egg/pkg_resources.py", line 1912, in load entry = __import__(self.module_name, globals(),globals(), ['__name__']) ImportError: No module named tracpygments trac.log みたら、こんなのが出力されてました モジュールがロードされてない…
971 :
969 :2007/11/30(金) 20:33:01
自己解決スマソ sudo python setup.py install で site-packagesに入れた TracPygments-0.3-py2.3.egg に何故か __init__.py が入って なかったのが原因のようでした というかTracのpluginって site-packages にzipを展開して 出てきたフォルダ、この場合は ERROR: Failed to load plugin tracpygments tracpygmentsフォルダを入れてあげればいいだけなんですね。 pluginが外部モジュールと全く同じ扱いになってるのが意外な かんじがしますた。シンプルすぎる…
Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on win32 Type "help", "copyright", "credits" or "license" for more information. >>> u'hogÉfuga' u'hogEfuga' これって仕方ないんでしょうか
システムのデフォルトエンコーディング次第じゃないか?
#!/usr/bin/env python # -*- coding: utf-8 -*- # # ファイルは utf-8 で保存 (cp932 で保存するとその時点で E に化ける) # # Python インタプリタで実行すると u'hogÉfuga' -> u'hogEfuga' になるが # コマンドプロンプトで runoncp932.py を実行すると # # UnicodeEncodeError: 'cp932' codec can't encode character u'\xc9' in position 5: illegal multibyte sequence # # 自分で例外ちゃんと処理するしかない? # print u'ほげ%sふが' % u'hogÉfuga'
文字コード関係は言語仕様疑う前に自分の脳みそほじくり返せボケが
おつ
sys.argvもUnicode対応してないんだっけ コマンドラインからUnicodeファイル指定できなくて困るんだよねあれ
>>976 別に言語仕様を責めてる訳じゃないんだが
もし責められてると思たのなら
そっちの方がやばくね
import sys try: print u'argv = %s' % sys.argv except UnicodeEncodeError, (e): print u'例外', sys.exc_info()[0] print e print e.args else: print u'イ`'
3つ質問です。 1. ある関数が投げるexceptionおよび戻り値の一覧を知りたいときには、 どうしたらいいでしょう。help()みたいなのがある? 2. 以下のコードで、変数の値が変わらないのは何故でしょう。 >>> a = 100 >>> b = 200 >>> for p, i in (a, 1), (b, 2): >>> p = i >>>print a, b 100 200 3. 以下のコードのような感じで、変数名をstringで取り出すにはどうすればいいでしょう。 >>> for val in foo bar: >>> print val # <= ここで、変数の中身じゃなくて変数名を取り出したい。 "foo" "bar"
>>981 > 1. ある関数が投げるexceptionおよび戻り値の一覧を知りたいときには
動的に任意の例外も値も生成できるからわかりようがないしPythonは感知してない。
ホワイトボックスなら仕様どおりに動くと思うしかないね。
もしかしたら高度なIDEやソース解析器があるのかもしれないけど。
> 2. 以下のコードで、変数の値が変わらないのは何故でしょう。
for ... inで、aやb自身をpに結び付けてるわけではなく
aやbの値をpに結び付け(代入)してるから。
# a=100; p=a; p=1 ←これでaが変わったらいやでしょ?
> 3. 以下のコードのような感じで、変数名をstringで取り出すにはどうすればいいでしょう。
2.と同様だけど、値を代入したらvalは変数fooやbarとは無関係になるから
そんな情報は保持しておらず取り出せない。
983 :
981 :2007/12/01(土) 08:18:08
>>982 即レスありがとうございます。
1.
例えば、標準moduleのmmapを使いたいとして、
ttp://www.python.jp/doc/2.4/lib/module-mmap.html を読んでもどんな例外が投げられるか書いていません。
そういうときには、一体どうやって例外処理をするものなのですか?
C/C++だと、manpageして説明読んで終わりだったんですが、
Pythonではどうやって例外をちゃんと扱えばいいのか悩んでいます。
2.
class hoge:
def __init__(self, val):
self.val = val
A = hoge(100)
B = hoge(100)
C = hoge(100)
print A.val, B.val, C.val
for p, i in (A, "1"), (B, "2"), (C, "3"):
p.val = i
print A.val, B.val, C.val
これだと、ちゃんとvalの中身が書き変わるんで、
intとかstringの時だけ違うんですかね。
このpをCのポインタ的に扱いたいんですよね。
クラスの時だけポインタ的にpが振る舞う?
>>983 > 1.
ごめんさっきホワイトボックスと書いたのはブラックのまちがい。
その場合マニュアルにないとどうしようもない。
動かしてみて記載のない例外がでる可能性もあるにはある。
でもそれってC/C++のmanpageと事情は一緒でない?
JavaだったらRuntime以外でないことを保証できるけど。
> 2,
数値も値毎に(普遍で不変な)オブジェクトが存在していると考えるといいです。
a=100; p=a は
p → 数値100 ← a
という関係をつくってる。(わかりにくいけどごめん)
そこでp=1とすると
p → 数値1 / 数値100 ← a
と関係が変わることになる。
Pythonだとできないから意味ないけど
数値`100'自体を数値'1'に変更することができたら
pもaも`1'になると思います。
985 :
981 :2007/12/01(土) 09:10:15
>>984 なるほど。納得できました。
ありがとうございます。
PEPにあるか知らんけど使ってるモジュールにerrorってのがあればそれがそのモジュールで使用される例外または例外の基底クラスであることが多い
>>981 2.と3.がどんな言語でできるのか知りたい
>>984 さんの説明をみて
>>> a = 100
>>> p = a
>>> p = 1
>>> a, p
(100, 1)
>>> p = a
>>> a = 1
>>> a, p
(1, 100)
2回目の a, p で 1, 1 になると思ってしまった自分がいる orz
3をあえてやるとしたらhashじゃないかな
992 :
デフォルトの名無しさん :2007/12/01(土) 14:53:21
>>981 が言うみたいな、intとクラスの場合で結果が変わるのって、
一体何を読めば言語仕様としてそういうの書いてあるの?
C/C++から俺も入って勉強中なんだけど、
変数のスコープの概念だとか、ポインタはないの?とか、
そういう情報がPythonの公式のドキュメント読んでもいまいち分からん。
例外処理か・・・結局モジュールのソース見ないと分からないんだよね
996 :
992 :2007/12/01(土) 16:33:32
>>994 .soとかで配布されてるものは、元のCのソース読んでる?
>>995 さんくす。
結局、
>>981 の2.はmutableかどうかなわけだな。
この発想はC++からだと俺はなかったわ。(俺だけ?)
もっと精進せねば。
というか入力される可能性のあるinvalidなデータを突っ込んで回復できる例外は回復して、それ以外の例外はそのままユーザに渡すのが普通じゃね? 何でもかんでも復帰できるなら例外じゃないだろ
>>997 ユーザがどう対処するかを判断するときに、
どういう例外が投げられうるのかを知っておきたい、
というのが話の流れなのでは?
うん
こ
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。