Pythonのお勉強 Part3 ..
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
Uncyclopedia項目リンク
釘宮 理恵(くぎのみや りえ、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ではこのようなキャストは必要ないので少々面倒な気がしますが、
選択肢が多くあるのは良いことです。
次ページ最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5100日前に更新/206 KB
担当:undef