Pythonのお勉強 Part22at TECH
Pythonのお勉強 Part22 - 暇つぶし2ch1:デフォルトの名無しさん
07/11/30 21:49:38
Python オフィシャルサイト
URLリンク(www.python.org)
日本Pythonユーザ会
URLリンク(www.python.jp)
FrontPage - Pythonのお勉強
URLリンク(python.rdy.jp)
前スレ
スレリンク(tech板)

◆関連スレッド

Microsoft IronPython 1.0
スレリンク(tech板)
Python の宿題ここで答えます Part 1
スレリンク(tech板)
2ch検索: [python]
URLリンク(find.2ch.net)

◆関連サイト

Python ドキュメント
URLリンク(www.python.jp)
Index of Python Enhancement Proposals (PEPs)
URLリンク(www.python.org)
参考サイト - Pythonのお勉強
URLリンク(python.rdy.jp)
.

2:デフォルトの名無しさん
07/11/30 21:59:11
人類は21才から22才になった

3:デフォルトの名無しさん
07/11/30 22:15:43
関連書籍等

IronPython in Action
URLリンク(www.manning.com)

wxPython
URLリンク(www.wxpython.org)
wxPython in Action
URLリンク(www.manning.com)
URLリンク(www.amazon.com)

Django
URLリンク(www.amazon.com)
TurboGears
URLリンク(www.amazon.com)
Pylons
URLリンク(www.amazon.com)


4:デフォルトの名無しさん
07/12/01 09:19:48
>>1
なまら乙

5:デフォルトの名無しさん
07/12/01 10:14:21
>>1
>FrontPage - Pythonのお勉強
>URLリンク(python.rdy.jp)
百度に飛ばされる

6:デフォルトの名無しさん
07/12/01 12:56:59
部外者にはみんPy側が大人気ないように感じる

7:デフォルトの名無しさん
07/12/01 12:59:50
へぇ・・・

8:デフォルトの名無しさん
07/12/01 13:04:16
みんPy側なんていたのか・・・
荒らしさんは対立を作るのに忙しいな

9:デフォルトの名無しさん
07/12/01 13:45:20
Python Challenge
URLリンク(www.pythonchallenge.com)


10:デフォルトの名無しさん
07/12/01 16:24:33
>>1
乙Py

11:デフォルトの名無しさん
07/12/01 16:53:05
Pythonオワタ・・・orz
俺もう乗り換えるわ

Running the snippets above, I got the following results:

Python 2.5.1:   31.507s
Ruby 1.9.0:    11.934s

The Ruby code:

def fib(n)
 if n == 0 || n == 1
  n
 else
  fib(n-1) + fib(n-2)
 end
end

36.times do |i|
 puts "n=#{i} => #{fib(i)}"
end

And the Python equivalent:

def fib(n):
  if n == 0 or n == 1:
   return n
  else:
   return fib(n-1) + fib(n-2)

for i in range(36):
  print "n=%d => %d" % (i, fib(i))

12:デフォルトの名無しさん
07/12/01 17:00:31
なにかのデータをitervaluesで取り出したもの使ってるところで
keyerrorとかでてくるのだけど、これは対象が存在しない時出てくると考えていいの?

13:デフォルトの名無しさん
07/12/01 17:02:46
>>11
てんさい
URLリンク(cgi.cse.unsw.edu.au)

14:デフォルトの名無しさん
07/12/01 18:45:48
Pythonオワタ・・・orz
俺もう乗り換えるわ

Running the snippets above, I got the following results:

Python 2.5.1:   31.507s
Ruby 1.9.0:    11.934s

The Ruby code:

def fib(n)
 if n == 0 || n == 1
  n
 else
  fib(n-1) + fib(n-2)
 end
end

36.times do |i|
 puts "n=#{i} => #{fib(i)}"
end

And the Python equivalent:

def fib(n):
  if n == 0 or n == 1:
   return n
  else:
   return fib(n-1) + fib(n-2)

for i in range(36):
  print "n=%d => %d" % (i, fib(i))

15:デフォルトの名無しさん
07/12/01 18:58:53
Ruby (1.8.5) 64.26s
Python (2.4) 25.16s
Haskell (GHC 6.8) 0.48s
Parallel Haskell (GHC 6.8) 0.42s

16:デフォルトの名無しさん
07/12/01 19:14:33
速度だけ比較してモナぁ

17:デフォルトの名無しさん
07/12/01 19:17:15
Ruby 1.9ってRails動くんですか?

18:デフォルトの名無しさん
07/12/01 19:29:15
Web板
Rubyスレ


19:デフォルトの名無しさん
07/12/01 19:47:55
>>17
RubyってRailsで動いてるんじゃないのか?

20:デフォルトの名無しさん
07/12/01 20:20:18
fib みたいな例だと psyco の効果が良くわかるな

21:デフォルトの名無しさん
07/12/01 20:38:42
比較しようにもhaskellの実行ができない。
どうやったらいいの?今現在全然知らないのでコピペしただけ。
ghc
h.hs:6:7: Not in scope: `forM_'
h.hs:7:1: Not in scope: `printf'
hugs98
ERROR "h.hs":6 - Undefined variable "printf"

pythonはタブの整形が面倒だった。
rubyはそのまま実行できた。

ボロマシンなので閾値を30にまけておいた。
ruby h.rb 5.18s user 0.00s system 81% cpu 6.331 total
python h.py 2.42s user 0.01s system 72% cpu 3.347 total

ruby 1.8.6 (2007-09-24 patchlevel 111) [i686-linux] (dev-lang/ruby-1.8.6_p110-r2)
Python 2.5.1 (dev-lang/python-2.5.1-r4)

22:デフォルトの名無しさん
07/12/01 21:06:21
スレ違いだから
いい加減にして

23:デフォルトの名無しさん
07/12/01 21:14:09
Part22 作り直すか


24:デフォルトの名無しさん
07/12/01 21:17:15
>>23
潔癖すぎだろw

25:デフォルトの名無しさん
07/12/01 21:22:06
>>5
ごめんなさい。
百度があまりにもうるさいので、それっぽいIPだと
向こうにお帰り願う設定になってますので、
その影響を受けているのかと。


26:デフォルトの名無しさん
07/12/01 21:22:19
>>14
アンチRuby工作員乙

27:デフォルトの名無しさん
07/12/01 22:55:22
すれ違いでごめんよ、解決したのでメモだけ置かして…。
これであってるか知らないけど、次のライブラリをインポートしないとダメだった模様だ、が小難しいな…
import Control.Monad (forM_)
import Text.Printf

結果
ruby h.rb 5.07s user 0.00s system 80% cpu 6.295 total /インタプリタ
python h.py 2.40s user 0.01s system 73% cpu 3.261 total /インタプリタ
runghc h.hs 6.21s user 0.07s system 82% cpu 7.652 total /インタプリタ
ghc h.hs 0.56s user 0.10s system 90% cpu 0.728 total /コンパイル
./a.out 0.40s user 0.00s system 49% cpu 0.817 total /ネイティブコード

The Glorious Glasgow Haskell Compilation System, version 6.6.1 (dev-lang/ghc-6.6.1)

俺は見やすいpythonが好きなので他は使わないと思うけど…

28:デフォルトの名無しさん
07/12/02 00:03:03
>>14
コードが糞すぎwww
ジェネレーターを使え。

29:デフォルトの名無しさん
07/12/02 00:04:05
>>13の例だとRubyはともかくHaskellと比較する意味はない気がする。
よく知らんがHaskellだと↓くらいの計算量じゃないかと。

def fib(n):
 return fib2(n, 0, 1)
def fib2(n, a, b):
 if n == 0:
  return a
 else:
  return fib2(n-1, b, a+b)

ところでWindowsにPythonの新しいバージョンを入れようと思うんだけど
ActivePythonを公式+αという感覚で入れても問題ない?
それとも公式を入れておいたほうが無難?

30:デフォルトの名無しさん
07/12/02 02:12:14
>>11
Python 2.5.1
17.935

Python 2.5.1 + psyco
1.264

31:デフォルトの名無しさん
07/12/02 08:48:18
こいつをpythonのプログラムに取り付けろ。すごいぞお、pythonの戦闘力は数倍に跳ね上がる!


32:デフォルトの名無しさん
07/12/02 10:09:11
とうさん…

数倍っつーか一桁変わってますけど…

33:デフォルトの名無しさん
07/12/02 10:13:44
単純なコードでは著しく高速化されても、
実用的なコードではほとんど高速化は期待できないのに・・・

父さん・・・酸素欠乏症にかかって・・・!

34:デフォルトの名無しさん
07/12/02 11:36:28
ニートの僕はpythonで幸せになれますか?

35:デフォルトの名無しさん
07/12/02 11:52:28
もちろん
Pythonは万能です

36:デフォルトの名無しさん
07/12/02 13:29:10
\(^o^)/ニートソツギョー

37:デフォルトの名無しさん
07/12/02 13:31:40
ニートが就職しても社内ニートになるだけです。

38:デフォルトの名無しさん
07/12/02 18:44:13
\(^o^)/マドギワゾクー

39:デフォルトの名無しさん
07/12/02 20:13:13
( ゚Д゚)っ缶詰


40:デフォルトの名無しさん
07/12/02 20:30:40
 =================
  |---------------|
  |.;.:,          |
  |,.:.;     SOYLE|
  |.';.;          |
  |---------------|
 =================

41:デフォルトの名無しさん
07/12/02 21:34:00
でかいタコ部屋ですね え、加工済m

42:デフォルトの名無しさん
07/12/02 23:11:54
SPAM SPAM SAPM and SPAM

43:デフォルトの名無しさん
07/12/02 23:27:29
CentOSでyumで管理されてるPythonはちょっと前のものですが、
ソースビルドしてPython2.5.1を入れてみました。
元から入ってたのは /usr/bin/python
ビルドして出来たものは /usr/local/bin/python
で分かれています。
一応動いているみたいなのですが、
上書きして書き換えるのはやめておいたほうが良いのでしょうか?

CentOSのその他の管理ツールで内部的に
Pythonのスクリプトを使っているものがあるとかいう
話を聴いたことがあるのでそっちに影響出る可能性があるのかなと。

あとyumの方が最新のバージョンにならないのもそういう理由ですよね?


44:デフォルトの名無しさん
07/12/02 23:51:01
上書きすると、パッケージ管理システムが管理してる情報と
実際に入ってるモノが食い違うことになるんじゃ…

45:デフォルトの名無しさん
07/12/03 00:16:30
linuxあんま使わないけどyumとかapt-getとかのパッケージ管理システムってディストリビューション毎の管理・メンテナンスでしょ
アップデートしても最新にならないなら何か問題があるとか、単にテスト中だとかその辺だから大人しく待っとけ
というかpython25とか名前付ければ良いんじゃないかな。せっかくlnあるんだから

46:デフォルトの名無しさん
07/12/03 00:37:34
まず、上書きを必要とする理由を書いて欲しい。

俺だったら、まず$HOMEに入れることを考える。
大抵はこれで事が済む。

/usr/localに入れるとしても、
/usr/local/bin/pythonは消して、/usr/local/bin/python2.5だけ残す。

(初期状態だと、/usr/local/binにはPATHが通ってないと思うが、念のため)
(あとPATHがゴチャゴチャしてきた時の防御にもなる)

/usrのは絶対さわらない。


47:デフォルトの名無しさん
07/12/03 01:21:55
>>43
上書きは止めた方が良いです、というかRed Hat系では
>CentOSのその他の管理ツールで内部的にPythonのスクリプトを使っている
この理由で絶対駄目なのでは。

Debian不安定版では2.4と2.5が分かれてインストールされています。
/usr/lib/python2.4と/usr/bin/python2.4と
/usr/lib/python2.5と/usr/bin/python2.5。
/usr/bin/pythonは/usr/bin/python2.4。

それと、Pythonはマイナーバージョンの違いは無視されると記憶しています。
Python-2.5とPython-2.5.1はとちらも/usr/lib/python2.5になる。
なので危険ですよ。

