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