Pythonのお勉強 Part3 ..
[2ch|▼Menu]
357:デフォルトの名無しさん
08/12/04 12:41:44
>>353
CからCです。
いくらなんでも遅すぎですよね。


358:デフォルトの名無しさん
08/12/04 12:45:06
>>352
file1
--------
class foo(object):
 CON = [('const%d' % n) for n in xrange(1000)]
--------
file2
--------
from file1 import foo.CON as CON
for n in len(CON):
print 'CON%d = %s' % (n, CON[n])
--------


359:デフォルトの名無しさん
08/12/04 12:47:22
>>357
早めにディスクのバックアップ取っとけw


360:デフォルトの名無しさん
08/12/04 13:51:33
sage使ってる人います?
numpy単独よりも便利なのかな

361:デフォルトの名無しさん
08/12/04 14:13:38
pythonのコードをdllや.soにする方法ってあるのかな

362:デフォルトの名無しさん
08/12/04 14:17:33
3.0のWhat's Newは短いなぁ

363:デフォルトの名無しさん
08/12/04 14:21:57
>>362
変更点は全て列挙してあると思うけど、例を載せてほしいってこと?


364:デフォルトの名無しさん
08/12/04 15:05:48
2.6に多くの機能が入ったからその分短くなったね

365:デフォルトの名無しさん
08/12/04 15:43:10
そういう問題なのか???

ありすぎて書けない… わけじゃなく段差の分結果的に
"what's new" の項目数は少なくなったって感じ?

366:デフォルトの名無しさん
08/12/04 15:44:05
>>365
いやいや、十分長いがなw
参考文献へのリンクも含めて読んでみろよ。


367:736
08/12/04 15:59:14
>>359
ちなみに正常な環境だと shutil.move()の実行速度って何秒くらいですか?
テスト条件はできれば同じくらいの環境で

368:デフォルトの名無しさん
08/12/04 16:16:05
shutil.move("C:\test.txt", "C:\Test")みたいにdstにディレクトリを指定すると
実装のos.renameでOSErrorが発生してcopy2の方が呼ばれてるから遅くなってるのかな?
shutil.move("C:\test.txt", "C:\Test\test.txt")みたいにファイル名を追加するか
os.renameを直で使ってみたら?

369:368
08/12/04 16:17:10
↑のはWindowsでの話。他のOSは分からない

370: 株価【52】
08/12/04 16:29:59


371:デフォルトの名無しさん
08/12/04 17:37:20
>367
0秒

372:デフォルトの名無しさん
08/12/04 19:02:54
具体的にはどの段階で3.0にいこうすればいいのかね?

373:デフォルトの名無しさん
08/12/04 19:35:22
>>372
お前の使ってるライブラリが対応したときだろ。

374:デフォルトの名無しさん
08/12/04 19:59:37
まだ 3.0 リリースせずにユーザーがもうちょっと 2.6 に慣れてから
リリースすればよかったような気がする。

でも、3.0は長い移行期間が必要とされるから、逆に早めにリリース
しておきたかったんだろうね。

375:デフォルトの名無しさん
08/12/04 20:17:04
>>352
... class a:
... CONST1=1
... CONST2=2
... for x in dir(a):
... if x.startswith("CONST"):
... exec(x + "=" + "a." +x)
... print CONST1

どうよ?

376:375
08/12/04 20:18:06
インデントがめちゃめちゃだ。
ごめんよ。

377:デフォルトの名無しさん
08/12/04 20:57:18
printのカッコが地味に面倒だな。
こっちの方が言語的にいいのは、頭では理解してんだけどさ。
いままでの癖がなかなか抜けなくて、ぱいそんたんに怒られてばっかりだ。

378:デフォルトの名無しさん
08/12/04 21:26:41
3.0が出たので入れてみた(Vista)

早速起動した。
> help()
打ってみた。動く。
そこで出た文章に従って
> modules spam
打ってみた。