48:デフォルトの名無しさん
07/12/03 03:19:49
virtual-pythonじゃダメ?

49:デフォルトの名無しさん
07/12/03 03:28:57
>>47
マイナーバージョンアップはバージョンアップすればいいんじゃないの?

50:デフォルトの名無しさん
07/12/03 06:36:55
>>49
ファイル差分があってもパッケージ管理システムからはわからないから
ゴミが残ったりする。
まーsetup.pyやコピーで自前でライブラリ追加してもいっしょだし
ディレクトリが分散してるわけでもないから大事にはならないけど。

51:デフォルトの名無しさん
07/12/03 06:48:43
>>46
おっしゃるとおりやっぱり危険ですよね。
/usr/local/bin には path が通っていないので助かっていますが
/usr/local/bin/python2.5 が /usr/local/bin/pyton に ln -s されているので
念のため /usr/local/bin/pyton を消した方が無難ですね。

上書きしたかった理由は、
このあと Django とかを最新版でインストールするつもりで
その辺の setup するときに旧バージョンの python が
自分の意図しないときに実行されると困ると思ったからです。
(CentOS x86-64 の Python 最新は 2.3.4 なんですよね orz)
きっと Django の方でも /usr/local/bin/python2.5 の方を使うように
設定する場所はあると思うのでそっちで探してみることにします。

みなさんありがとうございます


52:デフォルトの名無しさん
07/12/03 23:41:30
前スレ974:
> # 自分で例外ちゃんと処理するしかない?

するしかない。CP932で表示できないものはいかんともしがたい。端末依存。
簡単なのはエラーハンドリングを "replace" 等にして自前でエンコードすること。
print (u'ほげ%sふが' % u'hogÉfuga').encode(sys.stdout.encoding, errors="replace")

別解は Unicode-aware な端末ソフトを使う。

53:デフォルトの名無しさん
07/12/03 23:42:44
あ、ゴメス。
encode(sys.stdout.encoding, "replace")
の間違い。


54:デフォルトの名無しさん
07/12/04 21:05:10
981
3. 以下のコードのような感じで、変数名をstringで取り出すにはどうすればいいでしょう。
>>> for val in foo bar:
>>> print val # <= ここで、変数の中身じゃなくて変数名を取り出したい。
"foo"
"bar"


>>> foo = 3
>>> bar = 'hoge'
>>> for val in (foo, bar):
...  print val
...
3
hoge
>>> locals()
{'bar': 'hoge', 'val': 'hoge', '__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', 'foo': 3, '__doc__': None}
>>> for val in (foo, bar):
...  print locals()
...
{'bar': 'hoge', 'val': 3, '__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', 'foo': 3, '__doc__': None}
{'bar': 'hoge', 'val': 'hoge', '__builtins__': <module '__builtin__' (built-in)>, '__name__': '__main__', 'foo': 3, '__doc__': None}
>>>


55:デフォルトの名無しさん
07/12/04 23:03:17
普通のやり方はないと思う
デバッグ目的ならもっと別なやり方を考えたほうがいいと思う

すごく無理やりなやり方だったら、

for val in (foo, bar):
  print filter(lambda x:x[1]==val,locals().items())[0][0]

