Pythonのお勉強 Part30at TECH
Pythonのお勉強 Part30 - 暇つぶし2ch400:デフォルトの名無しさん
08/12/05 09:11:27
printの構文くらいしか噛みつくとこないんですね

401:デフォルトの名無しさん
08/12/05 10:00:42
デバッグプリントしようとしてエラー吐いたときのイラつきは異常

402:デフォルトの名無しさん
08/12/05 10:32:16
>>400
printの構文くらいしか噛みつくとこないということにする以外に噛み付く方法無いんですね

403:デフォルトの名無しさん
08/12/05 10:41:21
print以外に互換ない所ってどこ?

404:デフォルトの名無しさん
08/12/05 10:44:28
そもそも、printの構文なんて存在しなくなったというのが正しい。
printが関数になって、関数の構文で呼び出せるようになり、
Pythonの構文がいっそうシンプルになった。

405:デフォルトの名無しさん
08/12/05 10:46:27
>>400
ぶっちゃけPython3.0の新機能なんざ、後方互換性の破壊による
二重保守や移行の手間に見合うほどのもんじゃないよ、どれもこれも

Python3.0のほうがより良い仕様だということは認めるが、
別に言語仕様だの性能だのの明白な強化に繋がる仕様じゃないし
単なる切り落としも多い
例えば、reduce()がbuiltinから消えて喜ぶ奴がいるか?
はっきりしているのは、それでスクリプトを書き換える必要が生じる
ユーザだけは沢山いるということだ

周辺ライブラリとか作ってる人たち、今後は二重保守やテストを強いられることに
なんのかね
当たり前のようにC APIも仕様変わってんだろ
ぞっとするぜ

406:デフォルトの名無しさん
08/12/05 10:47:36
>>403
文字列の扱いは全く完璧に変わった
例外のハンドリングも構文が変わった

シンタクスレベルの変更なので、スクリプト内で動的にバージョンを判断して
分岐することはできない
バイトコンパイルの時点でシンタクスエラーになるからな

407:デフォルトの名無しさん
08/12/05 10:49:24
変化に対応できないじじいは史ねってことですね、分かります。

408:デフォルトの名無しさん
08/12/05 11:02:43
>>405
移行したくないならどうぞそのまま Python 2.x をお使いください。
だれもあなたに移行しろと言ってませんし、俺もまだ移行しません。
1年や2年は様子見で良いよ。
ライブラリが揃いだしてから、新規のコードは Python3.0 用に書き始めれば良い。

409:デフォルトの名無しさん
08/12/05 11:09:44
> ライブラリが揃いだしてから、新規のコードは Python3.0 用に書き始めれば良い。

なるほど、使ってる全部の端末に2種類のPythonインタプリタをインストールして
二重運用するわけかw
そして今までのコードベースはそのやり方じゃ、3.0からは使えない、と

うっかりミスでトラブル続出だな
boost.pythonとかどうなるのやら

410:デフォルトの名無しさん
08/12/05 11:11:52
>>409
俺は1.9、2.4、2.5、2.6、3.0全部入れてるぞ

411:デフォルトの名無しさん
08/12/05 11:13:16
>>410
>1.9