エラー出た。
uft-8 ってエンコーディングが見つからないって。
・・・・あたりまえじゃああああ
どこが間違ってるのかよく分からんです。
Python30のディレクトリ下をgrepして出てくるのは
Lib/test/bad_encoding.py だけ。これは想定通りだろうが・・・

379:デフォルトの名無しさん
08/12/04 21:35:52
・・・もしかしてLib/testはインストール後に
除去するのが正しい使い方?
別んとこによけておいたら、↑も通った。

380:デフォルトの名無しさん
08/12/04 22:38:47
print("a%s%s" % ('b', 'c'))

なんかキモイな…

381:デフォルトの名無しさん
08/12/04 22:42:12
Py3kはユニコード指定しなくていいのが嬉しい。
これでフレームワークが対応してくれれば・・・。

382:デフォルトの名無しさん
08/12/04 22:52:02
つーか2.5とかでも別に

def printf(fmt, *args): print fmt % args,
def fprintf(f, fmt, *args): print >>f, fmt % args,

とか定義すりゃ
printf("a%s%s\n", 'b', 'c')
とか書けるわなあ

print()関数は、%とカッコがC風のprintf()より冗長に見えてしまうね

383:デフォルトの名無しさん
08/12/04 23:03:10
setuptoolもまだ対応してないのかな?

384:デフォルトの名無しさん
08/12/04 23:06:11
3.0わしょーい

385:デフォルトの名無しさん
08/12/05 00:17:30
>>380
boost::format
みたいだ

386:デフォルトの名無しさん
08/12/05 00:28:39
print("a{0}{1}".format('b', 'c'))
print("a", 'b', 'c', sep="")

387:デフォルトの名無しさん
08/12/05 00:32:32
>>386
それもキモいな
あまり意味の感じられない多様性

Perlみたい

388:デフォルトの名無しさん
08/12/05 00:44:15
string template は

389:デフォルトの名無しさん
08/12/05 00:53:59
print文なんて一発プログラムでしか使わん。
ちょっと込み入った規模ならファイルオブジェクトにwriteするか
loggingを使ってる。

潔癖症にかかってる人は
変える必要など無い所まで変えやがるから
迷惑この上ない。


390:デフォルトの名無しさん
08/12/05 01:03:49
一貫性に拘りすぎるのはバカみたいなことを
Pythonの中の人言ってなかったっけか

391:デフォルトの名無しさん
08/12/05 01:06:36
>>390
それは本当にそう思うけど
print()関数は、後方互換性潰してまで導入したのがこれか、とは思う

392:デフォルトの名無しさん
08/12/05 01:07:24
printは最初っからキモイ

393:デフォルトの名無しさん
08/12/05 01:09:51
>>392
全くだw

394:デフォルトの名無しさん
08/12/05 01:12:03
自演オワタ

395:デフォルトの名無しさん
08/12/05 01:15:56
単要素のタプルもキモイ

396:デフォルトの名無しさん
08/12/05 01:21:54
>>389
じゃぁお前はprintの変更の影響受けて無いじゃん。

Python開発者は潔癖症なんかじゃないよ。
print文の変更も議論の上だよ。 print文でファイルに出力する方法とか、最後に改行しない
方法とか、その為だけに構文を増やしていたのを、普通の関数呼び出しにして柔軟に
使えるようになった。

数タイプを削減するためだけに構文増やしまくってたprint文がキモ過ぎただけで、
print関数は素直で自然な姿。

397:デフォルトの名無しさん
08/12/05 02:15:03
後方互換性潰してまで導入したのがこれか

398: 
08/12/05 02:22:59
それが何か?

399:デフォルトの名無しさん
08/12/05 04:52:48
Cとの互換性を重視して文法がカオスになってるC++を見てると、
どこかで切り捨ては必要だなって思う。

400:デフォルトの名無しさん
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最強!


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

5092日前に更新/206 KB
担当:undef