とかは可能・・(値が同じものがある場合を考慮するともう少しちゃんとする必要がある

56:デフォルトの名無しさん
07/12/05 18:21:52
import * from xxx

みたいに、一気に名前空間にimportすることはできないのでしょうか?


57:デフォルトの名無しさん
07/12/05 18:38:33
from <MODULE> import *

↑でおけ。importした複数のモジュールで同じ名前が使われてた場合、
後にimportしたもので上書きされるから注意。

58:デフォルトの名無しさん
07/12/05 18:44:02
2chのログを保存しているサイト(みみずん、snapshot 2ch等)からログを引っ張ってきて、
dat形式に変換してローカルに保存したいのですが、
自分がうんこ野郎なので、webサイトから何かしらのデータを取得する方法が分かりません。
主にどのようなライブラリを使えば良いのでしょうか?

59:デフォルトの名無しさん
07/12/05 18:53:44
urllibなど

60:デフォルトの名無しさん
07/12/05 18:54:31
>>58
urllib2
URLリンク(www.python.jp)
dat形式への変換はしらん

61:デフォルトの名無しさん
07/12/05 19:30:55
シュザイム : 枕詞ってなに?   12/5 (Wed) 19:13:59

玉露入り : 「うはw」という枕詞に「おkwwwww」でしょ?   12/5 (Wed) 19:12:37

シュザイム : なにがおk?www   12/5 (Wed) 19:11:23
玉露入り : おkwwwwww   12/5 (Wed) 19:11:01

シュザイム : うはw   12/5 (Wed) 19:09:59

パンピーと二人面白いです^o^

62:デフォルトの名無しさん
07/12/05 20:04:58
>>57
ありがとう!

63:58
07/12/05 22:05:12
>>59,60
ありがとう!!
dat変換まで出来てjaneに不具合なく導入出来たら公開する!!

64:デフォルトの名無しさん
07/12/05 22:15:50
いや・・・p2todatがもうあるので・・・

65:デフォルトの名無しさん
07/12/05 22:30:35
>>63
がんばれ

66:58
07/12/05 22:55:32
>>64
あれは使い勝手が悪いので自分で作ってみようかなと
うんこは考えたのです。

67:デフォルトの名無しさん
07/12/06 00:45:04
使い勝手がいいのを作るのはムズかしいぞ、何事も。
特に他人に使ってもらおうと思ったら。
まあ頑張れ。若者よ。もしかしたらすごいのができるかもしれん。

68:デフォルトの名無しさん
07/12/06 00:49:55
わたし待ってるわ

69:デフォルトの名無しさん
07/12/06 09:04:40
いつまでも待ってるわ

70:デフォルトの名無しさん
07/12/06 10:12:58
他の誰かがプログラムを作ってくれる日まで

71:デフォルトの名無しさん
07/12/06 11:43:45
かわいいふりして、うんこわりとやるもんだねと

72:デフォルトの名無しさん
07/12/06 15:00:31
今、Python勉強し始めの超初心者です。
他の言語の知識は全くありません。

大量の写真(.img)を一括で同じサイズにリサイズする
ってな事Pythonで出来ますかね?

PILとか使うのでしょうか?


73:デフォルトの名無しさん
07/12/06 18:07:48
・ファイルサイズを同じにする
・拡大縮小かけずにトリミングだけで同じサイズにカット
・拡大縮小かけるがアルゴリズムは適当で画像が劣化しても問題なし

どれにしますか


74:デフォルトの名無しさん
07/12/06 18:16:06
URLリンク(www.yasuhisa.com)
URLリンク(www.flickr.com)

75:デフォルトの名無しさん
07/12/06 18:46:08
URLリンク(makunouchi.jp)


76:72
07/12/06 19:11:05
>>73
カットは要らないと思います。
画像の劣化ですか…。そうですよね。

画像劣化せずに拡大縮小できたらいいなぁと思います。

大量のファイルをまとめてってのが一番の目的なんで
そこまで考えてませんでした(^^;

>>74 >>75
ありがとうございます
参考になります


77:デフォルトの名無しさん
07/12/06 19:57:08
>>76
そういう用途ではImageMagickが適当かな。
Python用ライブラリもあるけど、単純に外部コマンドでconvertを呼んじゃえばおk。

78:72
07/12/06 21:19:04
>>77
ありがとうございます!
調べてみたんですが、使うの難しそうですね…



79:デフォルトの名無しさん
07/12/06 21:46:21
urllib2でCGIに対してPOSTしようと思ってるんですが、
向こうのCGIがShift_JISしか受け付けないそうです。
普通、ブラウザの文字コードをShift_JISにして
フォームから送ればShift_JISになるのですが、
Pythonで文字コードを指定して送るにはどうすればよいのでしょうか?
下のようにAccept-Charsetを指定したのですがShift_JISでないという
反応が返ってきます。他に何かありますか?
アドバイスお願いします。

params = urllib.urlencode({"key_type":"1".encode(), "key_info":"テスト".encode("Shift_JIS")})
request = urllib2.Request("URLリンク(aaa.jp))
request.add_header("Accept-Charset", "Shift_JIS")
request.add_header("Content-Type", "application/x-www-form-urlencoded")
request.add_data(params)
src = urllib2.urlopen(request).read()
print src


80:デフォルトの名無しさん
07/12/06 22:38:05
u"テスト".encode("Shift_JIS")

81:デフォルトの名無しさん
07/12/06 22:45:23
>>79
ファイルの1行目に
# -*- coding: shift_jis -*-
と書くとうまく行くかも。

82:デフォルトの名無しさん
07/12/06 22:47:08
HTTP RequestとResponseの両方を表すクラスを作るとしたら、どんな名前にするのがいいでしょうか。
分けるべきという話は置いといて。

83:デフォルトの名無しさん
07/12/06 23:00:42
Commandとか・・・
ついでにGoFコマンドパターンにしてしまえ。

84:デフォルトの名無しさん
07/12/07 13:15:04
>>75
>URLリンク(makunouchi.jp)

なにこのデザイン。
1990年代かと思った。

85:デフォルトの名無しさん
07/12/07 13:23:33
質問です。
素数が昇順に出てくる無限リストを使いたかったら自前で実装するしかないですか?

86:デフォルトの名無しさん
07/12/07 14:29:38
p = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, ...]

87:72
07/12/07 14:31:40
また質問なんですが
ImageMagickを入れたほうがよいのでしょうか?
それとも、PythonMagickの方がよいのでしょうか?



88:デフォルトの名無しさん
07/12/07 16:22:58
>>87
やりたい内容による。
ものすごい単純なことやりたいだけなら、
ImageMagickのconvertを使ってshellから呼んだほうが楽。

Pythonから呼ぶことが重要なんであれば、
それ系のmoduleを入れるのが良い。

Pythonからexecするってのもありだけど。

89:デフォルトの名無しさん
07/12/07 18:38:13
linuxでpythonの環境を自分のhomeの下に作ることって可能なんでしょうか?
./configure --prefix=/home/aaa/
だと
/home/bbb
のユーザーは使えないのですよね

90:デフォルトの名無しさん
07/12/07 18:40:37
>>85
def primes():
 """Generates prime numbers.

 >>> import itertools
 >>> for p in itertools.islice(primes(), 15): print p,
 2 3 5 7 11 13 17 19 23 29 31 37 41 43 47
 """
 yield 2
 memo = [2]
 i = 1
 while True:
  i += 2
  for d in memo:
   if i % d == 0:
    break
  else:
   yield i
   memo.append(i)

91:デフォルトの名無しさん
07/12/07 19:24:37
>>89
/home/aaaがbbbから見れるんなら、
必要な環境変数を設定すれば大丈夫でしょう。
PATHやら何やら。

92:デフォルトの名無しさん
07/12/08 14:25:48
>>89
すれ違い、UNIXの勉強してこい


93:デフォルトの名無しさん
07/12/08 17:21:47
Python 3.0a2 リリース
URLリンク(www.python.org)


94:デフォルトの名無しさん
07/12/09 00:37:22
Python2.5.1でsqlite3を使いたいのですがimportでエラーが出てしまいます
標準ではないのでしょうか?
Python 2.5.1 (r251:54863, Dec 1 2007, 21:59:43)
[GCC 3.4.6 20060404 (Red Hat 3.4.6-8)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import sqlite3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python2.5/sqlite3/__init__.py", line 24, in <module>
from dbapi2 import *
File "/usr/local/lib/python2.5/sqlite3/dbapi2.py", line 27, in <module>
from _sqlite3 import *
ImportError: No module named _sqlite3
>>> import sqlite
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named sqlite
>>> from _sqlite3 import *
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named _sqlite3
>>>

95:デフォルトの名無しさん
07/12/09 00:58:03
sqlite入ってないんじゃね?

[oppai@centos5 ~]$ yum list sqlite
Loading "installonlyn" plugin
Setting up repositories
Reading repository metadata in from local files
Installed Packages
sqlite.i386       3.3.6-2    installed

[oppai@centos5 ~]$ ls /usr/lib/libsqlite*
/usr/lib/libsqlite3.so
/usr/lib/libsqlite3.so.0
/usr/lib/libsqlite3.so.0.8.6

[oppai@centos5 ~]$ ls /usr/include/sqlite*
/usr/include/sqlite3.h


96:デフォルトの名無しさん
07/12/09 08:38:09
ありがとうございます。
コマンドからは sqlite3 で実行出来て
dbも作れているので大丈夫だと思います。
あとPython2.3も入っているのですが、
こっちでは import sqlite しても問題なかったです。


97:デフォルトの名無しさん
07/12/09 08:46:28
$ yum list sqlite
Loading "fastestmirror" plugin
Setting up repositories
update 100% |=========================| 951 B 00:00
base 100% |=========================| 1.1 kB 00:00
addons 100% |=========================| 951 B 00:00
extras 100% |=========================| 1.1 kB 00:00
Determining fastest mirrors
Reading repository metadata in from local files
Excluding Packages in global exclude list
Finished
Installed Packages
sqlite.x86_64 3.3.6-2 installed
$ ls /usr/lib/libsqlite*
ls: /usr/lib/libsqlite*: No such file or directory
$ sudo find / -name '*libsqlite*' -print
/usr/lib64/libsqlite3.so.0
/usr/lib64/libsqlite3.so.0.8.6
/home/mae/work/Python-2.5.1.copied/Doc/lib/libsqlite3.tex
/home/mae/work/Python-2.5.1/Doc/lib/libsqlite3.tex
$ ls /usr/include/sqlite*
ls: /usr/include/sqlite*: No such file or directory

sqlite3.h が無いといけないんですよね orz

98:デフォルトの名無しさん
07/12/09 14:54:16
モジュールにも__init__や__del__のようなものを定義することができるのでしょうか?

99:デフォルトの名無しさん
07/12/09 16:23:53
>>98
つ リファレンスマニュアル

100:98
07/12/09 19:09:38
>>99
URLリンク(www.python.jp)にて
モジュールには、関数定義に加えて実行文を入れることができます。これらの実行文はモジュールを初期化するためのものです
という記述をみつけて__init__相当を実現できることを確認できたのですが__del__が分かりません
もうすこしヒントをいただけませんでしょうか

101:デフォルトの名無しさん
07/12/09 19:52:26
>>100
if __name__ == "__main__":
__credits__, __author__, __copyright__

モージュール内で __**__ 形式で書く時は定数
C言語のconstの代わりにしか使わないような気がする…

__revision__ = "$Revision: 196 $"[11:-2]

こんなのもいま読んでるソースに出て来てたけど
これも定数だったり。面白そうなプロジェクト見つけて
ソース読んだほうが手っ取り早いような…

102:デフォルトの名無しさん
07/12/09 20:08:14
というか無いだろ。

モジュールはオブジェクトじゃなくて
名前空間と考えるべき。

そもそもPythonエンジンは一度も__del__を呼び出さないで
終了してもいいことになっている。


103:デフォルトの名無しさん
07/12/09 20:36:14
import sys

class ExitHandler(object):
    def __del__(self):
        print 'bye!'

if __name__ != '__main__':
    sys.modules[__name__] = ExitHandler()

これで呼ばれないので無理
ところでsys.exitfuncというものがあってだな

104:98
07/12/09 20:51:46
ってゆーか こんなよくありそーな要求にすら こたえられない言語がNASAとかで使われてるってありえないだろ
そりゃスペースシャトルも事故るわwwww 探してみたんだけどrubyでもモジュール用の__del__みたいなのないみたいだしwwww
LLまだまだだなwwwwwwwww

105:デフォルトの名無しさん
07/12/09 21:13:07
_exitfunc = ExitHandler()
これなら呼ばれるわ。当たり前の話だね

106:デフォルトの名無しさん
07/12/09 21:27:52
モジュールすら理解できないのにプログラミングは無理だろ・・・

107:デフォルトの名無しさん
07/12/09 21:35:15
衝撃の新事実発覚!スペースシャトルの事故はPythonのせいだった!

108:デフォルトの名無しさん
07/12/09 21:47:35
モジュールのデストラクタが欲しいというのは初めて聞いた。
プログラム終了時に実行するコードを登録したいということなら、よくあるけど。
そもそもモジュールっていったんimportしたら廃棄できないんじゃないの?
なんでモジュールのデストラクタが必要なのか>>98に説明してほしいな.

109:デフォルトの名無しさん
07/12/09 21:52:37
>>108
なんとなく必要だったんだと思うよ、なんとなく。

110:98
07/12/09 22:25:11
なんかぬりっぽいのであきらめますプゲラッチョ...............

111:デフォルトの名無しさん
07/12/09 23:34:20
ほらな。

112:デフォルトの名無しさん
07/12/10 03:18:45
>>110
「釣りっぽい」の間違いだろ

113:デフォルトの名無しさん
07/12/10 06:25:24
Python を誰かに教えるとしたら、
どういう順番で教えるのがいいかな?

114:デフォルトの名無しさん
07/12/10 06:51:25
チュートリアルの最初の方コピペ

115:デフォルトの名無しさん
07/12/10 09:56:13
>>113
なにはともあれ。
「初めてのPython」と「はじめてのPython」の違いについて教えた方がいい。

116:デフォルトの名無しさん
07/12/10 10:10:42
>>113
全くプログラミング経験が無い相手なら『Pythonで学ぶプログラム作法』一択
プログラミング経験がある相手なら「チュートリアル読め」で以上

117:デフォルトの名無しさん
07/12/10 11:09:59
俺も >116 に一票

118:デフォルトの名無しさん
07/12/10 18:07:53
PIL.image.show()
がxv以外を使うようにできないでしょうか?

119:デフォルトの名無しさん
07/12/10 19:09:57
Python3000a1からa2に上げてみました。
なーんか前、うちの環境でだけでる
utf-8関係でエラーが出たなぁと思っていじってて
また遭遇。

C:\> python
>> help()
help> modules sys

これでエラーが出ちゃった。
前はhelp(なんか)で出てたっぽいけど
今回、help(sys) はちゃんと動いている
XPなんだけど、他にも出る人いる?

120:デフォルトの名無しさん
07/12/10 19:35:03
windowsで2.5と3.0って両立できるの?
怖くて試せない。

121:デフォルトの名無しさん
07/12/10 19:56:22
両立?インストールパス変えるだけでいいんじゃないの?

122:WinXP, 32bit, 2.5.1installed
07/12/10 20:05:39
とりあえず入れてみた。

と、書きたいところだが、
そこに行き着く前にインストーラがこけた。

以上


123:デフォルトの名無しさん
07/12/10 20:12:11
カクタス=サボテン

124:デフォルトの名無しさん
07/12/10 20:47:27
>>123
僕の名前を知ってるかい?

125:デフォルトの名無しさん
07/12/10 21:14:40
MinGW 5.0.2 のインストール
URLリンク(www.rouge.gr.jp)

C:\mercurial-0.9.5>dllwrap --driver-name gcc -dllname executer.dll example.o C:\Python25\libs\libpython25.a
dllwrap: no export definition file provided.
Creating one, but that may not be what you want

カレントディレクトリにexecuter.dllは作成できたけどインポートできないよ
そろそろ心が折れてしまいそうです…もうダメぽ

126:デフォルトの名無しさん
07/12/10 21:31:18
TortoiseHG使えばいいのに。
あとマルチやめろ。

127:デフォルトの名無しさん
07/12/10 22:21:10
>>126
webベースじゃないと嫌です


マルチポストの件は反省しています
もう二度とマルチポストしません…orz

128:デフォルトの名無しさん
07/12/10 22:31:31
>>127
今回は諦めましょう

129:デフォルトの名無しさん
07/12/10 22:44:05
>>128
諦められません!

片っ端から忘れていけばいいじゃない。 VistaにMinGWを入れる場合の参考資料
URLリンク(0xc000013a.blog96.fc2.com)
K-na TechNotes | MinGW のインストール
URLリンク(www.knatech.info)

コンパイル通ってるのにPythonから呼び出せないのは
納得できません…

130:デフォルトの名無しさん
07/12/10 23:50:12
URLリンク(www.python.org)
- On Windows, .DLL is not an accepted file name extension for
  extension modules anymore; extensions are only found if they
  end in .PYD.

131:デフォルトの名無しさん
07/12/11 00:17:24
関数呼び出す時に

a=hogehoge(x=10,y=20,z=30)

なんつーふうにできるじゃないですか。
この引数一式を変数に入れとくって出来ないんですかね?

par1=("x=10","y=20","z=30")
a=hogehoge( par1 )

じゃもちろん駄目なんですが…

132:デフォルトの名無しさん
07/12/11 00:28:25
kwargs = {'x':10, 'y':20, 'z':30}
a=hogehoge(**kwargs)

133:デフォルトの名無しさん
07/12/11 01:08:46
なんたら代入とか名前あったなぁ

134:デフォルトの名無しさん
07/12/11 08:17:02
Perlでいう
$| = 1(出力バッファリングの停止)をやりたいんですが。
ググると、
起動オプションに-uを付ける、
あるいは環境変数PYTHONUNBUFFEREDに何らかの値を代入する。
という方法があるのは分かったのですが、
なんかやり方が美しくないように思います。
コードの中だけで完結しておきたいんですが、
そういう方法はないでしょうか?

135:デフォルトの名無しさん
07/12/11 08:57:21
pythonプログラム中で環境変数を設定すればいいんじゃないかな

136:デフォルトの名無しさん
07/12/11 09:01:12
バッファサイズを0にして開けばおk
sys.stdout = os.fdopen(sys.stdout.fileno(), 'wb', 0)


137:デフォルトの名無しさん
07/12/11 10:00:48
ありがとう


138:デフォルトの名無しさん
07/12/11 10:15:29
PythonでwxPythonを使いながら色々と勉強しているのですが
wxPythonのDemo等でイベント関連のところでBind関数を使って
いますが、詳細を知ろうと思いwxPythonのドキュメントでこの関数を
探しているのですが見つかりません。
どのあたりに書かれているかご存じの方いらっしゃいませんか?

139:デフォルトの名無しさん
07/12/11 10:30:34
すいません。
自己解決しました。
ドキュメントの最初に
wxWidgets 2.8.4: A portable C++ and Python GUI toolkit
ってあるからてっきりこれがwxPythonのドキュメントかと思ってしまいました。
別の所に、 Package wxのドキュメントがあり、Bind関数の記述を
見つけることが出来ました。
お騒がせしました…

140:デフォルトの名無しさん
07/12/11 11:21:14
Windowsのcmd上で使っています。
ファイルのパスに日本語が含まれているときに限ってなのですが、
sys.argv[0]を表示させようとすると

hoge.py と直接実行したときと
python hoge.py とコマンド指定して実行したときとで動作が違います。

後者はそのままうまく表示されるのですが
前者はunicode(path, 'mbcs')しないと例外が出てしまいます。

どこが違うのでしょう?


141:デフォルトの名無しさん
07/12/11 12:33:08
誰かー。yahoo apiを使うならこれ使えってモジュール知らないか?

142:デフォルトの名無しさん
07/12/11 13:41:45
>>141
URLリンク(developer.yahoo.com)
本家みてもurllib, httplib, xml.*でしこしこ書いてるから
スタンダードなRESTライブラリってないんだと思う。
通信自体は大したことないしAPI毎の解析は結局個別に実装が必要だし
単純にそういうのでいいんじゃないかな。

URLリンク(pysearch.sourceforge.net)
それかこれをJapan対応にするのも有意義かもだけど。

将来的にxmlrpclibみたいにrestlib?が標準でつくといいね。

143:デフォルトの名無しさん
07/12/11 14:19:58
情報ありがとー

144:デフォルトの名無しさん
07/12/11 16:37:03
Linuxでioctl使いたくて↓を読んだんですが、
URLリンク(www.python.jp)
termios関連のものしか引数に渡せないんでしょうか。

URLリンク(home.mag.cx)
にあるLogitechのwebcamのLinux用デバイスドライバーの動作を、
Pythonで呼び出したい、というのが目的です。

linux/videodev.hに定義されているVIDIOCGCAPなどを使って、
URLリンク(www.gelato.unsw.edu.au)

ioctl(fd, VIDIOCGCAP, &vidcap);
// fdはfile descriptor
// vidcapはvideo_capability構造体
のようなCから呼べる動作をPythonで出来ないものでしょうか。

CでモジュールをPython用に書くしかないですかね。

145:デフォルトの名無しさん
07/12/11 17:10:09
>>140
再現しなかったよ。

C:\temp\テスト>pwd
c:/temp/テスト

C:\temp\テスト>type test.py
import sys
print sys.version
print sys.argv[0]

C:\temp\テスト>test.py
2.5 Stackless 3.1b3 060516 (release25-maint, Oct 4 2006, 12:32:12) [MSC v.1310
32 bit (Intel)]
C:\temp\テスト\test.py


146:144
07/12/11 17:16:06
自己解決。
URLリンク(sourceforge.net)
ここを参考にしたら出来そうです。
挫折したらまた来ます。

147:デフォルトの名無しさん
07/12/11 18:46:45
>>140
複数の python が入ってるんじゃね?

148:デフォルトの名無しさん
07/12/11 18:59:07
3p

149:デフォルトの名無しさん
07/12/11 23:08:15
行頭で
#-*- coding: shift_jis -*-
というように記載しているcodingの指定って変数とかに
格納されていたりするのでしょうか?
二箇所もかいたりするのを省略したいのですが。


150:デフォルトの名無しさん
07/12/11 23:53:49
行頭の一ヶ所に書いておけばいい

151:デフォルトの名無しさん
07/12/12 00:33:29
そうじゃなくて、行頭で書いたコードをプログラム中でも使いたいってことじゃね?
変数に入ってるかどうかしらんけど、なんかの関数で取得することはできそうだな。

152:デフォルトの名無しさん
07/12/12 01:07:24
以下のコードを使って独自の import を定義しようとしたんだけど:

import my_api # C によって実装した独自import関数を含むモジュール
def set_import():
 __builtins__.__import__ = my_api.my_import

実行すると __builtins__ に __import__ メンバが存在しないっておこられるんだけど
dir(__builtins__) してみたら、確かに __import__ だけが存在しない。
このコード、
Py_InitModule("my_api", APIの宣言テーブル)
PyObject* mo = Py_CompileStringFlags(上記コード, "hoge", Py_file_input, NULL);
PyObject* ret = PyObject_CallFunction(mo, "set_import", "()");
Py_DECREF(ret);
Py_DECREF(mo);

て感じで実行させてるんだけど、このやり方だと __builtins__.__import__ が定義されなかったりするのかな?



153:デフォルトの名無しさん
07/12/12 01:13:27
出来たとしてもキモイものが出来そうだ。

・ASCII
・Shift_JIS
・euc-jp
・utf-8
・スウェーデンなキャラコード(よーわからんw)

5つあったとして、importした時とかは、
どういう動作を期待してるんだろ?

Shift_JISモジュールがShift_JISを吐き出して、
euc-jpモジュールがeuc-jpを吐き出すのか?

Shift_JISモジュールをimportしたeuc-jpモジュールは、
何を吐き出すんだ?両方混ざるのか?

俺は
  ソースが何語で書かれているか
  何語を入力・処理・出力するのか
この2つは、別のものだと考えているけどね。


154:デフォルトの名無しさん
07/12/12 06:39:40
simplejsonのコンパイルって簡単にできないですか?win

155:デフォルトの名無しさん
07/12/12 08:22:34
>>145
追試ありがとうございます。
確かにそのコードだと問題出ませんでした。
自分のところで書いてたコードを晒します。
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
import os
a = unicode(sys.argv[0], 'mbcs')
b = os.path.abspath(os.path.dirname(a))
print a
print b
print u'%s/ほげ' % (a)
try:
 print u'%s/ふが' % (b.decode('mbcs')) # testpath.py のときだけエラー
except UnicodeEncodeError, (e):
 print sys.exc_info()[0]
 print e
 print e.args
try:
 print u'%s/ふが' % (b) # python testpath.py のときだけエラー
except UnicodeDecodeError, (e):
 print sys.exc_info()[0]
 print e
 print e.args


156:デフォルトの名無しさん
07/12/12 08:23:08

C:\日本語>testpath.py
C:\日本語\testpath.py
C:\日本語
C:\日本語\testpath.py/ほげ
<type 'exceptions.UnicodeEncodeError'>
'ascii' codec can't encode characters in position 3-5: ordinal not in range(128)
('ascii', u'C:\\\u65e5\u672c\u8a9e', 3, 6, 'ordinal not in range(128)')
C:\日本語/ふが

C:\日本語>python testpath.py
testpath.py
C:\日本語
testpath.py/ほげ
C:\日本語/ふが
<type 'exceptions.UnicodeDecodeError'>
'ascii' codec can't decode byte 0x93 in position 3: ordinal not in range(128)
('ascii', 'C:\\\x93\xfa\x96{\x8c\xea', 3, 4, 'ordinal not in range(128)')


157:デフォルトの名無しさん
07/12/12 08:24:21
>>147
pythonは1つだけ(2.5.1)です

158:デフォルトの名無しさん
07/12/12 08:34:52
Python3000で組み込み関数から file が削除されてるのはなぜ????????

159:デフォルトの名無しさん
07/12/12 08:38:51
open()使いなさいよってことかと

160:デフォルトの名無しさん
07/12/12 08:38:57
testpath.pyのみのときは元々実行ファイルのパスが判明しているが
(エクスプローラでダブルクリックするとさらに状況が違うかも知れない)
python testpath.pyのときは、実行ファイルがカレントディレクトリにいるため
プログラム中の
os.path.abspath
または
os.path.dirname
の内部でパスが補完されている

おそらく
C:\>python C:\日本語\testpath.py
を実行すれば前者(testpath.pyのみ)と同じ結果になるだろう

os.path.abspath
または
os.path.dirname
のUNICODEの取り扱いに問題があると思われ


161:デフォルトの名無しさん
07/12/12 08:47:28
>>159
file は2.2か2.3で新しく追加された関数(というかコンストラクタ)で、
むしろ open の方が古い仕様で file のエイリアスって
扱いじゃなかったっけ。。。。。。

162:デフォルトの名無しさん
07/12/12 09:05:31
整理)
b = os.path.abspath(os.path.dirname(unicode(sys.argv[0], 'mbcs')))
の状況で(この段階↑で既に変なことしてるように見えるが)
1) print u'%s/ふが' % (b.decode('mbcs')) # testpath.py のときだけエラー
2) print u'%s/ふが' % (b) # python testpath.py のときだけエラー

1)になるパターン
・C:\日本語>testpath.py
・エクスプローラからダブルクリック
・C:\>python 日本語\testpath.py
・C:\日本語>python ..\日本語\testpath.py
・C:\日本語>python C:\日本語\testpath.py

2)になるパターン
・C:\日本語>python testpath.py
のみ?

結論)
とりあえず
a = sys.argv[0]
b = unicode(os.path.abspath(os.path.dirname(a)), 'mbcs')
print u'%s/ふが' % (b)
という書き方なら(1)(2)共に問題ありませんでした

本当にありがとうございました


163:デフォルトの名無しさん
07/12/12 09:55:33
WindowsXP+Python3.0a2でIDLE起動したんだが
プルダウンメニューとコンテキストメニューが派手にバグっててorz
一瞬何が起こったのか分からんかった

164:デフォルトの名無しさん
07/12/12 10:11:11
こんな流れか?

(1). iterator導入。
(2). 新規にfile()作ったぜ。みんなコレ使え。
(3). iterator浸透。generator導入。
(4). なんだかもう、open()はfile()のエイリアスでいい気が……
(5). マニュアル『open()はfile()のエイリアス。過去互換です。』..._〆(゚▽゚*)
(6). file()いらねーだろ。統一感ないし。"みんな"使ってないし。←いまここ
(7). じゃあfile()は廃止ね。(5)をまじめに実行した奴m9(^Д^)プギャー


165:デフォルトの名無しさん
07/12/12 10:20:01
変数名に file 使いたいから file() 使いにくいんだよね……

def f():
  file = file("/dev/null")  # ここで UnboundLocalError が飛ぶ


166:デフォルトの名無しさん
07/12/12 11:17:45
>>160
>>162

解決しました。
ありがとうございました。


167:デフォルトの名無しさん
07/12/12 14:20:08
なんだよマニュアルに open() は過去互換とかいうから
file() 使っていたのにヽ(`Д´)ノ

168:デフォルトの名無しさん
07/12/12 14:47:54
import urllib

conn = urllib.urlopen("test.txt")
data = conn.read()
conn.close()

みたいなかんじでIO関連の処理はopen+closeでやる
ものだと何となく認識してた俺は大丈夫だったようだ…

169:デフォルトの名無しさん
07/12/12 15:46:30
Python 2.4:
以前の関数名である open() は互換性のために残されており、 file() の別名となっています。

Python 2.5:
When opening a file, it's preferable to use open() instead of invoking this constructor directly.
ファイルを開くときは、このコンストラクタ(file)を直接実行するより、open()を使う方が望ましい。

170:デフォルトの名無しさん
07/12/12 17:25:58
>167
オレモオレモ… orz

171:デフォルトの名無しさん
07/12/12 17:33:15
Python 2.3でこの関数を呼ぶと、
def _IOC(dir, type, nr, size):
  return ( dir << _IOC_DIRSHIFT) | ¥
     (ord(type) << _IOC_TYPESHIFT) | ¥
     ( nr << _IOC_NRSHIFT) | ¥
     ( size << _IOC_SIZESHIFT)

/usr/lib/python2.3/site-packages/video4linux/__init__.py:112: FutureWarning: x<<y losing bits or changing sign will return a long in Python 2.4 and up
return ( dir << _IOC_DIRSHIFT)

って、出るんですけど、
何を修正すればこのwarningは消えますか?

172:デフォルトの名無しさん
07/12/12 17:40:54
URLリンク(docs.python.org)
URLリンク(www.python.jp)


173:デフォルトの名無しさん
07/12/12 18:11:07
>>172
単にwarningが表示されないようにするのではなく、
warningの原因自体を取り除きたいです。

>>171の書き方のどこがまずいんでしょうか。

174:デフォルトの名無しさん
07/12/12 18:16:18
def func(a, b):
pass

という関数があったとして、
func(1, 2)
と書くかわりに
tup = (1, 2)
func(tup)
みたいにしたいんですが、
どうやったらいいでしょうか。
func自体は修正できないものとします。

175:デフォルトの名無しさん
07/12/12 18:18:34
tup = (1, 2)
func(*tup)

176:デフォルトの名無しさん
07/12/12 18:24:41
>>175
ありがとうございました。

177:デフォルトの名無しさん
07/12/12 20:44:17
>>175
これ便利だよね関数にタプル渡して処理してくの

def getSafeText(self, text):
  htmlFixes = [ ("&", "&"), ("<", "<"), (">", ">"), ]
  for fix in htmlFixes:
    text = text.replace(*fix)
  return text

178:デフォルトの名無しさん
07/12/12 20:52:00
なんかと思ったら&amp;、&gt;、&lt;への変換か

179:デフォルトの名無しさん
07/12/12 21:09:58
&amp;amp;と書かないと意味不明

180:デフォルトの名無しさん
07/12/13 00:01:57
ターミナルからpythonインタプリタを呼び出して利用しているのですが、
バッファをクリアする方法はあるでしょうか。

181:デフォルトの名無しさん
07/12/13 02:37:39
指定された条件でファイルを検索し条件にマッチしたファイルがあるディレクトリ上のcallback.pyのimportを行い
その中で定義されてる関数on_matchを呼び出すというような実行可能ファイルをCで書きたいと思っています

ただPyImport_ImportModuleを呼び出すとファイルがあるディレクトリをPythonに伝えていないのでcallback.pyは
もちろんimportされません

$PYTHONPATHをプログラムの中でいじくればimport対象にディレクトリ上のcallback.pyを追加できるとは思うのですが
環境変数をいじらずに同等のことを行える関数はありますでしょうか?

182:デフォルトの名無しさん
07/12/13 03:49:36
>>181
Python Programming Language :: PyImport_ImportModule/embeddin g: surprising behaviors
URLリンク(www.megasolutions.net)

参考になるかわからないけどこんなの見つけた

183:デフォルトの名無しさん
07/12/13 05:08:04
スレち気味ですみません

パイソンのdictが便利なんですが
初期化とかsetitemとかupdateのときに
type checkをしたいんです。

dictをサブクラスしてできるんですが
いちいちやるのがすごくめんどうくさい
なんかいまやってることにパイソンはあんまり向いてないような気がしてきました

なにかお勧めの言語はあるでしょうか?
javaとか?

当方perl/pythonとあとC++をすこしつかいます

184:デフォルトの名無しさん
07/12/13 05:48:29
>>181
import hage.fuga.hoge.callback
じゃだめ?

185:デフォルトの名無しさん
07/12/13 07:13:13
>>171
x << y を int((long(x) << y) & sys.maxint) と直せばよいかと。


186:デフォルトの名無しさん
07/12/13 07:18:10
>>173
まずいということではなくて、2.3以前と2.4以降で << の結果が変わりますよーというお知らせ。


187:181
07/12/13 10:05:16
>>184
それだと実行可能ファイルがあるディレクトリからの相対的な位置指定しかできなく
実行可能ファイルがあるディレクトリよりroot方向よりの指定もできないと思います

パスをなんらかの方法で指定し(最悪 環境変数PYTHONPATH
importにモジュール名のみを渡してimportというのがよいかと思っています

188:デフォルトの名無しさん
07/12/13 10:19:45
rubyとpythonって将来の有望性はどっちが上なんですか?
初心者なんでどっちか片方をスクリプトの基礎を勉強しながら取り組みたいのですが

189:デフォルトの名無しさん
07/12/13 10:24:45
PHPだろ常考

190:デフォルトの名無しさん
07/12/13 10:27:41
んだPHPでもやっとけ
そして二度とPythonスレには来るな

191:デフォルトの名無しさん
07/12/13 11:11:05
>>188
マジレスすると、どっちも有望
WebプログラミングではRails人気もあってRubyが有望
でも企業内ではPythonのほうが広範囲に使われている(Google, Pixar, DreamWorks, Youtube, Sega, etc)


192:デフォルトの名無しさん
07/12/13 11:23:42
>>181
/* 独自の import 関数を定義する */
PyObject* MyImport(const char* name, PyObject* globals, PyObject* locals, PyObject* fromlist) {
 /* 最初に標準でのインポートをこころみる */ 
 PyObject* module = PyImport_ImportModuleEx(name, globals, locals, fromlist);
 if (module && PyModule_Check(module))
  return module;
 PyErr_Clear(); /* Import エラーを破棄 */
 Py_XDECREF(module);
 /* 標準インポートに失敗した時だけ独自インポートを試みる */
 module = 独自にインポートするか、パスを変えてもう一度 PyImport_ImportModuleEx を呼び出す
 return module;
}

この API を、例えば "my" モジュールの "importhook" という名前で登録しておく.
そして、__builtins__['__import__'] を my.importhook で置き換えるようなコードを書く

const char* pysource = "\n\
def replace_import():\n\
 import my\n\
 __builtins__['__import__'] = my.importhook\n"

これを Py_CompileString でコードオブジェクト化してから PyObject_GetAttrString で
replace_import 関数オブジェクトを取り出し、PyObject_CallFunction で実行する。
もしかしたら PyRun_String でそのまま実行してOKかもしれんけど、その場合は globals 引数を
適切に設定しないとダメだと思う。

とりあえず、これで import を実行する度に MyImport が呼ばれるようになるから、あとは
自分でパスを補完するなり独自に取り込むなりすれば良い

193:デフォルトの名無しさん
07/12/13 11:34:29
独自 import を定義する時は、「独自インポートに失敗したら標準インポート」よりも
「標準インポートに失敗したら独自インポート」の方が無駄がなくていいよ。

__import__ は既に import されているかどうかに関わらず、
import 文が実行されたら必ず毎回呼び出されるから、もし独自 import の方を先に処理すると
インポート済みかどうかって事を毎回自分で調べる必要があるので無駄な処理時間が増える。



194:デフォルトの名無しさん
07/12/13 11:41:45
>>191
>企業内ではPythonのほうが広範囲に使われている(Google, Pixar, DreamWorks, Youtube, Sega, etc)

こんなウソを信じちゃダメだ!!
PythonができればGoogleに入社できるなんて嘘っぱちだ!!!

195:デフォルトの名無しさん
07/12/13 11:59:34
>>188
プログラマなら複数言語できてあたりまえだし
必要にせまられれば柔軟に吸収できるもんだよ。
だからとっかかりは将来性とかかんがえずに好みできめていいよ。
(イメージロゴがすきだとか興味あるアプリがあるとか)
あと最初に変なクセがつく危惧もあるけど意識して複数こなせば解消できる。

196:デフォルトの名無しさん
07/12/13 12:01:07
マジレスすると

(C or Java or PHP) + (Python or Ruby)

これ最強。

197:デフォルトの名無しさん
07/12/13 12:02:55
195のレスが情報量ゼロな件。

198:デフォルトの名無しさん
07/12/13 12:22:42
197のレスが情報量ゼロな件。

199:デフォルトの名無しさん
07/12/13 12:46:40
>>183
typecheckていうのをデコレータとして作って、

class mydict(dict):
   __init__=typecheck(dict.__init__)
   __setitem__=typecheck(dict.__setitem__)

200:171
07/12/13 13:24:39
>>185-186
ありがとうございます。
module内で定義している定数全てに、
'L'をつけて対応しました。

201:デフォルトの名無しさん
07/12/13 16:05:50
>196

(C or アセンブラ) and (Perl or Java or PHP or Python or Ruby)

の間違いじゃねーの?


202:デフォルトの名無しさん
07/12/13 16:09:35
>>192 乙 しかしながら181は
"独自にインポートするか、パスを変えてもう一度 PyImport_ImportModuleEx を呼び出す "
という部分に関してPYTHONPATHを使う以外の方法が分からなくて質問してきてると思われる

というわけで
URLリンク(mail.python.org) とか
URLリンク(mail.python.org) を見てみることをお勧めする

203:デフォルトの名無しさん
07/12/13 16:23:45
python unconference とかいうのに行ってきた。


204:デフォルトの名無しさん
07/12/13 16:51:12
(C and C++ and (Java or C#)) and (((Perl or PHP) and (JavaScript) and (Python or Ruby or LISP)) or ((JavaScript) and (Python or Ruby or LISP)))


205:デフォルトの名無しさん
07/12/13 17:11:39
素直に、「PerlとPHPは要らないと思うんだ」と言えんか。

206:デフォルトの名無しさん
07/12/13 17:36:57
Unixをプラットホームに構えるならPerlはツールとして当面必要だろjk
PHPと同列にするセンスに違和感。

207:デフォルトの名無しさん
07/12/13 17:43:00
誰にも必要とされない言語なんて悲しすぎるじゃないですかー

208:デフォルトの名無しさん
07/12/13 18:27:22
(C and (perl or python or ruby)) or Java

209:デフォルトの名無しさん
07/12/13 19:35:48
Perl or Python でいいのにRuby絡ませたがる奴は誰だ

210:デフォルトの名無しさん
07/12/13 20:11:24
>>204
Lisp みたいな括弧の数だな

211:デフォルトの名無しさん
07/12/13 20:14:43
将来も考えてるならPHPとかPerlとかにどっぷりつかるのはやめたほうがいい

212:デフォルトの名無しさん
07/12/13 22:40:58
関数内関数から、外側の関数のローカル変数を更新する方法はないでしょうか?

def f():
  def g():
    z = 3 # fのローカル変数zを更新したい
  z = 0
  g()
  return z # 3を返して欲しい

のようなコードでは、gのローカル変数zの更新になってしまいます。

かといってgの先頭にglobal zを加えると、fのスコープを飛ばしてglobalなスコープを見に行くので
エラーになります。

213:デフォルトの名無しさん
07/12/13 23:03:30
def f(): 
    def g(): 
        f.z = 3
    f.z = 0 
    g() 
    return f.z


214:デフォルトの名無しさん
07/12/13 23:40:57
>>> def f():
...  def g():
...   f.z = 3
...  f.z=0
...  g()
...  return f.z
...
>>> f()
3
>>> h=f
>>> f=0
>>> h()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "<stdin>", line 4, in f
AttributeError: 'int' object has no attribute 'z'

215:デフォルトの名無しさん
07/12/14 01:20:34
>>201
>(C or アセンブラ) and (Perl or Java or PHP or Python or Ruby)

オッサンは窓際で朽ち果てていてね。

216:デフォルトの名無しさん
07/12/14 02:10:40
ああ、そういうもっと根本的なAPIの質問だったのか。なら
.py ファイルを fopen なりなんなりで開いて文字列読んで
Py_CompileString でコードオブジェクトにしてから
PyImport_ExecCodeModule に食べさせてインポート完了。

.pyc や .pyo の場合は先頭の4バイトから long を読んで、
その値を PyImport_GetMagicNumber と比較してマジックナンバーをチェック。(別にチェックしなくてもいいけど)
次の4バイトは完全無視。
残りのバイト列を PyMarshal_ReadObjectFromString か PyMarshal_ReadLastObjectFromFile に
食べさせればコードオブジェクトが出てくるから、
それを PyImport_ExecCodeModule に渡せばインポート完了。
Py_DECREF とか忘れないように。

217:デフォルトの名無しさん
07/12/14 02:11:28
自分の職場は
(Fortran or C or C++) and (awk or Perl or Python or Ruby)
だな

218:デフォルトの名無しさん
07/12/14 02:13:48
ていうか、ただでさえ Python 日本語サイト少ないのに、 C-API の話となるとほぼ皆無だよね。
標準ドキュメントが充実してるとはいえ、ちょっとした Tips が分からないのは苦労する。
ていうか、C実装の領域まで踏み込んで Python 使ってる人ってどれぐらいいるんだろうか。
みんなは CからPython使ってる?

219:デフォルトの名無しさん
07/12/14 02:25:53
ところで、 PySys_SetPath とか Py_VaBuildValue とかってマニュアルに載ってないよね?
ソース見てて初めて気がついた。PySys_SetPath と同じ機能の関数つくっちゃった後だったよ。。。orz

__import__ 関数を自分定義の関数でオーバーライドできるという事は、
ローカルにライブラリファイルを全く持たないで、import 文を実行したときに
ネットワークから直接ファイルを読んでくるってのが可能だと思うんだ。
どっかのサーバに標準ライブラリその他をまるごと置いておけば、
インストール作業を全くすることなく、なおかつコンパクトなスタートアップスクリプトだけを
配布すればよい。これでなんか面白そうな事できないかな。。。。



220:デフォルトの名無しさん
07/12/14 02:36:58
>>218
SWIG とかで楽できる領域を越えたくない…
標準ドキュメントでいろいろ調べられる点については JNI よりマシだと思った

221:デフォルトの名無しさん
07/12/14 03:08:47
>>218
CからPythonを呼ぶのは、
Cで書くのマンドクセだから
本当にただ呼び出すだけだ。

PythonからCを使うのは、
Cのライブラリが目的だから
これも呼び出すだけだ。

CでPython関数をモリモリは使わんなぁ。


>>219
一般的な問題を話させてもらうと、
ローカルとネットワークはやっぱり違う。

ローカルとネットワークの抽象化をライブラリ層で図ろうとしても、(←やりがいのある作業だ)
必ず実装がアプリ層に漏れてきて、面倒ごとが増える。(←何故か作業が増えている)
上手くいきそうでも、中々うまくいかない。(←みんながイラついてくる)
そしてユーザー層まで漏れていく。(←どうしろというんだ)

例えばだけど、
たかが50行のソースを、
py2exe使って依存ファイルを詰め込んだ
巨大な10MBのexeファイルで配るのは非常に馬鹿馬鹿しいことだ。
つーか馬鹿にされる。

でも一番トラブルが少ない。←これ重要だと思うよ


222:183
07/12/14 04:01:51
>>199
助言ありがとうございます
メタクラス、デコレータとかちょっと真剣に勉強してみます

223:デフォルトの名無しさん
07/12/14 07:08:06
>>219
import hook したいだけならサポートモジュールを作ったことがあるよ

224:デフォルトの名無しさん
07/12/14 10:27:15
何でeasy_installを標準パッケージに入れないんだろ?
入れてこそ真価を発揮すると思うんだけど……


225:デフォルトの名無しさん
07/12/14 10:41:51
>>213
def f():
  z=[0]
  def g():
    z[0] = 3
  z[0] = 0
  g()
  return z[0]


226:デフォルトの名無しさん
07/12/14 13:11:15
>>225
ポール・グレアムはそうやっているね。
URLリンク(practical-scheme.net)
で、↓こういう反論が来たと。
URLリンク(practical-scheme.net)


227:デフォルトの名無しさん
07/12/14 15:18:46
Guidoはレキシカル変数が暗示的な変数に見えたんだろうな。
そして self と __アンダ_バ__ を用意したわけだ。


228:デフォルトの名無しさん
07/12/14 16:01:05
つまり、こう言いたい訳ね。

>>> class F:
  def __call__(self):
    self.z = 0
    def g():
      self.z = 3
    self.z = 0
    g()
    return self.z

  
>>> f = F()
>>> f()
3
>>>


229:デフォルトの名無しさん
07/12/14 16:08:05
Guido van Rossumって
日本語の発音だとどうなるの?
ガイド・ヴァン・ロッサム?

230:デフォルトの名無しさん
07/12/14 16:32:20
>>229
田中太郎です。

231:デフォルトの名無しさん
07/12/14 16:43:52
ジード ファン ロスム

232:デフォルトの名無しさん
07/12/14 17:03:29
URLリンク(slashdot.jp)
グイド・ヴァンロッサム氏

233:デフォルトの名無しさん
07/12/14 17:31:30
ファンデルワールス力とかファンデルヴェルデンとか、オランダ人のvanはファンと読むのが慣例のような気がする

234:デフォルトの名無しさん
07/12/14 17:41:18
ドイツ語だからな

235:デフォルトの名無しさん
07/12/14 18:12:42
ふぁんでるわーるすか!


236:デフォルトの名無しさん
07/12/14 18:16:00
ふるへっへんど

237:デフォルトの名無しさん
07/12/14 18:30:16
ホィド・ファン・ロシューム

238:デフォルトの名無しさん
07/12/14 18:48:25
ドイツ語はvon

239:デフォルトの名無しさん
07/12/14 19:43:54
>>212
○global z
×nonlocal z

まぁ2.5にゃないんですけどね

240:デフォルトの名無しさん
07/12/15 00:35:56
フォン•ノイマン Von Neuman

241:デフォルトの名無しさん
07/12/15 00:45:21
ガイドさん治

242:デフォルトの名無しさん
07/12/15 08:49:58
>>239
○と×、逆じゃない?

243:デフォルトの名無しさん
07/12/15 12:27:13
初めてのPythonの古いほう(初版)を古本屋で買ってしまったんですが
第2版を買いなおした方が良いでしょうか?
2000~2004の間にどれくらい、言語そのものの拡張と本そのものの
項目が追加されたのかが気になって…。

244:デフォルトの名無しさん
07/12/15 12:38:00
基本を覚えちゃって、あとはマニュアルでも読めばいいんじゃね。
プログラム初めてなら新しい方がいいかもしれんね。

245:243
07/12/15 13:06:52
>>244
ありがとうございます。言語の経験はC++ぐらいなんですが、
Sconsを使っているアプリがWindowsでビルドできなくて
困ってました。
とりあえず、まずは買ってしまった本を読み切るようにします。

246:デフォルトの名無しさん
07/12/15 14:17:33
他言語の経験あるなら古い本を読みきろうとか思わずに
公式チュートリアルをバッと読むのがいいとおもう


247:243
07/12/15 14:45:53
>>246
orz…。チュートリアルを先に見てればよかった…。
でもせっかくなんで両方見ながらやってきます。
どうもありがとうございます。

248:デフォルトの名無しさん
07/12/15 16:01:26
チュートリアルには、
他言語との違いについてもっと書いてくれるとありがたかった。

249:デフォルトの名無しさん
07/12/15 21:06:27
Python勉強する人って、他にどんな言語を知ってるんだろう?

Javaが嫌になって流れてきた人とか、Perlの汚なさが嫌になった人とか、PythonにLispに類似したものを
見出した人とか、何もバックグラウンドがない素人とか.... どんな人が多いんだろうね?


250:デフォルトの名無しさん
07/12/15 21:16:57
AWK->Perl->Ruby->Python
Javascript
C
ABEL,AHDL,VHDL
ってとこでつね


251:デフォルトの名無しさん
07/12/15 21:33:39
>>242
うんその通り
今気付いたorz

252:デフォルトの名無しさん
07/12/15 21:35:58
MSX-BASIC → Python

かじってみた言語ならマシン語のハンドアッセンブルから
Smalltalk まで他にもたくさんあるけど
自分の目的で使うために習熟したのはこの2つだけ

253:デフォルトの名無しさん
07/12/15 22:07:29
>>252
オッサン(wwwwwwwwwwww

254:デフォルトの名無しさん
07/12/15 22:29:09
おっさんだからといって馬鹿にしてはいけない。
ゆとりの俺がいうんだから間違いない。


255:デフォルトの名無しさん
07/12/15 22:31:26
(´-`).。oO(hsp...→vb→python

256:デフォルトの名無しさん
07/12/15 22:44:25
>>248 他言語との違い

を挙げる時、どの言語の例を挙げるのが妥当なのか知りたかったんだけど、簡単には決められない気がするよ。
そもそも、チュートリアルなら下手に内容を詰め込みすぎない方が混乱を防げるような気がするね。

Pythonを勉強する時って、他言語での経験って役に立ったりするのかな?Python自体、すごくシンプルな
言語なので、経験はあるに越したことはないのかも知れないけど、必要ないような気もするね。



257:デフォルトの名無しさん
07/12/15 22:45:33
>>249
BASIC(高校の授業)->Fortran77(大学の講義)->C(卒研)->Java(趣味)->Python(生きる目的(ジョーク))
少し体験してみたもの:C++、C#、Scheme、OCaml、その他
色々弄ってきたけどPythonが一番使いやすいね。インデントでブロックを表現する所なんて最高だよ。

258:デフォルトの名無しさん
07/12/15 22:53:50
>>248
スレリンク(tech板:379番)


259:デフォルトの名無しさん
07/12/15 22:56:18
BASIC→VB(講習)→C++→JavaScript→(DSLいろいろ)
→PHP(CGIのため)→Perl(を覚えようとして逃げ帰る)→C++(再覚醒)
→Python(ついに見つけたユートピア)

って感じ。付き合った期間はC++が一番長いかな。
PrologやHaskellも興味はあるんだけど今の所使い道が無いので…

260:デフォルトの名無しさん
07/12/15 23:29:23
>>249
C/C++に疲れたひとですが


261:デフォルトの名無しさん
07/12/15 23:31:07
Ruby->D->Python

262:デフォルトの名無しさん
07/12/15 23:54:30
Pascal(6ヶ月)→ブランク期間(4年半)→Perl(6ヶ月)→Python(2年弱)

263:デフォルトの名無しさん
07/12/16 00:04:00
252は伯爵?

264:デフォルトの名無しさん
07/12/16 01:13:23
C -> (Matlab) -> C++ and Python

265:デフォルトの名無しさん
07/12/16 01:22:04
IronPythonStudioがインストールできん…。
VisualStudio 2008 Shell Isolated Redistributable がないって言われる。入ってるのに…。

266:デフォルトの名無しさん
07/12/16 02:35:32
PL/I->MS-BASIC->アセンブラ(8086/68000)->C->C++->Perl->PHP->Java->Ruby->Python
おじさん(笑)です。

267:デフォルトの名無しさん
07/12/16 02:50:21
辞書を値でソートした上で取り出したいのですが、どういう方法がありますか?

268:デフォルトの名無しさん
07/12/16 02:56:07
>>263
誰?


269:デフォルトの名無しさん
07/12/16 03:11:20
d = {'z':1, 'x':2, 'y': 3}
l = list(d.itervalues())
l.sort()
print l

l = d.items()
l.sort(key = lambda v: v[1])
print l


270:デフォルトの名無しさん
07/12/16 03:44:24
>>> import operator
>>> d = {'z':1, 'x':2, 'y': 3}
>>> sorted(d.iteritems(), key=operator.itemgetter(1))
[('z', 1), ('x', 2), ('y', 3)]

271:デフォルトの名無しさん
07/12/16 05:01:34
HyperTalk->awk,AppleScript->Perl->Ruby,JavaScript,VBA->Python
Pythonは独特だと思う。
Pythonから始めた人はスムーズに習得できたのか知りたい。

272:デフォルトの名無しさん
07/12/16 06:17:53
pythonのforなんでこんなんなの?
オライリー「pythonチュートリアル」にrangeで等差数列生成して回せって書いてるけど
どう考えてもメモリの無駄じゃないの?

273:デフォルトの名無しさん
07/12/16 06:53:17
メソッドの中にselfってつけて変数かくと外からいじれるけれどこれはあんまり良くないことですか??

274:デフォルトの名無しさん
07/12/16 07:10:02
>272
つxrange

まあpython3.0ではrangeもxrange相当になるけどな

275:デフォルトの名無しさん
07/12/16 07:26:08
>>274
ああ、こんなのあるんだ
㌧㌧

276:デフォルトの名無しさん
07/12/16 14:07:31
for i in range(start, end):
 print seq[i]



for i in seq[start:end]:
 print i

はどちらがいいのかな。スライス表記の方が
すっきり記述できるけど、これってコピー操作入ってるんでしょ?

277:デフォルトの名無しさん
07/12/16 14:19:56
>>276
これはコードが簡素すぎるけど
実際ならindexを明示したいかどうかで変わるかな。
どちらもディープなコピーはないのでindexの生成分前者のが損だけど
わかりやすさの前には軽微な事。

278:デフォルトの名無しさん
07/12/16 15:32:09
>>> import __main__
>>> print "Hello"
Hello
>>> print dir(__main__)
['__builtins__', '__doc__', '__main__', '__name__']
を埋め込みで書くと
int main(int ac, char** av)
{
 shared_ptr<void> py(py_initialize(), py_finalize);

 shared_ptr<PyObject> main_(py_incref(PyImport_ImportModule("__main__")), py_decref);
 if(!main_) {
  std::cerr << "ERROR: module __main__ not found" << std::endl;
  PyErr_Clear();
  return 1;
 }

 shared_ptr<PyObject> tmp(
  py_incref( PyRun_String(
    "print \"Hello\"\n"
    "print dir(__main__)"
   , Py_file_input
   , main_.get()
   , main_.get() )),
  py_decref );
 return 0;
}
になると思うのですがうまくうがきません
Exception exceptions.NameError: "name '__main__' is not defined" in 'garbage collection' ignoredと表示されcore dumpしちゃいます
"print dir(__main__)"をコメントアウトするとHelloが表示され正常終了します

279:デフォルトの名無しさん
07/12/16 15:39:45
>>276
seqがタプルで、タプルのスライスの実装が工夫されてたら後者が得かな。
工夫って言うのはスライス元の一部を共有するってことね。ソース見たことないから実際はどうか分からないけど。

280:デフォルトの名無しさん
07/12/16 15:49:24
っ num*


281:279
07/12/16 16:11:01
2.5のソース見てみた。一個一個コピーしてたよ。
特例として、スライス範囲がスライス元タプル全体と一致するならスライス元のタプルをそのまま返してた。

282:デフォルトの名無しさん
07/12/16 18:35:00
リストだったらどうなの?

283:デフォルトの名無しさん
07/12/16 18:41:53
スライスはコピーするとマニュアルに書いてある


284:デフォルトの名無しさん
07/12/16 21:44:03
範囲指定ならseqスライス、ざっくり個数指定ならrangeしか知らなかったw
両方同じように使えるのに驚いて、初めてrange()の正書式読んだ…

xrangeなる省メモリ代替(代わりにDocによれば用途外だと重い?)も知れて、
まっこと有意義な一日

285:デフォルトの名無しさん
07/12/17 01:06:45
URLリンク(www.unixuser.org)
ここにpythonはlispの数十倍遅いって書いてるんですがマジですか?

286:デフォルトの名無しさん
07/12/17 01:36:28
速度は実測が基本


287:デフォルトの名無しさん
07/12/17 02:05:35
日本語訳の時点で5年前の記事だしな

288:デフォルトの名無しさん
07/12/17 04:14:28
LispはCより速いらしいからしょうがないよね

289:デフォルトの名無しさん
07/12/17 04:43:24
関数型だから十分ありえるんじゃね?
プログラム構造やメモリ操作の見通しがたち易いからコンパイル時も実行時も最適化がめっさ効く。
だてに何十年も研究されてないし。

290:デフォルトの名無しさん
07/12/17 04:59:02
Lispってそんなスゲーの?
やってみようかな・・・

291:デフォルトの名無しさん
07/12/17 05:39:55
The Django Book
URLリンク(www.djangobook.com)


292:デフォルトの名無しさん
07/12/17 08:51:57
>>285
あんまり参考にならないけど、それでも数十倍の開きは付いてるね。

URLリンク(shootout.alioth.debian.org)

Python を使うなら速度は気にしない方が良いよ。

293:デフォルトの名無しさん
07/12/17 09:19:10
>>285
しんやまの書く記事を信用するなよボケ(wwwwwwww

294:デフォルトの名無しさん
07/12/17 09:46:41
Lisp が速いというより Python が遅いだけなんだけどね

295:デフォルトの名無しさん
07/12/17 11:13:47
ここに突っ込まないのはお約束ですか
>定性的にみれば、Python はインタプリタ型の Lisp と同じくらいの速度に見える。 だが Lisp をコンパイルしたものと比べると明らかに遅い。

296:デフォルトの名無しさん
07/12/17 11:30:40
なんで今更lispなんだYO!
今じゃ相当なマニアしか使ってねーっつうの

297:デフォルトの名無しさん
07/12/17 11:52:35
>>295
まぁ普通はコンパイルするものだし。


Pythonで速度を上げられないのは、
バイトコードを動かしていることと
名前解決の辺りかな。

仕様と強く結びついている部分だから
これ以上の向上の余地もないと思う。


もっとも他人から否定されるのは嫌なのだがw


298:デフォルトの名無しさん
07/12/17 12:43:14
>>296
30年前よりはマイナーだが、10年前よりはメジャーだ。変な話だが。

299:デフォルトの名無しさん
07/12/17 14:28:42
最近RubyからPythonに移ってきたのですが、初歩の初歩でつまづいています。
よくある正規表現を使った文字列置き換えで、置き換え対象がちょっと複雑な時には
どのように書けばいいんですかね。

import re

s = "jskljaksljaj\njslkajskja\n\n"
lst = re.compile(r'(js|ja)').split(s)

for i, x in enumerate(lst):
 if 'js' in x:
  lst[i] = '$$ js is here $$'
 elif 'ja' in x:
  lst[i] = '$$ ja is here $$'

print ''.join(lst)

とかやってみましたが、どう考えても綺麗ではないように思えます。

300:デフォルトの名無しさん
07/12/17 14:57:53
import re
print re.sub('(js|ja)', lambda mo: '$$ js is here $$' if mo.group(0)=='js' else '$$ ja is here $$', "jskljaksljaj\njslkajskja\n\n")
↓に何とか厨という罵り言葉がくる悪寒


301:デフォルトの名無しさん
07/12/17 15:00:36
ワンライナーとか言ってる奴に限って基本的なことが理解できていないことが多い。
ワンライナー厨は典型的な中二病。
大抵のワンライナーはDQNレヴェルのスクリプトを一行にして得意気になってるアホです。
見づらいとか分かりづらいといった意見を読めないアホが悪いと無視するマジもんのアホです。
別にワンライナー以外が高尚でもなんでもなくただワンライナーがDWNなのです。
というか誰もワンライナーがそんないいもんだと思っちゃいないっていうかなんていうか


302:デフォルトの名無しさん
07/12/17 15:04:08
別に慣れだとおもうけど。sql文なんかは一気にバーッと書くのが普通だし。

303:デフォルトの名無しさん
07/12/17 15:25:22
import re

s = "jskljaksljaj\njslkajskja\n\n"
print re.sub('(js|ja)', lambda mo: '$$ %s is here $$' % mo.group(0), s)

lambdaのとこよくわからんけどまねしてみた

304:デフォルトの名無しさん
07/12/17 17:31:45
ああああ、すいません例示が悪かったです。
if~のところはもっと複雑で、できればメソッドに切り出したいんです。

そういう方法はないんでしょうか。

305:デフォルトの名無しさん
07/12/17 19:26:35
>>300-301
自演にも程があるw

306:デフォルトの名無しさん
07/12/17 21:13:24
pythonでマルチバイトの文字数を取得する方法について調べています。
test=u'日本語'
print len(test)
のように、変数宣言時にuをつけることで、取得できることは確認いたしました。
Ploneなどで、test=request.get('test',None)のように取得した変数を、マルチバイト文字として
カウントするにはどのようにすればよろしいのでしょうか。

よろしくお願いします。

307:デフォルトの名無しさん
07/12/17 21:40:06
>>306
test=u'日本語'
--------------- ←ここで分けて考える。
print len(test)

後ろのtestはどういう性質のものなら適合するのか。(具体的には何Objectか)
戻って u'日本語' はどういう意味のコードか。

308:デフォルトの名無しさん
07/12/17 22:19:55
Ploneって書いてある時点で終了っぽいな。
本当にありがとうございました。

309:デフォルトの名無しさん
07/12/17 22:37:05
306です。
>307
ありがとうございます。
以下のようにやったらできました。
test=request.get('test',None)
print len(unicode(test,'utf-8')

u'日本語'というのは文字列定数を定義する場合で、エンコーディングを明示的に指定
することで、len()関数が判定できるってことなんでしょうか。
とりあえず、できたんでありがとうございます。



310:デフォルトの名無しさん
07/12/18 00:39:50
2.5の日本語のドキュメントってありますか?
翻訳プロジェクト見ても 2.3→2.4 が終了しただけで 2.5については一切書かれていないので・・・

311:デフォルトの名無しさん
07/12/18 01:18:53
おまえに任せた

312:デフォルトの名無しさん
07/12/18 01:39:05
マジか

313:デフォルトの名無しさん
07/12/18 03:18:52
>>310
ボクからもお願いします( ´人`)

314:デフォルトの名無しさん
07/12/18 05:44:25
pythonでchopってどうやるんですか?

315:デフォルトの名無しさん
07/12/18 05:50:59
ここは2.5ドキュメントを1文づつ訳すスレになりました
以下、どうぞ

316:デフォルトの名無しさん
07/12/18 08:15:43
xinetdにサービスを登録しようと思い以下のようなスクリプトを書きました。
サーバに送信した文を[]で囲んで返すというものです。
が、なぜかクライアントのrecvで受信待ちになってしまいます。

クライアントの通信先をechoに変えたところ、recvは正常に受信し、文字はちゃんと表示されました。
またサーバのsyslogには、正しくprint [hogeron]と記録されています。

現象から見ると、どうもサーバのprintで、ちゃんと送信されていないっぽいです。
os.environ['PYTHONUNBUFFERED'] = '1'
で、バッファしないように設定しているのですが…
どうすれば正常に動かせますか?

317:デフォルトの名無しさん
07/12/18 08:16:24
【サーバ】
--
import os,sys,syslog

os.environ['PYTHONUNBUFFERED'] = '1'
line = sys.stdin.readline()
if line.endswith('\n'):line = line[:-1]
result = '['+line+']'
print result
syslog.syslog('print '+result)
--

【クライアント】
--
import socket

host = 'localhost'
port =6363
s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect((host,port))
s.send('hogeron')
str = s.recv(1024)
print str
s.close()

318:デフォルトの名無しさん
07/12/18 08:54:04
>>315
>ここは2.5ドキュメントを1文づつ訳すスレになりました

「310の翻訳作業を監視するスレ」の間違いだろう。

319:デフォルトの名無しさん
07/12/18 09:12:55
2.5の翻訳は、差分ツールで2.4との変化分だけみつけて、そこだけピンポイントで訳せばいいよね。
mac で使える差分ツールない?標準で着いてるファイルマージは、
Leopard だと起動エラーが起きる。。。。。。クリーンインストールしたのに。

320:316
07/12/18 11:10:34
クライアントからソケットでsendする時にcrlfを付けてないからでした
unixはlfだけなのにネットワークではcrlfがないと駄目なんですね~

321:デフォルトの名無しさん
07/12/18 11:57:04
>>320
それはたまたまネットワークライブラリがCRLFで一区切りとしてくれただけで
一般的なTCP通信でその前提はなりたたないから。
sokcetを生で使うならあくまでバイト列な非同期通信として扱わないと。

322:デフォルトの名無しさん
07/12/18 12:37:29
>>314
strip?

323:[:-2]
07/12/18 16:47:20
strip は違うだろ

324:デフォルトの名無しさん
07/12/18 17:28:11
>>323
-2じゃなくて-1じゃね?

>>322
まーchompだったらrstrip()だけんど。

325:デフォルトの名無しさん
07/12/18 22:14:27
seq切り落とし処理から見れば、\n文字で一つなのか

326:デフォルトの名無しさん
07/12/18 22:36:55
全くプログラミングした事無いんだが
ちょっと興味があってPython勉強しようと思う。

そこで、おすすめの書籍なぞある?
環境はWin。

327:デフォルトの名無しさん
07/12/18 22:41:12
>>326
「即効!Pythonプログラミング」上平哲著

328:デフォルトの名無しさん
07/12/18 22:41:44
>326
>116

329:デフォルトの名無しさん
07/12/18 22:48:54
>>319
WindowsなのでExamDiffで比較してみたけど
どうでもいい、タグの大文字→小文字とか lay-out → layout みたいな修正が多くて確認が面倒くさそうだった

330:デフォルトの名無しさん
07/12/18 22:50:02
>>327、328
ありがとうございます

本読んで頑張ってみる。


331:デフォルトの名無しさん
07/12/19 01:00:00
chopは

str[:-1]

chompは

str.endswith('\n') and str[:-1] or str

だとおもう。
(実用するかはともかくとして

332:デフォルトの名無しさん
07/12/19 02:28:29
import文を羅列で書いていて、
あるモジュールを使わなくなった時、
そのモジュールのimportを削除し忘れることってあるじゃん
結果無駄な読み込みが発生してしまう
そういうのを防ぐためのいい方法はありますか?

333:デフォルトの名無しさん
07/12/19 02:37:25
>>331
chomp は str.rstrip('\r\n') だろ

334:デフォルトの名無しさん
07/12/19 03:39:23
pythonて組み込みオブジェクトの拡張できるの?
文字列に自家製メソッド追加したり。

335:デフォルトの名無しさん
07/12/19 03:47:01
>>229
pythonチュートリアルによるとグイド・ファン・ロッサム

336:デフォルトの名無しさん
07/12/19 04:28:47
>>334
できない。

337:デフォルトの名無しさん
07/12/19 08:04:43
class str_ex(str) じゃだめなの?

338:デフォルトの名無しさん
07/12/19 09:05:14
>>327
とりあえず書いておくわ。
 
 
作者乙。

339:デフォルトの名無しさん
07/12/19 12:16:48
>>332
pycheckerでチェックできると思う

340:デフォルトの名無しさん
07/12/19 13:08:32
だれかGILを取ろうと考えているチャレンジャーはいないのか?

341:デフォルトの名無しさん
07/12/19 13:09:35
>>337
それでいいと思う

342:デフォルトの名無しさん
07/12/19 15:48:13
>>340
昔やったらかえって遅くなったんじゃなかったっけ?

343:デフォルトの名無しさん
07/12/19 16:20:21
>>340
STGの神プレイヤーがどうかしたのか?

344:デフォルトの名無しさん
07/12/19 17:56:58
>>343
WIZがどうかしたのか?


345:デフォルトの名無しさん
07/12/19 18:32:01
GILといえばKI

346:デフォルトの名無しさん
07/12/19 22:02:52
>>342
URLリンク(www.artima.com)

347:デフォルトの名無しさん
07/12/19 23:30:39
def makecounter():
number=0
def _makecounter(x):
if x=="init":
number=0
elif x=="inc" :
number=number+1
elif x=="dec" :
number=number-1
return number
return _makecounter
counter=makecounter()
print counter("init")
print counter("inc")
print counter("init")
print counter("dec")

ちょいと質問すみません。
こんなことやろうと思ったんだけど出来ません。
pythonじゃ無理?
lispやperlと違ってクロージャの中の変数いじれない?

348:デフォルトの名無しさん
07/12/20 01:16:42
>>212からの流れ参照

pythonではそういう時はCounter classを作る

counter = Counter()

349:デフォルトの名無しさん
07/12/20 01:19:06
>>226が答えに近い

350:デフォルトの名無しさん
07/12/20 01:25:09
def makecounter():
    number = 0
    def _makecounter(x):
        global number
        if x=="init":
            number=0
        elif x=="inc":
            number=number+1
        elif x=="dec":
            number=number-1
        return number
    return _makecounter

counter=makecounter()
print counter("init")
print counter("inc")
print counter("init")
print counter("dec")
print counter("dec")

351:デフォルトの名無しさん
07/12/20 01:49:23
ありがとうございます。
なるほどクラスを作るのか。

352:デフォルトの名無しさん
07/12/20 01:51:36
Python コードを、対応するCソースに変換するツールってない?

for i in seq: print i

ってやると、

for (Py_ssize_t i=0; i<PyObject_Size(seq); i++) {
 PyObject* o = PySequence_ITEM(seq, i)
 PyObject* s = PyObject_Str(o);
 PySys_WriteStdout(PyString_AsString(s));
 Py_DECREF(s);
 Py_DECREF(o);
}
って自動で出力してくれるような。

353:デフォルトの名無しさん
07/12/20 01:58:43
import hoge
def f(a, b): hoge.piyo(a, b)

ってやると

PyObject* f(PyObject* args) {
 PyObject* a = NULL;
 PyObject* b = NULL;
 PyArg_ParseTuple(args, "OO", &a, &b);
 PyObject* module = PyDict_GetItemString(PyImport_GetModuleDict(), "hoge");
 PyObject* func = PyObject_GetAttrString(module, "func");
 PyObject* result = PyObject_Call(func, "(OO)", a, b);
 Py_DECREF(result);
 Py_DECREF(func);
}

って自動で出力してくれるような。

354:デフォルトの名無しさん
07/12/20 02:00:16
これさえできれば、Cコンパイラの力を借りて Python コンパイラが簡単に出来ると思うんだ

355:デフォルトの名無しさん
07/12/20 02:43:06
Pyrexの中身でも調べてみたら

356:デフォルトの名無しさん
07/12/20 09:27:41
つーかPyrexが答えじゃないの?

357:デフォルトの名無しさん
07/12/20 09:37:10
Pyrexはじまったな(ww

358:デフォルトの名無しさん
07/12/20 11:23:31
なにその強化ガラス?

359:デフォルトの名無しさん
07/12/20 15:27:10
何で皆そんなにpythonに詳しいんですか?
そういった仕事に就いてるからですか?
それとも趣味ですか?
もし趣味だとしたら変態です

360:デフォルトの名無しさん
07/12/20 15:35:15
趣味ですよ
あなたが無能なだけですよ

361:デフォルトの名無しさん
07/12/20 15:59:53
wikipedia のリフレクションの項、
python の例がないんだ・・・。

誰かかいてくれないか

362:デフォルトの名無しさん
07/12/20 16:45:34
# リフレクションなし
foo = Foo()
foo.hello()

# リフレクション
class_ = globals()['Foo']
method = getattr(class_(), 'hello')
method()

おれこの種の用語嫌いなんだよな。RTTIって言い方やめたの?

363:デフォルトの名無しさん
07/12/20 16:46:07
>>360
このヘンタイがっ!!

364:デフォルトの名無しさん
07/12/20 17:21:31
>>362
RTTIとリフレクションは意味が違う

365:デフォルトの名無しさん
07/12/20 19:13:32
PyrexよりCythonのほうが書きやすいよ


366:デフォルトの名無しさん
07/12/20 21:48:38
('foo', 1, 'bar', 2, 'baz', 3, )
というtupleから
{'foo': 1, 'bar': 2, 'baz': 3}
というdictを得たいんですが、いい方法ありますか。

367:デフォルトの名無しさん
07/12/20 22:04:30
もっといい方法があるかもしれないけど

lst = list(('foo', 1, 'bar', 2, 'baz', 3, ))
dic = {}
while lst:
  dic[lst.pop()] = lst.pop()

368:デフォルトの名無しさん
07/12/20 22:05:40
T = ('foo', 1, 'bar', 2, 'baz', 3)
D = dict((T[x],T[x+1]) for x in xrange(0,len(T),2))


369:347
07/12/20 22:42:20
def makecounter():
number=[0]
def _makecounter(x):
if x=="init":
number[0]=0
elif x=="inc" :
number[0] +=1
elif x=="dec" :
number[0] -=1
return number[0]
return _makecounter
counter=makecounter()
print counter("init")
print counter("inc")
print counter("dec")

>>226からのリンク先を見てクロージャでカウンタ作れました。
pythonってクロージャの中の変数書きかえれないので
numberに無名配列のポインタを入れてそこを操作するって感じなんですね。
mapの中に副作用持ちのlambda式入れられないとかlispとはかなり違うんだな。
うーん、pythonってなんか変w

370:デフォルトの名無しさん
07/12/20 23:53:17
>>> t = ('foo', 1, 'bar', 2, 'baz', 3, )
>>> dict(zip(t[::2], t[1::2]))
{'baz': 3, 'foo': 1, 'bar': 2}


371:デフォルトの名無しさん
07/12/21 00:25:11
forとかwhileの中で関数作るとクロージャの回避が結構面倒だな
デフォルト引数に入れて解決した

>>369
なんでclassにしないの?

372:347
07/12/21 00:42:06
>>371
lispに馴れてるのでとりあえずクロージャを作ってみたかったのです。

373:デフォルトの名無しさん
07/12/21 00:50:24
>>367,368,370
サンクス。
特に370の方法はいいな。


374:デフォルトの名無しさん
07/12/21 13:35:27
generatorをenumerateすると、generatorとして作った意味がないことに気づいたんですが、
generator用のenumerateみたいなのは標準では付いてないんですかね?

375:デフォルトの名無しさん
07/12/21 13:40:01
>>374
izip + count

376:374
07/12/21 13:55:47
ごめ、調べてたら、すでにenumerateはリスト返してなかった・・・
どうもバージョンの古い脳内pythonの話だったポイ・・・orz

377:デフォルトの名無しさん
07/12/21 14:59:36
pythonてコードの前部分で定義した関数しか呼び出せないの?
phpですら定義の順番に関係なく呼べるのに・・・

378:デフォルトの名無しさん
07/12/21 15:14:56
そうか

379:デフォルトの名無しさん
07/12/21 15:19:46
スクリプト言語のくせにそんなのイモすきない?
みんな許せるの?

380:デフォルトの名無しさん
07/12/21 15:27:07
組込みクラスにメソッドを追加したいのですがどうやればいいのですか?

class int:
 def fuga(self):
   return "fugafuga"

じゃ無理みたいです

381:デフォルトの名無しさん
07/12/21 15:42:06
>>380
・Rubyでやれ
>>337

382:デフォルトの名無しさん
07/12/21 15:46:02
その前になんでそんなことしたいのか、だ

383:デフォルトの名無しさん
07/12/21 16:29:55
>>379
それはエラーになってほしい人もいるからなんじゃない?
Pythonが変数と関数の名前空間が一緒なのと関係あるのかな。
ちなみにRubyもエラーになる。PerlとJavascriptとHaskellはオッケー。

>>382
えー既存クラスにメソッド追加って普通にしない?

384:デフォルトの名無しさん
07/12/21 16:32:04
自前のにならたくさんやるがなぁ

385:デフォルトの名無しさん
07/12/21 16:39:35
ちなみにどうするんですか?チュートリアルを読んだのですがよくわかりませんでした><

386:デフォルトの名無しさん
07/12/21 17:01:28
def fuga(i):
return "fugafuga"

print fuga(42)

387:デフォルトの名無しさん
07/12/21 17:10:12
『Pythonで学ぶプログラム作法』買ってみた
今から読んでみる

388:デフォルトの名無しさん
07/12/21 17:43:48
>>376,383

モジュールがロードされるタイミングでいろいろしたい人がいるからじゃない?

if os.name == "nt":
 def pathnomalization(p):
  ほげほげ
else:
 def pathnomalization(p):
  ふがふが

みたいなコード書いたことあるけど。

389:デフォルトの名無しさん
07/12/21 17:49:09
>>386
全然違うんですけど・・・。
Pythonianの人って、標準とは別名のメソッドを呼びたくなったらどうするんですか?

390:デフォルトの名無しさん
07/12/21 18:04:06
関数使うよ

391:デフォルトの名無しさん
07/12/21 18:13:47
>>389
PEPを書く

392:デフォルトの名無しさん
07/12/21 18:20:21
>>391
ひえーマジすか
Pythonは禁欲的だと聞いていましたがこれほどとは・・・

メソッド定義にself書いたり、気持ち悪い規則が多いなあ
rubyに比べてリスト内包表記と、ライブラリが多いことと解釈系がやたら速いのと、
endを馬鹿みたいに書かなくていいのとhelp()が好きだけど、他はとにかく不便だなあ。
どの言語もいいところと悪いところがありますね。

393:デフォルトの名無しさん
07/12/21 18:24:16
標準とは別名のメソッド呼びたくなる状況がわからん件

394:デフォルトの名無しさん
07/12/21 18:27:01
なんか気持ちイーらしい

395:デフォルトの名無しさん
07/12/21 18:53:41
意味のないことに固執したがるのはバカの特徴だな。

396:デフォルトの名無しさん
07/12/21 18:55:07
一つの言語でやり方を覚えたらそこから抜け出せなくなる脳は不便だ
精進

397:デフォルトの名無しさん
07/12/21 19:26:07
self批判するやつがいるがthisとか暗黙の変数がいきなり出てくる言語とかあり得ないキモイ正気を疑う
反論は認める

398:デフォルトの名無しさん
07/12/21 19:49:03
質問させてください
HTMLParserってShift-jisのページでも使えますか?
urllib2.urlopenで取得した2chのメニュー(左フレーム)をそのままfeedしたら
junk charactersがなんとかってエラーがでました


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