Ruby厨乙(ww

412:デフォルトの名無しさん
08/12/05 11:13:56
流石反応はええな

413:デフォルトの名無しさん
08/12/05 11:51:49
hoge.cppからhoge.hppを自動生成するschemeのprogramが
format文(pythonのprint文)のきもい使い方駆使しまくってたんだけど
似たことpythonでもできるようになるのかい?

414:デフォルトの名無しさん
08/12/05 11:59:32
>>405
C APIについてはどうなのか知らないけど、

通常のPythonスクリプトのプロジェクトでの2重保守のコストは、
テストを自動化してるかどうかによると思う。
変換ユーティリティ 2to3 の利用もテストを前提としてるみたいなので。

URLリンク(www.artima.com) より、簡単に抜粋すると。

0. テストを書く。
1. python 2.6 へ移植。
2. py3k 警告モードでテスト。
3. 警告がなくなるまで修正を繰り返す。
4. 2to3で 3.0 向けに変換。
5. 3.0 でテスト。
6. エラーがあれば変換前のコードを修正する。
7. release

手作業が必要なところ以外を自動化してしまえば、
保守コストが2倍掛かるなんてことにはならないはず。

移植コストは 2to3 がどの程度の変換をサポートしてるかに拠るのかな。
8割程カバー出来ればいいや、みたいな事言ってたを何処かで読んだけど。ソース失念。

415:デフォルトの名無しさん
08/12/05 12:05:31
URLリンク(gihyo.jp)
に2to3の適用範囲についての説明はあるな
その後もっとマシなものになっているのかどうかは分からんが

その辺は、要求品質にもよるだろうな
業務としてやってるようなものなら、テストだって全自動で終わりとかありえねえし

ゲームの自動テストでも書いてみるか?w


416:デフォルトの名無しさん
08/12/05 12:32:19
C apiの変更はboost.pythonに吸収してもらえないのかねえ

417:デフォルトの名無しさん
08/12/05 12:47:45
URLリンク(docs.python.org)
を見ると、Sequence ObjectsからString Objectsの記述は無くなって、
Bytes ObjectsだのByte Array Objectsだのが登場している。
Unicode Objectsは残っている。
strはUnicode Objectsにマップするのだろうか。

URLリンク(docs.python.org)
を見ると、相変わらずフォーマット"s"が存在し、
「string or Unicode Objects」とか書いてある。
そしてそれが「char*に」変換する。
byteからのフォーマット指定子も追加されているが。

正直何がしたいんだか良く分からないんだが。
上っ面だけ整理して、C APIはカオスに見える。
ドキュメントが追いついていないだけか?

418:デフォルトの名無しさん
08/12/05 13:38:36
まあ3.0移行とか関係なく、普通にテスト書くだろ。
テスト書かないハゲは消えろや。

419:デフォルトの名無しさん
08/12/05 15:34:22
python 2.5/2.6 を使っているんですが、
この段階では print 文でなくて print 関数を使うようにはできませんか?
future import なんとかでできたらいいなぁ、と。
いずれ python 3.0 に移行するまでのつなぎとして
今からそう書いておきたいんですが・・・

420:デフォルトの名無しさん
08/12/05 15:36:26
2.6なら from __future__ import print_function

421:デフォルトの名無しさん
08/12/05 15:44:51
>>419

>>382


422:デフォルトの名無しさん
08/12/05 16:26:39
いつのまにか2.6.1

423:デフォルトの名無しさん
08/12/05 17:42:43
>>420-421
ありがとうございました.
めでたく print("aiueo") できました.

ところで,Python でメッセージを標準エラー出力
に出す時に簡便な方法といえば何でしょうか?
やはり os.write などを使って出すのでしょうか?
print2("aiueo") のような関数は標準的にはありませんか?

自分で便利関数を作ってもその存在を忘れてしまうほど
頭が弱いので,与えられたものがあればそれを使おうと思います.

424:デフォルトの名無しさん
08/12/05 17:45:34
sys.stderr.write(...)
print >>sys.stderr, ...
print(..., file=sys.stderr)

425:デフォルトの名無しさん
08/12/05 17:47:20
>>424
> print >>sys.stderr, ...

これは非推奨。

426:デフォルトの名無しさん
08/12/05 18:02:02
logging

427:デフォルトの名無しさん
08/12/05 19:03:20
おお,logging なんてのがあるんですか.
>>425 のような書き方も知りませんでした.

もう一つ質問があります.
設定ファイルであれこれ設定する必要があるのですが,
できれば UNIX/Windows で共通に使えるように
したいと思っています.こういうときホームディレクトリ
直下に .myapplication ファイルでも用意して,
その中に ConfigFile 形式や JSON 形式で設定を
書くようにすればいいのでしょうが, Windows の
場合だったらプロファイル直下かなぁ,とか,
ポータブルにするための手間は惜しみたいとか考えてしまいます.

アプリケーションの個人用の設定ファイルの扱い方,
特にその配置場所について,Python 流のお決まりの
やり方というのはあるのでしょうか?

428:デフォルトの名無しさん
08/12/05 19:14:45
レンタルサーバーでもpython3.0対応してくれたら
移行してもいいんだがな

429:デフォルトの名無しさん
08/12/05 19:58:03
>>427
os.path.expanduser()

430:デフォルトの名無しさん
08/12/05 20:23:29
>428
自分で入れればいい

431:デフォルトの名無しさん
08/12/05 20:32:07
ブロックの終わりを示すキーワードを強要するオプションがほしかったな

432:デフォルトの名無しさん
08/12/05 20:39:22
>>427
Pitおすすめ
URLリンク(d.hatena.ne.jp)

433:デフォルトの名無しさん
08/12/05 23:56:09
以下の呼び出しはaがアサインされてないよと言われて失敗してしまうんですが
そういうものなんですかね?

def maker(a):
  # return lambda(c): a + c
  def f(c):
    a = a + c
    return a
  return f

f = maker(3)
print f(4)

左辺値のaを別の変数にすれば動きます。

434:デフォルトの名無しさん
08/12/06 00:07:22
俺はBeautiful Soupが3.0に対応するまで移行するのは待っていよう


435:デフォルトの名無しさん
08/12/06 00:08:36
Python3.0ならnonlocalで出来たかと

436:デフォルトの名無しさん
08/12/06 00:09:04
>>433
URLリンク(docs.python.org)

If a name binding operation occurs anywhere within a code block,
all uses of the name within the block are treated as references to
the current block.
This can lead to errors when a name is used within a block before it is bound.
This rule is subtle. Python lacks declarations and
allows name binding operations to occur anywhere within a code block.
The local variables of a code block can be determined
by scanning the entire text of the block for name binding operations.

と書いてあるので、仕様だろう
結局のところletのような構文は無いのだし、それがPythonなのだと思うしかない

俺は最近はletだのvarだのmyだのが無いことの不便さのほうを感じることが
多いな


437:デフォルトの名無しさん
08/12/06 00:19:56
64になって困るのだろうか?


438:デフォルトの名無しさん
08/12/06 00:30:47
pythonでswitch文書くにはどうしたらいいの?

439:デフォルトの名無しさん
08/12/06 00:32:02
switchなんてものは無いが、別にいらんだろ
パターンマッチもないよ
ifで頑張れ

440:436
08/12/06 01:38:31
すまん、ちょっと意図を勘違いしていた。
>>433は左辺も右辺も自由変数を参照したいわけだな?
ならPython3ではnonlocal文でいいはずだが、
それ以前のPythonでは、自由変数に代入することはできない。

global変数にはglobal文を使うことで代入することはできるが
global変数を使うこと自体稀だろう。

Schemeなどのlet文では左辺がローカルな束縛で右辺が自由変数という
ケースも良く出てくるが、それもPythonではできない。
できない理由は>>436の引用に説明されている通り。

いずれも変数宣言を持たないことによる帰結だな。

441:デフォルトの名無しさん
08/12/06 01:41:19
let「文」はおかしいな
まあいいか

442:デフォルトの名無しさん
08/12/06 01:44:19
py3kについてkwskかかれた日本語まだー?w

viewってなんだよviewって・・・

443:デフォルトの名無しさん
08/12/06 01:54:06
>>440
ありがとうございます!

エラーもはいてくれるし、ローカル変数を使うつもりが初期化を忘れて
勝手にネームバインディングされるよりはわかりやすくていいのかな。


444:デフォルトの名無しさん
08/12/06 01:56:51
>>443
本当はletなどで明示したほうがいい、と俺は思うんだけどね

まあ、letの3文字をタイプする手間と、それを省くことによる仕様面での制限の
トレードオフを考えたときに、Pythonは手間を省く方を選んだということだ

445:デフォルトの名無しさん
08/12/06 02:33:08
>>433
def maker(a):
  # return lambda(c): a + c
  def f(c, a=a):
    a = a + c
    return a
  return f

とすればいいと思うよ。


446:デフォルトの名無しさん
08/12/06 02:45:50
a += c でもだめなんかなぁ。。。

447:デフォルトの名無しさん
08/12/06 04:45:34
>>438
caseが全て定数なら、辞書を使うと高速。
パターンマッチが必要なら
URLリンク(code.activestate.com) みたいなのを拡張して使うといい。

制御構造の為に標準構文以外の独自拡張を取るのが、
可読性を損ねるという考えもあるので、無難なのは if/elif... かな

448:デフォルトの名無しさん
08/12/06 08:40:20
>>442
きっと一年後ぐらいに出ます。

449:デフォルトの名無しさん
08/12/06 10:07:05
>>431
キーワードのデフォルトはpassですねわかります

450:デフォルトの名無しさん
08/12/06 11:16:12
debug=sys.stderr.write
...

debug("ほげ~")

451:デフォルトの名無しさん
08/12/06 11:38:27
>>449
そうそう。対象ファイル内ではpass/return/break/continueを強要するの。だめ?

452:デフォルトの名無しさん
08/12/06 14:37:18

@hoge

ってどういう意味なの

@の使い方がわからない

453:デフォルトの名無しさん
08/12/06 14:43:17
きっと"python デコレーター"とかで検索す

454:デフォルトの名無しさん
08/12/06 15:12:22
>>451
素直に、インデントによるブロックを折畳表示してくれるエディタの支援を使おう。

455:デフォルトの名無しさん
08/12/06 15:45:10

wwwww                                 wwwww            
 wwwww                               wwwww            
  wwwww               ww            wwwww                   
   wwwww             www           wwwww            
    wwwww           wwwww         wwwww                       
     wwwww         wwwwwww       wwwww                        
      wwwww       wwwwwwww      wwwww 
       wwwww     wwww  wwww    wwwww                      
         wwwww  wwww    wwww  wwwww
          wwwwwwww       wwwwwwww
           wwwwww         wwwwww
            wwww           wwww
             ww             ww


456:デフォルトの名無しさん
08/12/06 18:07:31
a=[1,2,3,4,5]
b=[5,4,3,2,1]
for c,d in a,b:
 print c,d

これできないのって仕様?

457:デフォルトの名無しさん
08/12/06 18:21:29
ZIPを要求する!

for c,d in zip(a,b):
 print c,d

458:デフォルトの名無しさん
08/12/06 18:22:46
>>457
存在忘れてたw
ありがとう。

459:デフォルトの名無しさん
08/12/06 18:43:16
BeautifulSoup/2to3 挑戦してみた。

1. 2to3 BeautifulSoup.py | patch BeautifulSoup.py
2. 3k に sgmllib がない。2.6から持ってくる。
3. sgmllib内 warnings.warnpy3k 辺りはいらないので削除。
4. 2to3 sgmllib.py | patch sgmllib.py
5. 3.0 で import BeautifulSoup が通る。
6. re.match, re.search 等に bytes オブジェクトが渡っている所を str() で wrap
数箇所修正。(実行してエラーが出た箇所を潰していく)
7. BeautifulSoup(text).prettify() がエラーなしに動く。
8. 文字列が全て <b'font' b'size'="b'-1'"> の様になっているのに気付く。
str(b"foo") が "b'foo'" という文字列を返す為。.decode()で文字列に変換する必要がある。
9. PageElement.toEncoding, NavigableString.__str__ が bytes を返すのを .decode(encoding) で str に。
※ 他にも bytes を返すメソッドがあるかも知れない。
※ 2.x 互換の方法が解らなかった為、ここは 3.0 のコードを変更した。
10. ここまでで .prettify() 通った。diff取るの忘れたけど手作業で変更したのは5,6箇所程。
※ 2.x では decode/encode して端末へ表示してたのが、3.0では不要になった。
.prettify()の返す文字の文字コードが異なる?修正が影響したのかどうかは追ってない。



460:デフォルトの名無しさん
08/12/06 19:46:13
ぱいおつ

461: 
08/12/07 12:23:34
>>439
あざす

462:デフォルトの名無しさん
08/12/07 14:27:35
バランスの取れた括弧にマッチさせるときに
以下の正規表現だとre.compile()時にnothing to repeat.と怒られてしまいます。
何が不味いのでしょうか。
'(?P<REP>'
 '\('
  '([^()]+|(?P=REP))*'
 '\)'
')'
(?P<>)の入れ子自体は問題ないようなのですが・・・


463:デフォルトの名無しさん
08/12/07 14:39:22
ちなみにテストコードです。
import re
r = re.compile('(?P<REP>\(([^()]+|(?P=REP))*\))')
s = 'abc((de(f))gh((ijk)lmn))opq'
print r.search(s).group()

464:デフォルトの名無しさん
08/12/07 16:33:06
emacsのoutlineマイナーモードでpythonのコードも折りたたみたい

465:デフォルトの名無しさん
08/12/07 19:18:49
HTML/XMLの操作にはBeautifulSoupとlxmlのどちらが主流派なんですか?
BeautifulSoupはpure pythonという以外に何かメリットデメリットあったら教えて下さい。
HTML/XMLの操作ってあんまりやったことないので常道ってのも分からないので判断しかねて・・・


466:デフォルトの名無しさん
08/12/07 20:19:23
>>462
そういう「再帰的な定義」を許していないんじゃないか?
そういう記述ができるものがあるのは知っているけど、
エラーメッセージから想像力を働かせるとPythonでは許していないような気がする。


467:デフォルトの名無しさん
08/12/07 20:20:00
>>462 (?P<>)の入れ子自体は問題ないようなのですが・・・

問題あるだろう。こうだろう
r = re.compile('(?P<REP>(\([^()]+|(?P=REP))*\))')


468:デフォルトの名無しさん
08/12/07 21:04:33
>>466
やっぱりそうなんですかね。
(?P<>)の入れ子はcompileは通るのですがどうも効いていないっぽいです。

>>467
ありがとうございます。
でもバランスしません(>_<)


469:デフォルトの名無しさん
08/12/07 21:16:56
(?P=name)って要するに名前付きのバックリファレンスだろ?
入れ子の記述を仮に許しても、方針として全然ダメじゃねえの?

要は「マッチしたもの」にマッチするんだから
一般的な入れ子のカッコを処理できるわけないじゃん

470:デフォルトの名無しさん
08/12/07 22:02:13
pythonで 誌
という文字をunquoteっしたいんですけども
どうすればいいですか?

471:デフォルトの名無しさん
08/12/07 22:10:22
>>469
期待通りに動く処理系もあるんですよ・・・

472:デフォルトの名無しさん
08/12/07 22:33:20
なら具体的なバージョンとかの情報出すべきかと・・・

473:デフォルトの名無しさん
08/12/07 22:45:55
文字参照を元の文字に戻すにはどうすればいいでしょうか

474:デフォルトの名無しさん
08/12/07 22:48:25
ver.1.9のことです(>_<)

475:デフォルトの名無しさん
08/12/08 02:13:53
正規表現万能論者はお断りします

476:デフォルトの名無しさん
08/12/08 02:15:45
本来的な正規表現ではないよな
バックリファレンスですら

そういう意味ではPythonのは既に足は踏み外してるけど
再帰を許すほどではないな

477:デフォルトの名無しさん
08/12/08 08:46:23
俺の質問に答えろや

478:デフォルトの名無しさん
08/12/08 11:40:41
>>471
リファレンスみたいな豪快な拡張にポータビリティを期待するほうがダメかと。
Pythonの正規表現の仕様から、これが処理できないのはおかしいとはっきり
導出できるなら、そのようにバグとして報告すればいい話。

>>470 >>473
import urllib
urllib.unquote

479:デフォルトの名無しさん
08/12/08 12:52:22
質問
cgiをpythonで作っています。

#!/usr/local/bin/python

import cgitb,time

print "Content-Type: text/html\n\n";

t = time.strftime('%H:%M:%S')

print '<p>time is'+ t +'</p>'

この状態なら動くのですが、print関数の文字列に日本語が含まれているとcgiが動かなくなります。
これは何故でしょうか・・・?
ちなみに保存文字コードはshift-jisです。

480:デフォルトの名無しさん
08/12/08 13:05:16
>>479
文字コードをUTF-8(BOM無)で保存すればいい

481:デフォルトの名無しさん
08/12/08 13:26:31
>>479
URLリンク(www.python.jp)

482:479
08/12/08 13:29:38
UTF-8で保存すると今度は全くcgiが動作しなくなります・・・OTL

483:デフォルトの名無しさん
08/12/08 13:31:30
windowsXPでpython 3.0なんですが
>>>douon("変態")
["変態", "編隊", "変体", "へんたい", "ヘンタイ", "hentai"]
みたいな関数を標準モジュールだけで書いていただけませんでしょうか


484:デフォルトの名無しさん
08/12/08 13:32:58
>>482
ん?sjisでも「全く動作しない」はずだが……

CGIなんだから、直接pythonインタプリタで実行してみろよ
たとえコメントの中だろうが、エンコーディングを指定せずに
非ASCII文字が書かれている時点で
Pythonインタプリタにはねられるから


485:デフォルトの名無しさん
08/12/08 13:36:39
>>483 無理。ていうか辞書次第。

486:デフォルトの名無しさん
08/12/08 13:37:17
>>483
migemoあたりの辞書を使うといいんじゃねえか
migemoで普通やるのの逆変換になるが

487:479
08/12/08 13:39:18
>>481
参考URL有難うございます。


# -*- coding: utf-8 -*-

import time
print "Content-Type: text/html\n\n";

t = time.strftime('%H:%M:%S')

print u'<p>時間は'+ t +'</p>'


のようにエンコードを指定してもインタプリタでは動くのですが、cgiファイルとしてサーバーにアップ後は動かなくなります。
パーミッション等は合ってます。

488:デフォルトの名無しさん
08/12/08 13:42:27
>>487
unicode文字列をprintに渡してるんなら、また別の問題がある。
printはunicodeを受け取ると、sys.stdout.encodingに従ってそれを
変換しようと試みるが、sys.stdout.encodingは環境次第だ。
多分asciiか何かになってんだろう
もともとpythonのstdin/stdoutのencodingはリダイレクトに弱い。

自分でエンコーディングを指定してバイト列に変換してからprintに渡せ。

489:デフォルトの名無しさん
08/12/08 13:44:22
>>485
>>486
ありがとうございます
やっぱいきなりでは無理ですよね

490:489
08/12/08 13:45:48
googleの人達も地道に辞書登録しているんでしょうか


491:488
08/12/08 13:46:17
いちいち手で変換するのがうぜーならこうするといいぞ
sys.stdout = codecs.getwriter('utf-8')(sys.stdout)

492:デフォルトの名無しさん
08/12/08 13:50:27
CGIは板違いっすよ皆さん
Python CGI
スレリンク(php板)

493:479
08/12/08 14:12:15
>>488
ありがとうございます。
pythonライブラリのsite.setencodingの中のencoding = "ascii"という部分を"utf-8"に書き換えてみました。
が、まだ動きません・・・

>>492
すみません、検索不足でした。
気をつけます。

494:479
08/12/08 14:19:34
>>488
連レスすみません。
printにバイト列としてエンコーディングを指定してから渡す、という方法で上手く表示することが出来ました。

お付き合い頂いてありがとうございました。とても助かりました。

495:デフォルトの名無しさん
08/12/08 14:39:15
>>462
括弧の対応が取れたパターン(言語)というのは、
文脈自由文法(二型文法)に属します。
正規表現の扱えるのは正則文法(三型文法)なので、
それより範囲が少し狭いです。
# 範囲を越える文法を扱えるマッチャーが多いですが。

チョムスキーの定義で考えると、
どんな入れ子でも受理可能にするには、
無限の規則が必要になることがわかると思います。
(正規表現の再帰的な定義がちゃんと出来ることとほぼ同義)
URLリンク(ja.wikipedia.org)形式文法

496:デフォルトの名無しさん
08/12/08 14:42:32
>>490
依頼を受けたデータ入力会社の雇われたキーパンチャーがね

497:デフォルトの名無しさん
08/12/08 19:10:22
Time flies like an arrow.

498:デフォルトの名無しさん
08/12/08 20:22:40
>>459
参考になった、ありがとう
思ったより手間すくないのね

499:デフォルトの名無しさん
08/12/08 20:49:32
>>462
オライリーの詳説 正規表現にはPerlでバランス取れた括弧のキャプチャの例が載っていましたよ
URLリンク(www.oreilly.co.jp)
>5.2.4 括弧類の対へのマッチ
今手元に本が無いからうろ覚えですけど、Perlの独自拡張で無限の?入れ子まで対応しているとか
>>471の期待通り動く処理系ってPerlのそこそこ新しい奴じゃないですか?
他の正規表現処理系でのやり方も書いてあったような気がするので
もし詳説 正規表現が立ち読みできたり図書館で借りられる環境ならぜひ読んでみて
>>495さんの言う通り正規表現で無限の入れ子なんて普通は受理できないのですが
Perlの正規表現処理系は拡張が物凄いので正規文法の限界を思いっきり超えてます
このオライリーの本はこんな形式文法の話や正規表現処理系のNFAとDFAの違いなど
細かいけど(好きな人には)面白い話が載ってます


500:デフォルトの名無しさん
08/12/08 21:10:55
たてよみ

501:デフォルトの名無しさん
08/12/08 21:42:03
最後の方に言語毎の正規表現の比較が掲載されてて、それのおかげで助かった事が2回あった

ところで”オライリーの本”ってどう略すの

502:デフォルトの名無しさん
08/12/08 21:55:49
>>501
表紙の動物じゃないか?
ラクダ本とか、バッタ本とかあるけど
となると正規表現はフクロウ本?

503:デフォルトの名無しさん
08/12/08 22:40:16
Twistedは蛇玉本

504:デフォルトの名無しさん
08/12/09 10:14:32
pythonのIDEにgeanyってのがあるのを知って使い始めました。
スニペッツを使ってみようかと思ったら、標準だと何も登録されていないようですね。
geanyをお使いの方は、スニペッツはどうしていますか? 手書きでしょうか。
どこかのサイトにあればいいのですが・・・

505:デフォルトの名無しさん
08/12/09 10:26:15
pyjames使ってる人います?

506:デフォルトの名無しさん
08/12/09 10:51:05
返答まだですか?

507:デフォルトの名無しさん
08/12/09 12:31:16
tupleのi番目の要素だけを更新するには
tupleを作りなおすしかないのでしょうか?

v=(1,2,3)
vv=(v[0],v[1]+2,v[2])


508:デフォルトの名無しさん
08/12/09 12:34:57
はい

509:デフォルトの名無しさん
08/12/09 12:42:44
効率を気にしないなら一回listにするかな。

vl=list(v)
vl[i]+=2
vv=tuple(vl)

でも更新したくなったならlistのままの方が良いんじゃないかという気はする。

510:デフォルトの名無しさん
08/12/09 14:33:52
>>504
まだ不安定だよgeany

511:デフォルトの名無しさん
08/12/09 22:52:44
>正規表現
みなさん、レスありがとうございました。
かなり勉強になりました^-^

正規表現で実現できるならプログラムの一貫性がとれてよかったのですが、
そもそも括弧を同じ数だけカウントするなんてたいしたことない処理なので
今回は正規表現を使わず対応したいと思います。


512:デフォルトの名無しさん
08/12/09 22:52:55
Python 2.6.1あげ
URLリンク(www.python.org)
バグフィックスなので2.6つかっている人はどうぞ~

513:デフォルトの名無しさん
08/12/09 23:25:33
>>510
そうですか。いいところかなと思っていたのですがね。
MacでPythonをサポートしたIDEは何がいいか悩みます。


514:デフォルトの名無しさん
08/12/11 00:30:34
2.6.1インストールしたんだけど、_socketのimportエラーでるんだけど、
なんなのこれ

515:デフォルトの名無しさん
08/12/11 08:26:38
うちは、Windows + PyScripter 1.9.9.2 + Python 2.6.1だとエラーが出る。
PyScripter --python26だとimport socketでエラーが出る。
PyScripter --python25だとエラーは出ない。

また、コマンドラインからpythonを起動したときはエラーは出ない。
Python 2.5.2, 2.6.1, 3.0で確認

516:デフォルトの名無しさん
08/12/11 09:10:31
IDLEの補完がなんか気に入らない
IDLEの代わりってなんかある?

517:デフォルトの名無しさん
08/12/11 09:15:09
>>516
例えば、どういうところが気に入らないのか教えてもらってもいい?

518:デフォルトの名無しさん
08/12/11 09:53:30
op

おっぱい


519:デフォルトの名無しさん
08/12/11 10:13:22
vista で wx アプリのデバッグで強制終了が多発するようになってから、久しく使ってなかったけど。
久しぶりに起動しようとすると、起動すらしなくなっていた。

Windows vista + PyScripter 1.9.9.2 + Python 2.6.1 (環境には 2.5.2, 3.0もインストール済)
+ RPyC 2.60 (pyscripter googlecode の downloadより)
--python25 だとエラーが出て一応起動するけど、何かするたびにエラー。終了も出来ない状態。

official の 1.7.2 に戻してみても上の現象が発生。





520:デフォルトの名無しさん
08/12/11 11:06:46
>>515
pythonを組込で使うとエラーがでるみたいだな。

521:デフォルトの名無しさん
08/12/11 11:15:53
バグらしいな。
URLリンク(bugs.python.org)

522:デフォルトの名無しさん
08/12/11 14:07:09
前スレのこれは?
>154 :デフォルトの名無しさん:2008/10/15(水) 22:41:10
> >>144
> 以下の内容を「Pyscripter.exe.manifest」としてPyscripter.exeのフォルダに置いておけばimportできるかも
>
> <assembly xmlns="urn:schemas-microsoft-com:asm.v1" manifestVersion="1.0">
> <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
> <security>
> <requestedPrivileges>
> <requestedExecutionLevel level="asInvoker" uiAccess="false"></requestedExecutionLevel>
> </requestedPrivileges>
> </security>
> </trustInfo>
> <dependency>
> <dependentAssembly>
> <assemblyIdentity type="win32" name="Microsoft.VC90.CRT" version="9.0.21022.8" processorArchitecture="x86" publicKeyToken="1fc8b3b9a1e18e3b"></>assemblyIdentity>
> </dependentAssembly>
> </dependency>
> </assembly>

523:デフォルトの名無しさん
08/12/11 15:54:48
Vs2008使ってるのか。
もうコンパイラのバージョンどんどん上げるのやめてくれよ。

524:デフォルトの名無しさん
08/12/11 20:40:00
PythonはVS2003の次はVS2005を使うかも、と思ってVS2005 Standard買ったら、
VS2008使うようになってた。ちょっとショックだ。
……たぶんMinGWでもコンパイルできるのだろうけどさ。

525:デフォルトの名無しさん
08/12/11 20:45:31
>>524
それはご愁傷様だが、べつにただで落とせる2008のexpressで問題はない
VC8以降のmsvcrtはSxSに格納されてmanifestを使うから、mingwは微妙かもなあ
試してみないとわからんが

526:デフォルトの名無しさん
08/12/11 23:24:31
スクリプトの文字コード(# -*- coding: xxx -*- の xxx)を
スクリプト実行時に取得するには、どうすればよいでしょうか。

527:デフォルトの名無しさん
08/12/11 23:39:33
ファイルをオープンして1-2行目を調べればいい
coding[:=]\s*([-\w.]+)

528:デフォルトの名無しさん
08/12/12 00:44:44
正規表現おじさん来た!!

529:デフォルトの名無しさん
08/12/12 00:46:52
正規表現って気持ち悪いよね

530:デフォルトの名無しさん
08/12/12 00:50:23
>>528-529
さてはおまいらPEP読んだことないな。

531:デフォルトの名無しさん
08/12/12 01:12:35
あるよ。
正規表現はキモイから使うなって書いてあったよ。

532:デフォルトの名無しさん
08/12/12 01:14:49
ないよ。
ワンダーはモモーイから聞けって書いてあったよ。

533:デフォルトの名無しさん
08/12/12 01:26:48
正規表現使うやつは童貞

534:デフォルトの名無しさん
08/12/12 01:40:35
なんで分かった?

535:デフォルトの名無しさん
08/12/12 01:41:52
正規表現使わん場合はif文でがんばるの?

536:デフォルトの名無しさん
08/12/12 01:45:42
for if最強伝説

537:デフォルトの名無しさん
08/12/12 09:21:16
>>535
正規表現の次はifかよ(w
おっさんはこれだから困るよなー。

538:デフォルトの名無しさん
08/12/12 10:00:01
とりあえずおっさんって言いたいだけじゃ・・・
上司にいじめられたか?

539:デフォルトの名無しさん
08/12/12 11:21:42
>>535
> if文でがんばる

比較の度に文字列のスライスを生成する効率の悪いコードしか思い浮かばないけど...。

正規表現等の組込のドメイン固有言語は、利点・問題点があるので利用は適材適所。
使い所と用法を誤らなければ、便利なツールとして活用できるよ。

例えば、>>526なら、>>527の通り ワンライナーの正規表現で十分事足りる。
PEP 0263 より
> More precisely, the first or second line must match the regular
> expression "coding[:=]\s*([-\w.]+)".

re.VERBOSEオプション付きでコメント付けたり、
(?P<encoding>[-\w.]+) の様に名前を付けると、可読性の面でより親切。

>>511の用途なら、
字句解析とステートマシンを使い、扱いやすいデータ形式に変換してから処理する。
簡単なサンプル: S式のリスト表示。URLリンク(paste.org)
# 文字列内の()や引用符のエスケープシーケンス等も考慮したい場合は、
shlex, tokenize等のモジュールも見てみるといい。

540:デフォルトの名無しさん
08/12/12 12:50:08
>>521
URLリンク(bugs.python.org)
#include <Python.h>

int main(int argc, char **argv)
{
Py_Main(argc, argv);
}

これだけでembedできるんだ
知らなかった
というかargc arcvには何いれたらいいんだ


541:デフォルトの名無しさん
08/12/12 12:52:15
pythonでscript書くと
Makefile
いらないんじゃないかと思うこともあるけど
やっぱりmakeは使ってしまう

542:デフォルトの名無しさん
08/12/12 13:39:18
scons(笑)

543:デフォルトの名無しさん
08/12/12 14:11:35
DEP関係はHeapAlloc→VirtualAllocなんだって


544:デフォルトの名無しさん
08/12/12 17:09:18
sconsだめなの?

545:デフォルトの名無しさん
08/12/12 19:20:09
1234567890 を
urlsafe_b64encode
(ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_)
で表記すると
BJlgLS
であってますか?

546:デフォルトの名無しさん
08/12/12 19:26:25
base64.urlsafe_b64encode('1234567890')
MTIzNDU2Nzg5MA==

547:デフォルトの名無しさん
08/12/12 19:31:53
'%08x' % 1234567890
499602d2
0100 1001 1001 0110 0000 0010 1101 0010 (499602d2)
01 001001 100101 100000 001011 010010 (BJlgLS)
後ろから詰めるとそうなるけど
base64って先頭から6bitづつ区切るだろ
010010 011001 011000 000010 110100 10
じゃないのかな

っつーかそもそも1234567890を何bitでとるのかによって変わるんじゃね?


548:デフォルトの名無しさん
08/12/12 19:35:17
base64じゃなくて64進数なら
print format(1234567890, 64)


549:デフォルトの名無しさん
08/12/14 03:08:26
>>548
Python2.6のbuiltinsのformat?
数値のspecは文字列で指定するみたいだけど。PEP3101
組み込み関数では、int(str,base)でもn進数変換できるけど、
_PyInt_Formatは2..36進数までしかサポートしてない。



550:デフォルトの名無しさん
08/12/14 03:42:03
>>540
戻り値が渡ってないので。return Py_Main(argc, argv);
引数は python -h 参照。

551:デフォルトの名無しさん
08/12/14 03:52:24
>組み込み関数では、int(str,base)でもn進数変換できるけど
逆じゃない?

552:550
08/12/14 07:03:50
2..36進数表記の文字列 -> 数値でした。指摘thx
int(str,base) は C/APIでは PyInt_FromStringだった、これもbaseの範囲は2..36

n進数変換。CAPIには PyNumber_ToBase があったけど、
pythonから使えるのはbase=2,8,16 (bin,oct,hex) のみ。

from ctypes import py_int, py_object, pythonapi
num_to_base = pythonapi.PyNumber_ToBase
num_to_base.argtypes = [py_object, c_int]
num_to_base.restype = py_object
print(num_to_base(7, 10)) # "7#13"
print(num_to_base(128,64)) # "64#20"

値によっては変換後の文字を端末に表示する際にUnicodeEncodeErrorになることも。(python 3.0)



553:デフォルトの名無しさん
08/12/16 06:25:41
b64c = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_'
base = len(b64c)
digs = 11 #(nにあわせて変えてね)
''.join([b64c[int(n / base ** (digs - 1 - x)) % base] for x in xrange(digs)])


554:デフォルトの名無しさん
08/12/17 02:09:54
python 2.5.3c1 and 2.4.4c1 release

555:デフォルトの名無しさん
08/12/17 04:04:20
2.4.6では?

556:デフォルトの名無しさん
08/12/17 06:40:25
URLリンク(coreblog.org)

3.0は変数名に漢字が使えるんですね。

557:デフォルトの名無しさん
08/12/17 13:06:52
omoshiroi

>>> class 動物:
>>>   鳴き声 = '・・・'
>>>   def 鳴く(自分):
>>>     print('%s:%s' % (自分.__class__.__name__, 自分.鳴き声))
>>>
>>> class 猫(動物):
>>>   鳴き声 = 'にゃー'
>>>
>>> class 熊(動物):
>>>   鳴き声 = 'クマー'
>>>
>>> 君のペット = 猫()
>>> 君のペット.鳴く()
猫:にゃー
>>> 僕のペット = 熊()
>>> 僕のペット.鳴く()
熊:クマー


558:デフォルトの名無しさん
08/12/17 13:44:08
>>557
おもしれぇww

559:デフォルトの名無しさん
08/12/17 15:06:33
> Python 3.0になってもPEP 8は生きているので,クラス名に「動物」はありえないです(笑)。

ということなので真に受けんように

560:デフォルトの名無しさん
08/12/17 16:09:11
>>559
自分用に分かり易いコード書く程度だったら問題はない。

561:デフォルトの名無しさん
08/12/17 16:51:36
ニートかどうか判別できるわけですね、わかります。

562:デフォルトの名無しさん
08/12/17 17:20:02
560がニートだ,みたいな言い方はやめろよ!!

563:デフォルトの名無しさん
08/12/17 17:22:12
つまらないな。君達、もうちょっと大人になれ。

564:デフォルトの名無しさん
08/12/17 18:36:52
Is your tail white, too?


565:デフォルトの名無しさん
08/12/17 21:23:23
Your tail isn't white too, is it?

566:デフォルトの名無しさん
08/12/18 00:36:37
listの中を進んだり戻ったりしたいのですが、
インデックスで走査すると遅くて使い物になりませんでした。

そこでイテレータの使用を検討したのですが
進むことはできても戻ることができません。

Cのポインタ走査のように何か高速に走査する方法はないでしょうか。



567:デフォルトの名無しさん
08/12/18 00:42:06
Pythonのlistはlinked listではなくvectorだから
インデクスアクセスはランダムアクセスで、オーダー的にはO(1)だ

それが遅すぎるというのであれば、Pythonでやるのが間違いであるような
仕事をさせてるんだろう
素直にC/C++使っとけ

568:デフォルトの名無しさん
08/12/18 00:42:56
C最強!

569:デフォルトの名無しさん
08/12/18 00:52:38
>>567
そだったんですか・・・
てっきりリンクリストとばっかり思ってました。

ありがとうございました!

570:デフォルトの名無しさん
08/12/18 01:38:59
使いものになんねえw

571:デフォルトの名無しさん
08/12/18 01:40:54
そのための拡張モジュールさ

572:デフォルトの名無しさん
08/12/18 02:21:13
Python Code Reading行ったけど
丁寧に説明してくれたな。次も行きたいと思う

573:デフォルトの名無しさん
08/12/18 02:21:29
スクリプト書くときどんなエディタ使ってます?
emacsで書いてるんですけど、visual studioのインテリセンスのようななのがほしいです。
eclipseのPydevってのしかないのかなー、できるならemacsでがんばりたいんだけど。

574:デフォルトの名無しさん
08/12/18 05:42:52
NetBeans 6.5のPythonプラグインというのもあるが、まだまだだな。

575:デフォルトの名無しさん
08/12/18 08:28:32
leopardでもおすすめのエディタを教えてください。

576:デフォルトの名無しさん
08/12/18 13:04:40
>>573
pysmell

577:デフォルトの名無しさん
08/12/18 13:09:28
>>576
emacsだとpycompleteぐらいしか選択肢がないと思ってたのだが,
今はpysmellというのがあるんだ.横槍だが参考になった.

578:デフォルトの名無しさん
08/12/18 14:41:38
emacs code browserもpythonに対応してるぞ

579:デフォルトの名無しさん
08/12/18 14:44:30
>>576
便利そうだね
URLリンク(www.emacswiki.org)


580:デフォルトの名無しさん
08/12/18 15:01:56
>>573
今書いてるからもうちょっとしたら公開するよ。

581:デフォルトの名無しさん
08/12/18 15:20:05
Pythonは動的に属性が追加/削除されるから、インテリセンスみたいなのとは
相性がイマイチだね。

582:デフォルトの名無しさん
08/12/18 15:23:27
>>581 わかってないなー。未熟だね。

583:デフォルトの名無しさん
08/12/18 15:25:11
まあ例えば
def foo(x):
  x.
までタイプしたところで補完するのは無理だわな
少なくともスコープ内で型が確定してるようなケースでないと

584:デフォルトの名無しさん
08/12/18 15:42:34
Function Annotationsを利用する事はできそうだよね

585:デフォルトの名無しさん
08/12/18 19:32:38
Function Annotations の具体的な用途は 3rd party製ライブラリに委ねられていて、
型情報に限らずどんな式でも書けるようになってる。

変数の型を保障する仕組みではなく、ライブラリ等でチェックする際のヒントとして使えるだけ。
エディタ/IDEが皆に「function annotations には型を書く」と強制は出来ないので、
補完への利用は出来ないことはないけど、難しいんじゃないかな。


586:デフォルトの名無しさん
08/12/18 20:14:25
最近学習を開始した初心者です。
最初はコマンドプロンプトで命令を表示させているだけですが、
pythonで作ったプログラムはこういったCUIの中で行われるものですか?
***.exeで立ち上げるようなプログラムを作るのは無理ですか?
Cやっとけってことでしょうか?

587:デフォルトの名無しさん
08/12/18 20:15:57
URLリンク(python.matrix.jp)

588:デフォルトの名無しさん
08/12/18 20:24:55
windowsなら拡張子を.pywにすれば.exeっぽく実行できるよ
GUIがやりたいってことなら該当するライブラリをあさってみるといいよ
TkinterとかwxWidgetsとか

589:デフォルトの名無しさん
08/12/18 22:16:00
wxPython+py2exe


590:デフォルトの名無しさん
08/12/18 23:06:32
>>586
コマンドラインからでもウィンドウを表示できることは理解されているでしょうか?

$ python
Type "help", "copyright", "credits" or "license" for more information.
>>> import wx
>>> class MyApp(wx.App):
... def OnInit(self):
... frame = wx.Frame(None, 0, "Title")
... frame.Show(True)
... self.SetTopWindow(frame)
... return True
...
>>> app = MyApp(0)
>>> app.MainLoop() # ←ここで中身が何もないウィンドウが出る。
>>>


591:デフォルトの名無しさん
08/12/18 23:14:03
横からだけど、MainLoop内ではどういうことしてるの?
ループに入るって事は中でずーっと処理が繰り返されてるんだよね。
なのに放置してたらCPU使用率は0付近をさまよう。これって不思議。
自分でforループとかwhileループ走らせれば面白いほどCPU使用率は上がるのに。

592:デフォルトの名無しさん
08/12/18 23:25:39
GUIが動いてるだけでCPU使用率が跳ね上がったら
まともにパソコン使えないだろ!

593:デフォルトの名無しさん
08/12/18 23:26:43
>>591
普通はこんな感じ

while True:
  次のイベントを取得する(イベントが来るまでブロック)
  イベントを処理する

ビジーループではないからCPU使用率は跳ね上がらない
イベントが来なければずっと寝ているだけだ

594:デフォルトの名無しさん
08/12/18 23:31:45
>>590のようにPythonの対話環境を生かして
対話的にGUIを試したい場合、使用するツールキットによっては細工がいる

>>590の例だと、最後のMainLoop()を呼ぶまで窓は表示されず、
呼んでしまうと今度はそこでブロックしてしまい、対話環境が使えなくなるはずだ
それではせっかく対話環境からGUIを試す面白みも無いだろう

Tkの場合は、環境によるが、mainloop()関数をよばずとも
root = Tkinter.Tk()
だけでいきなり窓が出て、対話環境で引き続き色々コマンドを打ち込むことが
可能なようだ
試したところWindowsとLinuxでは大丈夫なようだが、cygwinではmainloopが
必要で、このような使い方はできないようだ

595:デフォルトの名無しさん
08/12/18 23:37:42
>>593
なるほど…。となるとイベント取得ってのは、OSから呼び出す形で実現してるのか。

596:デフォルトの名無しさん
08/12/18 23:42:53
>>595
ん?いや、送ってくるのはOSなりウィンドウシステムなりだが、
あくまでアプリが能動的に読み取る

pythonでraw_input()関数を呼ぶと入力待ちになって
キーボードから何か打ち込んでやると制御が戻って入力が得られるだろう
それと基本的には同じだ

597:デフォルトの名無しさん
08/12/18 23:55:31
>>596
アプリ「何かキーが押されるまで待つか」
アプリ「zzZ」
OS「おい起きろ。お前宛に”A”キーが押されたぞ」
アプリ「ああ、おk。これで次の処理に進めるね」

ってイメージだけど、あってる?

598:デフォルトの名無しさん
08/12/18 23:59:16
>>597
うん、そんな感じであってる

599:デフォルトの名無しさん
08/12/18 23:59:53
event「Zzz」
loop「何かイベントあった?」
os「Aキー押されてるよ」
loop「おいevent起きろ」
event「イベント実行、っと」

600:デフォルトの名無しさん
08/12/19 00:00:20
ウィンドウシステムだと起きなくてもガンガンポストに突っ込んでくよ

601:デフォルトの名無しさん
08/12/19 00:03:53
>>599
> loop「何かイベントあった?」

こういうポーリングはないと思ってくださって結構です。

602:デフォルトの名無しさん
08/12/19 00:06:29
寝てる奴を起こしてはくれるんだが
次の仕事を待ちかまえてない時(別の仕事をしてる時)に
別の作業が舞い込んでくることは普通にあるから、
とりあえず仕事依頼はイベントキューという名前のポストに溜め込まれる

でもまあ最初の理解としては>>597でいいと思う

603:デフォルトの名無しさん
08/12/19 00:06:41
いやはや、スレチ臭い話題なのにみんな答えてくれてサンクス。
こりゃ低レベルなGUIに関する知識が必要さね。
「プログラムはなぜ動くのか」って書籍は読んだけど次は「Windowsはなぜ動くのか」辺りを読もうかね。

604:デフォルトの名無しさん
08/12/19 00:12:24
>>594
もうちょっと真面目に書けば、
ウィンドウを終了した時に、
app.MainLoop()から返ってくるので、
そこでまた対話環境を利用することも可能です。

605:デフォルトの名無しさん
08/12/19 00:15:36
>>604
うん、まあそうなんだけど、普通は窓を作って対話的に
ボタンをつけたり線を引いたり窓を動かしてみたりしたいわけでしょう
対話環境なんだから

ウィンドウシステムでは、窓を表示してUIを操作するには、結局誰かが
>>593のような仕事をしてやる必要がある
Tkinterの場合は、WindowsやLinuxでは自動的にバックグラウンドスレッドを
作って、そういうイベントループを回してくれるわけだ
そうでなければ、そのようなヘルパー的機構を陽で造りこむ必要があるな

606:デフォルトの名無しさん
08/12/19 00:31:35
Tkは、データ構造をユーザ定義出来ない
動的言語のTCL上で最初に実装された。
だからその言語の影響を受けて、組み込みのTkオブジェクトを、
コマンドで操作していく動的なAPIになった。
だからどの言語上でも対話的なGUIコンポーネント作成が得意だね。


607:デフォルトの名無しさん
08/12/19 00:36:21
うん
古臭いと言われがちだが、対話環境で遊ぶ&学習用には今なお優れた環境だと思う
IronPython出たとき対話的・動的にGUIを作成していくデモが話題になってたけど
あれぐらいはTkなら昔から出来たことだ

608:デフォルトの名無しさん
08/12/19 00:51:25
Pythonは包容力があるんだよな。
会社でPython使い(私事だけ)が増えているんだよな。
言語コミュニティも穏やかでそれがいいんだろうけど。

609:デフォルトの名無しさん
08/12/19 01:17:26
対話環境で関数書いてると、途中でタイプミスして怒られたり、
関数作った後、関数内に文を付け足したり編集したくなったときに、
また初めから関数を定義しなくちゃいけないから面倒なんだけど、
それに対する上手い方法ってある?

610:デフォルトの名無しさん
08/12/19 01:38:04
>>609
ipython の ed コマンド

611:デフォルトの名無しさん
08/12/19 01:43:40
Python使ってる奴ってキモメンが多いな。
今日の忘年会に出て切実に感じた。

612:デフォルトの名無しさん
08/12/19 01:49:05
知らんがな

613:デフォルトの名無しさん
08/12/19 01:52:17
>>609
俺はEmacs使いだから、
Common Lisp用のSLIMEみたいなマイナーモードが欲しいなあ。
URLリンク(common-lisp.net)

614:デフォルトの名無しさん
08/12/19 02:39:38
ぼくは初心者ですが「こんな感じ」と書く人のコードは信用しません


615:デフォルトの名無しさん
08/12/19 03:31:06
>Python使ってる奴ってキモメンが多いな。
今日の忘年会に出た面子だけだろ


616:デフォルトの名無しさん
08/12/19 03:43:19
Python使ってる奴ってイケメンが多いな。
今日の忘年会に出て切実に感じた。

617:デフォルトの名無しさん
08/12/19 03:51:06
Python使っている人のスレって大体こんな感じ。

618:デフォルトの名無しさん
08/12/19 09:52:45
>>611
一人忘年会を開いたんですね

619:デフォルトの名無しさん
08/12/19 10:19:58
Python使っている人のスレって大体>>618こんな感じ。

620:デフォルトの名無しさん
08/12/19 10:21:17
618はキモ面

621:デフォルトの名無しさん
08/12/19 10:40:50
他人の顔なんか、どうでもよくない?

622:デフォルトの名無しさん
08/12/19 10:50:22
顔なんかどうでもいい
くぎゅが好きなんだ!!!

623:デフォルトの名無しさん
08/12/19 10:56:25
622 :デフォルトの名無しさん [↓] :2008/12/19(金) 10:50:22
顔なんかどうでもいい
くぎゅが好きなんだ!!!

624:デフォルトの名無しさん
08/12/19 11:55:30
ブサでオタの集会だったのか。

625:デフォルトの名無しさん
08/12/19 13:06:09
しね

626:デフォルトの名無しさん
08/12/19 13:52:47
釘宮理恵だっけ?
なんか顔を想像すると必ず柴田理恵が出てくるわ

627:デフォルトの名無しさん
08/12/19 14:22:45
twitterから
顔かよ。くだらん。

628:デフォルトの名無しさん
08/12/19 15:38:18
またruby厨が荒らし始めたか

629:デフォルトの名無しさん
08/12/19 16:27:46
URLリンク(ja.uncyclopedia.info)
釘宮 理恵(くぎのみや りえ、1979年5月30日 - )は日本を代表するツンデレ声優。また、声優界で唯一の皇族でもある。

630:デフォルトの名無しさん
08/12/19 19:53:39
アンサイを張られても

631:デフォルトの名無しさん
08/12/19 20:08:26
ユークリッドの互除法のコードを書いたのですが、大きい (約500桁) 整数を入力すると
ものすごく長いエラーメッセージの末尾に maximum recursion depth exceeded in cmp
と出ました。

これはおそらくスタックオーバーフローのようなものだと思うのですが、python の設定か何かでもっと深い階層まで使えるようにすることはできますか?
できなければプログラムの方を変更して再帰しないようにしますが。

632:デフォルトの名無しさん
08/12/19 20:12:25
プログラムを何とかしようぜ。
再帰は、プログラム練習には使えても実用コードにはならないから。

再帰を展開する技術は身につけておいて損はない。

633:デフォルトの名無しさん
08/12/19 20:14:36
>>631
Pythonの関数呼び出し階層の深さ上限はデフォで1000となっている
その値は変更できるが、あまり薦められんな

それと、Pythonは末尾再帰を最適化しない

634:デフォルトの名無しさん
08/12/19 20:20:55
まぁ念のため、変更方法はこれだ。
URLリンク(docs.python.org)

635:デフォルトの名無しさん
08/12/19 21:11:16
末尾再帰くらいは自動で除去して欲しいよな。


636:631
08/12/19 21:28:37
>>632-634
12分で3レスもつくなんて感激です。ありがとうございます!
互助法は再帰じゃない方も書いたことがあるので (VBでですが)、大丈夫だと思います。それでは。

637:デフォルトの名無しさん
08/12/19 22:21:03
まあレスつけてるの全部キモメンだけどな。

638:デフォルトの名無しさん
08/12/19 22:31:22
あほいえめんずのんののもでるやってるわ

639:デフォルトの名無しさん
08/12/20 00:08:15
>>635
Schmeみたいにすっきりしゃっきりしたセマンティクスがある言語でないと無理。
Common Lispですら仕様では要求してないし。

640:デフォルトの名無しさん
08/12/20 02:33:46
yieldでいけるような

641:デフォルトの名無しさん
08/12/20 04:04:51
cook bookに末尾再帰にするデコレーターがある。
psycoを使っても末尾再帰になる。

642:デフォルトの名無しさん
08/12/20 04:15:39
再帰は使っても末尾再帰はあんまり使わない。
再帰を無理に末尾再帰にしても読みづらいことも多い。

>>639
むしろCommon Lispはループで回すのがデフォだよね。


643:デフォルトの名無しさん
08/12/20 11:38:12
画面設計面倒だから、もうローカルのアプリケーションも
インターフェイスはブラウザでいいかなとか思って
import web してみた。

・・・なんて簡単にウェブアプリが書けちゃうんだ。

644:デフォルトの名無しさん
08/12/20 14:15:15
ポストンポストン!

645:デフォルトの名無しさん
08/12/20 15:29:02
みんなごめん。
来年の給料払えないや。

646:デフォルトの名無しさん
08/12/20 15:37:23
スタックに相当するものを自前で用意すれば
とりあえず再帰をループに展開できるね。

647:デフォルトの名無しさん
08/12/20 16:09:12
急激に社員を増やしすぎたみたいだ。
人件費がこんなに重たいものだなんて。
勉強会が突然中止になったりしたら、そういうことだからね>みなさん

648:デフォルトの名無しさん
08/12/20 16:14:57
Python から Windows の ADO 経由で各種データベースを
アクセスしたいんですが、どのパッケージが定番なんでしょうか?
adodbapi というものと adodb というものがあるみたい。

URLリンク(adodbapi.sourceforge.net)
最新版は 2.2.4 December 17, 2008

URLリンク(adodb.sourceforge.net)
最新盤は adodb-py-210 July 30, 2008

649:デフォルトの名無しさん
08/12/20 17:41:06
win32comだけで充分です
本当にありがとうございました

650:デフォルトの名無しさん
08/12/20 19:19:49
流れぶった切ってcomtypes最強説を提唱

651:デフォルトの名無しさん
08/12/20 20:33:59
>>648
あまり詳しくないのですが
comtypesはディスパッチインタフェース、カスタムインタフェースの両方に
アクセスできて、ディスパッチイベントも捕まえられるので十分かと思います

カスタムインタフェースにアクセスできると、dir()でCOMのインタフェースを
閲覧できるので便利です


652:デフォルトの名無しさん
08/12/21 10:02:01
URLリンク(groups.google.co.jp)

653:デフォルトの名無しさん
08/12/21 10:38:55
vensterて使ってる人いる?

ATL/WTLを知っているWindowsプログラマにとっては、Win32限定なら
理想的なGUI環境に見える。
ATL/WTLがWindows APIの軽量ラッパーであるのと全く同じで
vensterはctypesを使ったWindows APIの軽量ラッパーだ。
非常に軽くて小さい上に、ATL/WTLのプログラミングモデルそっくりなんだが、
ここ数年メンテされてなくて、comtypesではなく古いctypes.comを使ってるんで
そのままでは今のPythonでは使えねえ。

今日落してきて、簡単なサンプルなら動くように手を入れたが、
COMのコネクションポイント/ディスパッチインタフェース周りで嫌になって投げた。
誰かこれ引き継いでくれねえかなあ。


>今日落してきて、簡単なサンプルなら動くように手を入れたが、
>COMのコネクションポイント/ディスパッチインタフェース周りで嫌になって投げた。
>誰かこれ引き継いでくれねえかなあ。

うp器盆


URLリンク(kansai2channeler.hp.infoseek.co.jp)
venster 0.72へのパッチ
vensterのサイトからソースとってきてpatch -p0で当ててくれ

つうかcomtypesドキュメント少なすぎだろ常考
testの中のスクリプトのなかには、そっちも直さんと動かんのもあるが、さすがに
放置


654:デフォルトの名無しさん
08/12/21 10:39:22
パッチの状態について補足。
vensterのモジュール自体は大体直したつもり。

test用スクリプトのtest_browser.pyって奴は直さないと動かないし、直していない。
IEエンジンを使ったカスタムブラウザのサンプルだが、
Python側でIOleClientSiteやらIDocHostUIHandlerやらをオンザフライで
実装していて、そこをどうにかせんと動かない。

そこまでやってないIEエンジン埋め込みスクリプトがほかにもあるが、それらは
動くようにはなった。ディスパッチイベントも捕捉できてる。


655:デフォルトの名無しさん
08/12/21 10:42:26
WindowsのPythonから透過的にCOMを呼び出す方法はいくつかあります。
IronPythonを使えば何の苦労もなく呼び出すことができますし、
Classic PythonからはPythonwinを使えば良いという事実はあまりにも有名です。
でも、以前紹介したように、Python 2.5にはctypesモジュールが最初から
用意されています。せっかく2.5使うんだから、ctypesでCOMを呼べないかと
思ってしまいますよね。残念ながら、ctypesは最近になって、COMを呼び出す機能を
comtypesに譲ったようで、追加でこれをインストールする必要があるようですが。

モノは試しなのでやってみます。やりたいことはこんな感じです。

var ssfNETHOOD = 19
var wshell = new ActiveXObject('WScript.Shell')
var shell = new ActiveXObject('Shell.Application')
var nethood = shell.nameSpace(ssfNETHOOD).self.path
//var nethood = wshell.specialFolders('NetHood')
var link = wshell.createShortcut(nethood + '\\TEST.lnk')
link.targetPath = 'fURLリンク(localhost)'
link.save()

このJScriptは、ネットワークコンピュータの下に「TEST」という名前で、
「fURLリンク(localhost)」を追加します。
comtypesでも同様にできるかと思ったら以外に落とし穴がありました。


656:デフォルトの名無しさん
08/12/21 10:42:57
comtypesをインストールして、以下のようにコードを書きました。

from ctypes import cast, POINTER
from comtypes.client import CreateObject
import os

wshell = CreateObject('WScript.Shell')
shell = CreateObject('Shell.Application')

from comtypes.gen.Shell32 import Folder2, ssfNETHOOD
from comtypes.gen.IWshRuntimeLibrary import IWshShortcut

nethood = cast(shell.NameSpace(ssfNETHOOD), POINTER(Folder2)).Self.Path
#nethood = wshell.SpecialFolders('NetHood')
link = cast(wshell.CreateShortcut('%s.lnk' % os.path.join(nethood, 'TEST')),
POINTER(IWshShortcut))
link.TargetPath = 'fURLリンク(localhost)'
link.Save()

5, 6行目でCOMオブジェクトを作るとcomtypes.genパッケージの下にそれらしい名前で
.pyと.pycが作られるので、これらを8, 9行目でインポートしています。

注意しないといけないのは、11, 13行目でやっているように、オブジェクトを
適宜明示的にダウンキャストしてやる必要があるということです。
このあたりの詳しい説明は、ここにありました。
URLリンク(aspn.activestate.com)
Pythonwinではこのようなキャストは必要ないので少々面倒な気がしますが、
選択肢が多くあるのは良いことです。


657:デフォルトの名無しさん
08/12/21 12:04:17
>>643
そのモジュールって標準?


658:161
08/12/21 12:13:01
お久しぶりです。
年末の直前あたりに、僕が作成した
フレームワークの完成形を披露したいと思います。
よろしくお願いします。

659:デフォルトの名無しさん
08/12/21 12:14:00
>>657
web.py だろう

660:デフォルトの名無しさん
08/12/21 12:26:41
URLリンク(webpy.org)

661:デフォルトの名無しさん
08/12/21 12:31:31
URLリンク(d.hatena.ne.jp)
URLリンク(d.hatena.ne.jp)

662:デフォルトの名無しさん
08/12/21 12:34:33
URLリンク(mdp.cti.depaul.edu)

663:デフォルトの名無しさん
08/12/21 12:48:24
Pythonistaも質が下がったな

664:デフォルトの名無しさん
08/12/21 12:59:42
スレリンク(tech板:161番)

665:デフォルトの名無しさん
08/12/21 17:03:55
ネットにあるようなフリーソフトはCなどで書かれてると思いますが、pythonでもできますか?
pythonで自分の設計したプログラムを作成することは可能でしょうか?
(設計する技術があるかは・・・ですが)学習すれば、プログラムを作ったり
できるといいのですが。。。

666:デフォルトの名無しさん
08/12/21 17:26:32
出来るっちゃ出来るけど
サンプル少ないからな

初心者のうちはC/C++, .NETのほうが苦労は少ないと思うよ

667:デフォルトの名無しさん
08/12/21 17:30:52
>>665
はっ? .exe作るってこと? できるよ。

>>666
はっ? 初心者?

668:デフォルトの名無しさん
08/12/21 17:32:09
>>665
できる。
ゆくゆくは配布したいと考えるなら、Cで作ったプログラムみたいにはいかないかもしれないけど、
そういうのは実際にプログラムを組んでから考慮すればよろし。

669:デフォルトの名無しさん
08/12/21 17:32:59
>>665
出来る
でも生産的ではないし、動作も遅い

670:デフォルトの名無しさん
08/12/21 17:39:14
むしろ生産的だと思うが
Cはバイナリ配布ならともかくソース晒すこと考えるとライブラリやらコンパイラやらプラットフォームやら依存性の解決がめんどくさすぎる
実行環境がそのままデバッグ環境になるのはかなり大きいと思うし

671:デフォルトの名無しさん
08/12/21 17:47:18
Cはバイナリにしてしまえばランタイムも必要とせず動くのが良いな(例外あり)。
Pythonは第三者の作ったライブラリを用いたアプリを配布する場合、
一緒くたにするならライセンスに気を配らなくちゃいけないし、
「別途ライブラリをインスコしてくれ」と、自分の書いたプログラムだけを配布する形だと、
導入する敷居が高くなって万人に使ってもらえなくなる。

672:デフォルトの名無しさん
08/12/21 17:51:26
>>670
質問から言って、念頭においてるのはLinux系のオープンソースではなくて
Windowsの「フリーソフト」なんだろうから
別にM4マクロを駆使してautoconfだのautomakeだのを記述したり
山ほど#ifdefを記述したりといったことを考えなくてもいいんじゃないの

WindowsのGUIアプリを簡単にデッチ上げられるかどうかのほうが重要

673:デフォルトの名無しさん
08/12/21 17:55:24
全部まとめて exe にパックすればいいやん

674:デフォルトの名無しさん
08/12/21 17:59:47
可能不可能からいったら出来る
楽かどうかの話だろ

WindowsのAPIはC/C++の形で提供されているので、Windowsの機能にアクセスするには
出来合いのラッパーライブラリ(巨大か、一部分しかサポートしていない)を
使うか、ctypesを使うか(C/C++のようにヘッダの#includeはできないので、
自分でシステムの型や定数を定義する必要がある)か、
自分でC/C++拡張を書くかという話になる

675:デフォルトの名無しさん
08/12/21 18:26:52
Pythonistaも質が下がったな

676:デフォルトの名無しさん
08/12/21 18:36:48
ActivePythonの3.0版来てるじゃん

677:デフォルトの名無しさん
08/12/21 19:16:37
Active*って何なのか良くわからんので説明plz


678:デフォルトの名無しさん
08/12/21 19:24:47
ActivePython → 抱き合わせ商法

679:デフォルトの名無しさん
08/12/21 19:41:43
PyWin32が付いてくるのでWin32APIをラクに呼べたりCOMサーバをいじくったりできる。
昔はHTMLからPythonを呼べたけど、今はどうか知らない。

680:デフォルトの名無しさん
08/12/21 20:53:48
I love Python.

681:デフォルトの名無しさん
08/12/21 20:59:08
So do I.

682:デフォルトの名無しさん
08/12/21 21:40:51
>>665
> ネットにあるようなフリーソフトはCなどで書かれてると思いますが

思うな。
そこから始めろ。

683:デフォルトの名無しさん
08/12/21 22:52:46
ここまで続いてやり方言うヤシは誰もおらんのか
exe化はPy2Exeが有名
Python製作って内骨格とか普通にあるじゃん


684:デフォルトの名無しさん
08/12/21 22:56:35
URLリンク(www.python.jp) を見て書いた

import urllib
f = urllib.urlopen("URLリンク(www.google.co.jp)")
print(f.read())

これだけのコードが動きません

AttributeError: 'module' object has no attribute 'urlopen'

import の時点で失敗しているようです。なぜでしょうか? どのようにすれば解決できるでしょうか?

685:デフォルトの名無しさん
08/12/21 23:07:43
>>684
urllib.pyってファイル名にしているから、
あるいはそういうファイルが他にあるから。

686:デフォルトの名無しさん
08/12/21 23:09:48
まずは、
import urllib
print urllib.__file__

687:687
08/12/21 23:22:20
>>685
心当たりはないです

>>686
以下のエラーになります:
File "test.py", line 2
 print urllib.__file__
SyntaxError: invalid syntax


688:687 (=684)
08/12/21 23:23:58
>>686
print(urllib.__file__)
としたら
C:\python30\lib\urllib\__init__.py
が出力されました

689:デフォルトの名無しさん
08/12/21 23:30:32
>>688
# Python 3.0
import urllib.request
f = urllib.request.urlopen("URLリンク(www.google.co.jp)")
print(f.read())

690:デフォルトの名無しさん
08/12/22 00:34:09
>>684のドキュメントは2.5用

691:デフォルトの名無しさん
08/12/22 01:48:50
Are you happy?

692:687 (=684)
08/12/22 08:11:05
なるほど、バージョンによってライブラリの構造が変わっていたのですね。
>>689 で成功しました。ありがとうございます。

693:687 (=684)
08/12/22 17:29:02
レンタルサーバのPythonがVer2.5.1でした><
複数のVerのPythonを共存させることはできますか? (普通にインストールすればおk?

694:デフォルトの名無しさん
08/12/22 17:44:49
>>693
自分のPCに入れたいという話か?
俺は複数のバージョンを入れているよ

ただし、ActivePythonをインスコするとレジストリエントリが作られ、
サードのライブラリをインストーラパッケージで入れたりするときに
それが参照される
つまり、レジストリに設定されているPythonが正と見なされることになる

全部自分でsetup.pyでビルド&インストールでするんなら何も問題ないけどな

695:デフォルトの名無しさん
08/12/22 18:19:07
レンタルサーバのPythonがVer2.5.1でした><
レンタルサーバのPythonがVer2.5.1でした><
レンタルサーバのPythonがVer2.5.1でした><


696:デフォルトの名無しさん
08/12/22 18:20:19
犬臭い

697:デフォルトの名無しさん
08/12/22 18:43:13
俺も複数のバージョンを入れているよ
全部自分でsetup.pyでビルド&インストールでするんなら
何も問題ないとまでは言えないけど比較的安全
yumが動かなくなったのでアカウント事にpath変えてる


698:デフォルトの名無しさん
08/12/22 19:33:27
この際だから聞くけど、ビルドって拡張モジュールのコンパイルのことを指すの?

699:665
08/12/22 21:58:05
自分の質問にたくさん返答いただきましてありがとうございます。
色々と考え方はあると思いますが、exeが作成可能ということですね。
勉強してみます。本当にありがとうございました。

700:687 (=684)
08/12/22 22:06:19
setup.py が何を指すのかすらわからない駆け出しだったりしますが、とりあえずインストールしてみました。
何か問題が起きそうになったらまた質問させていただきますね。

701:デフォルトの名無しさん
08/12/23 01:15:24
>>693
悪いことは言わないから、 2.y 系を使いな。
まだ 3.y 系は一般人向けじゃない。

702:デフォルトの名無しさん
08/12/23 02:25:23
2.6.xを使いたいということかもしれん

703:デフォルトの名無しさん
08/12/23 02:51:51
globalsってなに?
global"s"って何よ
typoってこいつのせいで2日潰した

704:デフォルトの名無しさん
08/12/23 03:30:22
grobalと被っちゃまずいだろ

705:デフォルトの名無しさん
08/12/23 12:37:57
Python 2.5.3 and 2.4.6 released

706:デフォルトの名無しさん
08/12/23 15:56:12
Python3系の本が何冊か準備中みたいですね。


707:デフォルトの名無しさん
08/12/23 17:13:57
和書は糞だから放置。

708:デフォルトの名無しさん
08/12/23 18:07:54
pythonでコードを書きたいがために余計な仕事を増やしている人はいますか?
もしいれば、具体的なモデルを教えてください

709:デフォルトの名無しさん
08/12/23 19:22:06
>>707
洋書ですよ


710:デフォルトの名無しさん
08/12/23 19:25:57
>>707
普段から洋書読んでれば洋書の話だってわかるだろうに。

711:デフォルトの名無しさん
08/12/23 19:58:03
707は和書の著者


712:デフォルトの名無しさん
08/12/23 21:01:57
和っ書ぃ

713:デフォルトの名無しさん
08/12/23 21:06:20
洋ぃ書っと

714:デフォルトの名無しさん
08/12/23 22:37:07
Pythonってずっと ピジョンって読むのかと思ってたけど
パイソンだったのね

715:デフォルトの名無しさん
08/12/23 22:44:55
707は売れない和書の著者。

716:デフォルトの名無しさん
08/12/23 22:46:30
レッテル貼つまらんぞ偏屈者共

717:デフォルトの名無しさん
08/12/23 22:52:35
別にこの太陽系第三惑星のお前以外のホモ・サピエンスは
お前を楽しませる為に生命活動を行ってるわけじゃないし。

718:デフォルトの名無しさん
08/12/23 23:02:45
rubyやれよ糞ども

719:デフォルトの名無しさん
08/12/23 23:04:17
またruby厨の荒らしですか?

720:デフォルトの名無しさん
08/12/23 23:10:34
python 3000 の本というからには
3000円ポッキリで出そうぜ

721:デフォルトの名無しさん
08/12/23 23:15:14
python始めてみようかと思う
どのバージョンがお勧めなんだい?
2.6.x?


722:デフォルトの名無しさん
08/12/23 23:25:26
716は売れないクソ和書の著者。

723:デフォルトの名無しさん
08/12/23 23:32:48
>>721
2.6.xやって、3.xを予習くらいでいいんじゃない

724:デフォルトの名無しさん
08/12/23 23:36:19
2.6に対応しているフレームワークって多いの?

725:デフォルトの名無しさん
08/12/23 23:40:47
とりあえず色々試したいってのなら2.5の方がいい気がする
新し物好きなら迷わず3選べ!(ネットやら本のコードが2系統だからちょっと手間だが)

726:161
08/12/23 23:41:10
呼びました?

727:デフォルトの名無しさん
08/12/23 23:41:27
>>723
ありがとん

あと、オススメの本てあるだろうか?
和書はあんまいいのないのかな?
洋書でもいいんだけど、和書の方がぱっと見でキーワードとか目に止まるからさ
翻訳本は嫌だけど。

728:デフォルトの名無しさん
08/12/23 23:43:16
2.6.xを進める723はHello Python止まりの引きこもり。

729:デフォルトの名無しさん
08/12/24 00:23:40
>>727
python.orgの翻訳ドキュメントがお勧め。python.jpにある。
ただのドキュメントがいいから、普及している割に本が少ない。

730:デフォルトの名無しさん
08/12/24 00:36:34
>>729
そうなのか。公式のドキュメントがいいってのはいいね

バージョンは結局自分で触ってみないと善し悪しがわかりそうにないな
てきとーにいじってみてから考えるとしますわ

731:デフォルトの名無しさん
08/12/24 01:10:48
>>730
jp独自ドキュメントじゃなくて、本家ドキュメント読んでねw
2.5は翻訳完了してるから。

732:デフォルトの名無しさん
08/12/24 01:11:52
いま>>731がしれっとひどいこと言った

733:デフォルトの名無しさん
08/12/24 01:12:12
URL挙げとくか。PDFもあります。
URLリンク(www.python.jp)

734:デフォルトの名無しさん
08/12/24 01:12:27
胸が小さい

735:デフォルトの名無しさん
08/12/24 01:14:01
Pythonでローパケットいじりたい場合
Twistedしかない?

736:デフォルトの名無しさん
08/12/24 01:21:54
>>735
raw socketをそのまんま使う

737:デフォルトの名無しさん
08/12/24 01:29:14
>>736
そこらへんのことを学ぶたべの書籍ってないでしょうか?

738:デフォルトの名無しさん
08/12/24 01:42:44
UNIXネットワークプログラミング〈Vol.1〉ネットワークAPI:ソケットとXTI
URLリンク(www.amazon.co.jp)
WinSock2プログラミング-Windows Sockets APIによるネットワークプログラミングのすべて
URLリンク(www.amazon.co.jp)

C言語だけど、この辺知らないでプログラム書くのは無謀。

詳解TCP/IP〈Vol.1〉プロトコル
URLリンク(www.amazon.co.jp)

739:デフォルトの名無しさん
08/12/24 02:41:25
Python 2.5.4 released.

2.5.3 短命杉w

740:デフォルトの名無しさん
08/12/24 03:07:03
739 :デフォルトの名無しさん [↓] :2008/12/24(水) 02:41:25
Python 2.5.4 released.

2.5.3 短命杉w

741:デフォルトの名無しさん
08/12/24 03:59:11
740 名前:デフォルトの名無しさん[sage] 投稿日:2008/12/24(水) 03:07:03
739 :デフォルトの名無しさん [↓] :2008/12/24(水) 02:41:25
Python 2.5.4 released.

2.5.3 短命杉w

742:デフォルトの名無しさん
08/12/24 04:42:19
クラスへのメンバの追加を制御するために__slots__を使っているんですが、

class foo(object):
  __slots__ = ['hoge', 'fuga']

  def __init__(self):
    self.hoge = 1
    self.fuga = 2

ここに新たに'piyo'というメンバを追加したくなったときに、__slots__と__init__の2箇所を書き直さなければならないのは少し面倒な気もします。
もっと簡単に書けませんかね?
そもそもこういうことをpythonに求めてはいけないとか?

743:デフォルトの名無しさん
08/12/24 06:23:03
しかしpythonもデカい言語になったもんだなー。
Library reference読んで再認識したよ。


744:デフォルトの名無しさん
08/12/24 10:07:22
>>742
>そもそもこういうことをpythonに求めてはいけないとか?

メタクラスでも使って自己解決しろ。

745:デフォルトの名無しさん
08/12/24 11:04:00
この記事、ひどくね?

URLリンク(gihyo.jp)
>一般的に,並行処理を行うにはスレッドを用いますが,Pythonは
>GIL(Global Interpreter Lock)という1プロセスごとにロックを持
>つ機構を採用しているため同時に1つしかスレッドを実行できません。

746:デフォルトの名無しさん
08/12/24 11:17:14
Ruby厨のデマだよ。
よい子は惑わされちゃダメだよ。

747:デフォルトの名無しさん
08/12/24 11:19:33
論理的にマルチスレッドで書くという話と
SMP で並列処理してパフォーマンスを書くという話の
マルチスレッドとを用語上きちんと分けろってこと?

一般用語はどうなってるの?

748:デフォルトの名無しさん
08/12/24 11:29:21
何をひどいと言ってるのかは分からんな

PythonにはGILがあるからマルチスレッドでは並列計算が出来なかった
(I/Oとかは外出し出来たけど)
→multiprocessingならそんな問題が無くてウマー

という提灯記事じゃないのか?

749:デフォルトの名無しさん
08/12/24 11:32:51
I/Oに限らず、時間のかかる拡張モジュールは全部GIL外で動かすことで
Pythonと並列に実行できるけどな。

750:デフォルトの名無しさん
08/12/24 11:34:23
まあCのコードを書いて、かつPythonインタプリタやPythonのオブジェクトに
触らないんなら
そら何でもありだわな

751:デフォルトの名無しさん
08/12/24 11:44:51
何でもありが一番だよ。

752:デフォルトの名無しさん
08/12/24 15:05:56
Alex MartelliのPythonクィックリファレンスってもうそろそろ出るのかな?
クックブックは、今から買ってこようと思うんだけど

初めてのPythonとクックブックがあれば、
本家サイトの英語版でお茶を濁せるもんですか?

正規表現関連とメール関連がやりたいです

753:デフォルトの名無しさん
08/12/24 16:06:43
Dやろうっと。

754:デフォルトの名無しさん
08/12/24 16:23:31
Cook Bookも原書で読んだ方がいいよ。
翻訳本はどれもクソだよ。

755:デフォルトの名無しさん
08/12/24 16:35:10
買ってきたお
3月前に出版されたbashのクックブックも買ってきてしまった

Pythonクィックリファレンスもチェックしてきたけど
プリントアウトを代行しましたみたいな本だね
もっと詳しいことが載っているのかと思っていた

くわしく使い方を知りたかったら、ソースを読めって話なのか
>>754
英語を楽しんでいる時間は、ないんよ
3.xに完全移行したら、そのときは原書を読もうかな

756:デフォルトの名無しさん
08/12/24 16:55:31
クイックリファレンスの次がソースw

757:デフォルトの名無しさん
08/12/24 17:01:20
>>755
>プリントアウトを代行しましたみたいな本

おまえそれは翻訳者に失礼だわ。
離婚書けてまで翻訳したらしいぞ(ww

758:デフォルトの名無しさん
08/12/24 17:40:18
pythonで計算時間の計測ってどうするの?

759:デフォルトの名無しさん
08/12/24 17:45:17
URLリンク(www.python.jp)

760:デフォルトの名無しさん
08/12/24 23:52:33
>>738
そこら辺は知ってるけど
Pythonで簡単にやる方法を探してる

761:デフォルトの名無しさん
08/12/25 00:03:28
raw socketで簡単じゃんw

762:デフォルトの名無しさん
08/12/25 00:06:28
>そこら辺は知ってるけど
知ってるのなら>>759より簡単な計測方法って
具体的にどんなものをイメージしているのか教えてくれ。

timeとか?w

763:デフォルトの名無しさん
08/12/25 00:07:28
>>761
Cでならできるけど
Pythonでのサンプルを見たい

764:デフォルトの名無しさん
08/12/25 00:08:17
Cでできるなら
Pythonでのサンプルなんていらないだろ

765:デフォルトの名無しさん
08/12/25 00:08:53
>>762
多分勘違い
計測方法を聞いてるのは俺じゃない
俺は生パケットのPythonでの扱いを聞いた方

766:デフォルトの名無しさん
08/12/25 00:09:36
>>764
スクリプト言語でやることが必須

767:デフォルトの名無しさん
08/12/25 00:09:55
>>765
正直心の底からすまんかった

768:デフォルトの名無しさん
08/12/25 00:13:33
python 2.5.4は2.5.2に比べてかなり速くなってる。
BeutifulSoupにxmlをパースさせる処理が約11秒から約9.5秒になった。

769:デフォルトの名無しさん
08/12/25 00:17:41
2.5.3寿命短すぎだろw
落とすだけ落としたけどインスコしないで正解だったわ

770:デフォルトの名無しさん
08/12/25 00:18:14
>>765
まずこれ。URLリンク(www.python.jp)

あとは httplib.py とか SocketServer.py とかそのあたりの標準ライブラリの
コードを読むのがオヌヌメ。


771:デフォルトの名無しさん
08/12/25 00:22:45
>>758
チュートリアルぐらい読め

772:デフォルトの名無しさん
08/12/25 00:23:50
んなTCPとかいう高級なレイヤーの上の話じゃなくて、
raw socketの話をしてんじゃないのか?

なんか全然勘違いしてると思うぞ質問者の意図を

773:デフォルトの名無しさん
08/12/25 00:30:04
>>772
TCPより下の部分はOSの領分だから、普通は raw socket といえばTCP/UDB/Unix Domain
なんだよ。
ていうか、IP層には socket の概念ないし。 raw packet なら IP Packet か Ether Packet かも
しんないけどさ。

774:デフォルトの名無しさん
08/12/25 00:37:27
>>773
いやフツーraw socketつったらSOCK_RAWのことだと俺は思っていたが……
まあraw socketって言葉遣いが悪かったんならそれは謝る、質問者は
>>735でraw packetと言っていたからね

775:デフォルトの名無しさん
08/12/25 00:53:45
>>770
ありがとう
ただ、そこのサイトの例はちょっと上位レベルな感じだな
TCPヘッダのSEQナンバー、ACKナンバーとか制御フラグとか
いじるのが一番の目的なので

SocketServer.pyとかはそんな感じなのかな?

776:デフォルトの名無しさん
08/12/25 01:08:10
>>775
> SocketServer.pyとかはそんな感じなのかな?

いや全然そんなことは無いので安心汁


777:773
08/12/25 01:24:36
>>774
いや、生パケットとか生ソケットって言葉から、 SOCK_RAW 連想できんかった。すまん。

一般用語としては、「生」っていう用語はあるレイヤに着目したひとつ下のレイヤの事で、
IPの下にはEther当のネットワーク層があるから、生パケットって言われても
TCP Packet, UDP Packet, IP Packet, Ether Packet のどれか判らんかった。

778:デフォルトの名無しさん
08/12/25 01:28:34
>>777
いや、TCPの上に乗っかるアプリケーションにはTCPを流れるデータは
バイトストリームにみえるわけで、
「パケット」は意識しないし、できないでしょ
「パケット」と言われて>>770の例を出すのは発想として明らかにおかしいと思うよ

まあ結論はもう出てるからどうでもいいけどね

779:デフォルトの名無しさん
08/12/25 08:45:14
ARPは扱えますか?

780:デフォルトの名無しさん
08/12/25 09:19:03
何をしたいの?
サーバはカーネル組み込みのOSが多いから置き換え不能だけど。

781:デフォルトの名無しさん
08/12/25 10:06:12
は?

782:デフォルトの名無しさん
08/12/25 18:19:11
python で ARP のパケットを送受信できますか
何か OS 依存のライブラリとか使わないとできませんか?


783:デフォルトの名無しさん
08/12/25 18:40:58
>>782
できる。
URLリンク(mail.python.org)
URLリンク(sourceforge.net)


784:デフォルトの名無しさん
08/12/25 19:45:38
>>783
ありがとうございます!!

785:デフォルトの名無しさん
08/12/26 03:45:54
pythonが関数型言語というわりに
あんまり関数ぽくない感じするのは気のせいなのか
副作用つかいまくってる


786:デフォルトの名無しさん
08/12/26 03:54:29
だれが関数型だなんていったんだ

787:デフォルトの名無しさん
08/12/26 04:02:16
>>785
> pythonが関数型言語というわりに

そんなこと誰が言ってるんだw
関数型言語から色々便利な道具は拝借してるが、単にそれだけだ。

式と文を区別してるし、参照透明性なんぞ最初から眼中にないし、
lambdaは中途半端な糞だし、関数型的なリストは持たないし、
カリー化もパターンマッチも代数データ型もないし、
末尾再帰は最適化しないし、畳み込みは3.0からは格下げだ。

ある意味Guidoの好みは時代に逆行してるな。関数型を嫌ってるんだから。

788:デフォルトの名無しさん
08/12/26 06:12:36
でも Python は使いやすい

789:デフォルトの名無しさん
08/12/26 06:54:27
関数型はネストが深くなりやすいとかメリットを享受するためには無名関数を使わざるを得ないとかの印象がある
Guidoの考えとは相性良くないんだろう
書きにくくはないけど読みやすくはない

790:デフォルトの名無しさん
08/12/26 14:27:48
ctypes で WindowsAPI EnumWindows を呼びたいのですが
EnumWindows は引数に callback 関数を指定しないといけないので
python 側の関数を callback してもらいたいと思います
具体的な書き方が分からないのでどなたか教えてください

791:デフォルトの名無しさん
08/12/26 15:09:33
URLリンク(www.python.jp)

from ctypes import *
from ctypes.wintypes import *

EnumWindows = windll.user32.EnumWindows
EnumWindows.argtypes = [c_void_p, c_int]
EnumWindows.restypes = c_int
EnumWindowsCallback = CFUNCTYPE(c_int, c_int, c_int)

GetWindowText = windll.user32.GetWindowTextA
GetWindowText.argtypes = [c_int, c_char_p, c_int]
GetWindowText.restypes = c_int

def pyEnumWindowsCallback(hwnd, lp):
buf = create_string_buffer('\000' * 1024)
GetWindowText(hwnd, buf, 1024)
if len(buf) > 0:
if buf.value != '':
print buf.value
return True

EnumWindows(EnumWindowsCallback(pyEnumWindowsCallback), 0)


792:デフォルトの名無しさん
08/12/26 15:16:26
py2exeでdllは作れないの?

793:デフォルトの名無しさん
08/12/26 15:18:51
>>787
まー関数型が好きな人は「パターンマッチとカリー化使ってプログラムできる俺かっけえw」
とかニヤニヤしてればいいんじゃね。
高度に関数型の言語は、手続き型と比べてアルゴリズムの記述とかパフォーマンスチューニ
ングのノウハウの蓄積と普及がまだまだという印象を受ける。みんながもっと関数型を使う
ようになればそういう動きが活発になるんだろうけど。
それと、SmallTalkとかHaskellみたいに一つのプログラミングパラダイムのみをサポートす
る言語は、特定の用途にはとても強いが、逆に苦手なプログラミングのタイプにはさっぱり、
ってのが多い気がしないか。
その点、いろんなとこから良いとこ取りしてるPythonは柔軟な対応ができて良いと思うのだけれど。

794:デフォルトの名無しさん
08/12/26 15:19:05
>>790
先を越されてしまったようだが……
コールバックとしては、↓のようにクラスのメソッドも普通に使えるよ。

import ctypes

BOOL = ctypes.c_int
HWND = ctypes.c_ulong
LPARAM = ctypes.c_ulong
EnumWindowsProc = ctypes.WINFUNCTYPE(BOOL, HWND, LPARAM)
user32 = ctypes.windll.user32

class Foo(object):
    def __init__(self):
        self.windows = []

    def MyEnumWindowsProc(self, hwnd, lparam):
        self.windows.append(hwnd)
        return 1

    def __call__(self):
        user32.EnumWindows(EnumWindowsProc(self.MyEnumWindowsProc), 0)
        return self.windows

for hwnd in Foo()(): print "%08X" % hwnd


795:デフォルトの名無しさん
08/12/26 15:33:10
>>793
Pythonは関数型言語じゃありませんよということを説明しただけだよ
Pythonに関数型言語になって欲しいとは一言も言ってない

マルチパラダイム言語の中で考えれば、Scalaあたりに比べれば
言語の記述力自体は別に平凡な部類でしょ、Pythonは

796:デフォルトの名無しさん
08/12/26 15:45:25
On Python
URLリンク(www.shido.info)
ython と Ruby は実はほとんど同じで、むきになるほどの差はないと思います。 (ただ、Python は Haskell などの最近の関数型言語の影響が強く見られ、 一方、Ruby は Smalltalk や Eiffel などのオブジェクト指向言語と Lisp の影響が見られます。)


797:デフォルトの名無しさん
08/12/26 15:49:34
>>796
URLリンク(d.hatena.ne.jp)
で叩かれてたサイトだな

798:デフォルトの名無しさん
08/12/26 15:54:24
>>797
せっかく有用な比較してるのに妙な叩きするなよ

zopeとダンジョの比較情報探すのもかなり苦労したんだから

799:デフォルトの名無しさん
08/12/26 15:59:59
有用な比較って……

Pythonでシークエンス型は参照渡しで他は値渡しって記述は俺も
ひどいと思ったけど
大嘘じゃん

800:デフォルトの名無しさん
08/12/26 16:05:05
そもそもPythonレベルで参照渡しなんて概念を持ち出す必要があるのか疑問

801:デフォルトの名無しさん
08/12/26 17:18:57
>>800
お前相当アホだろ?

802:デフォルトの名無しさん
08/12/26 17:22:40
すみませんが、質問です。
ジェネレータを通常のリストに変換する簡潔な方法は無いでしょうか?
ジェネレータが逐次返してくる値を全部まとめたリストを得たいのです。

803:デフォルトの名無しさん
08/12/26 17:40:37
>>802
[ e for e in G ]

804:デフォルトの名無しさん
08/12/26 17:40:42
list

805:デフォルトの名無しさん
08/12/26 17:54:45
>>804
おお、こんなクラスが。ありがとうございました。
> Help on class list in module __builtin__:
>
> class list(object)
> | list() -> new list
> | list(sequence) -> new list initialized from sequence's items

>>803
リスト内包表記もかなり簡潔ですね。


806:デフォルトの名無しさん
08/12/26 17:56:49
>>791
早速ありがとうございます!!
でも実行すると最後にエラー出てました
EnumWindowsCallback = CFUNCTYPE(c_int, c_int, c_int)

EnumWindowsCallback = WINFUNCTYPE(c_int, c_int, c_int)
でエラー出なくなりました

>>794
きれいなコードですね
ありがとうございました!!


807:デフォルトの名無しさん
08/12/26 18:21:56
>>796
駄本の著者だな

808:デフォルトの名無しさん
08/12/26 18:54:21
景品表示法的にグレーな本書いた人ね

809:デフォルトの名無しさん
08/12/26 19:05:47
URLリンク(www.amazon.co.jp)

続編は内容的にガッカリらしい

810:デフォルトの名無しさん
08/12/26 21:15:32
恥ぱい

811:デフォルトの名無しさん
08/12/26 21:27:53
中身がハッカーズ大辞典やアンサイクロペディアみたいなノリだったら
あのタイトルでも許せたんだけどな。


812:デフォルトの名無しさん
08/12/27 05:52:00
イテレータから、n 個ずつとってまとめたタプルを
次々返すようなジェネレータって標準モジュール内にないですかね?
itertools 内を見回しても見当たらないんですけど・・・
結構使う機能なので、使うたびにジェネレータ定義するの面倒だし、
この機能だけのためにモジュール定義するのとかも面倒だし、
標準モジュール内であると楽なんですが・・・

813:デフォルトの名無しさん
08/12/27 06:03:34
あの、回答まだでしょうか?

814:デフォルトの名無しさん
08/12/27 08:06:33
正月休みです

815:デフォルトの名無しさん
08/12/27 10:03:05
from 俺のitertools import pair
def pair(iterable, count):
    """
    >>> list(pair(range(10), 3))
    [(0, 1, 2), (3, 4, 5), (6, 7, 8), (9,)]
    """
    iterable = iter(iterable)
    stop = False
    while not stop:
        y = ()
        try:
            for i in range(count):
                y += (iterable.next(), )
        except StopIteration:
            stop = True
        if y: yield y


816:デフォルトの名無しさん
08/12/27 10:46:00
>>812
> この機能だけのためにモジュール定義するのとかも面倒だし、

Pythonのモジュール作るのは別に面倒じゃないと思うんだが……
つーかPythonのスクリプトって特別な呪文を唱えずとも全部モジュールとして
使えるわけだし、せいぜい既存のモジュールとファイル名がかぶらないようにだけ
注意しとけばいい

PYTHONPATH, PYTHONSTARTUP, sitecustomize.pyなどの手段で
sys.pathに自分用スクリプトディレクトリを加えておくといいぞ
Pythonみたいにモジュールが使いやすい言語でコードの再利用を考えないのは損だ

817:デフォルトの名無しさん
08/12/27 11:47:56
>>815>>816
分かりました。
myitertools.py みたいなのを作ってやってみようと思います。

818:デフォルトの名無しさん
08/12/27 11:57:00
ちょっと違うけど短くかけるな
def pair(iterable, n):
    return izip(*[iter(iterable)]*n)

819:デフォルトの名無しさん
08/12/27 11:58:45
うへ,tuple って immutable っていうから
+= みたいなのはなしかと思い込んでた…

820:デフォルトの名無しさん
08/12/27 12:25:32
a += b って a = a + b として処理されるんでないの

821:デフォルトの名無しさん
08/12/27 12:26:35
もちろんそうだよ。

822:デフォルトの名無しさん
08/12/27 12:27:53
>>820
__iadd__()がある場合は__iadd__()で処理される
無い場合は、__add()__を用いて処理される

immutableの場合は当然__iadd__()なんてものはないから
普通に__add()__を用いて新しいオブジェクトが作られる

823:822
08/12/27 12:28:50
なんだ__add()__ってw
まあ意味分かるよね、ごめん

824:デフォルトの名無しさん
08/12/27 21:48:30
>>> zip(*[iter(range(10))]*3)
[(0, 1, 2), (3, 4, 5), (6, 7, 8)]
>>> zip(*[iter(range(10))]*4)
[(0, 1, 2, 3), (4, 5, 6, 7)]


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch