2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

くだすれPython(超初心者用) その8

1 :デフォルトの名無しさん:2010/08/23(月) 13:25:45
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、
お礼は Python の布教と初心者の救済をお願いします。

エラーを解決したいときはエラー表示や環境(バージョン/IDE or command line)を略さずに書き込んで下さい。
騙りが頻発しています。質問する方は一時的なトリップをつけることを検討して下さい。
次スレは >>950 辺りで

前スレ
くだすれPython(超初心者用) その7
http://hibari.2ch.net/test/read.cgi/tech/1271996751/
関連スレ
Pythonのお勉強 Part39
http://hibari.2ch.net/test/read.cgi/tech/1280973179/
◆関連リンク
Python の Home Page
ttp://www.python.org/
Python 日本語ドキュメント - Pythonistaのお友達
ttp://www.python.jp/doc/release/
最新版直リン - 2.Xが推奨。3.Xはライブラリやドキュメントが使えないことも
ttp://www.python.org/download/
Python のコーディングガイド PEP8
ttp://www.python.org/dev/peps/pep-0008/
Python のコーディングガイド PEP8 - 日本語訳
ttp://www.oldriver.org/python/pep-0008j.html
日本語文字列コード問題まとめ
ttp://python.matrix.jp/tips/string/encoding.html
インタラクティブモードのエンコード
ttp://python.matrix.jp/tips/compatibility/interact_encoding.html
SJISから卒業出来ないひとのための禁じ手
reload(sys); sys.setdefaultencoding('cp932')

2 :デフォルトの名無しさん:2010/08/23(月) 13:28:28
Pythonの文字化け対策:sys.setdefaultencodingの謎
ttp://hain.jp/index.php/tech-j/2008/01/07/Python%E3%81%AE%E6%96%87%E5%AD%97%E5%8C%96%E3%81%91
実行時にdefaultencodingを変更する
ttp://d.hatena.ne.jp/perezvon/20070715/1184469534
PEP-8とか
ttp://www.python.org/dev/peps/pep-0008/
ttp://oldriver.org/python/pep-0008j.html
Google Python Style Guideとか
ttp://google-styleguide.googlecode.com/svn/trunk/pyguide.html
ttp://works.surgo.jp/translation/pyguide.html

   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘

3 :デフォルトの名無しさん:2010/08/23(月) 13:30:15
Pythonオフィシャルサイト
ttp://www.python.org/
日本Pythonユーザ会
ttp://www.python.jp/Zope/
まとめWiki
ttp://python.rdy.jp/
Rubyリファレンスマニュアル刷新計画
ttp://doc.loveruby.net/
ライブラリ一覧
ttp://doc.loveruby.net/refm/api/
RubyExtensionProgrammingGuide
ttp://i.loveruby.net/w/RubyExtensionProgrammingGuide.html
Ruby Hacking Guide
ttp://i.loveruby.net/ja/rhg/

4 :デフォルトの名無しさん:2010/08/23(月) 14:12:03
>>1

5 :デフォルトの名無しさん:2010/08/23(月) 16:54:31
でも、WindowsのIDLEでは u"ほげ" ができない。 (Python3では直る)
sys.argv もUnicodeじゃなくてcp932なので、渡せないファイル名があり、
対策するには自分でGetCommandLineWしてコマンドライン解析しないといけない。
(これもPython3では直る)

WindowsのUnicode対応に関して言えば、Python3が最強だと思う。

6 :デフォルトの名無しさん:2010/08/23(月) 16:56:17
pythonって日本語弱いんですか?

そんなことはない。
Windowsで使うならR*byよりいいと思う。

だれがそんなこと言ったんだ

私だ

自分の経験から言うと日本語の文字列を扱う際に文字コードなんかを曖昧なまま処理した場合
Perl や Ruby は間違ってても「なんとなく」動くが Python はきっちりエラーになる
エラー出さずに勝手に文字化けするか例外出して中断するかの違いだな

特にパス関係については他の追従を許さないぜ

Javaのヌルポみたいなもんですね

漏れはちなみにそこは Python の弱点じゃなくて利点だと思っている


7 :デフォルトの名無しさん:2010/08/24(火) 10:46:53
>>1
o2

8 :デフォルトの名無しさん:2010/08/25(水) 19:25:40
死ね

9 :デフォルトの名無しさん:2010/08/25(水) 20:19:19
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘      おっぱい!おっぱい!

10 :デフォルトの名無しさん:2010/08/26(木) 11:27:24
このスレッドは天才チンパンジー「アイちゃん」が
言語訓練のために立てたものです。

アイと研究員とのやり取りに利用するスレッドなので、
関係者以外は書きこまないで下さい。

                  京都大学霊長類研究

11 :デフォルトの名無しさん:2010/08/26(木) 13:05:53
pythonの勉強はじめてみようと思うのですが
2.x と 3.x ではどちらが良いでしょうか?

12 :デフォルトの名無しさん:2010/08/26(木) 13:40:14
初めてなら2.xがお勧め

3.xはライブラリとかがまだ対応出来ていないものがあるからそれでもよければどうぞ

文字コード関連の処理方法については3.xの方がすっきりしていることになっている


13 :デフォルトの名無しさん:2010/08/26(木) 14:34:18
新しいのがよければ2.6
ライブラリ目当てなら2.5, 2.4
人柱したいなら3.1, 2.7

14 :デフォルトの名無しさん:2010/08/26(木) 14:39:11
2.4はもう除外したほうがいい

15 :デフォルトの名無しさん:2010/08/26(木) 14:45:40
2.5に対応してないライブラリも結構あるよ
Pythonの黎明期は2006年で、2.5〜3.0にかけて酷い過疎化

16 :デフォルトの名無しさん:2010/08/26(木) 17:01:02
>>12-15
ありがとうございました

17 :デフォルトの名無しさん:2010/08/26(木) 21:35:10
java-jaをよろしくおねがいします!!!!

18 :デフォルトの名無しさん:2010/08/27(金) 12:14:17
Pythonでコンピュータをスリープするにはどうすればよいでしょうか?
OSはWindowsです


19 :デフォルトの名無しさん:2010/08/27(金) 12:15:13
現在ログインしているユーザが誰かを知りたいのですが
どのようにすればいいでしょうか?

20 :デフォルトの名無しさん:2010/08/27(金) 12:57:52
>>18
http://mail.python.org/pipermail/python-win32/2008-June/007698.html
これがいるっぽい
http://starship.python.net/crew/mhammond/win32/

21 :デフォルトの名無しさん:2010/08/27(金) 16:05:30
>>18
>>> import ctypes
>>> ctypes.windll.PowrProf.SetSuspendState(0, 1, 0)
1

22 :デフォルトの名無しさん:2010/08/27(金) 16:07:59
>>19
import ctypes
name = ctypes.c_char_p(''*100)
sz = ctypes.c_int(100)
ctypes.windll.advapi32.GetUserNameA(name, ctypes.pointer(sz))
print name


23 :デフォルトの名無しさん:2010/08/27(金) 16:12:57
ttp://mercurial.selenic.com/wiki/Py3kPort
のExisting problemsってところで、
> There are some python 3 APIs that only support (unicode) string arguments

> All of them must be of the string type.
ってあって、そこまでUnicode嫌いか?って思ってしまう。

24 :デフォルトの名無しさん:2010/08/27(金) 16:51:42
PILが3.0対応してから本気出す

25 :デフォルトの名無しさん:2010/08/28(土) 02:14:58
おっぱいそん

26 :デフォルトの名無しさん:2010/08/28(土) 05:44:47
>>20-21
ありがとうございました

27 :デフォルトの名無しさん:2010/08/28(土) 08:42:33
>>22
thx!

ちなみにGetUserNameWの方じゃだめなんですか?

28 :デフォルトの名無しさん:2010/08/28(土) 09:50:40
>>27
c_char_pをc_wchar_pに変える

29 :デフォルトの名無しさん:2010/08/28(土) 10:06:14
>>28
ありがとうございました

#Rubykaigiの実況をUSTREAMで見ながら

30 :デフォルトの名無しさん:2010/08/28(土) 16:32:54
dasaigi

31 :デフォルトの名無しさん:2010/08/29(日) 00:37:21
一意性のある配列から要素の有無を高速に調べる方法ってありますか?

PHPだと配列からin_array()で要素を検索すると遅いので、
要素をハッシュのキーに指定してis_null()で評価する、みたいな話です。

バージョンは2.6を使っています。

value in hoge
hoge.has_key(value)
あとsetを使ったバージョン
など試してみたのですが速度差は誤差の範囲でした。

ループの中で乱数を作って代入みたいな簡単なテストプログラムなのですが
同じロジックをPHPでつくると5〜12倍くらい高速です。
(is_null()を使うと要素のヒット率で速度にバラツキが出ます。)

なにか使い方に根本的な勘違いをしてたらごめんなさい。
教えてエロい人!

32 :デフォルトの名無しさん:2010/08/29(日) 00:47:34
set

33 :デフォルトの名無しさん:2010/08/29(日) 00:49:59
mod_phpとCGIで速度差比べたのか

34 :デフォルトの名無しさん:2010/08/29(日) 02:00:54
setは使ってみましたが速度的な差はありまさんでした。
inを使う以外に方法があるのでしょうか?
ライブラリリファレンスには「集合クラスは辞書を使用して実装されます。」
とあるので速度的な差はでないだろうと勝手に思い込んでいました。

両方ともコマンド叩いてtimeで時間図りました。
php.iniの設定次第でapache経由じゃなくてもmod_php動いてたりするんですかね?
webを経由させるつもりはないのですが、質問の意味がよくわかってないです。
回答になっていなかったらごめんなさい!

35 :デフォルトの名無しさん:2010/08/29(日) 03:07:36
inを使う形で問題ないよ。

36 :デフォルトの名無しさん:2010/08/29(日) 04:06:24
OSも環境も測定方法も書かずに何を言っておるのかね

37 :デフォルトの名無しさん:2010/08/29(日) 08:33:03
あとコードもね。

38 :デフォルトの名無しさん:2010/08/29(日) 16:22:48
wxpythonが3.x系用にリリースされるのはいつになりますか?

39 :デフォルトの名無しさん:2010/08/30(月) 10:27:35
trunkになかったっけ?

40 :デフォルトの名無しさん:2010/08/30(月) 10:37:36
trunk今確認したけど対応していなかったね。
またリリースについてもこの先分からない、とあるね。

2.7までが対応範囲とのことで・・・。
http://wiki.wxpython.org/TentativeRoadmap

41 :デフォルトの名無しさん:2010/08/30(月) 10:42:53
PyQtは?

42 :デフォルトの名無しさん:2010/08/30(月) 10:44:16
ライセンスが・・・・・・・・・・・・・

43 :デフォルトの名無しさん:2010/08/30(月) 10:50:38
Python3.0 への移行準備
ttp://d.hatena.ne.jp/methane/20090321/1237631348

ttp://coreblog.org/ats/why-python-30-is-still-deprecated

    最も大きな理由。それはCで書かれたエクステンションの3.0対応がけっこう大変だから。

    ...

    データベース接続モジュール,テンプレートエンジンとか,お世話になっているCエクステンションは多い。
直接使って無くても,フレームワークがそういうエクステンションを使っていることが多い。
その他にも,PILのようなライブラリ,wxPythonのようなGUIフレームワークラッパは修正点が多くて大変だと思う。
これらのエクステンションの多くが3.0に対応してくれないと,僕は完全に3.0には移行できない。
それまで数年かかるだろう,ということだ。

まったく同感だったんだけど、最近はPython界が僕が思うより速く動いている事に驚いている。
数年というのは3年以下かもしれない。

Pythonの「バージョン間互換性重視」スタイルは言語と標準ライブラリだけでなくて Python/C API にも及んでいる。
Python3でも、いくつかの型が変更されたけれど参照カウント等の基礎は基本的にそのままになっている。

そして、その互換性を重視した文化は、多くの拡張ライブラリ作成ツールを生んだ。
そのツールたちも、Python3に続々対応してきている。基本が変わらないから、そこそこの手間で対応できるらしい。

ツール群とそのツールを使った有名なライブラリをあげてみる。

44 :デフォルトの名無しさん:2010/08/30(月) 11:15:05
で、wxpythonが3.x対応になるのはいつなの?

45 :デフォルトの名無しさん:2010/08/30(月) 11:24:09
Djangoも早く3.0対応して欲しいですぅ

46 :デフォルトの名無しさん:2010/08/30(月) 23:50:12
numpyも

47 :デフォルトの名無しさん:2010/08/31(火) 04:58:03
Ruby使えば解決だよ!

48 :デフォルトの名無しさん:2010/08/31(火) 06:32:57
DjangoがPython3対応になったら古いDjangoとの互換性はどうなるんだろ

49 :デフォルトの名無しさん:2010/08/31(火) 11:46:29
もしサポートがなければ変換用スクリプト組むしかないんじゃないのかな

50 :デフォルトの名無しさん:2010/08/31(火) 15:59:09
Windows XP Service Pack 3
Python 2.7
です。

ファイル名を表す文字列で、
文字列1 自然数1x自然数2 文字列2.拡張子
となっているものがあります。
(自然数1と自然数2の間には'x'の1文字だけがはいります。
 また、文字列1 文字列2の部分は空かもしれません。)
それらを与えて、[自然数1,自然数2]となったリストを取得する方法は
どう書けばいいでしょうか?

例:
 http://codepad.org/b4iymaHe

正規表現は使ったことがあまりない(テキストエディタで正規表現検索はしています。)のですが、
正規表現で可能でしょうか。

もし可能でしたら、教えていただけますでしょうか?
よろしくお願い申し上げます。


51 :デフォルトの名無しさん:2010/08/31(火) 17:45:01
r'.*(\d+)x(\d+).*\.[^\.]+'

52 :デフォルトの名無しさん:2010/08/31(火) 17:45:59
自然数1x自然数2 がファイル名の中に一回しか出てこないと決まっているなら、

>>> import re
>>> m = re.search(r'(\d+)x(\d+)', "aaaa iiii 5555 uuuu eeee 1200x1600 ooo.jpg")
>>> if m: map(int, m.groups())
...
[1200, 1600]

'2x4 buildings 1200x1600.jpg' とかだと上手くいかないので注意

53 :デフォルトの名無しさん:2010/08/31(火) 17:52:09
xの前後に空白があるパターンもあるみたいよ

54 :デフォルトの名無しさん:2010/08/31(火) 17:52:26
すまん間違いっぽい
これでとりあえず通る
r'.*?(\d+)x(\d+).*\.[^\.]+'

55 :50:2010/08/31(火) 23:41:10
>>51-54
ありがとうございます。

>自然数1x自然数2 がファイル名の中に一回しか出てこないと決まっているなら、
確かに、その条件を申し上げておりませんでした。
一回しか出てこないと決まっています。

>>53
> xの前後に空白があるパターンもあるみたいよ
xの直前や直後に空白がある場合は無効です。


56 :デフォルトの名無しさん:2010/09/01(水) 00:16:24
コメントを読んでなかった。xの前後にスペースあるのは駄目という例だったのか。

57 :デフォルトの名無しさん:2010/09/01(水) 01:03:38
ファイル「f」の先頭n行が欲しい場合は
for num, line in enumerate(f):
  if num >= n: break
  処理

for num, line in zip(range(n), f):
  処理
のどちらが良いでしょうか?
好みでも構わないのでどちらがいいのか(できれば理由付きで)ご教示ください
#ファイルがn行未満の場合は例外を発生させます

58 :50:2010/09/01(水) 01:42:06
>>51-54
おかげさまでどうにかなりました。

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



59 :デフォルトの名無しさん:2010/09/01(水) 02:57:44
>>57
前者はif文がキモイ。
後者は一気にn行読み込んでしまうので、itertools.izipを使う。(Python3ならzipでOK)
for i in range(n):
    line = next(f)
もシンプルで良い。
n行を一気に読み込むなら、前者の書き方よりも、
lines = [next(f) for i in range(n)]
の方が良い。

60 :デフォルトの名無しさん:2010/09/01(水) 03:13:08
>>59
おかげさまでどうにかなりました。

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


61 :デフォルトの名無しさん:2010/09/02(木) 04:46:16
組み込み関数名を上書きしてしまいハマってしまいました。
関数名の上書きでエラーが出ないってちょっとおかしくないですか?
前もってすべての関数名を知っておかないといけないってことですよね
こういうハマり方をしないための知恵などあえば教えてください。

62 :デフォルトの名無しさん:2010/09/02(木) 04:48:32
組み込み関数くらい全部把握しとけや…

63 :デフォルトの名無しさん:2010/09/02(木) 04:49:07
ちなみに上書きしたのはstrです。
文字列型のテンポラリな変数でよく使っていた変数名なので・・。

64 :デフォルトの名無しさん:2010/09/02(木) 04:49:57
>>62
そうするしかないのでしょうか
鬼のような言語ですね

65 :デフォルトの名無しさん:2010/09/02(木) 05:35:38
len もうっかりやってしまう

66 :デフォルトの名無しさん:2010/09/02(木) 05:40:07
>>61
いいこと思いついた。お前、関数の中で上書きしろ

67 :デフォルトの名無しさん:2010/09/02(木) 05:47:11
将来新しい名前が組み込まれて、既存のコードとぶつかったらどうなるんです?

68 :デフォルトの名無しさん:2010/09/02(木) 05:50:45
新しいコードを書かなきゃいいんじゃね

69 :デフォルトの名無しさん:2010/09/02(木) 05:59:59
組み込み関数のリスト見たらidとかsumとかmaxとか・・地雷原ですやん
恐ろしい言語だなあ

70 :デフォルトの名無しさん:2010/09/02(木) 06:07:42
>>66
ああ分かった
そのためにわざわざ
def main():
 定義しておいて
if __name__ = '__main__':
  main()
ってやるのか

71 :デフォルトの名無しさん:2010/09/02(木) 06:12:28
もともとsum関数を使うようなコードなら変数名にsumは使わないだろうし
sum関数が定義されていても変数名として使いたいなら使えたほうがいい

sum関数は使わないけど定義されている.ゆえにsumという変数が作れない
sum関数は使わないけど定義されている.でもsumという変数は作れる
これを自由度が高いとみるか安全じゃないとみるかは人によるだけだ

72 :デフォルトの名無しさん:2010/09/02(木) 06:24:21
>>70
なるほど

73 :デフォルトの名無しさん:2010/09/02(木) 06:35:02
main関数を必ず定義しろってことですか
あれが言語の危険さを防ぐ知恵だなんて誰も教えてくれなかったな
油断すると名前衝突起こすノーブレーキ言語ってことがバレるからかな?
でもありがとうございました

74 :デフォルトの名無しさん:2010/09/02(木) 06:37:03
自分の失敗の腹いせなのか、別の言語の工作員なのかよく分からんな

75 :デフォルトの名無しさん:2010/09/02(木) 06:40:34
>73
ついでに後方参照の問題も解決するんだよ
Rubyでも同じことはよくやる

76 :デフォルトの名無しさん:2010/09/02(木) 07:11:43
むしろ後方参照の解決がメインだと思う。
呼ばれる順番を気にしながら関数を書くなんてやってられない。

77 :デフォルトの名無しさん:2010/09/02(木) 10:11:49
>>61
組み込み関数に色つけてくれるPython対応エディタ使え

78 :デフォルトの名無しさん:2010/09/02(木) 12:37:29
組み込み関数全部に__buildin__くっつければ万事解決

79 :デフォルトの名無しさん:2010/09/02(木) 15:19:29
>>63
おれは、エディタで色づけしてる。

80 :デフォルトの名無しさん:2010/09/02(木) 16:02:42
>>> a = 'abc'
>>> b = 'defgh'
>>> len = len(a)
>>> len2 = len(b)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable

やべー
ネタだと思ってたらマジな話だったの加代

81 :デフォルトの名無しさん:2010/09/02(木) 17:56:31
なんでネタだと思うんだよw

82 :デフォルトの名無しさん:2010/09/02(木) 18:07:16
いままで自分の書いてたコードが
奇跡的に動いていただけだったことを悟ったとき

83 :デフォルトの名無しさん:2010/09/02(木) 18:09:01
いや、自分が定義した変数や関数を組み込み関数として使ったりしないだろ

84 :デフォルトの名無しさん:2010/09/02(木) 18:13:17
Ruby厨うぜー

85 :デフォルトの名無しさん:2010/09/02(木) 18:47:29
後方参照の問題の解決というのは
いわゆるメインルーチンをサブルーチンより前に書いてもOKになる
ってことですか?

86 :デフォルトの名無しさん:2010/09/02(木) 21:52:08
それは前方参照

87 :デフォルトの名無しさん:2010/09/02(木) 21:53:15
えっ

88 :デフォルトの名無しさん:2010/09/02(木) 21:55:38
いや間違ってないけど

89 :デフォルトの名無しさん:2010/09/02(木) 21:56:17
後方参照ってRuby用語だろ

90 :デフォルトの名無しさん:2010/09/02(木) 22:06:28
詳説正規表現の二版の脚注だったか
前方参照と後方参照どっちにしたらいいか迷ったってのがあったなあ

91 :デフォルトの名無しさん:2010/09/02(木) 22:15:02
Rubyでやれ

92 :デフォルトの名無しさん:2010/09/02(木) 22:15:44
へー勉強になった
豚楠

C/C++では後方参照ができないので宣言が必要
とか書いてあるサイトもあるけど
これも正しくは
C/C++では前方参照ができないので宣言が必要
ってことかな

93 :デフォルトの名無しさん:2010/09/02(木) 22:35:56
呼び出す地点より後ろで定義された関数は参照できないんだから
後方参照じゃないの?
何が前方なの?

94 :デフォルトの名無しさん:2010/09/02(木) 22:36:23
相対的に

95 :デフォルトの名無しさん:2010/09/02(木) 22:50:59
いわゆるスルーパスだから前方なんだろうな

96 :デフォルトの名無しさん:2010/09/02(木) 22:52:25
>>93
たとえば >>930 って書くと
前方参照?後方参照?

97 :デフォルトの名無しさん:2010/09/02(木) 23:01:23
ソースの後ろの方なのか、
ソースの進行方向の後ろ側なのか。

98 :デフォルトの名無しさん:2010/09/02(木) 23:11:22
ああ、やっと分かった
読んでいくCPUの立場に立つと、コードの下の方が「前」ですな。
エディタでも、前と後はそういう概念だな。
でも本の場合、「もっと前の方」というと、若いページを指す。
はじめて感覚の違いに気づきました。

99 :デフォルトの名無しさん:2010/09/02(木) 23:20:54
前方参照というのは、forward referenceの定番的な訳語。
forward referenceは、言語規格書などでよく使われる言葉。
まだ定義していない用語を使ったときに、
「定義はこの先のxxページにあります」ということを示す際に用いる。


100 :デフォルトの名無しさん:2010/09/02(木) 23:23:45
人間でも、「前を向いて生きる」の前は未来だし、
「この前」の前は過去だな。
「見ている人がどっちを向いているか」で前は変わるってことだね。

101 :デフォルトの名無しさん:2010/09/02(木) 23:26:46
うまいこといったつもりだろうけどおれはみとめないぞ!

102 :デフォルトの名無しさん:2010/09/02(木) 23:52:02
前総理はあさっての方向を向いてたけどな

103 :デフォルトの名無しさん:2010/09/03(金) 01:33:15
死ぬときは、例えどぶの中でも前のめりに死にたい

104 :デフォルトの名無しさん:2010/09/03(金) 01:43:34
ttp://www.youtube.com/watch?v=dXL78ngtJ5E

105 :デフォルトの名無しさん:2010/09/03(金) 03:54:48
pythonでは、"と'が同じ意味ですが、
どっちを使う人の方が多いですか?

106 :デフォルトの名無しさん:2010/09/03(金) 03:57:07
どっちが多いかは知らんけど
自分はソースがすっきりするから ' を使う

107 :デフォルトの名無しさん:2010/09/03(金) 04:13:45
関数の再帰呼び出しの時は、関数名を記述したくありません。
そのような方法はありますか?

108 :デフォルトの名無しさん:2010/09/03(金) 04:15:59
回答まだですか?

109 :デフォルトの名無しさん:2010/09/03(金) 04:39:31
>>108
誰です?
質問者を騙ってDQNと思わせようとするのやめてください。

110 :デフォルトの名無しさん:2010/09/03(金) 08:07:58
グローバル定数・文字単体は''
他は""

111 :デフォルトの名無しさん:2010/09/03(金) 08:13:41
>>10
javascript のarguments.calleeみたいなことがしたいってことか?

112 :デフォルトの名無しさん:2010/09/03(金) 11:50:21
わいこんびねーたや!

113 :デフォルトの名無しさん:2010/09/03(金) 22:47:34
100前後のやり取りに不覚にも吹いたやーん

114 :デフォルトの名無しさん:2010/09/03(金) 22:55:50
type関数の結果から、'str'とか'unicode'とかの部分を取得したいのですが
文字列化して切り出す以外の方法ありますか?

115 :デフォルトの名無しさん:2010/09/04(土) 00:01:19
isinstanceという関数があってだな

116 :デフォルトの名無しさん:2010/09/04(土) 00:19:14
これからはじめてのPythonを読みながら勉強しようとおもうぬですが
本にあわせて2.5にするべきか2.6をいれるか悩んでいるのですがどちらの方が良いのでしょうか

117 :デフォルトの名無しさん:2010/09/04(土) 00:24:41
その文章では本で使われているPythonバージョンが分かりません。
http://thejapanesepage.com/

118 :デフォルトの名無しさん:2010/09/04(土) 00:26:59
初めての でなく はじめての なのか
Windowsなら2.7でよいよ

119 :デフォルトの名無しさん:2010/09/04(土) 00:45:21
>>118
すいませんオライリーの"初めて"第三版のほうでした。
いまのところはwindows xpです

120 :デフォルトの名無しさん:2010/09/04(土) 00:53:55
Windows 2.7は持ってません

121 :デフォルトの名無しさん:2010/09/04(土) 00:58:59
>>116
新しいので問題発生することは少ないから、2.7でいいと思うよ。
たまーに古いやつでないと動かないライブラリとかあるけど。

122 :デフォルトの名無しさん:2010/09/04(土) 01:20:46
>>120
windows 3.5ならまだあるかも
>>121
ご丁寧にありがとうございます
さっそく2.7いれてきます

123 :デフォルトの名無しさん:2010/09/04(土) 20:38:49
>>115
その関数は知っているのですが、
strとかunicode以外の、非組み込みクラスのオブジェクトも検出したいのです。
type関数の返り値のtypeインスタンスは、
strで表示する限り、特有の名前を持っているみたいなのに、
それを取り出すメソッドはないのでしょうか?
とりあえずstrを加工して取り出しましたが、泥臭くて抵抗感があります

124 :デフォルトの名無しさん:2010/09/04(土) 21:02:18
>>123
こういうこと?
>>> a = u'aa'
>>> type(a).__name__
'unicode'

125 :デフォルトの名無しさん:2010/09/04(土) 22:13:52
>>124
おお、これです
ありがとうございます。

126 :デフォルトの名無しさん:2010/09/05(日) 02:21:12
リスト内包表記で、前処理を書く方法はないですか?
[ hoge(o) for i in o ]
のような処理があったとして、
hogeの前に実行したいコードがあるのです

127 :デフォルトの名無しさん:2010/09/05(日) 02:21:54
hoge(i)でした

128 :デフォルトの名無しさん:2010/09/05(日) 02:26:55
[ hage(i) or hoge(i) for i in o ]

129 :デフォルトの名無しさん:2010/09/05(日) 04:31:29
なるほど!ありがとうございました

130 :デフォルトの名無しさん:2010/09/05(日) 04:56:18
新スタイルクラスのインスタンスか
旧スタイルクラスのインスタンスかを調べるにはどうするのが一番スマートですか?

131 :デフォルトの名無しさん:2010/09/05(日) 05:02:08
ぼくの考えたスマートな方法は、
type(o) == o.__class__
です。
これ以上スマートな方法ありますか?

132 :デフォルトの名無しさん:2010/09/05(日) 05:06:23
旧クラス判定は
str(type(o)) == "<type 'instance'>"
です。これはちょっとイケてないですよね?

133 :デフォルトの名無しさん:2010/09/05(日) 07:57:56
>>132
これでどう?
http://codepad.org/mwaHnXfz

134 :デフォルトの名無しさん:2010/09/05(日) 10:53:24
>>61
>組み込み関数名を上書きしてしまいハマってしまいました。
>関数名の上書きでエラーが出ないってちょっとおかしくないですか?
>前もってすべての関数名を知っておかないといけないってことですよね

>>63
>ちなみに上書きしたのはstrです。
>文字列型のテンポラリな変数でよく使っていた変数名なので・・。

あるあるー
strとかlenとかlistとか、ふつうに一時変数として使いたいよね
このまえ all() という組み込み関数があるの知らなくて、all という変数を使って
意味不明のエラーになってはまった


135 :デフォルトの名無しさん:2010/09/05(日) 21:45:20
日本人ならRubyだろ
この非国民どもめ

136 :デフォルトの名無しさん:2010/09/05(日) 21:51:35
>>135
よし、今からなでしこだけ使っていいぞ

137 :デフォルトの名無しさん:2010/09/05(日) 22:00:42
布教活動をしてもろくな人間しか集まらず
言語としての評価を著しく下げる行為だと
Ruby信者には、それがわからんとです

138 :デフォルトの名無しさん:2010/09/05(日) 22:04:08
怪しい外人とか、消えて欲しいよね

139 :デフォルトの名無しさん:2010/09/05(日) 22:21:27
why_は本当に消えちゃったな

140 :デフォルトの名無しさん:2010/09/05(日) 22:30:50
>>136
サンクスw

141 :デフォルトの名無しさん:2010/09/05(日) 23:28:25
おまいら巣に帰れ

142 :デフォルトの名無しさん:2010/09/06(月) 01:51:40
rubyはend書くのが面倒くさい

143 :デフォルトの名無しさん:2010/09/06(月) 03:34:43
インデントが深くなった関数とか長めの関数だと#end 関数名って最近付けるようになった
だがRubyは書き方が複数存在するところが嫌い
たとえばifとかwhileに別の書き方(判定分が偽のときに実行)があったり

144 :デフォルトの名無しさん:2010/09/06(月) 03:43:51
if hage:
  if fuga:
    if hoge:
      pass
      pass
      pass
      #end
    pass
    pass
    pass
    #end
  pass
  pass
  pass
  #end

なんかおかしくね

145 :デフォルトの名無しさん:2010/09/06(月) 04:40:43
python3未満で、辞書内包表記みたいに一行で辞書を作りたいのですが、
そんな方法ありますか?

146 :デフォルトの名無しさん:2010/09/06(月) 04:44:20
あります

147 :デフォルトの名無しさん:2010/09/06(月) 04:45:02
>>145
はずしてるかもしれないけど

>>> {'a': 100, 'b': 200, 'c': 300}
{'a': 100, 'c': 300, 'b': 200}
>>> dict(zip(('a', 'b', 'c'), (100, 200, 300)))
{'a': 100, 'c': 300, 'b': 200}

148 :デフォルトの名無しさん:2010/09/06(月) 05:18:25
辞書内包表記とはなんぞやと思ってググったら
{ k:v for k in a for v in b }
3以降はこんなふうに書けるのか
これと同じものを作るのなら
dict( zip(a, b) )
kやvに処理を加えるなら
dict( zip( (foo(k) for k in a), (bar(v) for v in b) ) )
って感じ?

149 :デフォルトの名無しさん:2010/09/06(月) 06:37:37
>>145,146,147
ありがとうございました
辞書内包表記なくても問題ないですね

150 :デフォルトの名無しさん:2010/09/06(月) 08:20:17
C言語系の言語で
if ( a = hoge() ){...}
みたいに、代入と評価を同時にすることがありますが
これはPythonではできないですか?

151 :デフォルトの名無しさん:2010/09/06(月) 08:53:24
それはPythonではすることはできないです。

152 :デフォルトの名無しさん:2010/09/06(月) 09:03:26
そうですか。
ありがとうございました。

153 :デフォルトの名無しさん:2010/09/06(月) 09:36:22
Traceback (most recent call last):
遡る    (最も 最近 呼ぶ 最後):


日本語でおk

154 :デフォルトの名無しさん:2010/09/06(月) 09:39:29
>>> print (lambda n: n + 1)(2)
3
は実行出来ますが
>>> print (lambda n: n += 1)(2)
は実行出来ません
>>> print (lambda n: a = n)(2)
なんかも駄目みたいです

lambda の中で式というか代入をしたい場合はどうすればよいでしょうか

155 :デフォルトの名無しさん:2010/09/06(月) 09:47:52
>>150
これができないのと同じ理由でできない
Pythonでは代入は式ではなく値を返さない、lambdaに入れられるのは単一の式のみなので

156 :デフォルトの名無しさん:2010/09/06(月) 09:59:11
直感的には理解し辛いよね

157 :デフォルトの名無しさん:2010/09/06(月) 10:05:09
lambda を使って n! を再帰的に求める関数は作れますか

158 :デフォルトの名無しさん:2010/09/06(月) 10:10:43
冗長に見えても明示的なコードの方が良いのです

159 :デフォルトの名無しさん:2010/09/06(月) 10:15:56
pythonとダンス関係なさそうなのになんでランバダっていう命令があるんですか?

160 :デフォルトの名無しさん:2010/09/06(月) 10:26:29
>>157
Yコンビネータ

161 :デフォルトの名無しさん:2010/09/06(月) 10:41:32
ネストしてある正規表現にマッチした部分を、構造的に取り出すにはどうしたらいいですか?
MatchObject.group()
でマッチした部分を取り出せますが、
一次元のリストみたいな形でしか取り出せないようです。

162 :デフォルトの名無しさん:2010/09/06(月) 10:47:47
http://www.python.jp/doc/2.5/lib/match-objects.html
このマニュアルを熟読してますが、できなそうです・・
PHPでは出来るのに、まさかPythonではできない・・?

163 :デフォルトの名無しさん:2010/09/06(月) 10:53:38
>>162
gourpの引数とかはちがうのか?
つかお前のいう構造的ってのが良く分からん

164 :デフォルトの名無しさん:2010/09/06(月) 11:01:02
((hoge)(poge)moge)
みたいな正規表現に対して
[["hoge","poge"],"moge"]
みたいに、正規表現の構造を反映した形で値が返ってくるということです・・

165 :デフォルトの名無しさん:2010/09/06(月) 11:36:31
なにその不思議な反映のされ方

166 :デフォルトの名無しさん:2010/09/06(月) 11:53:57
>>> re.findall(r'(a(b.*))', 'xyzabcdef')
[('abcdef', 'bcdef')]

167 :デフォルトの名無しさん:2010/09/06(月) 11:56:50
perlでいうと $2.1 とか $3.2 のことか

168 :デフォルトの名無しさん:2010/09/06(月) 11:59:22
>>164
それは
["hogepagemoge",["hoge","poge"]]
を返すべきじゃないか

169 :デフォルトの名無しさん:2010/09/06(月) 21:17:10
>>156
むしろC言語やってた時、代入が値を返すのを初めて知って違和感あった

170 :デフォルトの名無しさん:2010/09/06(月) 21:30:44
Cの代入は式だからなあ。
それが便利でもあり、問題でもあり。

171 :156:2010/09/06(月) 21:50:26
>>169
ああ、そのつもりで言ったんだよ

172 :デフォルトの名無しさん:2010/09/06(月) 21:59:52
ビット演算の「&」「|」には代入演算子「&=」「|=」があるのに
論理演算の「and」「or」にはそれがないんだね
後者の代入演算子として「&=」や「|=」を使うのってありですか?

173 :172:2010/09/06(月) 22:01:44
補足
実行結果は問題ないことは確認済で,コーディングスタイルとしてありかという意味です

174 :デフォルトの名無しさん:2010/09/06(月) 23:28:53
v = ['a','b',['c'],'d']
print str(v)
v = ('a','b',('c'),'d')
print str(v)
↓結果
['a', 'b', ['c'], 'd']
('a', 'b', 'c', 'd')

このように、タプルにすると要素が一つの時
勝手にネストが解消されてしまうのは何故ですか?

175 :デフォルトの名無しさん:2010/09/06(月) 23:38:25
>>> ('c')
'c'
>>> ('c',)
('c',)

式を先に計算するためのカッコと区別するために
一要素のタプルは要素のあとに , をつける必要があるです

176 :デフォルトの名無しさん:2010/09/06(月) 23:45:31
そういうことになってたのですね
ありがとうございました

177 :デフォルトの名無しさん:2010/09/07(火) 00:24:43
>>172-173
期待通りに動きゃいいんだよ

178 :デフォルトの名無しさん:2010/09/07(火) 02:48:30
名前空間のすべてのオブジェクトのリストを取得する方法ってありますか?
dir()で、名前だけは分かりますが、
引数に渡したいので、オブジェクトで欲しいんです

179 :デフォルトの名無しさん:2010/09/07(火) 03:30:39
locals() globals() でそれぞれローカル・グローバル名前空間における
名前:オブジェクト
の辞書が取得できる

180 :デフォルトの名無しさん:2010/09/07(火) 03:38:41
素晴らしいですね
ありがとうございます

181 :デフォルトの名無しさん:2010/09/07(火) 04:46:35
ソース中の日本語をすべてユニコード文字列にすると
uを付け忘れることがあるから、
処理する時だけunicodeにする方がいいですよね?

182 :デフォルトの名無しさん:2010/09/07(火) 08:20:52
と思ったけど・・
一度unicodeにしたものをもう一度utf-8に戻すのが面倒だから
やっぱりユニコードに統一した方がいいですね・・

183 :デフォルトの名無しさん:2010/09/07(火) 08:46:50
from __future__ import unicode_literals
は邪道なの?

184 :デフォルトの名無しさん:2010/09/07(火) 17:31:50
>>181-182
お前はなんもわかっとらんな

185 :デフォルトの名無しさん:2010/09/07(火) 17:58:39
>>181
>ソース中の日本語をすべてユニコード文字列にすると
>uを付け忘れることがあるから

ソース中の日本語をすべてユニコード文字列にしたら
uを付ける必要が無い

186 :デフォルトの名無しさん:2010/09/07(火) 18:29:06
ソースファイルのエンコーディングとは無関係な話だよな
>>185>>183をしたらuをつける必要がないってこと?

187 :デフォルトの名無しさん:2010/09/08(水) 11:47:59
Do
hoge()
Loop While X < 100

に相当する表現がないみたいなんですけど
どうすればいいんですか

188 :デフォルトの名無しさん:2010/09/08(水) 12:57:17
while True:
  hoge()
  if not (X < 100): break

189 :デフォルトの名無しさん:2010/09/08(水) 14:09:35
while X < 100:
  hoge()

190 :デフォルトの名無しさん:2010/09/08(水) 14:16:59
>>187==>>188
>>188!=>>189

191 :デフォルトの名無しさん:2010/09/08(水) 14:18:35
そんな気持ち悪い言語使ってる人は文法を改めるべきだと思います

192 :デフォルトの名無しさん:2010/09/08(水) 14:18:36
>>187 == >>188
>>187 != >>189
だった。。。

193 :デフォルトの名無しさん:2010/09/08(水) 14:44:01
a == b
a != c
のとき
b != c
は成立する

194 :デフォルトの名無しさん:2010/09/08(水) 14:56:32
いやまあそうなんだけどね...

195 :デフォルトの名無しさん:2010/09/08(水) 15:01:19
>>188 の無限ループっぽさを気持ち悪いと思うか
>>187 も本質的には無限ループになりうると気付くかどうかだぬ

196 :デフォルトの名無しさん:2010/09/08(水) 16:33:24
不変表明を理解してないだけ

197 :デフォルトの名無しさん:2010/09/08(水) 22:56:10
Pythonでordered hashみたいなものを使いたい時は
どうするのが普通ですか?

198 :デフォルトの名無しさん:2010/09/08(水) 23:00:15
collections.OrderedDict

199 :デフォルトの名無しさん:2010/09/08(水) 23:13:45
そろそろ2.7は安定したかな?
まあ2.6から乗り換えるメリットも特にないが

200 :デフォルトの名無しさん:2010/09/08(水) 23:28:04
精神衛生的の比率
2.6.x: 60% (comfortable with libraries)
3.x: 16% (fun on latest)
2.5, 2.4: 11% (available obsolete libraries)
2.7: 9% (needs libraries, and fun on latest)
1.x: 4% (forgotten that)

201 :デフォルトの名無しさん:2010/09/08(水) 23:37:44
[[1,2],[3,4],[5,6]]
となっているリストから
例えば、3で検索した場合に3と同じリストになっている4を出力するにはどうしたらいいでしょうか?

202 :デフォルトの名無しさん:2010/09/08(水) 23:52:04
6で検索したときは5を返すのか?

203 :デフォルトの名無しさん:2010/09/08(水) 23:54:53
>>202
そうです。

204 :デフォルトの名無しさん:2010/09/09(木) 00:00:11
[[1,2],[3,4,[8,7]],[9,5,6]]
とかなってるときは?

205 :デフォルトの名無しさん:2010/09/09(木) 00:02:53
それは4,[8,7]だろ

206 :デフォルトの名無しさん:2010/09/09(木) 00:03:46
てかpython関係ねーw
純粋にアルゴリズムの話やん

207 :デフォルトの名無しさん:2010/09/09(木) 00:04:49
>>201
def search(list,s):
 for i,pair in enumerate(list):
  for v in pair:
   if v == s:
    return list[i][0] if not s == list[i][0] else list[i][1]
ってやるととれそうだけど、
元の設計が悪い気がする。

208 :デフォルトの名無しさん:2010/09/09(木) 00:07:59
>>204
appendの段階で2つになっています。

>>207
ありがとうございます。
やはりfor文でまわさないといけないようですね。


209 :デフォルトの名無しさん:2010/09/09(木) 00:08:55
[[1,2],[4,[3,8,7]],[3,9,5,6]]
とかなってるときは?

210 :デフォルトの名無しさん:2010/09/09(木) 00:10:59
>>207
alistの話だと思って見ていて思わぬ展開に驚いたよ

211 :デフォルトの名無しさん:2010/09/09(木) 00:11:17
二つになってるなら辞書にしてから3で参照すればいいのでないので?

212 :デフォルトの名無しさん:2010/09/09(木) 00:11:52
ほんとlist周りのパーサってないよね
いちいちforや包○表現や組み込み関数を使いまわさないとダメって

213 :デフォルトの名無しさん:2010/09/09(木) 00:11:59
[[1,2],[3,4],[3,3]]
となってるときは?

214 :デフォルトの名無しさん:2010/09/09(木) 00:15:21
>>209,213
あんまり詳しく書かなかったので申し訳ないです。
2重までになってて、値は重複なく、組になって入っています。

215 :デフォルトの名無しさん:2010/09/09(木) 00:15:46
リストに対して回す以外にどんな方法があんのさ?

216 :デフォルトの名無しさん:2010/09/09(木) 00:17:53
重複ないなら辞書オヌヌメ

217 :sage:2010/09/09(木) 00:19:48
>>209
for x in [[1,2],[4,[3,8,7]],[3,9,5,6]]:
if 3 in x: print [y for y in x if y != 3]

218 :デフォルトの名無しさん:2010/09/09(木) 00:24:20
[[1,2],[3,4],[4,3]]
となってるときは重複?

219 :デフォルトの名無しさん:2010/09/09(木) 00:24:22
ふつーにfilter使えばいいと思ってた俺は

220 :デフォルトの名無しさん:2010/09/09(木) 00:26:25
>>218
すべてのデータで見て、重複しないということなので、どこかに同じ値があるってことはないです。
わかりにくくてすいません、

221 :デフォルトの名無しさん:2010/09/09(木) 00:35:11
>>> l = [[1,2],[3,4],[5,6]]
>>> dict(l+[[y,x] for x,y in l])[3]
4
>>> dict(l+[[y,x] for x,y in l])[6]
5

222 :デフォルトの名無しさん:2010/09/09(木) 00:38:06
>>221
!!!
ありがとうございます。

223 :デフォルトの名無しさん:2010/09/09(木) 01:01:22
[hoge for hoge in hage] ってなんかくどいよね

[[1,2],[3,4],[5,6]]

[[2,1],[4,3],[6,5]]
にする関数とかないのかな

224 :デフォルトの名無しさん:2010/09/09(木) 01:11:31
>>223
さすがにそんなマニアックな関数はないと思う。

>>> L = [[1,2], [3,4], [5,6]]
>>> [ list(reversed(x)) for x in L ]
[[2, 1], [4, 3], [6, 5]]

225 :デフォルトの名無しさん:2010/09/09(木) 01:43:44
>>> map(lambda x: list(reversed(x)), [[1,2], [3,4], [5,6]])
[[2, 1], [4, 3], [6, 5]]



226 :デフォルトの名無しさん:2010/09/09(木) 04:33:45
>>198
ありがとうございます。
でも2.7からなんですね・・
GAEは2.5なのでまじファックです。

227 :デフォルトの名無しさん:2010/09/09(木) 04:36:26
for k, v in sorted(h.keys()):
 print k, v
これじゃいかんの

228 :デフォルトの名無しさん:2010/09/09(木) 04:36:42
>>226
http://pypi.python.org/pypi/ordereddict/

229 :デフォルトの名無しさん:2010/09/09(木) 04:37:12
いかんな
for k in sorted(h.keys()):
 print k, h[k]

230 :デフォルトの名無しさん:2010/09/09(木) 04:48:49
>>227
そんな簡単に実現できるならライブラリになってないのではないでしょうか・・
>>228
バックポートされてたんですね。
ありがとうございます。


231 :デフォルトの名無しさん:2010/09/09(木) 05:02:36
挿入順を言ってるのかkeyの値としての順序を期待しているのかがいまいち判らん。

232 :デフォルトの名無しさん:2010/09/09(木) 05:04:57
2.7未満でも、
from collections import OrderedDict
みたいに、2.7以降と互換性のある書き方ができるようにする方法はありますか?

233 :デフォルトの名無しさん:2010/09/09(木) 05:06:54
>>231
挿入順です
PHPのarrayやrubyのOrderedHashみたいな

234 :デフォルトの名無しさん:2010/09/09(木) 06:09:53
自前でOrderDictクラスを定義すればいんじゃない?
こんな感じに(未検証)

class OrderDict(dict):

..def __init__(self, *args, **kwds):
....self.orderd = []
....dict.__init__(self, *args, **kwds)

..def __setitem__(self, k, v):
....dict.__setitem__(self, k, v)
....if k not in self.orderd:
......self.orderd.append( k )

..def __delitem__(self, k):
....dict.__delitem__(self, k)
....self.orderd.remove(x)

..def __iter__(self):
....for k in self.orderd:
....yield self[k]

あとは必要だと思うメソッドをオーバーライドすれば使えると思う
#コンストラクタの挙動がちょっと心配

235 :デフォルトの名無しさん:2010/09/09(木) 07:17:59
リストの各要素に、文字列が入っています。
['a','b','c']
それを、指定した文字列を間に挟んで結合したいです。
'a_b_c'
これを簡単にやるにはどうしたらいいですか?

236 :デフォルトの名無しさん:2010/09/09(木) 07:35:44
(lambda xs: '' if xs == [] else ('%s' + '_%s' * (len(xs)-1)) % tuple(xs))(['a','b','c'])

237 :デフォルトの名無しさん:2010/09/09(木) 07:37:56
すごく・・難しいです・・

238 :デフォルトの名無しさん:2010/09/09(木) 07:47:07
(lambda xs: '_'.join(xs))(['a','b','c'])

239 :デフォルトの名無しさん:2010/09/09(木) 08:02:19
>>236,238
ありがとうございます。

240 :デフォルトの名無しさん:2010/09/09(木) 08:06:02
Rubyはファイル入出力でcloseを書かなくてもいい書き方ができますが
Pythonはできますか?

241 :デフォルトの名無しさん:2010/09/09(木) 08:27:39
基本的に閉じなくてもPython終了時に勝手に閉じられる
メモリ消費とかはよくわからんけど

242 :デフォルトの名無しさん:2010/09/09(木) 08:57:44
おまえらひどいな
'_'.join(['a','b','c'])

243 :デフォルトの名無しさん:2010/09/09(木) 09:00:03
>>240
hoge = open('fuga', 'rb').read()
これでいいよ
ガベコレされるタイミングはRubyと一緒かな?

244 :デフォルトの名無しさん:2010/09/09(木) 09:32:35
>>240
with open("hoge.txt", "w") as f:
  f.write("hogehoge")

知りたいのはこういうこと?

245 :デフォルトの名無しさん:2010/09/09(木) 10:20:39
>>243
CPythonはリファレンスカウントが基本なので
その文の時点でファイルディスクリプタは閉じられるよ

246 :デフォルトの名無しさん:2010/09/09(木) 10:30:02
質問失礼します。
echoサーバーをselect使って書いています。
アクセプトしたソケットがクライアント側で切断された場合にサーバー側でそれを感知することはできるでしょうか?

247 :デフォルトの名無しさん:2010/09/09(木) 10:51:33
>>245
横文字うざっ

248 :246:2010/09/09(木) 17:53:05
Python本スレで質問したいと思います。
失礼しました

249 :デフォルトの名無しさん:2010/09/09(木) 20:42:50
>>243
こんなふうに一気読みした後,
読み込んだ文字列を行単位で処理する方法ないかな?
メモリ使用量が倍になるけど、'\n'でsplitしてリストとして扱うしかない?


250 :デフォルトの名無しさん:2010/09/09(木) 20:49:54
from StringIO import *
s = 'abc\ndef\nghi'
for line in StringIO(s): print line,

Pythonの文字列はイミュータブルだから
メモリ使用量もバカみたいに増えたりはしないと思うけどどうだろ

251 :デフォルトの名無しさん:2010/09/09(木) 21:20:32
>>250
ありがとう。
まさに求めていたものだった。

メモリ使用量はどうかな…まったく同じ文字列なら使いまわすだろうけど。

252 :デフォルトの名無しさん:2010/09/09(木) 22:15:28
cStringIOを使おう運動

253 :デフォルトの名無しさん:2010/09/10(金) 00:40:10
>>249
for line in open('fuga', 'rb').readline():
 print line
こんなんじゃだめすか

254 :デフォルトの名無しさん:2010/09/10(金) 01:34:16
open('fuga', 'rb').readline()
はファイルを開いて「1行」読み込むって意味だから
それだと読み込んだ1行を1文字ずつlineにいれてループってことになる
>>253の「readline」を「readlines」にすれば1行ずつ読み込んで表示できる

255 :デフォルトの名無しさん:2010/09/10(金) 03:49:31
>>183
__future__というのは2.6で追加されたようです。
2.6未満では。u'ほげほげ'と書くしかないですか?

256 :デフォルトの名無しさん:2010/09/10(金) 04:08:30
いや、__future__モジュール自体はあるようです。
ただunicode_literalsというのがありません。

257 :デフォルトの名無しさん:2010/09/10(金) 04:13:19
いろいろ検索してみると
unicode_literalsを使うとuを書かなくてもデフォルトでuを指定したことになるものみたいですね
まさに求めていた機能ですが、残念

258 :デフォルトの名無しさん:2010/09/10(金) 05:10:27
呼び出された関数から、呼び出した関数のオブジェクトを取得するにはどうすればいいですか?

259 :デフォルトの名無しさん:2010/09/10(金) 05:31:25
リストで存在しないインデックスを指定するとエラーになります。
ここでエラーにせず、Noneを返す方法はありますか?

260 :デフォルトの名無しさん:2010/09/10(金) 05:33:47
unicode_literalsが無いとは、Python 2.5以下の化石使ってるのか、3.0以降使ってるのか、
どっちだろ?

261 :デフォルトの名無しさん:2010/09/10(金) 05:38:02
>>260
その化石しか使えないのがGoogle App Engineですよ

262 :デフォルトの名無しさん:2010/09/10(金) 05:52:44
あぁ、自分で勉強のためにPythonを触っているなら絶対2.6以降をおすすめするが、
そういう事情があるなら仕方ないな。

実際、広く使われているプログラムをメンテするときはCentOS5のために2.4以降を
サポートするように書かないといけなくて、with文無いのが鬱陶しすぎる。。。

263 :デフォルトの名無しさん:2010/09/10(金) 07:49:57
>>258
>>> hoge = [2,3,4]
>>> fuga = [5,6,7]
>>> def hage(x):
... x[0][1] = 9
... x[1][2] = 8
...
>>> hage([hoge, fuga])
>>> hoge, fuga
([2, 9, 4], [5, 6, 8])

264 :デフォルトの名無しさん:2010/09/10(金) 08:09:24
sys._getframe()
ただし、ポータブルな方法ではない。CPython以外のPython実装では使えない可能性がある。

265 :デフォルトの名無しさん:2010/09/10(金) 14:40:01
"aiueo"という文字列ただ1つだけを要素に持つ様なタプルを書こうとして
("aiueo")と書いても通用しません。
そこで試行錯誤したところ
("aiueo",)
が正解なのではないかと思ったのですが、これは正式な仕様ですか?

266 :デフォルトの名無しさん:2010/09/10(金) 14:42:44
はい。

267 :デフォルトの名無しさん:2010/09/10(金) 14:57:48
ありがとうございます。

あと、自然数が格納されたnum(たとえば123など)があるとき、
"123"ないしu"123"と書けば文字列になりますが、
この様に即値を書いていてはnumが状況によって変わり得る時に困ります。

そこでを文字列にするには
str(num)
とすれば良いようですが、unicode文字列にするには
どうしたらよいでしょうか。
unicode_string(num)
みたいな関数があるのでしょうか。

よろしくお願いいたします。


268 :デフォルトの名無しさん:2010/09/10(金) 15:00:44
unicode(num)

269 :デフォルトの名無しさん:2010/09/10(金) 16:04:26
>>268
ありがとうございます。
助かりました!

270 :259:2010/09/10(金) 20:59:03
print a[index] if isinstance(index,int) and 0 <= index and index < len(a) else None

こんな感じにすることでエラーを出さなくできました。
これであってますか?

271 :デフォルトの名無しさん:2010/09/10(金) 21:04:17
あとこのような処理を組み込んだリストを組み込むには、オリジナルのリストクラスを書かないといけませんが
みなさんそういうの作ってますか?
組み込みクラスにも関数を追加できたらいいのですが・・。

272 :デフォルトの名無しさん:2010/09/10(金) 21:41:45
>>259
例外処理だとダメなん?

l=[0,1,2,3,4,5]
try: print l[6]
except IndexError: print(None)

273 :デフォルトの名無しさん:2010/09/10(金) 21:52:29
うーん、例外を通常のプログラムの流れの中で使うのは抵抗がありますね
アサーションの意味があると思うので・・

274 :デフォルトの名無しさん:2010/09/10(金) 21:56:23
>>271
Rubyおすすめ
[0, nil, 1][100]でもnil、[0, nil, 1][1]でもnilが返ってくる
組み込みクラスの拡張も思いのまま

275 :デフォルトの名無しさん:2010/09/10(金) 22:00:45
[]は上書きできないんだっけ?

276 :デフォルトの名無しさん:2010/09/10(金) 22:09:19
listを継承して__getitem__なんかを定義するしかないんじゃないか

277 :デフォルトの名無しさん:2010/09/10(金) 22:27:32
>>274
Rubyは以前やってましたが総合的にはPythonの方が好きです
>>276
やはりそうですか

278 :デフォルトの名無しさん:2010/09/10(金) 23:26:51
>>273
Python の場合はその考えは忘れた方が良いお

279 :デフォルトの名無しさん:2010/09/10(金) 23:29:45
>>273
>リストで存在しないインデックスを指定するとエラー

これこそアサーション使う場面じゃん

280 :デフォルトの名無しさん:2010/09/10(金) 23:50:04
>>275
何故?

281 :デフォルトの名無しさん:2010/09/11(土) 00:09:16
>>278
何故?

282 :デフォルトの名無しさん:2010/09/11(土) 00:12:56
やたら例外吐きやがる!氏ねPython
って考えなら捨てたほうがいいかも

283 :デフォルトの名無しさん:2010/09/11(土) 00:15:45
>>278
だな。

文字列が整数のみからなるものかどうかを調べる典型的な方法が
def is_int(s):
  try:
    int(s)
  except ValueError:
    return False
  return True
だからなぁ。

284 :デフォルトの名無しさん:2010/09/11(土) 00:27:04
isinstance(s,int)じゃあかんの

285 :デフォルトの名無しさん:2010/09/11(土) 00:27:52
もちつけ

286 :デフォルトの名無しさん:2010/09/11(土) 00:34:54
>>283
Java も parseInt だかなんだかで例外をプログラムの流れの中で使うからな
>>273 は C++ 使いすぎた化石

287 :デフォルトの名無しさん:2010/09/11(土) 11:36:52
>>283
そう書くと冗長に見えるけど、その関数の呼び出し元で直接例外を扱うことを考えると、
if is_int(s):
    xxxxx
else:
    yyyyy
が、
try:
    val = int(s)
    xxxxx
except ValueError:
    yyyyy
になるだけで、1行しか増えてない。
しかも、もしifの後で結局数値に変換するのであれば、テストと変換で2回文字列を走査
しないといけない方が非効率になるし。

288 :デフォルトの名無しさん:2010/09/11(土) 13:23:20
>>262
俺も2.4を使わざるを得なくて、withくらいならいいかって思ってたら
後置ifもなくて泣いた。

289 :デフォルトの名無しさん:2010/09/11(土) 14:17:48
>>287
xxxxxが予期せずValueError返す可能性考えると
try:
    val = int(s)
except ValueError:
    yyyyy
else:
    xxxxx
ってしないと駄目だよ。

冗長だとは思わないが、例外使うのに抵抗ある人には使い辛いだろうなぁ、と思う。

あんま関係ない話だが、一行try式がほしい。
val = int(s) except ValueError 0
is_int = True try int(s) except ValueError False

290 :デフォルトの名無しさん:2010/09/11(土) 16:01:44
CentOS5 は Python2.5 以上も動くよ
yum にも影響出ないし

291 :デフォルトの名無しさん:2010/09/12(日) 13:37:34
str型のu'\u30c6\u30b9\u30c8'のような文字列をunicodeに戻すにはどうしたらいいのでしょうか。

292 :デフォルトの名無しさん:2010/09/12(日) 14:41:46
>>291
質問の内容がいまいち掴めない
それだと初めから unicode 型だよ?

>>> type(u'\u30c6\u30b9\u30c8')
<type 'unicode'>

293 :デフォルトの名無しさん:2010/09/12(日) 15:20:14
u'\u30c6\u30b9\u30c8'.encode('utf-8', replace)
とE.S.P.

294 :デフォルトの名無しさん:2010/09/12(日) 15:41:34
ごめんなさい
str="u'\u30c6\u30b9\u30c8'"
を読めるようにしたいという意味です。。


295 :デフォルトの名無しさん:2010/09/12(日) 15:54:46
>>> print u'\u30c6\u30b9\u30c8'
テスト

これがしたかったのか?

296 :デフォルトの名無しさん:2010/09/12(日) 15:56:50
>>294
読むだけなら...

>>> s="u'\u30c6\u30b9\u30c8'"
>>> exec('print %s' % s)
テスト



297 :デフォルトの名無しさん:2010/09/12(日) 16:10:16
連投スマソ、こうかな??

>>> s="u'\u30c6\u30b9\u30c8'"
>>> exec('u= %s' % s)
>>> type(u)
<type 'unicode'>

298 :デフォルトの名無しさん:2010/09/12(日) 16:32:58
>>297
できました!
ありがとうございましたー

299 :デフォルトの名無しさん:2010/09/12(日) 17:43:45
>>298
exec は文字列を Python のコードとして実行する関数だから取り扱いには気をつけてね
exec を使う以外にも↓で表示できたわ

import re
m = re.search("'(.*?)'","u'\u30c6\u30b9\u30c8'")
print m.group(1).decode('unicode_escape')

300 :デフォルトの名無しさん:2010/09/12(日) 18:50:02
>>> print "u'\u30c6\u30b9\u30c8'".decode('unicode-escape')
u'テスト'



301 :デフォルトの名無しさん:2010/09/12(日) 23:06:20
今、はじめてのPythonという本を読んでいるのですが
P206のf.write("%d\n" % c)というコードが分かりませぬ
\nは改行? cというのは1〜100までの数字で
%d\nをcで割るというのはどういうことなんでしょう

302 :デフォルトの名無しさん:2010/09/12(日) 23:17:38
それは %d のところに c を埋め込むっていう意味
'%d\n' % 100 や '<%s><%s>\n' % ['hoge', 'piyo'] なんかを試してみればわかると思う
詳しくは 文字列フォーマット Python でぐぐって

303 :デフォルトの名無しさん:2010/09/12(日) 23:40:32
文字列フォーマットのパラメタは()で括っているだけで
タプル(シーケンス型)ではなかったと思うのだけど
> '<%s><%s>\n' % ['hoge', 'piyo']
この書き方って大丈夫だっけ?


304 :デフォルトの名無しさん:2010/09/12(日) 23:42:43
>>301
その""の後の%は、文字列フォーマット演算子。
ttp://www.python.jp/doc/release/lib/typesseq-strings.html

左辺の文字列で書式指定して、右辺のタプルか辞書をその書式通りに文字列化する。
例えば%dだと数値をそのまま文字列にするだけだが、%03dにすると頭に0を詰めて
3桁で表現する。%3dだとスペースを入れて3桁で右揃えになる。

305 :303:2010/09/13(月) 00:03:26
try:
print '%d, %d' % (1,2)
except Exception, e:
print e

try:
print '%d, %d' % [3,4]
except Exception, e:
print e

try:
v = (5, 6)
print '%d, %d' % v
except Exception, e:
print e

try:
v = [7, 8]
print '%d, %d' % v
except Exception, e:
print e

<出力>
1, 2
int argument required
5, 6
int argument required

へー

306 :302:2010/09/13(月) 00:04:09
>>303
大丈夫じゃないね。指摘どうもです
もし試すなら '<%s><%s>\n' % ['hoge', 'piyo'] でな '<%s><%s>\n' % ('hoge', 'piyo') で

307 :デフォルトの名無しさん:2010/09/13(月) 00:16:14
>>> "%d\n"%100 == str(100)+"\n" == "100\n"
True

上記は全て同じ値になります
つまり c の数値を %d に当てはめて数字化してるってことだよ
\n は改行であってるよ、% は除算ではなくて剰余だけどね

308 :301:2010/09/13(月) 00:52:55
>>302-307
ありがとうございます!
とても分かりやすかったです。
さっき、はじめてのPythonって書いたけどみんなのPythonの間違いでしたすみません。。

309 :デフォルトの名無しさん:2010/09/13(月) 00:58:03
write(str(c)+"\n")じゃダメなのん?

310 :デフォルトの名無しさん:2010/09/13(月) 01:05:38
>>309
'%04d-%02d-02d' % (year, month, day) とかをそれで書くのは大変だし読みにくいぞ

311 :デフォルトの名無しさん:2010/09/13(月) 01:18:01
文字列を+で結合するのはコストが高いことを知っておいた方が良い
hoge = []
hoge.append(str(c))
hoge.append('\n')
write(''.join(hoge))
としなさいとPEPにも書いてあるくらいだ

312 :デフォルトの名無しさん:2010/09/13(月) 01:36:44
最近は + でも速いよ

313 :デフォルトの名無しさん:2010/09/13(月) 01:41:29
というかおそいってのも
大量のものでやるとき+だと再確保しまくるからであって、いくつかの物をくっつけるときはあまり関係ないような

314 :デフォルトの名無しさん:2010/09/13(月) 01:51:23
文字列の長さや結合回数で変わるけど小規模なら+のが速い

315 :デフォルトの名無しさん:2010/09/13(月) 01:54:14
m9

316 :デフォルトの名無しさん:2010/09/13(月) 06:17:42
辞書でキーに指定したものが存在しない場合、何が返ってきますか?

317 :デフォルトの名無しさん:2010/09/13(月) 06:24:50
それはさすがに自分で試すかマニュアル読むべき

318 :デフォルトの名無しさん:2010/09/13(月) 10:57:39
文字列フォーマットって特定用途ですげー便利なんだけど、
なんかなくなるみたいな話なかったっけ?
記法が他と浮いてるから、整理したくなる気持ちは想像つくが…

319 :デフォルトの名無しさん:2010/09/13(月) 11:04:49
%を使う従来の書き方が廃止になって、新しくはなる。

320 :デフォルトの名無しさん:2010/09/13(月) 11:41:15
%記法がなくなると不便になるな。

321 :デフォルトの名無しさん:2010/09/13(月) 11:55:05
ちょっと調べてみたけど、新しい方のstr.format()はなかなか使いやすそう。

322 :デフォルトの名無しさん:2010/09/13(月) 19:44:23
メールに関してなんだけど、どこで聞いたらいいのか分からないからここで聞きます。

携帯から自鯖へメール転送をして保存したいんだけど、絵文字の部分が〓に変わって保存されてしまいます。
ちゃんとあとから区別ができるように情報を失わずに保存したいんだけどなんとかなりますか?
携帯はソフトバンクですが、USB接続やカード保存ができない機種なので難儀しています。

自鯖はpythonで書いたもので、関係ある部分だけ書き出すと、こんなかんじです。

import asyncore
import smtpd
from email import message_from_string

class MySMTPServer(smtpd.SMTPServer):
 def process_message(self, peer, mailfrom, rcpttos, data):
  with open("mail.eml", "w") as f:
   f.write(data)

if __name__ == '__main__':
 server, port = "192.168.11.3", 25
 MySMTPServer((server, port), None)
 asyncore.loop()

323 :デフォルトの名無しさん:2010/09/13(月) 19:52:04
ソフトバンクのロゴだから無理

324 :デフォルトの名無しさん:2010/09/13(月) 19:56:34
上で言われてる通り無理
絵文字に割り当てられてる文字コードに対応する文字が無いから表示がおかしくなる
どうしてもどうにかしたいというなら
絵文字の文字コードのとこを絵文字を説明する文字列に置き換えるとかならできるが

325 :デフォルトの名無しさん:2010/09/13(月) 19:58:26
UNICODEに絵文字導入するって噂あったけどどうなってるんだろうね

326 :322:2010/09/13(月) 20:49:44
>>323-324
表示がおかしくなることは構わないのですが、全部下駄に置換されてしまうので
バイナリで見ても、元がどの文字だったか分からないんです。
区別できるんであれば、htmlで画像を埋め込んで表示させたり、手はあると思うのですが。
どうにかならないでしょうか。

327 :デフォルトの名無しさん:2010/09/13(月) 20:53:11
from email import message_from_string

これをやめろ

328 :デフォルトの名無しさん:2010/09/13(月) 21:06:35
おまかせだと適当に変換されるからそうなるんじゃない?
mime の get_content_maintype() とか get_content_charset() とか
ttp://epydoc.sourceforge.net/stdlib/email.message.Message-class.html
あるいは
email.Parser.Parser().parsestr()

email.header.decode_header()
あたりのどっかで
デコード指定と変換不可能文字の処理方法を指定するパラメータがあった気がする


329 :デフォルトの名無しさん:2010/09/13(月) 21:14:45
基礎的な質問ですが、

XXXabcdeYYY
XXX12345YYY
XXXあああああYYY

のような文章を

XXXxyzlmYYY
XXXxyzlmYYY
XXXxyzlmYYY


のように一括置換するにはどのような文が適切でしょうか?
XXXとYYYを正規表現で検出して置換するのを想定しています。
<a href ="XX">abc</a>

の記載を

<a href ="YY">abc</a>

のように、リンク先URLだけ置換するにはどうすればよいでしょうか?

330 :デフォルトの名無しさん:2010/09/13(月) 21:15:46
↑すいません、下の4行は無視してください。


331 :デフォルトの名無しさん:2010/09/13(月) 21:22:47
全部無視しました

332 :デフォルトの名無しさん:2010/09/13(月) 21:23:59
屁が出そう

333 :デフォルトの名無しさん:2010/09/13(月) 21:24:47
最短マッチあるんだから、マニュアル読んだだけでできるだろうに
丸投げしないでがんばれ

334 :デフォルトの名無しさん:2010/09/13(月) 21:25:00
( ´,_ゝ`)プッ

335 :322:2010/09/13(月) 21:32:00
>>327,328
process_messageで引き取ったdataを手を
print(bytes(data, "ascii", 'backslashreplace'))
で見てみたけど、渡された時点で iso-2022-jp に変換されているようで
絵文字はすでに下駄になっているようでした。

これは、softbankが外のsmtpに送信する際にはもう変換しているってことなんでしょうか。
なら、もとに戻すのは無理ですよね。

336 :デフォルトの名無しさん:2010/09/13(月) 22:30:53
えっ

337 :デフォルトの名無しさん:2010/09/13(月) 22:36:16
〓ってデコメで送れないの?

338 :デフォルトの名無しさん:2010/09/13(月) 22:38:08
>>335
smtpd.SMTPServer で受けるんじゃなくて
他の普通のメールサーバーで受けたソースはどうなってる?

339 :322:2010/09/13(月) 22:55:40
>>337
デコメじゃなくて、普通の絵文字の話です。

>>338
PCのメアドに送ってみたら、下駄になってました。
文字コード変換されていない生のままでメールを表示させても
絵文字は判別不能になっていました。

ダメっぽいですね。

340 :デフォルトの名無しさん:2010/09/13(月) 23:11:39
いや
デコメだろ

341 :デフォルトの名無しさん:2010/09/13(月) 23:46:39
絵文字はキャリア側で勝手に変換されるよ。
携帯キャリアと関係がある会社が専用で受けるときだけ直接絵文字のバイナリが
入ったデータが受け取れる。

342 :デフォルトの名無しさん:2010/09/14(火) 06:10:09
>>339
外見だけじゃなくて下駄の文字コードは確認したの?

343 :デフォルトの名無しさん:2010/09/14(火) 07:36:15
>>341
まじ?

344 :デフォルトの名無しさん:2010/09/14(火) 08:48:32
>>343
禿bankだけだろ

345 :デフォルトの名無しさん:2010/09/14(火) 08:59:58
ドコモもそうだぞ。auも忘れたけどたぶんしている筈。
メールサーバーが、絵文字を送っても良い送信先一覧を持っていて、
それ以外のサーバーに送るときには変換して送る。
gmailなんかは直接送っていいようになっているから、gmail経由で受け取るとかしたら、
絵文字を受信できるよ。

346 :デフォルトの名無しさん:2010/09/14(火) 11:10:34
2.7をさけて、2.6.6にする価値ってあるんですか?

347 :デフォルトの名無しさん:2010/09/14(火) 11:11:59
はい

348 :デフォルトの名無しさん:2010/09/14(火) 11:17:58
Pythonはver0.1刻みでライブラリの対応が変わってくる
3.xも3.2がリリースされたようだし2.7も中途半端
2.6.6が2.6.xの最終リリースらしいから無理に2.7使う必要はない


349 :デフォルトの名無しさん:2010/09/14(火) 11:32:18
2.4 糞
2.5 慎重派
2.6 普通
2.7 人柱
3.2 チャレンジャー


350 :デフォルトの名無しさん:2010/09/14(火) 15:23:33
Gzipのやつをダウンロードして解凍したんですが、
コマンドプロンプトでpythonと入力してもpythonが起動しません
何が問題ですか?

351 :デフォルトの名無しさん:2010/09/14(火) 15:29:34
環境変数PATHを設定する
わかんなかったら PATH カレントディレクトリ でぐぐる
それすら面倒ならインストーラつきPythonをダウンロードしてインスコ

352 :デフォルトの名無しさん:2010/09/14(火) 16:04:41
Windowsならmsiのがオヌヌメ

353 :デフォルトの名無しさん:2010/09/14(火) 16:15:38
Windowsなのにmsiを使わない人って・・・

354 :デフォルトの名無しさん:2010/09/14(火) 17:51:46
msiでインストールすると、レジストリという面倒なものを使って、
あとでゴミが残るんじゃないですか?

バージョンはちょくちょく変えていくつもりなのでそういうの嫌だなと

355 :デフォルトの名無しさん:2010/09/14(火) 18:01:18
問題なし

356 :デフォルトの名無しさん:2010/09/14(火) 18:02:01
怖がりすぎ m9

357 :デフォルトの名無しさん:2010/09/14(火) 18:04:04
っつーか >>354>>350 みたいな質問する訳がないな

358 :デフォルトの名無しさん:2010/09/14(火) 18:13:12
統合開発環境と、テキストエディタはどちらがお勧めですか?
職業プログラマーではないので、大がかりな仕事というのはしないのですが、
統合開発環境のほうが便利なんでしょうか

359 :デフォルトの名無しさん:2010/09/14(火) 18:18:05
便利でもIDEは統合の開発環境だから
皆と同じようなアプリ・コードを作ることになる
それは他言語目的のIDEだとPythonを使う上でとてもイカン

360 :デフォルトの名無しさん:2010/09/14(火) 18:22:23
補完機能便利です

361 :デフォルトの名無しさん:2010/09/14(火) 18:32:21
>>359
日本語で・・・

362 :デフォルトの名無しさん:2010/09/14(火) 20:37:13
コマンドラインでは、
>>>a=[3,4,5,6]
>>>a
とすると、[3,4,5,7]と表示されますが、

統合開発環境で、
a=[3,4,5,6]
a
と書いて実行しても、
>>>
>>>
としか出ないのですがどうしてですか

363 :デフォルトの名無しさん:2010/09/14(火) 21:02:54
repr(a)

364 :デフォルトの名無しさん:2010/09/14(火) 21:03:58
>>362
節子それコマンドラインちゃう

365 :デフォルトの名無しさん:2010/09/15(水) 00:10:00
>>364
Python(command line)ってはっきり書いてあるアプリケーションなんですが

366 :デフォルトの名無しさん:2010/09/15(水) 00:12:06
えー

367 :デフォルトの名無しさん:2010/09/15(水) 00:18:04
>>365
で、解決したのか?


368 :デフォルトの名無しさん:2010/09/15(水) 00:32:19
>>367
解決してません

369 :デフォルトの名無しさん:2010/09/15(水) 00:50:06
print(a)

370 :デフォルトの名無しさん:2010/09/15(水) 05:36:59
print(repr(a))

371 :デフォルトの名無しさん:2010/09/15(水) 06:11:01
コマンドライン:Windowsではコマンドプロンプトのこと
Python(command line):コマンドライン用インタラクティブシェルのこと

後者はインタラクティブシェル(対話的にプログラムを記述・実行すること)だから
入力した式が即座に評価されて,その値がNoneでなければ表示されるようになっているだけ

372 :デフォルトの名無しさん:2010/09/15(水) 06:57:04
Emacs系のエディタ使え

373 :デフォルトの名無しさん:2010/09/15(水) 09:47:13
>>371
たぶん、 Python(command line) は、インタラクティブシェルじゃなくて
コマンドライン用のPythonアプリケーションを書く設定の事だと思うぞ。

374 :デフォルトの名無しさん:2010/09/15(水) 13:43:02
>>373
Python(command line) ってことはWindowsだと思ったんだが(ファイル名がそうなってるから)

WindowsだとGUIツールキットを使用した IDLE とCUI用の Python(command line) の2種類ある
後者はコマンドライン引数にスクリプトを与えるとインタプリタとして動き,
コマンドライン引数無しで実行するとインタラクティブシェルモードで起動する

375 :デフォルトの名無しさん:2010/09/15(水) 13:49:51
とりあえず、 >>362 は、「統合開発環境」がなになのかと、Python(command line) ってどこに書いてあったのか
(Windowsのスタートメニュー内なのか、統合開発環境の中のどこかなのか)をはっきりさせないと。

376 :デフォルトの名無しさん:2010/09/15(水) 15:55:02
362ですが、コマンドラインといったものは、
msiファイルでインストールした後にwindowsのすべてのプログラムのところに追加されたものです。
統合開発環境はPyScripterです

377 :デフォルトの名無しさん:2010/09/15(水) 16:41:40
>>376
PyScripterで新しいファイル(例えば test.py)に
a = [1,2,3,4]
a
みたいに書いて、実行(F5?)して出てきたコマンドライン(シェル?)に
>>>
>>>
しか、表示されないってことかな?
a = [1,2,3,4]
print(a)
で、コマンドラインの方に
[1,2,3,4]
って表示されるよ。 ってこういうことじゃないのかな?

378 :デフォルトの名無しさん:2010/09/15(水) 16:55:09
ファイルが圧縮ファイルなのかどうかを調べて
圧縮ファイルじゃなかったら、圧縮するってスクリプトを書いてるんだけど
ディレクトリの中にファイルが1つしか存在しないと仮定して

filename = os.listdir('.')[0]

if not [i for i in ('tar', 'zip', 'rar', 'lzh') if i in filename]:
  圧縮するコード



if not True in map(lambda x: x in filename, n):
  圧縮するコード

を思いついたんだけど、どっちがいいだろうか?
どっちもしっくりこないな…


379 :デフォルトの名無しさん:2010/09/15(水) 17:07:17
>>378
exts = ['.tar', '.zip', '.rar', '.lzh']
if os.path.splitext(filename)[-1] in exts

380 :379:2010/09/15(水) 17:10:55
判定が逆だったな
if os.path.splitext(filename)[-1] not in exts

381 :デフォルトの名無しさん:2010/09/15(水) 17:34:18
tgzとかbz2とかならどうするつもりなんだろう

382 :デフォルトの名無しさん:2010/09/15(水) 17:40:26
>>380
おおお! ありがとう!!!
超しっくりしたよ!!

ひとりでPythonを勉強してると
自分のコードがひどいものなのかどうかわからないから困る…

383 :デフォルトの名無しさん:2010/09/15(水) 19:15:06
拡張子はdowncaseしないとまずくない?

384 :デフォルトの名無しさん:2010/09/15(水) 19:29:24
超しっとりしたよ!!に見えた
疲れてるのかもしれない

ディレクトリを渡り歩くので詰まってたら os.walk を調べてみるとよいよ

385 :デフォルトの名無しさん:2010/09/15(水) 20:24:23
>>381
拡張子じゃなくパターンにしてfnmatch()使った方がいいかもな。

patterns = ['*.lzh', '*.zip', '*.rar', '*.gz', '*.bz2', '*.xz', '*.?[gbx]z']

if not itertools.any((fnmatch.fnmatch(filename, p) for p in patterns)):

386 :デフォルトの名無しさん:2010/09/15(水) 20:33:08
>>383
ありがとう! lower 追加しといた。

>>384
風呂入ってしっとりしてきた
間違って os.path.walk 調べてたよorz

今はファイルの分割で煮詰まってる
filedata = 0
max_size = 4 << 20
with open('filename', 'rb') as f:
 filedata = f.read()

bytes = len(filedata)
inc = max_size # 4MB
fileNames = []
num = 0
for i in range(0, bytes + 1, inc):
  fnl = '{0:#03d}.{1}'.format(filename, num)
  num += 1
  fileNames.append(fnl)
  with open(fnl, 'wb') as f:
    f.write(filedata[i:i + inc])

とかすると、ドデカいファイルを扱うとメモリが死にそうになる…

387 :デフォルトの名無しさん:2010/09/15(水) 20:55:39
>>386
「4MB読んで、4MB書き出す」を繰り返すようにロジックを書き換えればいい。

388 :デフォルトの名無しさん:2010/09/15(水) 21:12:12
>>385
fnmatch めちゃくちゃ便利!!
教えてくれてありがとう!

from fnmath import fnmatcn
exts = ['*.lzh', '*.zip', '*.rar', '*.gz', '*.bz2', '*.xz', '*.?[gbx]z']
any(fnmatch(filename, p) for p in exts):

>>>387
先生時間をください…

389 :387:2010/09/15(水) 21:29:14
>>388
ヒント。

1.f.read(size)で「最大sizeバイト読み込む」という動作になる。
2.ファイルの終りに到達した後にf.read()すると空の文字列""が返ってくる。
3.こういう処理はwhile Trueで無限ループを回して、終了条件でbreakするのが定石。

390 :デフォルトの名無しさん:2010/09/15(水) 22:17:27
streamだったら無限ループするのかな
あreadが戻ってこなくなるのか

391 :デフォルトの名無しさん:2010/09/15(水) 22:49:03
>>389
read()は一気に読んでしまうだけだと思い込んでたよorz
取り敢えず、これで実現できた!!
めちゃくちゃ感謝します!!!
with open(cmpfile, 'rb') as f:
  while True:
    fnl = '{0}.{1:#03d}'.format(cmpfile, num)
    with open(fnl, 'wb') as F:
      F.write(f.read(max_size))
    f.seek(44, 1)
    num += 1
    if not f.read(5): break

これから、もっとうまくかけないか煮詰めます!

392 :387:2010/09/15(水) 23:21:57
>>391
え、ホントにこのコードで実現できてるの?

f.seek()で何か謎に44バイト読み飛ばしてるのとか、
EOFじゃなかったら5バイト無駄に読めちゃうわけだから5バイト戻らなきゃいかんのに、その処理がないとか。

ちなみにwhileループの中は

filedata = f.read(max_size)
if not filedata:
break
with file(fnl, 'wb' as F:
F.write(filedata)

って書けば、EOFチェックのための空読みは要らなくなるよ。

あとスタイル的な話をするとローカル変数に大文字の名前イクナイのと、open()じゃなくてfile()を使おう。

393 :デフォルトの名無しさん:2010/09/15(水) 23:31:58
http://docs.python.org/library/functions.html#file
When opening a file, it’s preferable to use open() instead of invoking this constructor directly.
file is more suited to type testing (for example, writing isinstance(f, file)).

394 :デフォルトの名無しさん:2010/09/15(水) 23:36:09
f/F に苦悩の跡がうかがえるけど
>>391 なんかでファイルオブジェクトにつける名前は何がいいんだろうね
fin/fout, src/dest のほかにいいのある?

395 :387:2010/09/15(水) 23:42:22
>>393
「fileクラスのオブジェクトなんだからfile()で作るのが筋だよね」って話があったような気がしたけど、
俺の勘違いだったか。

396 :デフォルトの名無しさん:2010/09/15(水) 23:56:55
将来的に、openが返すのは直接fileのオブジェクトじゃなくなるからな。

397 :387:2010/09/16(木) 00:17:03
ちなみに、俺が考えたスレチな(初心者用じゃない)解答。

with open(src, 'rb') as f:

for num, chunk in enumerate(iter(lambda : f.read(size), ''), start = 0):

dst = '{0}.{1:#03d}'.format(src, num)

with open(dst, 'wb') as o:

o.write(chunk)


398 :387:2010/09/16(木) 00:22:33
>>397
インデントが全部潰れたorz。

399 :デフォルトの名無しさん:2010/09/16(木) 00:41:07
with open(src, 'rb') as f:
  for num, chunk in enumerate(iter(lambda : f.read(size), ''), start = 0):
    open('{0}.{1:#03d}'.format(src, num), 'wb').write(chunk)

400 :デフォルトの名無しさん:2010/09/16(木) 03:00:17
shutil モジュールのコード読むところから始めたらいいよ。

401 :デフォルトの名無しさん:2010/09/16(木) 21:41:08
>>392
確かにこれじゃ動きませんでした…
初心者的な解答はこれであってるかな? file()とopen()はどっちがいいかわからなかったから保留で
max_size = 50 << 10
split_file = 'img.jpg'
if os.stat(split_file).st_size > max_size:
  filenames = []
  num = 0
  try:
    with open(split_file) as src:
      while 1:
        filedata = src.read(max_size)
        if not filedata: break
        fnl = '{0}.{1:#03d}'.format(split_file, num)
        filenames.append(fnl.encode('utf8', 'replace'))
        with open(fnl, 'wb') as dst: dst.write(filedata); num += 1
  except(OSError, IOError) as e: raise OSError('FileSplitterException: {0}'.format(e))
  else:
    with open('join.py', 'w') as f:
      f.writelines([”#!/usr/bin/env python\n”,
             '#-*- coding:utf-8 -*-\n',
             'new_file = ”{0}”\n'.format(split_file),
             'fileNames = {0}\n'.format(filenames),
             'dataList = []\n',
             '\n',
             'for fn in fileNames:\n',
             ”  with open(fn, 'rb') as src:\n”,
             '    dataList.append(src.read())\n',
             '\n',
             ”with open(new_file, 'wb') as f:\n”,
             '  for data in dataList:\n',
             '    f.write(data)\n'])

402 :387:2010/09/17(金) 00:31:34
>>401
> file()とopen()はどっちがいいかわからなかったから保留で
俺の勘違いだった。open()でok。

・while 1:じゃなくてwhile True:
・IOErrorを捕捉してOSErrorを送出するのはよくない。
・join.pyを書き出す必要ってある?
・結合処理が「全部読み込んでから書き出す」なのがよくない。

403 :デフォルトの名無しさん:2010/09/17(金) 20:04:24
>>402
確かに、cat img.jpg. * > img.jpg とかやったほうが早いと思ったけど
Pythonの勉強のために一応やってみた
shutil.pyを見てみたら while 1: ってやってたからこっちの方がいいのかなぁとか

取り敢えず、初心者split.py完成形
16KBしばりにしてみた

教えてくださった方々めっちゃありがとう!!
import os, os.path
B, KB, MB = 0, 10, 20
length = 16 << KB
max_size = 50 << MB
split_file = '/host/debian/debian.img'
if os.path.getsize(split_file) > max_size:
  num = 0
  try:
    with open(split_file) as src:
      while True:
        fnl = '{0}.{1:#03d}'.format(split_file, num)
        filedata = src.read(1)
        if not filedata: break
        else: src.seek(-1, 1)
        with open(fnl, 'wb') as dst: pass
        for i in range(max_size / length):
          with open(fnl, 'ab') as tdst: tdst.write(src.read(length))
        if max_size % length:
          with open(fnl, 'ab') as edst: edst.write(src.read(max_size % length))
        num += 1
  except() as e:
    raise('FileSplitterException: {0}'.format(e))

404 :デフォルトの名無しさん:2010/09/17(金) 21:07:15
>>403
例外はこれに変更で
except EnvironmentError as e:
  raise EnvironmentError('FileSplitterException: {0}'.format(e))

405 :387:2010/09/17(金) 21:16:25
>>403
いや、cat使えば良いとは思わんが、分割時にファイル名埋め込んだjoin.pyを書くんじゃなく、
「python join.py hogehoge.dat」と実行すればhogehoge.dat.001その他をhogehoge.datに
復元するようなjoinj.pyを書けばいいんじゃない?って話。

あと、俺の主観ではキロバイト・メガバイトをバイトに換算するならビットシフトより乗算の方が分かりやすい。

KB = 2 * 10
split_size = 16 * KB

ビットシフトだと「1KB=1000Bでよろしく」な時に悲惨だし、他の言語なら「ビットシフトは掛け算より速い」という
こともあるけど、Pythonだと似たようなもんだろうし。仮に差があったところで微々たるもんだから、
1度きりの計算なら無視できるし。

EOF検査のために空読みして、そのデータを捨てて1byte戻るのも悪手。
「初心者バージョン」の正解は空読み不要な>>392だよ。

406 :デフォルトの名無しさん:2010/09/17(金) 22:01:07
>>405
なるほど!!すごい! 確かにそっちのほうがいいね!

shutil.pyにも *1024 で書いてあったし、ビットシフトよりもわかりやすいよね…
ビット演算をマスターしようといろいろ使ってるんだけど、なかなかうまくいかないよ

16KB縛りで頑張ってみてたんだけど、for文のなかで、ブレイクしちゃうとwhile文までは
breakしてくれないし、いっばいif not filedata: break 書かないといけないしで
あわわわわわってテンパッて妥協しちゃったんだ…

これ以上俺スレにするわけにもいけないし、ひとりで頑張ってみるよ!
本当、いろいろ教えてくれてめっちゃ感謝してる!! ありがとう!!!

407 :デフォルトの名無しさん:2010/09/17(金) 22:04:04
細かいが、
2*10じゃなくて、2**10だろ

408 :デフォルトの名無しさん:2010/09/17(金) 22:12:06
>>407
            /)
           ///)
          /,.=゙””/
   /     i f ,.r='”-‐'つ____   こまけぇこたぁいいんだよ!!
  /      /   _,.-‐'~/⌒  ⌒\
    /   ,i   ,二ニ⊃( ●). (●)\
   /    ノ    il゙フ::::::⌒(__人__)⌒::::: \
      ,イ「ト、  ,!,!|     |r┬-|     |
     / iトヾヽ_/ィ”\      `ー'´     /

409 :デフォルトの名無しさん:2010/09/17(金) 22:25:36
上とは関係ないが

import os
for filename in os.listdir('.'):
   if filename.endswith('.pdf'): next
   print filename

20分はまった

410 :デフォルトの名無しさん:2010/09/17(金) 22:38:36
>16KB縛りで頑張ってみてたんだけど、for文のなかで、ブレイクしちゃうとwhile文までは
>breakしてくれないし、いっばいif not filedata: break 書かないといけないしで

else

411 :387:2010/09/17(金) 23:50:07
>>407
すまん*が一個抜けたorz。

412 :デフォルトの名無しさん:2010/09/22(水) 22:20:27
プログラム初めての青二才です。
Pythonスタートブックというのを読み終わりました。
ほぼマスターしたので次に読むべきお勧めがあったら教えてください。
2.6に対応した本は少ないようですね。

413 :デフォルトの名無しさん:2010/09/22(水) 22:21:57
>>412
みんPy→はじPy

414 :デフォルトの名無しさん:2010/09/22(水) 22:24:58
同じくスタートブック持ってるけど、みんPyがもひとつ濃い内容
ただし、オブジェクト指向で混乱をきたす可能性あり

415 :デフォルトの名無しさん:2010/09/22(水) 22:26:53
>>412
本は買わずにライブラリリファレンス眺めてプログラムを書き始めたほうがいいよ

416 :デフォルトの名無しさん:2010/09/22(水) 22:28:04
>>412
「ほぼマスターした」といえるなら、ズバリ「Pythonクックブック」を勧める。
基礎がきちんとできてるなら、わからないことは、ネットで検索すれば解決するだろうし。
クックブックはその上で目から鱗がオチるようなコーディングがいっぱい載ってるので、
変な我流作ってしまう前にクックブック読むのがいいと思う。

417 :デフォルトの名無しさん:2010/09/22(水) 22:59:32
>>412
それ読み終わって
みんなのpython webアプリ編って本読んでるんだが
さっぱりわからん

418 :デフォルトの名無しさん:2010/09/22(水) 23:10:14
レスありがとうございます。

>>415
調べてみました。ありがたいことに日本語訳もされてるようですね。参考にさせていただきます。

>>416
すいません「ほぼマスターした」は言いすぎでした。もう1,2回読んで記憶を定着させます。
クックブックは良さそうですが高いのでいずれ欲しいです。

>>413,414
みんpyが書店にあったような気がしたのでそれからいかせてもらいます。
スタートブックは三角関数と一部亀の座標取得のメソッドの説明が無かったところでつまずきましたが
良い本でした。

助言ありがとうございました。

419 :デフォルトの名無しさん:2010/09/22(水) 23:18:39
>>417
>みんなのpython webアプリ編って本読んでるんだが

あれは著者の趣味で自作ORMの紹介してるだけだからなぁ

420 :デフォルトの名無しさん:2010/09/22(水) 23:22:19
スタートブックはみんPyの著者が関わってる本だよね

421 :デフォルトの名無しさん:2010/09/22(水) 23:58:24
本読むために勉強してんのか?
プログラム書けよ

422 :デフォルトの名無しさん:2010/09/23(木) 00:08:48
自己用途でCodingすることがない人が本で勉強したがるね。
趣味なら適当にWebドキュメントを読みながらProject Eulerとかで慣れるのがいいよ。

423 :デフォルトの名無しさん:2010/09/23(木) 00:20:29
>>419
そんなことない

424 :デフォルトの名無しさん:2010/09/23(木) 00:22:44
本買った方がいいよ

425 :デフォルトの名無しさん:2010/09/23(木) 00:26:20
基礎はなるべくきちんと本で勉強した方がいい、という気はするな。

426 :デフォルトの名無しさん:2010/09/23(木) 00:29:35
お前の中ではな

427 :デフォルトの名無しさん:2010/09/23(木) 00:30:04
つべこべいわずに買えよ

428 :デフォルトの名無しさん:2010/09/23(木) 00:40:03
宣伝乙

429 :デフォルトの名無しさん:2010/09/23(木) 00:41:51
図書館へgo

430 :デフォルトの名無しさん:2010/09/23(木) 00:43:54
そんな事しても
おっpyはどこにもないよ


431 :デフォルトの名無しさん:2010/09/23(木) 02:07:21
pythonって書かずに
pyてょんって書くとかわいいな

432 :デフォルトの名無しさん:2010/09/23(木) 02:22:52
禿しく概出

433 :デフォルトの名無しさん:2010/09/23(木) 03:02:55
ぱいぱい

434 :デフォルトの名無しさん:2010/09/23(木) 03:08:18

   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘

435 :デフォルトの名無しさん:2010/09/23(木) 09:23:12
>>422
これいいですね。さっそくやってますよ。

436 :デフォルトの名無しさん:2010/09/23(木) 09:50:28
↓読んで書いてるんだとしたら、コイツ頭おかしい(www

>>419
>>>417
>>みんなのpython webアプリ編って本読んでるんだが
>
>あれは著者の趣味で自作ORMの紹介してるだけだからなぁ


437 :デフォルトの名無しさん:2010/09/23(木) 09:50:46
2問目で挫折

438 :デフォルトの名無しさん:2010/09/23(木) 22:15:31
プログラムが組める=数学ができるだよね?

数学ができないと地獄だねコレ

439 :デフォルトの名無しさん:2010/09/23(木) 22:25:45
そんなことはない
Project Eulerの話なら(特に後半の問題は)そうだけど

440 :デフォルトの名無しさん:2010/09/23(木) 22:26:26
必ずしもそうでないよ、とりわけ有名なエンジニアは文系の人が多いと思うし。
Project Eulerはプログラム+数学を題材にしてるから仕方ない。
ググって公式拾って、プログラム組むというのは
実際に、ライブラリ等を使った際のプログラミングと似ていて
そういった習慣や技術を身につけるのには最適。
もちろんどうしても解けない問題もあるからそこら辺は割愛して。

441 :デフォルトの名無しさん:2010/09/23(木) 23:04:24
438は、数学ができる=プログラムが組めると思って自分を慰めているダメプログラマ。

442 :デフォルトの名無しさん:2010/09/23(木) 23:14:48
どう読んだらそう読めるのか
なんか病的なコンプレックスでもあるとしか思えない

443 :デフォルトの名無しさん:2010/09/23(木) 23:19:23
労害っぽくもあるな.

444 :デフォルトの名無しさん:2010/09/24(金) 00:03:54
何の学問するにしてもまずは国語。これが大事。

445 :デフォルトの名無しさん:2010/09/24(金) 00:07:59
こんなん読んでるから国語力が下がるのです
http://www.mediafactory.co.jp/files/d000172/kanojo_cov5.jpg
http://www.mediafactory.co.jp/bunkoj/books.php?id=26113

446 :デフォルトの名無しさん:2010/09/24(金) 08:34:15
π体験だったら買ってた(キリッ

447 :デフォルトの名無しさん:2010/09/24(金) 11:33:12
さすが老guy!

448 :デフォルトの名無しさん:2010/09/24(金) 19:28:55
ひとりでPython勉強してたら、誰も批判や指摘してくれないから
変な癖がつきそうだよ…
例えば、pylintが警告してくるから
for i in range(3):
  print('spam')

for i in ('spam')*3: print(i)
って書いてるんだけどこれってどうなんだろう?

449 :デフォルトの名無しさん:2010/09/24(金) 19:29:50
>>448
間違えた!
('spam',)*3で

450 :デフォルトの名無しさん:2010/09/24(金) 19:32:01
まずは警告メッセージの内容をですね

451 :デフォルトの名無しさん:2010/09/24(金) 19:35:58
>>450
unused variable 'i'
って出て変数が使われていません的?な感じなんだけど、
これって無視してもいいのかな?

452 :デフォルトの名無しさん:2010/09/24(金) 19:43:53
警告であって不具合に繋がることはない、
大した差もないしそれくらい自己判断
でも単純LoopでIndexを取るのはCの習慣だから可読性は顕著に違う

453 :デフォルトの名無しさん:2010/09/24(金) 19:53:07
Python の場合文字列にも掛け算できますよ
print('spam\n'*3)

454 :デフォルトの名無しさん:2010/09/24(金) 20:00:56
>>451
「for文でiという名前にiterableの要素を入れてるけど、ブロックの中ではiにアクセスしていない。
これって平気なの?」と警告されてるだけで無問題だけど、私見では'spam'を三つ並べた
iterableを用意した方がきれいだと思う。

ただし、そのアプローチを採るなら('spam',) * 3よりitertools.repeat('spam', 3)の方が望ましい筈。

455 :デフォルトの名無しさん:2010/09/24(金) 20:26:58
>>454
ステキなコード! ありがとう!
今度からitertools使うようにするよ!!

ひとりで勉強するなら、やっぱり標準モジュールやPyPlの
コードを眺めて書き方を学ぶしか方法はないのかな…

もうちょっとイバラの道でもいいからちゃんとしたコードが
書けるようになりたいよ…


456 :デフォルトの名無しさん:2010/09/24(金) 20:53:33
>>416
クックブック3rdEditionって出る予定ありそうですか?

457 :デフォルトの名無しさん:2010/09/24(金) 23:41:31
>>455
だから、クックブック嫁ってw
素敵なコードがいっぱい載ってるよ。

458 :デフォルトの名無しさん:2010/09/28(火) 00:19:49
>>432
ぱいそん!≒けいおん!も既出?

459 :デフォルトの名無しさん:2010/09/28(火) 08:42:52
ちょっと何言ってるかわからないですね

460 :デフォルトの名無しさん:2010/09/28(火) 12:07:52
ワロタ

461 :デフォルトの名無しさん:2010/09/29(水) 20:00:33
質問です。

パイソン2.6をインストールして、IDLEというテキストエディタが使えると思うのですが
実行ファイルはどこにあるのでしょうか?

.pyファイルを右クリックするとeditwithIDLEと出るときと出ないときがあるので困っています。
よろしくお願いします。

462 :デフォルトの名無しさん:2010/09/29(水) 20:49:37
>>461
Python\Lib\idlelib\idle.pyw
これをダブルクリック
idle.pywに.pyファイルをドラッグ&ドロップしても立ち上がる

関連づけ外してる場合(とかPortableの場合)は
idle.pywをpythonw.exeにドラッグ&ドロップして立ち上げるとか

463 :デフォルトの名無しさん:2010/09/29(水) 20:57:19
>>462
確認できました。ありがとうございました。(感謝)

464 :デフォルトの名無しさん:2010/09/30(木) 18:27:31
Windowsでpdcurses(http://pdcurses.sourceforge.net/ )を用いて
コンソールアプリケーションを作ろうとしています。
とりあえず日本語の文字列を出力したいのですが、文字化けしてうまくいきません。
文字化けせずに出力する方法はありませんか?
(cygwinならcursesモジュールが使えるようですが、今回は事情によりpdcursesを使いたいです)
環境:WindowsXP、python 2.6.6

以下、手元で試したコードです。

# -*- coding: utf-8 -*-
import ctypes, time

def main():
    pdcurses = ctypes.cdll.LoadLibrary('pdcurses.dll')
    
    pdcurses.initscr()

    pdcurses.mvprintw(0, 0, 'abcde')
    pdcurses.mvprintw(1, 0, u'あいうえお'.encode('shift_jis'))
    pdcurses.refresh()
    time.sleep(1)
    
    pdcurses.endwin()

if __name__ == '__main__':
    main()


465 :デフォルトの名無しさん:2010/09/30(木) 19:15:04
動画(出来ればH.264)を再生したいんですが
ライブラリとかありませんか?

466 :デフォルトの名無しさん:2010/09/30(木) 21:37:45
>>465
Pyglet 動画で検索

467 :デフォルトの名無しさん:2010/10/01(金) 04:00:03
pyjamas とか pystachio とか使ってる人いますか?

468 :デフォルトの名無しさん:2010/10/01(金) 04:03:29
>>464
mvprintw に mbcs 渡したら駄目じゃないの?

469 :デフォルトの名無しさん:2010/10/01(金) 04:27:17
>>464
つ ttp://eeg.jp/zbQd


470 :464:2010/10/01(金) 18:52:02
使用すべきpdcurses.dllのバージョンを間違えていたようで
上記のコードでちゃんと文字が表示されました。どうもすいません。

(pdc34dll.zipでなくpdc34dllw.zipをDLしていました)

>>468-469
回答ありがとうございました。

471 :デフォルトの名無しさん:2010/10/02(土) 03:26:44
subprocess.PopenのPIDについての質問です

環境:
Python 2.5.5
Debian Squeeze

python内からPopenからコマンドでvlcを立ち上げ、その戻り値からPIDを取得

>>> import subprocess
>>> import signal
>>> import os
>>> p = subprocess.Popen(['vlc'], shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> print p.pid
6167

ここで問題なのは、psコマンドでvlcのPIDを見てみると
上で得たPIDより1加算された値、6168がvlcのPIDとなっています。
これではvlcがいらなくなったときに

>>> os.kill(p.pid, signal.SIGKILL)

でkillしようとしても、うまくkillできません。かと言って

>>> os.kill(p.pid+1, signal.SIGKILL)

では何かと不安が残ります。
この問題について何か解決方法な無いでしょうか?

472 :デフォルトの名無しさん:2010/10/02(土) 04:53:00
subprocess.Popen のパラメータに noshell みたいなのなかったか

473 :デフォルトの名無しさん:2010/10/02(土) 04:54:22
shell=False

474 :デフォルトの名無しさん:2010/10/02(土) 10:46:23
>>472,473
回答ありがとうございます
おかげで解決しました

あと、ここで一つ疑問に思ったのが、shellをTrueにするとなぜ>>471のような結果になってしまうんでしょうか?
shell=Trueでシェルを介して実行したらPIDが+1される仕組みがよく理解できません。
できれば解説をおねがいします。

475 :デフォルトの名無しさん:2010/10/02(土) 11:48:14
shell の pid と vlc の pid が出来る

476 :デフォルトの名無しさん:2010/10/02(土) 11:58:07
shell=False の場合は、
Python が fork して新しいプロセスをつくる
→ その新しいプロセスが exec* して vcl になる

shell=True の場合、
Python が fork して新しいプロセスをつくる
→ 新しいプロセスが exec* して sh になる
→ sh がまた fork して新しいプロセスをつくる
→ 新しいプロセスが exec* して vcl になる

つまり shell=True の場合、Popen.pid で拾えるのは sh の pid
ここらへんイミフだったら fork や exec* をかじらないといけない

477 :デフォルトの名無しさん:2010/10/02(土) 12:40:26
>>475,>>476
なるほど納得しました
どおりでvlcのPIDが+1されていた訳ですね
なにか暗黙的なお約束でPIDが+1されていたのかと思ったら、
shell=Trueと見たまんまshをかましてvlcを立ち上げていたんですね
どうもありがとうございました

478 :デフォルトの名無しさん:2010/10/03(日) 06:17:44
初心者ってなんでドキュメント読まないんだろうな


479 :デフォルトの名無しさん:2010/10/03(日) 07:33:02
初心者がドキュメント読みこなせたらこのスレいらんがな

480 :デフォルトの名無しさん:2010/10/03(日) 08:26:11
まぁな

481 :デフォルトの名無しさん:2010/10/03(日) 08:27:59
初心者スレじゃ無くなってるのか…
ショボ━━(´・ω・`)   (´・ω:;.:...   (´:;...::;.:. ::;... .....━━ン…

482 :デフォルトの名無しさん:2010/10/03(日) 08:53:26
このスレにもいるのか・・・
なぜか超初心者スレに常駐し、初心者を見下すことによって偉くなった気分に浸るという小物が・・。

お前だよ>>478

483 :デフォルトの名無しさん:2010/10/03(日) 09:15:34
どこにでもいるからほっとけ

484 :デフォルトの名無しさん:2010/10/03(日) 16:30:31
m9

485 :デフォルトの名無しさん:2010/10/03(日) 17:08:33
悔しいのぅ

486 :デフォルトの名無しさん:2010/10/03(日) 19:57:14
初歩的な質問かもしれませんがお願いします

:ABCD-EFGD-IJKL-M\nOP
の内容をtext.txtの名前で保存
:f = open("text.txt","r")
:for line in f.read().split("-"):
:    print line
の内容をtest.pyの名前で保存

そしてtest.pyを実行したのですが、\nが改行にならずそのまま表示されてしまいます
解決したい問題としては「\n\tなどのバックスラッシュを有効にしたい」という点です
思いつく範囲で調べはしたのですが、結局分からないままです
何か示唆でもいただけるとありがたいです

487 :デフォルトの名無しさん:2010/10/03(日) 20:00:14
その text.txt をどうやって作成したの?
エディタから ABCD-EFGD-IJKL-M\nOP って入力して保存したら
\n は \ と n 二文字って解釈されるよ

一方 Python の文字列リテラルで "\n" と書けば改行文字として認識される

488 :デフォルトの名無しさん:2010/10/03(日) 20:10:37
お返事ありがとうございます
text.txtは外部(linuxのvi)から入力しました
確かにpythonから文字列としてwriteすれば改行されていました

この\nの二文字を文字リテラルとして認識することは出来るでしょうか?

489 :デフォルトの名無しさん:2010/10/03(日) 20:22:19
text.txt の中身を s とすると
s.replace('\\n', '\n') とかするしかないんじゃないかなあ

もっとも s が Python のコードとして正しいものなら
(たとえば 'ABCD-EFGD-IJKL-M\nOP' と引用符をつけてエディタで入力してある場合)
eval(s) とかできる

490 :デフォルトの名無しさん:2010/10/03(日) 20:24:03
'''のような文字列が入っていないと仮定できるのなら
eval("'''" + s + "'''")
でいいね

491 :デフォルトの名無しさん:2010/10/03(日) 20:33:55
evalよりも、string_escapeの方が良いな。
>>> s='foo\\nbar'
>>> print s
foo\nbar
>>> s.decode('string_escape')
'foo\nbar'
>>> print s.decode('string_escape')
foo
bar

492 :デフォルトの名無しさん:2010/10/03(日) 20:36:36
ありがとうございます!
eval("'''" + s + "'''") で試したところ上手く動きました
前処理をすればこの方法でいけると思います
質問に答えてくださった方々、本当にありがとうございます
非常に参考になりました

493 :デフォルトの名無しさん:2010/10/03(日) 20:45:21
>>491
なるほど
そういう方法もあるんですね
decode('string_escape') の方がevalより文字列に関する操作という認識でいいのかな
少し両者を調べてみたいと思います

494 :デフォルトの名無しさん:2010/10/03(日) 21:27:24
>>491
勉強になった。そっちのほうが良いね
調べてみると、逆にエスケープシーケンスを \ でエスケープしたい場合は

>>> '---\n---\t---'.encode('string_escape')
'---\\n---\\t---'

495 :デフォルトの名無しさん:2010/10/03(日) 22:50:44
>>486
スレタイに(ネタかもしれんが)そう明記されてるのに、しれっと
>>初歩的な質問かもしれませんがお願いします
こんな事書く奴って、死ねばいいのにって思う。
とっとと、2ちゃんから出ていって、Yahoo知恵遅に行って欲しい。
初歩的な質問かどうかを、初歩的な人が決められるワケが無いだろ。

496 :デフォルトの名無しさん:2010/10/03(日) 22:57:02
   〃∩ ∧_∧
   ⊂⌒(  ・ω・)  はいはいわろすわろす
     `ヽ_っ⌒/⌒c
        ⌒ ⌒

497 :デフォルトの名無しさん:2010/10/03(日) 22:59:21
池上彰「いい質問ですねぇ〜」

498 :デフォルトの名無しさん:2010/10/03(日) 23:03:42
何に怒ってるのか本気で分からない

499 :デフォルトの名無しさん:2010/10/03(日) 23:06:10
お前は何を言ってるんだ

500 :デフォルトの名無しさん:2010/10/04(月) 01:13:36
悔しいのぅ

501 :デフォルトの名無しさん:2010/10/04(月) 03:35:06
【478】デフォルトの名無しさん 2010/10/03 06:17:44
初心者ってなんでドキュメント読まないんだろうな

【495】デフォルトの名無しさん 2010/10/03 22:50:44
>>486
スレタイに(ネタかもしれんが)そう明記されてるのに、しれっと
>>初歩的な質問かもしれませんがお願いします
こんな事書く奴って、死ねばいいのにって思う。
とっとと、2ちゃんから出ていって、Yahoo知恵遅に行って欲しい。
初歩的な質問かどうかを、初歩的な人が決められるワケが無いだろ。

502 :デフォルトの名無しさん:2010/10/04(月) 06:51:21
# -*- coding: utf-8 -*-
from mod_python import apache

def index():
return "Hello! index"

def test1():
return "Hello! test1"

def test2(req):
req.write("Hello! test2")

def test3(req, aaa, bbb):
req.write("Hello! test3\n\n")
req.write("aaa : "+ aaa + "\n")
req.write("bbb : "+ bbb + "\n")


mod_pythonのpublisherなのですが
このサンプルコードのtest2とtest3をtest.py/test2みたいに呼び出すと
ファイルダウンロードのダイアログが出てしまいます
呼び出し方や設定が悪いのでしょうか
ページとして呼び出したいのですが…

503 :デフォルトの名無しさん:2010/10/04(月) 12:35:44
>>502
Apacheとかよう知らんが、どこかでcontent-type: text/htmlとかしないといかんのでは。

504 :デフォルトの名無しさん:2010/10/05(火) 13:21:20
pythonはどのような開発環境でコードを書くのが一般的でしょうか?
PHPですとeclipse系や秀丸やサクラエディタやEmEditorなどのテキストエディタも使われてたりしますが

505 :デフォルトの名無しさん:2010/10/05(火) 13:35:18
Pyscripterでも使っとけ

506 :デフォルトの名無しさん:2010/10/05(火) 14:01:18
ttp://www.pythonweb.jp/tutorial/string/index1.htmlを見て勉強始めたのですが
↓で2行目がエラーになります
どなたかご教示お願いします

#coding: UTF-8
print "Hello World"

エラー内容
SyntaxError: invalid syntax (line2, offset 19):'print "Hello World"'

507 :デフォルトの名無しさん:2010/10/05(火) 14:35:26
Python2系列とPython3系列ではprintの仕様が違うので
サイト見て勉強するならpython2.7インストールし直すといいよ

そのままでいくなら print("Hello World")

508 :デフォルトの名無しさん:2010/10/05(火) 14:46:24
今時バージョンも明記してない糞サイト見るな。

509 :デフォルトの名無しさん:2010/10/05(火) 14:50:55
>>508
http://www.pythonweb.jp/install/install/

510 :デフォルトの名無しさん:2010/10/05(火) 15:12:28
pythonをインストールするのとポータブル版として使うのに違いは出ますか?

511 :デフォルトの名無しさん:2010/10/05(火) 15:49:54
install/installとかいう糞重複URLをつけるような糞サイト見るな。

512 :デフォルトの名無しさん:2010/10/05(火) 15:52:38
ダメサイトのサポート役が俺達の仕事

513 :デフォルトの名無しさん:2010/10/05(火) 16:10:11
スクリプト言語にEclipseなんていちいち使ってられるかよwwwwwwwwwwwwwwwww

514 :デフォルトの名無しさん:2010/10/05(火) 18:20:49
メモ帳さんマジパネェッス

515 :デフォルトの名無しさん:2010/10/05(火) 19:49:56
>>507
つか、そこのサイトでコレ落とせって書いてあるのをスコーンと無視しちゃってるから、あんなバカなエラーで頭抱えてるんだろ?
ネタじゃん。かまって君の。

516 :デフォルトの名無しさん:2010/10/05(火) 20:13:43
性格悪そうな人だね^^;

517 :デフォルトの名無しさん:2010/10/05(火) 20:15:21
×悪そう
○悪い

518 :デフォルトの名無しさん:2010/10/05(火) 21:59:31
>>493
文字列に関する操作ってのもあるけど、それ以上に安全性が優れている。

CGIやらに利用する気がないのなら、現時点では安全性ってどうでもいいけど、
将来そういうこともやりたいかもって思うのなら、そういうの考える癖をつけといた方がいい。

519 :デフォルトの名無しさん:2010/10/05(火) 22:02:00
>>504
別にどれが一般的とかない。
PHPと同じのでできるけど、インデントをタブとスペース混在させるエディタだけは使うな。

520 :デフォルトの名無しさん:2010/10/05(火) 23:53:37
なんで、Pythonの虚数部はjで表すんですか?
iで良いじゃないですか!
Integerと紛らわしいから?
いや、俺が混乱してます。

521 :デフォルトの名無しさん:2010/10/05(火) 23:58:40
電気回路ではよくjを使うよ

522 :デフォルトの名無しさん:2010/10/06(水) 00:05:55
はぁ?

523 :デフォルトの名無しさん:2010/10/06(水) 00:10:25
iだと電流と混同しちゃうから

524 :デフォルトの名無しさん:2010/10/06(水) 01:07:06
>>520 はリア厨

525 :デフォルトの名無しさん:2010/10/06(水) 08:24:26
おっさん乙

526 :デフォルトの名無しさん:2010/10/06(水) 09:56:38
>>510
インストーラで.pyファイルとかが関連づけがされないからファイルがダブルクリックで開かない
くらい

527 :デフォルトの名無しさん:2010/10/06(水) 18:54:48
プログラム書ける人は尊敬するわ。

絵や音楽はアホでもなんとかなるけどプログラムはそうはいかない。
習得も難しい。

528 :デフォルトの名無しさん:2010/10/06(水) 18:58:41
完全に逆だと思います

529 :デフォルトの名無しさん:2010/10/06(水) 19:04:58
絵や音楽はバグがあっても下手な絵とか音痴とかで済まされるが
プログラムは馬鹿だと動くところまで辿り着かない


530 :デフォルトの名無しさん:2010/10/06(水) 19:07:56
プログラムは真似れば誰でも作れる
芸術は真似ても完全に同じものは作れない

531 :デフォルトの名無しさん:2010/10/06(水) 19:56:18
ま、どっちも、完全コピーはタイ━━━━||Φ|(|´|D|`|)|Φ||━━━━ホ!!!ですけどねー。w

532 :デフォルトの名無しさん:2010/10/06(水) 21:18:34
完全コピーは芸術じゃなく技術

卓越した技術は芸術に昇華するけどな・・・ってなんの話だ

533 :デフォルトの名無しさん:2010/10/07(木) 01:18:12
プログラムは最低限動きさえすればどんなにクソでも使いようがあるが、
絵や音楽はクソだと何の価値もない。

534 :デフォルトの名無しさん:2010/10/07(木) 01:22:26
一昔前の需要だと
音楽>グラフィッカー>プログラマー

>>527
>なんとかなるけど
趣味としてなら別にいいが、生きてはいけないだろw

535 :デフォルトの名無しさん:2010/10/07(木) 08:05:47
音楽や絵で飯食ってる人の音楽や絵は本物じゃないって言われてるね

536 :デフォルトの名無しさん:2010/10/07(木) 08:08:30
エンターテインメントとしては本物

537 :デフォルトの名無しさん:2010/10/07(木) 18:58:56
謙遜してる人が多いがとにかくプログラマという人種は頭脳の次元が違うようだ。
本当に頭がいい。

俺などは初心者本すら理解するのが難しい。
プログラミングの敷居の高さは半端無い。いったいどれくらいの人間が挫折していったのだろうか。

バカにはプログラムは無理と煽られても悔しいが認めざるを得ない。
あんたら本当にすごいわ。

自分の思い通りのスクリプト作れたら楽しいだろうな。でもそこまでがつらすぎる。

538 :デフォルトの名無しさん:2010/10/07(木) 19:05:00
Python始めたばかりです。
入力待ちになってるスレッドってどうやって止めればいいのでしょうか?
例えば↓で10秒入力がなかったら終了してほしいんですが、戻ってきません。

import time
import sys
from threading import Thread

def reader():
try:
while True:
print raw_input()
except:
pass

def stopper():
time.sleep(10)
sys.stdin.close() #ココをどうすればいいのだろう?

threads=[Thread(target=reader),Thread(target=stopper)]
for t in threads: t.start()
for t in threads: t.join()

539 :デフォルトの名無しさん:2010/10/07(木) 19:16:39
実行中のスレッドを強制的にkillするのは良いやりかたではないし
Pythonはそういう手段を提供していない
Cのレイヤでド汚い手段を使えば可能だろうけど、そんなことをやると
インタプリタの実行状態やリソースがどうなるか分かったもんじゃない

なので、実行を中断したければ、永遠にブロックする可能性のあるI/Oリクエストを
発行してはいけない、ということになる

Unix系のOSなら、read()する前にselect()すればよい
select()にはタイムアウトを指定できるから
一方、Windowsではコンソールからcookedモードのままで
タイムアウトつきで読み取る良い方法はないと思う

540 :538:2010/10/07(木) 19:17:35
>>537
Python始めたばかりとか、当てつけたわけじゃないから落ち込まないでね。
オレはもともと数年C/C++やってて、Pythonも必要性を感じて新たに勉強してるだけだから。

541 :538:2010/10/07(木) 19:22:12
>>539
ありがとう。
やっぱりブロッキングI/Oに別スレッドから割り込みをかけるような方法はないのか。
よくわかりました。

542 :デフォルトの名無しさん:2010/10/07(木) 21:51:30
>>538
つ ttp://www.velocityreviews.com/forums/t353297-timeout-at-command-prompt.html

543 :デフォルトの名無しさん:2010/10/07(木) 21:54:35
join で timeout するのか

544 :デフォルトの名無しさん:2010/10/07(木) 22:06:18
いやいやjoin()でブロッキングI/Oを中断はできんだろ

alarm()使うのはUnixでは古典的なトリックだが
マルチスレッドアプリケーションでalarm()もどうかと思うし
いずれにせよWindowsでは使えない

545 :デフォルトの名無しさん:2010/10/08(金) 00:24:08
フラッシュゲームとかで、ASDWで移動とかしてるのが有るけど、あーいった仕掛けはPythonでは出来ないと言う事なのかな?
マイコン時代なら、どのキーが押されたかは、或るアドレスを監視しまくるとかでやってたんだけど。

546 :デフォルトの名無しさん:2010/10/08(金) 00:33:53
>>545
そういうのは、ちょっと上のとは違う話だね
もしかしたら>>538はそういうものを本当は求めていたのかもしれないけど

ゲームなどで想定されるキー入力は、一文字で即時反応・エコーバックなし
バックスペースなどの行編集は出来ない
つまり普通の端末入力とは全くモード/やりかたが違うわけよ
Unixなら端末をRawモードにして読み取りを行うんだが、普通はcursesのような
高レベルのライブラリを使う(Pythonにもある)
WindowsではWin32 Console APIというのを使う

>>538は(文字通りに読めば)行編集ありの普通のモードで一行入力を
読みたいわけだろう
Unixでは端末を通常のCookedモードのままで標準入力にselect()をかけると、
行入力が完了した時点でselect()がリターンして、read()で入力行を読み取れる
WindowsではWaitFor〜系のAPIを一応標準入力を待つのにも使えるんだが、
キー入力された時点でトリガーがかかって即時リターンしてしまうので
行入力を待つ上手い方法がないんだ

547 :デフォルトの名無しさん:2010/10/08(金) 01:14:59
つ ttp://vpython.wikidot.com/

548 :538:2010/10/08(金) 19:32:22
すみません。昨日はお礼を言ってから見てませんでした。

キーストロークとか端末の入力まで見るのは行入力に比較してちょっと大変なので
意図としては>>546さんの言う通りでした。またLinux(Ubuntu Pythonは2.6)で
動かしていますが最終的にはWindowsでも動かそうとしています。alarmというか
signalはLinuxで使用できますが、メインスレッドでしか使えなかったので諦めて
いました。いずれにしても初心者でも使える典型的なやり方はなさそうなので
しばらく放置することにしています。

今日は別の似たような質問をさせてください。
複数のスレッドから子プロセスを生成してパイプで簡単なやりとり(エコー)をします。
するとスレッド数がある程度以上になるとどうもデッドロックするようになります。
これはなぜなのでしょうか?(調べていたのですが、現状ではお手上げです)

# 環境: Linux(Ubuntu 10.04 64bit) Python 2.6.5

from subprocess import *
from threading import *

THREAD_COUNT=50

def worker():
p = Popen(["cat"], stdin=PIPE, stdout=PIPE, stderr=STDOUT)
out = p.communicate("hoge")[0]
print "%s %s" % (current_thread().name, out)

threads = []
for i in range(THREAD_COUNT):
threads.append(Thread(target=worker, name=str(i)))
for t in threads: t.start()
for t in threads: t.join()

549 :デフォルトの名無しさん:2010/10/08(金) 21:21:40
# 文字コードの確認
>>> " "
'\xe3\x80\x80'
>>> "あ"
'\xe3\x81\x82'

# 本当は'\xe3\x81\x82'になるはず??
>>> body = " あ"
>>> body.strip(" ")
'\x81\x82'

文字列の先頭にある全角スペースをstrip()メソッドで除去したいのですが、
上のように"あ"の"\xe3"まで除去されてしまいます。。これはバグでしょうか?

環境はPython 2.5.5です。

550 :デフォルトの名無しさん:2010/10/08(金) 21:34:38
>>549
strは1byte単位の処理だから、
'ABCBabc'.strip('ABC')の結果が'abc'になるのと同じ話。

unicodeに変換しても差し支えないなら(ていうか、UTF-8っぽいから当然差し支えないわな)
str.stripじゃなくてunicode.strip使うといいと思う。

551 :デフォルトの名無しさん:2010/10/08(金) 21:35:25
>>549
Python2.Xではuをつけないと文字列はただのバイト列なので
全角スペースは1文字ではなく(UTF-8で)3文字扱いになる。
よって、その例では'\xe3', '\x80', '\x80'を文字集合として与えていることになる。
(\x80が重複しているので、実際には\xe3, \x80を指定したのと同じ)

同様にbodyも2文字ではなく6文字扱いになっていて、単純に1byte単位で
\xe3, \x80にマッチする文字が削除されているだけ。

なので、意図した動作にしたいのなら単にuをつけるといい。
u' あ'.strip(u' ')
unicode.strip()はデフォルトで全角空白も認識するので、実は
u' あ'.strip()でも同じ結果になる。

552 :デフォルトの名無しさん:2010/10/08(金) 22:23:05
>>550-551
バイト列!!ありがとうございます。そういうことだったんですね。
「なんかunicodeだと大丈夫っぽいな・・・」までは偶然にも到達してたんですが
モヤモヤしてよくわかってなかったので本当に助かりました。

553 :デフォルトの名無しさん:2010/10/08(金) 23:21:18
>>548
少し重いが私の環境ではうまく動いてるようだけど

554 :548:2010/10/08(金) 23:34:34
>>553
確認ありがとうございます。
すみませんが、何回やって動いているという感じなのでしょうか?
あとPythonのバージョンとOS(WindowsかUn*xライクOSか)なども教えていただけないでしょうか?

私の環境でも100%再現するというわけではなく、10回やって9回再現
PCのスペックはCore2Duo 2.4GHz 2GBメモリ
OSはUbuntu 10.04 amd64でPythonは2.6.5という感じです。

555 :553:2010/10/09(土) 00:43:50
Athlon64 3000+ メモリ1GB
Archlinux amd64 Python2.6.5
失敗は見られず。THREAD_COUNT=500にしても問題なし
マルチコアで起こる問題かもね

556 :548:2010/10/09(土) 00:59:08
>>555
ありがとうございます。でもまったく再現しないとは…
とりあえずVMにArch入れてみたり他のPCで試してみたりしてみます。

557 :デフォルトの名無しさん:2010/10/09(土) 01:34:18
Windows VistaでPython 2.5を以前入れたものですが、このたび再度学習しようと
2.66を入れようとしています。

Python自体の一式のアップデートの方法というのは特にありますでしょうか?
2.5と別ディレクトリにインストールした方がよいでしょうか?上書きではまずいでしょうか?

個別スクリプトの最新版への追従ではなく、Pythonそのものの話です。

558 :デフォルトの名無しさん:2010/10/09(土) 02:00:20
2.5を消してからインストールか、別のディレクトリにインストールするのが無難。
2.5になにか追加のライブラリをインストールしていた場合、上書きインストールではその
古い追加ライブラリが残ってしまって、中途半端に動く可能性がある。

変なエラーに悩むよりは、ライブラリがimportできないというメッセージをもとに
ライブラリをインストールし直す方が楽。

559 :デフォルトの名無しさん:2010/10/09(土) 02:22:22
Pythonは複数のバージョンを同居させることを考慮しているので、
基本的に古いバージョンを消す、というようなことはしないんだわ。
これはPythonの伝統。

560 :548:2010/10/09(土) 02:56:13
>>556の結果です。

(A)core2duo(コア2) Ubuntu 10.04 64bit Python 2.6.5 → 再現
(B)core2duo(コア2) Ubuntu 10.04 64bit Python 2.6.5 → 再現
(C)atom Z520(コア1 HT) Ubuntu 10.04 32bit Python 2.6.5 → 再現
(D)Athron 64 X2(コア2) Ubuntu 9.10 64bit Python 2.6.4 → 再現
(E)(A)上のVirtualBox上でArch Linux(コア?) 64bit Python 2.6.5 → 再現

topが認識するCPU数は(A)-(D)が2、(E)が1でした。
(topを起動して1を押下→Cpu0/Cpu1のように表示される)
全て2回以内で再現したのでもうよくわかりません。とりあえず寝ます。

561 :デフォルトの名無しさん:2010/10/09(土) 03:43:54
>>558-559
結局どっちなんでしょう

>>559 だと上書きしてインストールしても動くように受け取れるんですが

562 :デフォルトの名無しさん:2010/10/09(土) 04:58:10
C:\Python24
C:\Python25
C:\Python26
何も考えないで複数インストールするとこうなるはず。
人間がどのバージョンを使っているか混乱することはあるだろうが、
システム上は何も問題ない。

563 :デフォルトの名無しさん:2010/10/09(土) 13:25:38
>>561
だから、2.5がいらないなら、2.5をアンインストールしてから、
2.6をインストールするのがいい。
2.5で動くけど、2.6で動かないというスクリプトはまずないだろうから、
それで特に問題ないと思う。

2.5をなんらかの理由で置いておきたい、と考えるなら、
そのまま2.6をインストールすればいい。


564 :デフォルトの名無しさん:2010/10/09(土) 20:23:11
>>562-563
ありがとう。

2.5のときにPythonってディレクトリほってインスコしてしまったので、Python2.6として並行して入れると
後で混乱しそうなので、適当に前のをアンインスコして入れてみます

Pythonではバッチ処理みたいなの走らせてなかったと思うので大丈夫だと思う・・・

565 :デフォルトの名無しさん:2010/10/10(日) 03:21:13
至る所に付いて回るselfが気持ち悪い。。。吐き気がする。。。

566 :デフォルトの名無しさん:2010/10/10(日) 03:28:57
ここはお前の日記帳じゃねーぞ

567 :デフォルトの名無しさん:2010/10/10(日) 03:35:53
どこにも宣言されていないthisを使ってるのが気持ち悪い...吐き気がする...

568 :デフォルトの名無しさん:2010/10/10(日) 03:40:24
頭が悪いとしか言いようがない

569 :デフォルトの名無しさん:2010/10/10(日) 03:40:52
selfが嫌ならクラス作らなきゃいいじゃない

570 :デフォルトの名無しさん:2010/10/10(日) 10:12:23
2.7から2.6にダウングレードしたいのですが、そのままインスコするだけで大丈夫ですかね?

571 :デフォルトの名無しさん:2010/10/10(日) 12:07:48
>>570
大丈夫

572 :デフォルトの名無しさん:2010/10/10(日) 15:44:42
少し亀ですがありがとうございました

573 :デフォルトの名無しさん:2010/10/10(日) 19:01:04
>>565 じゃないのですが、selfをあえて宣言させる理由というか経緯みたいなものってどこかで見られないでしょうか?
Pythonですし、冗長性よりも利点をとっているだろうし必ず理由があると思うので

OOPをサポートした言語でこのような言語をあまりしらないだけかもしれないですが、
こういうのって珍しくないのですかね


574 :デフォルトの名無しさん:2010/10/10(日) 19:32:12
冗長でも明示するってのが理由じゃなかろうか。いyまあ第六感じゃがの

575 :デフォルトの名無しさん:2010/10/10(日) 19:48:22
何度も同じ質問があるかもなんですが今からPython2.6始めてから3.0に移行で良いでしょうか?

576 :デフォルトの名無しさん:2010/10/10(日) 19:50:51
属性にアクセスするときに毎回selfを書くのを問題にしているのか、メソッドの宣言時に
第一引数にselfを書くのを問題にしているのか、どっちだろう?

前者については、静的言語と違ってあるシンボルが属性かどうかをコンパイル時に決定
できないので、「このシンボルは属性から探してね♪」というマークを付けないと探索範囲が
広くて遅くなったり、ローカル変数と名前が被った時に混乱する元になる。
他のLLでも $this-> だったり @ だったり何かマークを付けてる。

関数の第一引数にしているのは、Pythonは関数を後からクラスのメソッドとして追加できるから、
関数のルールと別にメソッドのルールを作るのではなくて、全部関数で統一しちゃっただけ。
どうせメソッド定義するときに "self, " の6タイプ長くなるだけだから、「言語自体はなるべく
シンプルに」なるように設計しているPythonとしてはメソッドの為に専用のルールを追加したくなかった。
「暗黙より明示」っていうPythonのZen(禅)にも一致するしね。

577 :デフォルトの名無しさん:2010/10/10(日) 19:52:27
>>573
あえて宣言させてるってより、普通の引数だから。
class Foo:
 def bar(self):
  pass

a = Foo()
a.bar()
で、
a.bar()っていうのは
Foo.bar(a)
と同じ意味を持つ。
C++とかJavaに慣れてたらとっつきにくいかもしれないけど、
そういう意味なんだと受け入れたら、あえて宣言させてるとは思わなくなるよ。

578 :デフォルトの名無しさん:2010/10/10(日) 19:54:24
>>575
3.0 はお勧めしない。せめて3.1を。
単純に勉強とかスクリプト言語としてPythonを使いたいなら、3.1から始めても良いけど、
ネット上に書かれている情報は前置きが無い限りは2用だから気を付けないといけない。
Django使いたいとかGAE使いたいとか考えているならそもそも2しか選べない。

今は2.7か2.6.6で初めて、来年後半、Python3.2とかdistutils2とかその他ライブラリが
出そろってから移行でも良いと思うよ。言語の仕組み自体はほとんど変わってないから
移行してもすんなり覚えられるはず。

579 :デフォルトの名無しさん:2010/10/10(日) 19:58:58
>>578
取り敢えずみんなのPythonで勉強してから3.1に移行するようにします。
詳しい解説ありがとう。

580 :デフォルトの名無しさん:2010/10/10(日) 23:18:55
>>573
ttp://coreblog.org/ats/translation-of-why-explicit-self-has-to-stay

581 :デフォルトの名無しさん:2010/10/11(月) 02:12:33
>>577
>>573とは別な人ですが。
うーん。
やはり、そういう部分だけピックされても、なんでって疑問は払拭されないんですよね。
なんてのかな?必要性を感じ無いというか?
なんだろう…
Cで、なんかトリッキーなコーディングするのが流行った(もちろん、論理的に練られてるんだろうけどさ。)流れでなんかしてる感しか無いかな。
いや、まぁ、素数求めるのに、偶数排除して偶数以外で割るかテストしていくアルゴリズムは、知的では無いけど、じゃあ、それ以上のアルゴリズムでコーディングしたからって、どうよ?って感じなのよね。
だって、もう一台パソコン組んで放置してればイイじゃん?って思っちゃうワケ。
まぁ、スーパーコンピュータの性能が世界一じゃ無いと、ボクも悔しいと思うけどさ。

なんか、俺つえぇぇぇ!!だけな感じしかしないんだよね。
答えだけでれば良いんだって事を無視してる感じしかしない。

582 :デフォルトの名無しさん:2010/10/11(月) 02:21:45
お前は何を言っているんだ

583 :デフォルトの名無しさん:2010/10/11(月) 02:22:13
3行でおk

584 :デフォルトの名無しさん:2010/10/11(月) 02:26:39
>>581
インスタンスへの参照を第一引数に受け取る素朴でわかりやすい仕様なので
(それだけに外野から野暮とか言われる)
俺TUEEEとは正反対だ

585 :デフォルトの名無しさん:2010/10/11(月) 02:34:15
>>584
判った。
俺、つぇぇぇしてろ。

586 :デフォルトの名無しさん:2010/10/11(月) 02:54:03
お前は何を言っているんだ

587 :デフォルトの名無しさん:2010/10/11(月) 11:56:15
>>573
Cで言うと
FILE *fp = fopen("hoge", "rb");
fgets(buf, sizeof(buf), fp); ← この fp が self に相当する
fclose(fp);


588 :デフォルトの名無しさん:2010/10/11(月) 13:00:49
C++でも、メンバ関数内での自身のメンバアクセスとかにわざわざthis->をつける
ってコーディングする人もいるよな。

つまり、メンバ変数(関数)と別の変数(関数)と、明示的に区別したい、という要請

そのために、例えばMFCとかでは、メンバ変数にはm_なんてプレフィックスつけるとか、
UNIX系のC++ではメンバ変数には_をつけるとか、
そんなコーディングルールのようなものがあったりする。

で、Pythonの場合は、そんなプレフィックスより、selfを渡して、全部そこからアクセス
させれば、明示的でいいじゃん、ってなことなんだよ。

俺はセンスある選択だと思うし、Pythonicだとも思う。

589 :548:2010/10/11(月) 13:32:05
皆様お時間ありましたら以下の流れにもご助言をお願いします。
>>548
>>553-566
>>560
かなり基本的な処理だと思うのですが、対策はないものなのでしょうか?

590 :デフォルトの名無しさん:2010/10/12(火) 00:26:42
お前にはPythonを語る支度もないし,能力もないよ

591 :デフォルトの名無しさん:2010/10/12(火) 00:30:30
σ(゚∀゚ )

592 :デフォルトの名無しさん:2010/10/12(火) 00:30:41
支度?

593 :デフォルトの名無しさん:2010/10/12(火) 00:33:41
>>590のカワイさに嫉妬だよ
オレ(>>589)なんて全然レス付かないのに orz

594 :デフォルトの名無しさん:2010/10/12(火) 00:48:39
どれにレスが欲しいのよ

595 :デフォルトの名無しさん:2010/10/12(火) 00:59:32
>>548
10回ぐらい実行してみたけど、俺の環境でも特にデッドロックは起きないな
ロートルマシン上のcoLinuxだけどね

Pentium M 1.7GHz
Windows XP SP3 / coLinux 2.6.22.18-co-0.7.5 / Debian squeeze
Python 2.6.5

596 :デフォルトの名無しさん:2010/10/12(火) 01:14:12
>>594-595
ありがとうございます。レスがほしいのは>>548でした。
起きないとどうしようもありませんね。現状うちの環境でパイプは諦めるしかないかもしれません。

# にしてもcoLinuxとは。
# カーネルバージョンが気になって最近はとんと使ってませんでしたが良いですよね。

597 :デフォルトの名無しさん:2010/10/12(火) 01:39:15
これで起きてるの?THREAD_COUNT=50


598 :デフォルトの名無しさん:2010/10/12(火) 01:53:56
>>597
はい。>>554の環境でTHREAD_COUNT=20くらいからポツポツと起き始めます。

599 :598:2010/10/12(火) 02:07:50
とりあえずインデントなどの不確定要素や手間を排除するため
>>548の元ソースをcodepadに入れときました。
http://codepad.org/GkoXHbik

600 :デフォルトの名無しさん:2010/10/12(火) 03:21:15
超初心者の俺がcぽいトリッキーなコーディングは嫌いだと書き込んだのに、相変わらずな話題。
結局、初心者相手に、俺つぇぇぇしたい奴が、ネタ質問してネタレスしてるだけなスレだよね。
超初心者すら、猫またぎな言語だと言うのがよく判っただけでも感謝すべきかな。
( ゚∀゚)アハハ八八ノヽノヽノヽノ \ / \/ \

601 :デフォルトの名無しさん:2010/10/12(火) 03:32:11
>>600
いや、どこがトリッキーなのか全く不明なんだが?
メソッドを書くときだけ暗黙の変数が宣言される方がトリッキーじゃない?

>>599
Ubuntu 10.10 で再現確認。確かにデッドロックしてるな。
Pythonのデバッグ環境が揃ってないのでどのロックがデッドロックしているのかすぐには判らないや。
Ubuntu 10.10 の問題なのかLinux用Python全般の問題なのかも不明。

602 :573:2010/10/12(火) 03:59:23
selfについてみなさんありがとう。
今までは何でselfが必要なんだろう?単に冗長性があるからおかしいのでは?と思っていたので、
今回かなり理解できてきて驚きです。

>>576
両方のことでした。

前者ですが、属性アクセスにselfが必要というのは、他の言語でselfが省略できることでわかっていてもけっこうハマることがあり、
selfが必要という仕様はPython的には必然ではないのか、という気がしてきました。

この辺は言語によってかなり動作が異なりますよね。
ある言語ではselfを省略しても、同じ名前のローカル変数スコープがなければ属性にアクセスできたり、
ある言語では属性にアクセスするつもりでも、self相当をつけ忘れてローカル変数に代入してしまっていたり(これは属性にみせかけたメソッドのせいなのですが)、
言語によってはかなり異なる動作をし、時には動作が仕様通りとはいえあいまいに見えるものです。
型宣言の要不要、あるなし、でも相当振る舞いが違いますよね。

この点は、Pythonは属性の場合はselfが必要という点で「わかりやすい」と思いました。


603 :573:2010/10/12(火) 04:17:30
>>576 の後者と >>580 のGuidoの話ですが、

> もう一つの論拠は,"self"を明示的に引数として記述することで,
> 関数を追加して,クラスを動的に書き換えることができるようになる,というものである。

他の言語ではそうしなくてもできているので、明示する理由にはならないですが、
その後のメソッドと関数は同じものである点はかなりシンプルでわかりやすい仕様かと思います。

OOPな言語では、メソッドと関数が全くの別物で互換性がなかったり(メソッドは参照として扱うときはselfが隠れているわけですから)、
そもそも全てがメソッドだったりしますが、
実は全部関数なんだ(というように見える)Pythonもありだと思います。それはとてもシンプルでわかりやすい。



それにしても、他言語でも「この仕様は(その言語名)らしいか?」というのは当たり前のように言われますが、
「Pythonicであるかどうか?」というのは面白いものに感じられます。

よくRubyとPythonどちらがいいか?という質問に対し「どちらでもいい」「似たようなものだ」
「PythonもわかればRubyも使えるようになる(逆もしかり)」という答えがちらほらでますが、
「Pythonicであるかどうか?」と「Rubyらしいか」は全く異なり対極に位置するように感じますね。
# そもそもこの答えの真意は、いいから(それを聞くような初心者は)さっさとプログラミング始めろやボケ、というくらいのものかもしれませんが


604 :デフォルトの名無しさん:2010/10/12(火) 05:03:13
selfの話は、どっちでも言語として成立するし、どちらかが明らかに優れているという事は無い問題です。
self の方が若干タイプ数が大きく、 @ の方が多言語開発者が推測しにくい魔法に見えて可読性を落とす、
くらいの違いでしかありません。

可読性を選んで魔法に見える記号や暗黙ルールよりも若干の冗長性を受け入れるのがPythonic、
冗長性も記号や暗黙ルールを使って排除しDRYを最優先するのがRubyらしさ、という気がします。

605 :デフォルトの名無しさん:2010/10/12(火) 05:11:04
Rubyは別にDRY最優先じゃないだろ。もしそうなら真っ先に end に記号を割り当てるよ。

606 :デフォルトの名無しさん:2010/10/12(火) 05:22:01
>>599
各スレッドはselect待ちの部分で止まっているっぽいんですが、Ctrl-Cしたらちゃんとselectから帰って来てるし、
メインスレッドでjoinの代わりにsleepしても再現するからメインスレッドが子スレッドを邪魔してるんでもない…
すぐには解決できそうになかったんンで、 comp.lang.python に投げてみました。

607 :デフォルトの名無しさん:2010/10/12(火) 06:45:24
>>604
> self の方が若干タイプ数が大きく、 @ の方が多言語開発者が推測しにくい魔法に見えて可読性を落とす、
> くらいの違いでしかありません。

@はRubyの話だと思いますが、@はselfなしで使い分けられます。
問題は、組み込みにもあるattr_accessor :hoge やattr_writer :hoge、def hoge= を利用した属性のアクセサを定義する場合です。
obj.hoge = 1234 や self.hoge = 1234 のようにレシーバーありの場合は問題ないのですが、
うっかりhoge = 1234 とアクセスした日にはローカル変数への代入になってしまいます。

そんなのはdef hoge=の仕様でattr_accessorもメタプログラミングで省略しているだけだし、
他の言語に慣れているだけだろう、RubyはRubyだと言われればそうかもしれないです。


>>604-605
DRY優先はRubyというよりもRailsのポリシーかと。
# 最近はRubyプログラマにも影響あたえていて、after rails時代の・・・というように言われているような

608 :デフォルトの名無しさん:2010/10/12(火) 06:50:17
>>607 を書いていて思ったのですが、
もしかしてPythonは、属性に近い形でアクセス出来るアクセサみたいなもの(プロパティやRubyのdef hoge=のようなもの)
は使わないんですかね?


609 :デフォルトの名無しさん:2010/10/12(火) 07:16:54
初心者じゃないんだから少しはマニュアル嫁

610 :デフォルトの名無しさん:2010/10/12(火) 07:57:53
>>601>>606
ありがとうございます。寝てしまっていてすみません。
勉強不足でデバッグが出来るとは知りませんでした(まだ方法も調査中ですが)。
投げたところは書き方が分からなかったのでとりあえず見ておきます。

スレッドじゃなく直呼び出し版
http://codepad.org/a3tUizvI

10回やって再現せずでした。
# 出かけてしまうので夜までここは見れません。

611 :610:2010/10/12(火) 08:18:46
補足です。
THREAD_COUNTを10000にしたものを10プロセス並列で呼び出しました。
1回やって再現せずです。ほんとに出かけます。

612 :デフォルトの名無しさん:2010/10/12(火) 08:22:55
>>609
プロパティデコレータってのみつけた。サンクス


613 :610:2010/10/12(火) 22:32:45
>>601>>606
帰宅しました。いろいろとありがとうございます。
一応書き込めるようにはなったはずです。が、正直怖くて仕方がないので
できれば引き続き対応をお願いしたいです。

IDLEでデバッグする方法はなんとなく分かりましたが、デバッグとおっしゃって
いたのはpythonバイナリをgdbでという話なんですね。正直お手上げです。
可能なことはしますのでお申し付けください。

614 :デフォルトの名無しさん:2010/10/12(火) 23:21:40
ココから先は有料です

615 :デフォルトの名無しさん:2010/10/12(火) 23:30:01
# オナニーをするので15分間ここは見れません。

616 :デフォルトの名無しさん:2010/10/13(水) 02:09:00
ワッフル ワッフル

617 :デフォルトの名無しさん:2010/10/13(水) 03:25:26
自分でgdbを追ってみても判りませんでした。。。
で、Pythonのバグトラッカを当たってみたところ、subprocessは現在のところスレッドセーフではないようです。
次のコードのように、プロセスの起動はシングルスレッド、プロセスとのやり取りはマルチスレッドにすれば、
ちゃんと最後まで実行できるようになりました。
http://pastebin.ubuntu.com/511839/


618 :デフォルトの名無しさん:2010/10/13(水) 03:27:27
>>617
じゃあ、multiprocessingを使ってみるとか
2.6以降だけど

619 :デフォルトの名無しさん:2010/10/13(水) 03:28:13
ちなみに、該当するバグは http://bugs.python.org/issue1731717 です。
subprocessを抜本的にリファクタリングしてスレッドセーフに書き直すつもりらしいですが、
どのバージョンから直る予定とかは決まっていません。

620 :デフォルトの名無しさん:2010/10/13(水) 03:30:27
>>618
確かに、threading + popen の代わりに、 multiprocessing + os.exec も行けそうですね。

621 :デフォルトの名無しさん:2010/10/13(水) 03:40:12
>>620
pythonのこういうとこってちょっと鬱陶しいよねw

optionがあって、optparserがあってとかw

いや、下位互換性を確保するのもpythonのいいとこなんだが…

622 :デフォルトの名無しさん:2010/10/13(水) 03:59:38
>>617-621
そこだったのですか。さすがです。

IssueとやらもPopenで検索してサラっと流し読みしたけど思いっきり通過してました。
原因を読む限り再現しなかったケースがよくわかりませんがその他の要因に基づく
タイミングの違いなのでしょうね。

子プロセスの生成とスレッドの終了待ちは同一スレッド(メインスレッド)でということで
これで気兼ねなくパイプが使えそうです。ありがとうございました。

623 :デフォルトの名無しさん:2010/10/13(水) 04:14:46
> 子プロセスの生成とスレッドの終了待ちは同一スレッド(メインスレッド)で
あ、join関係なかったです。すみません。

624 :デフォルトの名無しさん:2010/10/13(水) 20:26:49
>>617-621
結局実際に使う段においては、worker部分にロジックが入り、スレッド
生成前に生成する生成する子プロセスが未定だったため件の方法は
使用できず、泣きながらIssueとsubprocess.pyを見てから

http://pastebin.ubuntu.com/512307/

のようにcommunicate()を展開してPopen()とwait()をグローバルな
ロックで挟むことにしました(とりあえず動きますが正しいのか自信はあり
ません)。

multiprocessingも検討したのですが、書いたコードが実際どうなるのか
よく分からなかった(共有メモリ/PIPE/引数などの授受)のでexecしていい
ものかどうか分からず、とりあえずパスしました。

625 :デフォルトの名無しさん:2010/10/14(木) 00:43:05
fromってなんだよ
from A import B

import A.B
って違うの?importに統一して

626 :デフォルトの名無しさん:2010/10/14(木) 00:54:43
伝えとくわ

627 :デフォルトの名無しさん:2010/10/14(木) 01:25:32
>>625
ちがうよ

628 :デフォルトの名無しさん:2010/10/14(木) 05:53:12
>>625
from A import B だと、現在の名前空間の中に B だけを import します。
import A.B だと、現在の名前空間の中に A だけを import します。

後者とただの import A の違いは、後者の書き方は A という名前空間の中に B を import しておくという違いがあります。
A/__init__.py と A/B.py があった場合、 import A は __init__.py だけを "A" というモジュール名でロードし、
import A.B だと B.py も "A.B" というモジュール名でロードし、Aの中に "B" という名前で追加します。
結果、 A.B というアクセスが可能になるかどうかという違いがあります。

ただし、 A/__init__.py が中で import B していた場合、 import A しただけでも A の中に B が import されるので、
A.B というアクセスが可能です。
import os
os.path.exists('/')
で import os.path と書かなくていいのはそのためです。

きちんと理解するには、一回パッケージとモジュールを作って見ることをお勧めします。

629 :デフォルトの名無しさん:2010/10/14(木) 07:04:49
>>628
間違ってる

630 :624:2010/10/14(木) 07:48:29
>>625
調べたサンプルがそうなっていたので使いました。
fromを使うと、subprocess.PIPEがPIPEと書くだけで済むので便利です。
とりあえず今回のコードで
import subprocess.Popen
とかしてみましたが、そんなモジュールありませんと怒られました。よく分かりません。

631 :デフォルトの名無しさん:2010/10/14(木) 08:12:37
from hoge import *
は名前空間を壊すから出来る限り避けたほうがいい
from hoge import fuga
と明示した方がいい

632 :624:2010/10/14(木) 08:23:40
>>631
了解しました。
fromは長くなりすぎるときだけに限定し、またfromで*は使わないようにします。

633 :625:2010/10/14(木) 09:59:07
>>628
レスさんくすです
わかったような、わからないような・・・

>>629
ちがうのか?正解を3行でよろ

>>630
fromの件は私が勉強中、気になって書いたつぶやきで、
君の質問に難癖つけてるわけではないよ。お気になさらずに。

634 :デフォルトの名無しさん:2010/10/14(木) 10:25:18
大ざっぱ
from Aライブラリの中の import Bクラスなどを指定してインポ(アクセスするのにBだけでいい)
from Aライブラリの中の import *全部をインポ(定数書いたファイルに使うと便利)
import A.B Aライブラリの中のBクラスなどを指定してインポ(アクセスするのにA.Bと指定する)

fromと書いた所の名前を省くイメージ
importは省けない

635 :デフォルトの名無しさん:2010/10/14(木) 12:09:58
ライブラリAとBがあって、両方とも名前の衝突はないとして、
AとB両方を名前空間Xに置こうと思ったら、どうすればいいの?

import A as X
import B as X
じゃ、XはBで上書きされてしまう。

636 :デフォルトの名無しさん:2010/10/14(木) 12:56:24
オシッコがしたくなったときはどうすればいいの?
このままじゃ漏れちゃう///

637 :デフォルトの名無しさん:2010/10/14(木) 13:26:51
>>635
ファイルをを噛ませて両方from A import *しておくぐらいしか思いつかないな
ま、そんなしょぼい方法聞いてるんじゃないんだろうけど

638 :デフォルトの名無しさん:2010/10/14(木) 22:10:59
>>635
普通のasは新しい名前空間(=モジュールオブジェクト)は作らずに、なんと言う名前でimportするかを指定するだけだけど、
それは新しいモジュールオブジェクトを作りたいの?
試してないけどこんな感じじゃないかな。

def get_merged_modules(name, mods):
    import types
    X = types.ModuleType(name)
    for mod in mods:
        mod = __import__(mod)
        for n in dir(mod):
            setattr(X, n, getattr(mod, n))
    return X


639 :デフォルトの名無しさん:2010/10/15(金) 21:54:13
なるほど。そういう感じになるのですね。

PyQt4でQtCoreとQtGui両方importするときに
そのまんまの名前だと長いし、QtCoreとQtGuiの違いなんて意識したくないし、
グローバル汚すにしては量が多すぎて気が進まないし、
どっちもQtって名前でimportできたらいいなーと思ったのですが。
可読性が高くて気軽な方法ではできなさそうですね。

640 :デフォルトの名無しさん:2010/10/16(土) 17:46:01
ttp://1-byte.jp/2010/10/15/learning_python_for_a_week/

自分で目標を立てておいて申し訳ないのですが、自分はステップ1で早速遅れが生じました。
“初めてのPython“はなかなか手強く、このタスクを消化するのに2週間を使ってしまいました。

そもそも、この”初めてのPython“に挫折した人も多いはず。
前回の記事についたはてブのコメントを見てそれを感じました。
総ページ数が768、付録を抜いても700ページはあります。

641 :デフォルトの名無しさん:2010/10/16(土) 18:34:01
で?

642 :デフォルトの名無しさん:2010/10/16(土) 19:06:42
で?

643 :デフォルトの名無しさん:2010/10/16(土) 20:48:45
ど?

644 :デフォルトの名無しさん:2010/10/17(日) 02:32:03
技術書ってそんなに力んで読むものじゃないと思うんだけどな

645 :デフォルトの名無しさん:2010/10/17(日) 03:22:40
世の中には
・隅々までむしゃぶりつくように読み尽くすべき本
・必要なときに必要な場所だけ読めばよい本
・読まずに捨てたほうが良い本
がある


646 :デフォルトの名無しさん:2010/10/17(日) 08:39:10
>>640
ワラタ(www

現実的な計画も立てられないダメな子は、無駄に分厚い糞本を選ぶんだな(ww

647 :デフォルトの名無しさん:2010/10/17(日) 09:15:04
つか、1週間でって言っても、まるまる暇な人とほとんど時間取れない人がいるのに。
その差を考えずに1週間でできるとか書かれてもねぇ。

Pythonを使えるようになりたいのなら、どの章も1日で、とか考えなくていいから、
・ mutableとimmutableの違い
・ iterableなオブジェクトとその使い方
・ Pythonにおいて、classがいかに仕事してないか
あたりは理解できるまでコード書け。

648 :デフォルトの名無しさん:2010/10/17(日) 09:45:44
はじぱいは漬け物付けるのに使った方がいいな。
おいしい漬け物を食べるとモチベーションが上がる。
あの無駄な重量は鈍器としても活用可能。
自分を殴って眠気を吹っ飛ばすのに最適。

649 :デフォルトの名無しさん:2010/10/17(日) 10:18:57
4版は1200ページくらいあるからな。日本語化が楽しみだ

650 :デフォルトの名無しさん:2010/10/17(日) 12:33:10
最低でも2分冊だろ。

651 :デフォルトの名無しさん:2010/10/17(日) 12:47:43
今なら電子版4edが$39.99だよ

652 :デフォルトの名無しさん:2010/10/17(日) 17:25:10
>>640
1週間でとか、はてなブックマークのためのタイトル釣りみたいなものだろw

653 :デフォルトの名無しさん:2010/10/17(日) 17:48:34
1200ページもあったらマニュアルより詳しく書いてあるの?

654 :デフォルトの名無しさん:2010/10/17(日) 17:55:45
オライリーもいいけど好きな事しながらWebドキュメント読んでりゃ自然学習できるでしょ
俺は土方的な学習より、哲学本やエッセイ読んでる方が10倍は充実すると思うなあ・・

655 :デフォルトの名無しさん:2010/10/17(日) 18:16:28
一行目は同意だけど
二行目は意味が分からない

656 :デフォルトの名無しさん:2010/10/17(日) 21:35:54
具体的にプログラム組むつもりじゃ無いのにプログラミング言語学習しようったって_。
でも、求人票には出来る人とか書いてある。
辛いねぇ。w

657 :デフォルトの名無しさん:2010/10/17(日) 22:27:34
仕事は選ばれるな、ここは日本だ

658 :デフォルトの名無しさん:2010/10/17(日) 22:29:11
実際プログラミングして開発してるより、プログラミング系読み物読んでるほうがおもしろい

659 :デフォルトの名無しさん:2010/10/17(日) 23:37:28
ttp://blog.livedoor.jp/kikwai/archives/51563628.html
>■恥知らずな「練習問題」
>
>1.Pythonを使うメリットを6つあげてください。
>2.Pythonを利用している有名な企業、団体を4つあげてください
>3.Pythonに欠点があるとすれば何ですか?
>4.Pythonを使うとどんなことができますか?
>5.import this は何のためのコマンドですか?
>6.この本のコード例に"spam"という言葉が出てくるのはなぜですか?
>『初めてのPython 第3版』P.20 『1章の練習問題』より
>
> 正直、コレを見たときには、目の前が真っ暗になった。
> 1.2.は、まるでPythonの『いやらしい』宣伝ではないか。
> 全く以て、著者の品性を疑うしかない。
> さらにこんなモノをど初っ端から見せられたら、Pythonを知らない人に「なんて下品な言語/コミュニティーなんだろう」と誤解かねない。


これって本当なの?
まあ本が云々の時点で、土方屋さんとしか取れないけど

660 :デフォルトの名無しさん:2010/10/17(日) 23:42:24
こんな練習問題必要ないだろ、ってならわかるけど
品性がどうとかは意味が分からない

661 :デフォルトの名無しさん:2010/10/17(日) 23:47:08
初めてのPython aka 恥パイって意味がやっと分かった

662 :デフォルトの名無しさん:2010/10/17(日) 23:49:15
ちなみにそれには7問目もあって問題は
7. What is your favorite color?
答えはもちろん
Blue. No, yellow!

663 :デフォルトの名無しさん:2010/10/17(日) 23:50:14
Pythonジョークが分からない

664 :デフォルトの名無しさん:2010/10/17(日) 23:56:24
>>662
モンティ・パイソンファンじゃない限りこっちの方が意味わからないよなw
読者の反応どうこう言うならこっちを取り上げるべきだ
それとも日本語訳には訳注が付いてるのかな

665 :デフォルトの名無しさん:2010/10/18(月) 00:03:01
>>661
それって別の本のことじゃないの?

666 :デフォルトの名無しさん:2010/10/18(月) 00:13:58
はじめてのPython

いいタイトルだよねwww

667 :デフォルトの名無しさん:2010/10/18(月) 00:24:54
それなら「はじめてのC」に勝てるプログラミング言語は無いと思うけど。

668 :デフォルトの名無しさん:2010/10/18(月) 00:25:54
>>662
気になって調べてみた。
結局谷底行きじゃねーか!

669 :デフォルトの名無しさん:2010/10/18(月) 00:34:59
もう「はじめて」も「初めて」も恥パイでいいじゃん

670 :デフォルトの名無しさん:2010/10/18(月) 00:36:39
さすがにその二つを一緒にするのはないな

671 :デフォルトの名無しさん:2010/10/18(月) 03:15:08
>>661
それって別の本のことじゃないの?

672 :デフォルトの名無しさん:2010/10/18(月) 03:33:27
はじパイはオライリーだし、永らくPythonの由緒正しい入門書として認知されているしな。
かくいう俺は、”Python入門”、”Pythonプログラミング”で入ったので、
恥ずかしいことにはじパイ読んだことがないw

673 :デフォルトの名無しさん:2010/10/18(月) 04:46:19
>>659
その本のこれPython流のジョークなんじゃないのか

言語名もモンティ・パイソンからとったなんて自体が軽いジョークなのになんというか

674 :デフォルトの名無しさん:2010/10/18(月) 07:46:04
はじpy=はじめてのPython
恥py=初めてのPython、オライリー(w

675 :デフォルトの名無しさん:2010/10/18(月) 11:17:39
くだらないことが気になって投げ出しておりましたが、このたび出戻りさせていただきました。
お答えいただければ嬉しいです。

PythonにおいてGUIアプリを製作して配布するとします。
この際に相手方にPython実行環境がない場合、何らかの方法を用いてパッケージにする必要があると思うのですが、
どのようなGUIライブラリを用いてそれを行うのが最適でしょうか? OSはWindowsに限定しても構いません。
もしよろしければ「ゲーム」「ユーティリティ」それぞれの観点からご意見いただければ幸いです。
手軽に組めるということに重点を置いておりますので、速度面に関してはそれほど気にしません。

676 :デフォルトの名無しさん:2010/10/18(月) 11:23:27
wxPython+py2exe

PyQt4でもたぶん出来る

677 :デフォルトの名無しさん:2010/10/18(月) 12:02:49
うん、wxかqtだね。
py2exeは、WindowsのMSVCRTのWinSxSでハマってマニフェストとかで苦労したくなければ、
まだPython2.5を使うべき。
マニフェストは本当にもっと使いやすくなって欲しい。。。

678 :デフォルトの名無しさん:2010/10/18(月) 12:16:23
>>676,677
回答ありがとうございます。
軽く覗いただけですがwxPythonの方が洗練されているかな?
Python本体は何も考えず2.7を入れてしまいましたが、ちょっといじくってみます。

Pygameみたいなゲームライクに特化したものも、用途的にあれば嬉しいと思ったのですが、
こちらはwx/qtほど安定していたり評判がいいものはないのでしょうか?

679 :デフォルトの名無しさん:2010/10/18(月) 12:21:11
2DゲームライブラリならSDLのPygameしかないよ
それとその言い回しが不愉快

680 :デフォルトの名無しさん:2010/10/18(月) 12:41:13
ゲームならVPythonも良いらしい


681 :デフォルトの名無しさん:2010/10/18(月) 16:34:03
PyObjC(2.2)で質問。というかもしかしたらCocoaの方で聞いたほうがいいのかもしれないが...
マウスオペレーションをPython側から操作したいんだけど、以下のコードを実行しても座標0,0に飛んでしまう
import objc
bndl = objc.loadBundle('CoreGraphics', globals(), '/System/Library/Frameworks/ApplicationServices.framework')
objc.loadBundleFunctions(bndl, globals(), [('CGWarpMouseCursorPosition', 'v{CGPoint=ff}')])
CGWarpMouseCursorPosition(( 500 , 500 ))

本当は500,500に飛びたいが上手くいかない
このプログラムのおかしい点or 代替できる手段はないだろうか

682 :デフォルトの名無しさん:2010/10/18(月) 16:51:13
>>675
ttp://wiki.python.org/moin/PythonGameLibraries
ttp://wiki.python.org/moin/GUI%20Programming%20in%20Python

683 :681:2010/10/18(月) 17:34:37
自己解決
適当にサンプルコードググって、v{CGPoint=ff} を v{CGPoint=dd} にしたら動いた
意味はわかってないのだけど... まあ動くしいいか

684 :デフォルトの名無しさん:2010/10/18(月) 19:06:50
>>679,680
検索してみましたが2D=Pygame, 3D=VPythonがベター?
言い回しはなんか慇懃無礼に感じたってことかな、失礼
普段2ちゃんでも大人しいスレにばかりいるのでちょっと感覚が……


685 :デフォルトの名無しさん:2010/10/18(月) 19:54:07
>>681
マルチ

686 :デフォルトの名無しさん:2010/10/18(月) 20:13:46
ノベルゲームを作りたいんですけどPygameがいいんでしょうか・・・?

687 :デフォルトの名無しさん:2010/10/18(月) 20:28:53
>>686
ttp://www.renpy.org/wiki/renpy/Home_Page
ttp://haraita9283.blog98.fc2.com/blog-entry-77.html

688 :デフォルトの名無しさん:2010/10/18(月) 20:34:24
>>687
ありがとうございます!うれしい!

689 :デフォルトの名無しさん:2010/10/18(月) 21:30:28
>>686
ノベルゲームだったら、無理にPythonを使うより、
差し障りなければ吉里吉里なんかの方が手軽で高性能な気も

690 :デフォルトの名無しさん:2010/10/18(月) 22:31:53
tkinterが便利だと思う

691 :デフォルトの名無しさん:2010/10/18(月) 23:40:39
ノベルゲームエンジンRen'Pyで日本人向けゲームを
http://hibari.2ch.net/test/read.cgi/gamedev/1286533306/

ゲ製板にスレあった

692 :デフォルトの名無しさん:2010/10/19(火) 06:08:00
>>689
pythonに慣れて、後で作りこんでいくと言う野望があるので。作るだけだったらキリキリの方を選ぶかもしれません。

>>691
同士がいるのですね!活用させて頂きます。

693 :デフォルトの名無しさん:2010/10/19(火) 10:57:16
本当にくだらない質問なんだが、
joinが文字列に属するべきかリストに属するべきかみたいな議論はよく聞くのに、
len,min,max,int……あたりがグローバル関数状態なのはどうしてなんだ?

だから悪いって訳じゃなくて、事情とか経緯とかあるん?
それが許されるんなら join(list, str) とかでもいいじゃんと、新参的には思うんだけど(希望はしない)

694 :デフォルトの名無しさん:2010/10/19(火) 11:04:52
まあintは関数っつーよりコンストラクタ(type型)だけどね。

> join(list, str) とかでもいいじゃんと

from string import joinしてみ。

695 :デフォルトの名無しさん:2010/10/19(火) 13:27:07
>>693
厳密に言うなら、str.joinやstring.joinはあくまでも「文字列の」連結だから、文字列のメソッドor関数なのにたいして、
lenは任意のコンテナ型に対する操作だし、min、maxは任意のイテレータに対する操作なので、
具体的な型に直接ヒモづかない。
intはそもそもただの関数じゃなくて型だから。

696 :デフォルトの名無しさん:2010/10/19(火) 16:28:22
Python3.1 で PostgreSQL とのインターフェースで何かモジュールないでしょうか?
いまpy-postgresqlってのを使ってるんですが、日本語ドキュメントがまったくなく、接続はできた感じなんだけど、
どうやって1行づつ読み取ればいいのか困ってます。


697 :デフォルトの名無しさん:2010/10/19(火) 18:00:47
>>695
設計思想の問題か なるほど

698 :デフォルトの名無しさん:2010/10/19(火) 18:20:13
>>696

http://hibari.2ch.net/test/read.cgi/tech/1235050215/

699 :デフォルトの名無しさん:2010/10/19(火) 19:15:38
>>696
psycopg2を使うのが良いと思う
Djangoでも推奨されてるから
Django PostgreSQLなんてググレば色々でる
ただそうなると3.1っていうのは今のところ・・・

700 :デフォルトの名無しさん:2010/10/20(水) 01:13:22
じゃんご厨ウザイ

701 :デフォルトの名無しさん:2010/10/20(水) 01:18:52
文句あるなら代替案を示せよヽ(`Д´)ノプンプン

702 :デフォルトの名無しさん:2010/10/20(水) 01:50:25
2でおk

703 :デフォルトの名無しさん:2010/10/20(水) 11:14:35
>>693
>join(list, str) とかでもいいじゃん
おれもそう思う。こっちのほうが自然だよな。


704 :デフォルトの名無しさん:2010/10/20(水) 11:48:32
>>703
strのメソッドにしたほうが書くのが楽。
「○○の方が自然」と思うのはただの先入観。 sep.join(seq) と join(seq, sep) のどちらでも良いなら、楽な後者が良い。

あえて理由を挙げるとすれば、ユーザー定義文字列型で join を実装することができるので、
sepが組み込み型かユーザー定義かにかかわらず sep.join() という書き方で統一できる。

一方、 join(seq, sep) は、 sep と seq の組み合わせごとの挙動を全て把握しないといけない。
事前に全ての文字列のjoin方法を知ることはできないから、len()と__len__()の関係に習って
文字列型のほうに __join__() を実装しないといけない。
(string.join はこれを行っていないので、事前に知っている組み込み型にしか対応できない)

__xxx__ メソッドを用意させるか、それとも定型的な名前を採用するかは、
その操作がどれくらい一般的な型に対して適用できるかに依存する。
たとえば、イテレータはすごく汎用的だから iter()/__iter__() だけど、
list.sort() とか dict.items() とかはmutable sequence型とかmapping型に限定されるから
ただのメソッドになってる。 str.join() はこちら側。

705 :704:2010/10/20(水) 12:05:52
s/楽な後者が良い/楽な前者が良い/
s/定型的な名前/(__で囲わない)普通の名前/

706 :デフォルトの名無しさん:2010/10/21(木) 00:21:40
なんだけど、その一般性って曖昧だよね。
例えばイテレータに対して使うnext()は、2.xではタダのメソッドで、3.xでは__next__
こうなるのは、正直どっちがいいかってすごく微妙だから。

readメソッドは、file.read()、StringIO.read()やらurllib.open().read()やら、
ファイル関係の抽象化に広く使われてるけど、__read__とはなってない。

いっそのこと、__len__もやめて、str.len()では駄目なのか?

707 :デフォルトの名無しさん:2010/10/21(木) 00:44:08
引数に名称で「str」とか使えないのもちょっとね


708 :デフォルトの名無しさん:2010/10/21(木) 00:48:19
使えるよ、弊害はあるけど

709 :デフォルトの名無しさん:2010/10/21(木) 15:46:47
>>707-708
def func(str, str_t=str)
とでもしとけば「str」を変数,「str_t」をstrクラスとして使えるんじゃない?

710 :デフォルトの名無しさん:2010/10/21(木) 22:58:34
__builtins__.__dict__['str']

711 :デフォルトの名無しさん:2010/10/23(土) 12:45:19
google app engine python を使ってアプリを開発しようとしています。
http://code.google.com/intl/ja/appengine/docs/python/tools/uploadingdata.html

appcfg.py update
のようにコマンドラインがcode.googleやサンプルサイトなどにあるのですが、このコマンドはどこで動かせばいいのでしょうか?

DOS?
python2.5IDLE?
python2.5command line?
GoogleAppEngineLauncher SDKconsole?

どれもエラーが出てしまうのですが、どのコンソールで原因を探ればいいのかよくわかりません。
また、コンソール画面の使い分けについてもアドバイスをいただけると幸いです。

712 :デフォルトの名無しさん:2010/10/23(土) 12:50:17
SDKはすでに入れてるんだよな?

713 :デフォルトの名無しさん:2010/10/23(土) 13:06:23
>>711
"appcfg.py update"はGoogle App Engine LauncherのDeployボタンでも同じことが出来る
それ以外はコマンドプロンプトで
python "C:\Program Files\Google\google_appengine\appcfg.py" ほげほげ
C:\Prog...は自分がSDKをインストールしたディレクトリに置き換えてね

714 :デフォルトの名無しさん:2010/10/23(土) 13:21:02
>>712
入ってます
>>713
ありがとうございました

なるほど基本はコマンドプロンプトですね? わかりました
ところで その他のコマンドコンソールって何に使うものなんですか?

715 :デフォルトの名無しさん:2010/10/23(土) 13:31:02
GoogleAppEngineLauncher でいいよ
それに GAE スレあるからそっち行こうよ

716 :デフォルトの名無しさん:2010/10/23(土) 13:38:12
>>715
了解です ありがとうございました

717 :デフォルトの名無しさん:2010/10/23(土) 14:48:27
>>714
こういう説明って他の言語でも使うからcmd.exeで説明されてる場合が多い
応用が利くっていうか、まぁ基本になってる
そのぶん「みんな知ってるだろ?」的に説明が省かれてて初心者殺しだったりするw

コマンドプロンプト 環境変数 カレントディレクトリ
とかで検索してみればいいんじゃない?

やってる事はどれもめちゃくちゃは変わらなくて
それぞれ専用ソフトとして作ってるからちょっと工程が省けるってイメージ

718 :デフォルトの名無しさん:2010/10/23(土) 14:54:10
>>717
なるほど、だいぶ整理できてきました。あっちこっちにコマンドコンソールがあってどれもがエラー出すので困ってましたが
うまく行くときはどれでやってもうまく行くわけですね。
とりあえずbatファイルでいつでも環境変数読み込んで起動できるようにしておきます。ありがとうございました。

719 :デフォルトの名無しさん:2010/10/23(土) 15:19:56
>>718
自分が書く.batは↓こんな感じ

set path=%Path%;C:\Program Files\Google\google_appengine\;C:\python25
cd /d C:\Documents and Settings\〜とかロードしたいファイルが入ってるフォルダまでのフルパス
cls
cmd.exe

まぁ他にも見てる人がいるだろうから詳しく書くと
set path=%Path%;は環境変数を追加で;記号を間にはさんでパス繋いでいく
cd /dはカレントディレクトリをフルパス一発でセット
clsはちょっと表示がうるさいから画面のクリア
最後のcmd.exeは画面即消え対策として子プロセス立ち上げ
これをテキストに書いて.bat拡張子に変更してダブルクリック

720 :デフォルトの名無しさん:2010/10/23(土) 18:29:26
>>719 勉強になりました

721 :デフォルトの名無しさん:2010/10/23(土) 21:37:17
考えてみたらPythonもスクリプトだったので.pyでやってみた

# -*- coding: utf-8 -*-
import os
os.chdir("C:\Documents and Settings")
os.environ["PATH"] = "C:\WINDOWS\system32;C:\WINDOWS;C:\Program Files\Google\google_appengine\;C:\python25"
arg = ["/k"]
os.execvp("cmd", arg)

722 :デフォルトの名無しさん:2010/10/24(日) 00:00:34
c:\pythonXX\scripts もいれといて

723 :デフォルトの名無しさん:2010/10/24(日) 07:03:25
>>721 メモしますた

724 :デフォルトの名無しさん:2010/10/24(日) 11:11:10
>>721
ブートストラップという言葉を思い出した

725 :デフォルトの名無しさん:2010/10/24(日) 13:55:15
質問です。

Linuxである商用ソフト(hogeと以下呼びます)を使っています。
hogeを使うために、hogeがインストールされているディレクトリにパスをとおす必要があります。
コマンドライン上で
source /opt/hoge/hoge_path
と実行してやると、hogeの実行形式hoge_execにパスがとおります。

今、pythonからhoge_execを呼び出して処理をしてやる必要があり、そのスクリプトを書いています。

パスを通すという操作もpythonスクリプトの中で行っておきたいのですが、どのようにすればいいのでしょうか。

コマンドラインから実行するコマンド(lsなど)は
commands.getoutput("ls")
などすればよいことがわかりましたが、

commands.getoutput("source /opt/hoge/hoge_path")
とスクリプトの中に書いても
それ以下の行で
commands.getoutput("hoge_exec")
としてもhoge_execが実行されません。
hoge_execへのパスが通っていないようなのですが、どのようにすればよいのか教えていただけませんか?

よろしくお願いします。

726 :デフォルトの名無しさん:2010/10/24(日) 14:23:15
import sys
sys.path.append()
sys.path.insert()

727 :デフォルトの名無しさん:2010/10/24(日) 17:59:20
>>725

>>> import commands
>>> commands.getoutput("echo $$")
'16619'
>>> commands.getoutput("echo $$")
'16620'

……ってことだ。わかるな?

728 :デフォルトの名無しさん:2010/10/25(月) 00:07:21
725じゃないけどそういう実装になってるんだ。へぇ

729 :デフォルトの名無しさん:2010/10/25(月) 00:34:18
1行に複数のコマンド書けばいいじゃない

linuxならセミコロン
windowsのコマンドプロンプトなら&

コマンド1 ; コマンド2 ; コマンド3
コマンド1 & コマンド2 & コマンド3

730 :デフォルトの名無しさん:2010/10/25(月) 01:22:44
2ch は心の荒んだ人の溜り場だな

731 :デフォルトの名無しさん:2010/10/25(月) 01:24:33
LLバトルロワイヤルスレなくなったの?pythonスレに変なのいるけど

732 :デフォルトの名無しさん:2010/10/25(月) 01:50:49
>>731
LLバトロワスレ落ちてる。立ててくれ

前スレ
【Perl,PHP】LLバトルロワイヤル12【Ruby,Python】
http://hibari.2ch.net/test/read.cgi/tech/1284382120/

733 :デフォルトの名無しさん:2010/10/25(月) 03:24:54
新スレほいほい
【Perl,PHP】LLバトルロワイヤル13【Ruby,Python】
http://hibari.2ch.net/test/read.cgi/tech/1287944631/

734 :デフォルトの名無しさん:2010/10/25(月) 05:49:36
>>726
>>727
ありがとうございます。早速に試してみます。

735 :デフォルトの名無しさん:2010/10/27(水) 01:47:25
>>726
>>727
試してみたのですが、
sys.path.append()
sys.path.insert()
の場合、カッコの中に直接パスを指定してやる必要があるように思います。
sys.path.append()
sys.path.insert()
では無理ではないでしょうか。
hoge_pathは、これ自体がスクリプトになっていて、
source /opt/hoge/hoge_path
とやると、hoge_pathの中でLinuxかUNIXか、やCPUの種類などを判定するなどして
最終的なパスを決定し、反映するようになっているようです。
このような場合、

736 :デフォルトの名無しさん:2010/10/27(水) 01:56:38
うんこ

737 :デフォルトの名無しさん:2010/10/27(水) 01:59:02
どうすればよいか教えていただけませんか。

738 :デフォルトの名無しさん:2010/10/27(水) 02:15:28
>>735
sys.path = commands.getoutput("source /opt/hoge/hoge_path ; echo $PATH").split(':')
とか思ったけど、ダメかなぁ?

739 :デフォルトの名無しさん:2010/10/27(水) 02:24:59
sys.pathはPythonのモジュール検索パスで、 >>725 が言っているのは環境変数PATHだから、
sys.path に対する操作は無意味。
パスを通す操作はPythonより前でやるのが無難。
どうしても中でやりたいなら、 getoutput("source /opt/hoge/hoge_path; hoge_exec") と毎回やるとか、
>>738 みたいにして source 後の $PATH を取得して、それを os.environ['PATH'] に格納してから
getoutput("hoge_exec") しないと。

740 :デフォルトの名無しさん:2010/10/27(水) 07:44:36
getoutputはシェルにコマンドを送ってそっちでやってもらうという命令なわけだけど

>>727で指摘されたようにgetoutput命令ごとに別のプロセスになるんで、
一つ目のgetoutput(スクリプトを読むプロセス)で設定したパスは
二つ目のgetoutput(起動プロセス)ではスクリプトの内容がキレイさっぱり消えてしまってる

だったらgetoutput一つの中でコマンドをセミコロンで繋げて
スクリプト読みと起動を一行でやったらいいじゃない、と>>729で書かれている

741 :デフォルトの名無しさん:2010/10/27(水) 21:02:25
ここで聞くべきかどうかわからないんですが質問させてください

学校のpythonの課題を家でやろうとしているんですが
windows上でpythonからMySQLはどのように使えばいいのでしょうか
すこし調べたところwindows上でできそうな方法がなかなか見つかりませんでした…
OSはwin7でpythonは2.7です

742 :デフォルトの名無しさん:2010/10/27(水) 21:18:31
まったくこれっぽっちもオススメできないが、俺はPopenでmysqlコマンドを叩いた(←バカ)。
ODBCでも専用のモジュールでもいろいろありそうなもんだけど、調べたことないな。

743 :デフォルトの名無しさん:2010/10/27(水) 21:22:40
まず仮想マシンを立ち上げます

744 :727:2010/10/27(水) 21:26:21
>>735
試してみますとかレスしてるから「もしかして解ってないか?」と危惧してたんだが、
解ってなかったか……。

「commands.getoutput("echo $$")を実行すると毎回違う文字列(シェルのプロセスID)が
得られる。つまりgetoutput()は呼び出す度に新しくシェルを起動している」ってのが、
オレが>>727で指摘したかったことだ。

もっと噛み砕いて説明すると>>725のコードでは、最初のgetoutput()に起動されて
hoge_pathスクリプトを実行しているシェルと、次のgetoutput()で起動されて
hoge_execを実行しようとしているシェルが「別のプロセス(=別の環境)」になっているから、
前者でパスを通したって後者には影響が及ばないのがうまく行かない原因ってことだ。

だから「どうにかして一つのシェルに環境設定と実行をやってもらう」コードを書けば解決。

他の人が提案しているようにセミコロンでつなげてgetoutput()してもいいし、
ちょいと捻って↓みたいなやり方もできる。
from subprocess import *

p = Popen(["/bin/bash"], shell = False, stdin = PIPE, stdout = PIPE)
p.stdin.write("source /opt/hoge/hoge_path\n")
p.stdin.write("hoge_exec\n")
p.stdin.write("exit\n")
output = p.stdout.read()


745 :デフォルトの名無しさん:2010/10/27(水) 21:31:19
Pythonで課題出すならMySQLじゃなくてsqlite3使えよと思った
とりあえずWindows MySQL Python でぐぐればごろごろ出てくるぞ

746 :デフォルトの名無しさん:2010/10/27(水) 22:01:13
python用のMySQLdbを教えてもMySQLがインストール出来ませんとか言い出しそうだし面倒だから関わりたくない

747 :デフォルトの名無しさん:2010/10/27(水) 22:03:21
mysqlの最初の設定はすっげー手間取った

748 :741:2010/10/27(水) 23:19:11
いろいろありがとうございます
>>745
一応一通り見たんですがpython2.7のものだと.tar.gzのやつしか見つからず…
それで何とかインストールしてみようともしたんですがうまくいきませんでした
バージョン落としてやったほうがいいんでしょうか

749 :デフォルトの名無しさん:2010/10/27(水) 23:24:52
VirtualBoxとかでUbuntu使えば?まあこれもホストとのフォルダ共有とか設定が面倒か

750 :デフォルトの名無しさん:2010/10/27(水) 23:36:59
>>748
落として動くならそうする
動作報告がある組み合わせでやってみたほうが良いよ

751 :デフォルトの名無しさん:2010/10/28(木) 00:04:22
ttp://www.bpsinc.jp/blog/archives/1286
今のところwin7/64bitでビルドするならpythonは32bit版を使え的な?

1・mysqlをダウンロードとインストール
ttp://www.mysql.com/downloads/mysql/

2・MySQL-python-1.2.3.tar.gzをダウンロード展開
ttp://sourceforge.net/projects/mysql-python/files/

3・XAMPPを使っててその中のMySQLを使う場合
MySQL-python-1.2.3\setup_windows.pyの7行目あたり書き換えてMySQLフォルダへのパスを通す
(たぶんmysqlをインストーラーで入れてたらレジストリ登録されててこれは必要なさげ)

4・コマンドプロンプトのカレントディレクトリをMySQL-python-1.2.3に合わせて
python setup.py build
python setup.py install

という流れと予想した

752 :741:2010/10/28(木) 00:31:29
>>750
>>751
ありがとうございます
>>751さんのやり方だとどうしてもsetup.py buildってところでエラーをはいてしまってできませんでした…
いまpythonを32bit版の2.5に落としてインストーラーでやってみたら接続できたのでこれでやってみようと思います.
ありがとうございました

753 :デフォルトの名無しさん:2010/10/28(木) 01:09:54
>>738-740
>>744
皆さんありがとうございました。
ようやく理解できました。
>>729
にあるとおり;で命令を2つ実行することでパスを認識させることができました。


754 :デフォルトの名無しさん:2010/10/28(木) 01:40:11
>>741
学校と互換性のある環境つくらないと意味ないと思うけど。

755 :デフォルトの名無しさん:2010/10/28(木) 17:59:21
パスワードはMUMBLEだろ?知ってるぞ

756 :デフォルトの名無しさん:2010/10/28(木) 18:37:28
PythonでGUIを勉強しようとなると
どんな本やWebを参考にしたらいいのかなぁ…
はじPyとみんPyとPythonスタートブックは持っています
仕事上でロガーで収集したCSVファイルを料理して吐き出す程度のレベルしかありません

757 :デフォルトの名無しさん:2010/10/28(木) 19:01:15
Tkinterを勉強し始めました

758 :デフォルトの名無しさん:2010/10/28(木) 19:25:42
とりあえずTkinterでいいんじゃない?
標準で付いてるし
とりあえず対話モードで
import Tkinter
Tkintet.Tk()
って書くだけでもウインドウ出る

759 :デフォルトの名無しさん:2010/10/28(木) 19:29:27
>>758
ありがとうございます。了解です。
あともう一つすみません…
Tkinterの専門誌みたいなのあれば教えていただきたいのですが…
きっかけ作りに何がいいかお願いします。

760 :デフォルトの名無しさん:2010/10/28(木) 19:34:04
あ間違えてる
import Tkinter
Tkinter.Tk()

761 :デフォルトの名無しさん:2010/10/28(木) 19:45:33
Tkinter専門本はないと思う
サイトはそのまんまググったらすぐ出てくるよ

762 :デフォルトの名無しさん:2010/10/28(木) 19:46:28
これだから土方は・・Tkinterに本なんていらん
必要になったらググって脳内コピープログラミングしてれば済む
本格的なGUIならTkinterは覚えるだけ無駄、WxかQtでいいよ

763 :デフォルトの名無しさん:2010/10/28(木) 19:51:10
スレタイとテンプレ読めない人キター

764 :デフォルトの名無しさん:2010/10/28(木) 19:52:17
>>758 >>761 >>762
ありがとうございます。
ググったり、いろいろコピープログラミングして勉強してみます。

765 :デフォルトの名無しさん:2010/10/28(木) 19:53:37
>>763
すみませんでした。

766 :デフォルトの名無しさん:2010/10/28(木) 20:33:36
Tkinterについてのすばらしいサイトがあるから困らない。お気楽なところ。

767 :デフォルトの名無しさん:2010/10/28(木) 21:39:21
初心者にはwxがオススメ
本格的に使いたいならQt
Tkは古い

768 :デフォルトの名無しさん:2010/10/28(木) 21:41:26
Tkinter は初心者向けじゃないし本格的な用途にも向かないね
中途半端すぎる

769 :デフォルトの名無しさん:2010/10/28(木) 21:41:59
WxPythonは強いオブジェクト指向で好きだわ。
PyQtは関数型言語臭くて中途半端なイメージ

770 :デフォルトの名無しさん:2010/10/28(木) 21:44:05
PyGtkってダメなの?あんまり聞かないのですけれど…

771 :デフォルトの名無しさん:2010/10/28(木) 21:44:45
>>769
ほぼ同意だけど wxPython はイベントの扱い方がちょっと不満

772 :デフォルトの名無しさん:2010/10/28(木) 22:12:45
>>769
PyQt++
WxPython はうんこ。

773 :デフォルトの名無しさん:2010/10/28(木) 22:15:10
pysideってのがライセンス的にもいい鴨

774 :デフォルトの名無しさん:2010/10/28(木) 22:28:47
PyQtが嫌われる理由は第一に汚染ライセンスと
Pythonにあまり馴染みのないgrammeの事
PyGTKは使ったことないがライセンスも問題なく自由らしいな。
Wxはほぼ自由でPythonicな文法をたくさん使うことになるので
コーディングも面白いが大規模だとそれが作業となり疲れてくる

775 :デフォルトの名無しさん:2010/10/28(木) 22:41:12
GUIは出来るだけやりたくない

776 :デフォルトの名無しさん:2010/10/28(木) 22:42:38
PyGtkは知らんがGTKは糞

777 :デフォルトの名無しさん:2010/10/28(木) 23:11:40
>>774
じゃあPySideは?
Qtの開発元がライセンスを緩めてもらうようPyQtの開発元に交渉したけど決裂して作り始めた
LGPLなPyQt互換ライブラリ。

文法は、最近のはconnectの気持ち悪さはマシになってる。
C++的になんでもかんでもsetXXXが必要なところとか、
obj.getFoo().bar()
みたいなところとかは、変わってない。

778 :デフォルトの名無しさん:2010/10/28(木) 23:20:03
tkinterの何が悪い!

779 :デフォルトの名無しさん:2010/10/28(木) 23:39:31
お、GUIの話題が
結構まともに動いているPythonのGUIソフトと言えば、
TortoiseHgやDropboxのクライアントが思い浮かぶけど何のライブラリつかってるんでしょ。
BazaarはQtだっけ?

780 :デフォルトの名無しさん:2010/10/28(木) 23:57:46
DropboxはwxPythonみたいだな

781 :デフォルトの名無しさん:2010/10/29(金) 00:20:15
bzrのwindosパッケージに入ってるのはqbzrっていうPyQt製のGUIツール
TortoiseHGはGTKだったけど、Windowsでは問題が多くてQtに乗り換え中。
Dropboxはwxだけど、GUIはそもそもすごく簡単な設定画面だけで、シェル拡張とかは別。

782 :デフォルトの名無しさん:2010/10/29(金) 00:22:24
標準で付いてくるからtkinter使ってるわ

783 :デフォルトの名無しさん:2010/10/29(金) 05:27:13
>>776
参考までに教えて頂けたらと思うのだけど
どういうところが?
何と比べて?
できれば具体的に

784 :デフォルトの名無しさん:2010/10/29(金) 06:56:35
>>781
ナイス

・Bazaar qbzr: PyQt
・TortoiseHG: GTK->Qt
・Dropbox: ws (シェル拡張は別)



785 :デフォルトの名無しさん:2010/10/29(金) 22:57:09
エラーメッセージを全部取得するにはどうすればいいんでしょうか?

f = open('testfile', 'r')
上のコードで存在しないファイルをopenしようとすると、以下のようなエラーがでます。
Traceback (most recent call last):
 File "./test/test.py", line 15, in <module>
   f = open('testfile', 'r')
IOError: [Errno 2] No such file or directory: 'testfile'

今、以下のようにtry文で分岐させてエラーメッセージの各項目を取得しようとしてるのですが…
try:
   f = open('testfile', 'r')
except Exception, inst:
   print inst
   x = inst[0]
   y = inst[1]
   print 'x =', x
   print 'y =', y
#     z = inst[2]
#     print inst[2]

上のコードの実行結果は、以下のようになってしまいます。
[Errno 2] No such file or directory: 'testfile'
x = 2
y = No such file or directory

変数instには「[Errno 2] No such file or directory: 'testfile'」がセットされているのに、
どうして個別の項目を取り出そうとすると「2」と「No such file or directory」の2つだけになってしまうんだろう?
「: 'testfile'」の部分は、変数instのどこに含まれているんでしょうか?

inst[2]を取り出そうとすると「IndexError: tuple index out of range」とエラーになります…
python-2.5.2をbash上で使っています。

786 :デフォルトの名無しさん:2010/10/29(金) 23:35:55
print inst.filename

787 :785:2010/10/30(土) 00:18:54
>>786
ありがとう!解決しました。

その上で、再度質問したいのですが、
inst「.filename」が使えるというのはどのようにすれば調べられるんでしょうか?
質問ばかりで恐縮なのですが、ご存じの方いれば教えて欲しいです。
こういう時にどのドキュメントを調べればいいんだろう…

http://docs.python.org/index.html
公式のドキュメントにクラスの詳細を書いたようなリファレンスがあるのかな?
と思って探して見たんですが見つけられませんでした…

http://docs.python.org/tutorial/errors.html
http://docs.python.org/release/2.5.2/tut/node10.html
ここも一通り読んでみたのだけど見つけられませんでした。

788 :デフォルトの名無しさん:2010/10/30(土) 00:34:02
ttp://www.python.jp/doc/2.5/lib/module-exceptions.html
IOError -> EnvironmentError

try: 
  f = open('testfile', 'r') 
except Exception, inst: 
  print dir(inst)


789 :デフォルトの名無しさん:2010/10/30(土) 00:36:07
help(inst)もあるか

790 :デフォルトの名無しさん:2010/10/30(土) 00:48:42
help(IOError)

791 :785:2010/10/30(土) 00:50:51
>>788-790
本当にありがとうございました。解決しました。

792 :デフォルトの名無しさん:2010/10/30(土) 01:12:13
>>785
print inst したときは、 str(inst) で取り出した文字列を表示してる。
inst.__str__() が、instの中身を文字列に変換するメソッドで、 str() はそれを呼び出しているだけ。

793 :785:2010/10/30(土) 04:04:44
関数の中で自身の関数名を参照できないでしょうか?
エラーメッセージの頭に関数名を表示しようとしています。

def myopen(path):
    try:
        f = open(path, 'r')
    except Exception, inst:
        sys.stderr.write('%s: open failed: %s %s\n' % (
                '関数名', inst.__class__.__name__, inst))

path = 'testpath'
myopen(path)

以上のコードを実行したときに、'testpath'は存在しないファイルパスでエラーになるとして、
myopen: open failed: IOError [Errno 2] No such file or directory: 'testpath'
とエラーメッセージの頭に関数名「myopen」つけて表示したい。
これをどんな名前の関数でもそうなるようにしようとしています。

C言語のプリプロセッサでいう__FUNCTION__に相当するようなものがあればいいんですがpythonにはないでしょうか?
クラスの名前ならself.__class__.__name__で取り出せたのですが、これの関数版やメソッド版はないでしょうか…

関数の外でならmyopen.__name__で「myopen」とう名前を取得できたんですが、これを関数の中でどんな名前の関数ででも自身の名前を取得したい…


785と同じですがpython-2.5.2をbash上で使っています。

>>792
遅くなりました、ありがとうございます。調べる際の取っ掛かりにできて本当にありがたいです。

794 :デフォルトの名無しさん:2010/10/30(土) 04:18:20
traceback見れば自分がいまどの関数の中で例外吐いたかは判る

795 :デフォルトの名無しさん:2010/10/30(土) 05:04:24
>>> import sys
>>> import traceback
>>> def fun():
... try:
... hoge=fuga()
... except Exception, e:
... print traceback.extract_tb(sys.exc_info()[2], limit=None)[-1][2]
...
>>> def abc():
... fun()
...
>>> abc()
fun

796 :785:2010/10/30(土) 05:25:30
>>795
すごい…こちらでも関数名取得できました
ありがとおおおおおおおおおおおおおお!
このスレで聞いて見て良かったです。

797 :785:2010/10/30(土) 06:09:49
traceback.extract_tb(sys.exc_info()[2], limit=None)
の部分なんですが、例外を発生させた最初の関数が最後の要素に入るみたいです。
なので、関数の呼び出しが深いときは別の名前が出力されてしまう…
fuga()をつくってその中でraiseしてみました。

def fuga():
    raise

def fun():
    try:
        hoge = fuga()
    except Exception, e:
        print traceback.extract_tb(sys.exc_info()[2], limit=None)[-1][2]

def abc():
    fun()

abc()

上のコードの実行結果は「fuga」になりました。自分の環境だけかもしれません…

添字の-1を0にして最初の要素を参照するように、
traceback.extract_tb(sys.exc_info()[2], limit=None)[0][2]
とすれば関数の呼び出しがいくら深くても「fun」が出力されました。
もしかすると、こちらを意図されていたのでしょうか?
自分の説明不足+考えすぎかもしれません、すみません。


python-2.5.2を使っています。

798 :デフォルトの名無しさん:2010/10/30(土) 06:17:48
>>> import sys, traceback
>>> def fuga():
... raise Exception('fugafuga')
...
>>> def fun():
... try:
... hoge = fuga()
... except Exception, e:
... l = traceback.extract_stack(f=None, limit=None)
... for t in reversed(l):
... print t[2],
...
>>> def abc():
... fun()
...
>>> abc()
fun abc <module>

799 :デフォルトの名無しさん:2010/10/30(土) 06:30:27
こうすると良い感じ

>>> import sys, traceback
>>> def fuga():
... raise Exception('fugafugafuga')
...
>>> def hoge():
... fuga()
...
>>> def fun():
... try:
... h = hoge()
... except Exception, e:
... for t in reversed(traceback.extract_tb(sys.exc_info()[2], limit=None)):
... print t[2],
... print
... for t in reversed(traceback.extract_stack(f=None, limit=None)):
... print t[2],
... print
...
>>> def abc():
... fun()
...
>>> def de():
... abc()
...
>>> de()
fuga hoge fun
fun abc de <module>

800 :デフォルトの名無しさん:2010/10/30(土) 06:45:52
>>797
>添字の-1を0にして最初の要素を参照するように、
>traceback.extract_tb(sys.exc_info()[2], limit=None)[0][2]
>とすれば関数の呼び出しがいくら深くても「fun」が出力されました。
>もしかすると、こちらを意図されていたのでしょうか?
>自分の説明不足+考えすぎかもしれません、すみません。

>>793 のケースだとエラーになったファイル名だけ判ればいいからそれでもいいけど
>>797 では実際に例外を出しているのは fuga() の中だから
現実には fun の位置じゃなくて fuga の位置を得たい状況になる場合もあるよ
(例外処理を上書きして握りつぶしてしまうとバグ取りがやりにくくなる)
なので >>799 みたいに上からも下からも追いかけられるようにした方が良いかもね

801 :797:2010/10/30(土) 07:40:22
>>798−800
逆もたどれるのか…勉強になります。
ご指摘頂いた点、慎重に考え実装してみます。
ありがとうございました!

802 :デフォルトの名無しさん:2010/10/30(土) 09:19:21
キチガイのいる本スレより役に立つな

803 :デフォルトの名無しさん:2010/10/30(土) 09:25:56
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘

804 :デフォルトの名無しさん:2010/10/31(日) 01:30:41
Django のソースよめ

http://code.djangoproject.com/browser/django/trunk/django/views/debug.py

805 :デフォルトの名無しさん:2010/10/31(日) 01:31:29
>>804

django のデバッガはよくできてる

806 :デフォルトの名無しさん:2010/10/31(日) 02:22:01
>>805

django のデバッガはよくできてる

807 :デフォルトの名無しさん:2010/10/31(日) 21:48:35
>>806

django のデバッガはよくできてる

808 :デフォルトの名無しさん:2010/10/31(日) 23:07:06
おまえらおれの質問に答えろや

809 :デフォルトの名無しさん:2010/11/01(月) 03:40:30
おまえは誰や?

810 :デフォルトの名無しさん:2010/11/01(月) 04:42:06
俺や

811 :デフォルトの名無しさん:2010/11/01(月) 15:02:26
http://twitter.com/yukihiro_matz/statuses/29317109670

yukihiro_matz: 英語圏でRubyとPythonを比較する記事を見ることが少なくなってきた
のは、RubyとPythonでクラスタが分離してきたからか。逆に日本語でRubyとPythonを
比較 する記事を見かけるのは国内でのPythonの地位が向上したからか。

               ∩_
              〈〈〈 ヽ
      ____   〈⊃  }
     /⌒  ⌒\   |   |
   /( ●)  (●)\  !   !
  / :::::⌒(__人__)⌒:::::\|   l
  |     |r┬-|       |  / <こいつ最高にアホだお
  \     ` ー'´     //
  / __        /
  (___)      /

812 :デフォルトの名無しさん:2010/11/01(月) 15:03:45

               ∩_
              〈〈〈 ヽ
      ____   〈⊃  }
     /⌒  ⌒\   |   |
   /( ●)  (●)\  !   !
  / :::::⌒(__人__)⌒:::::\|   l
  |     |r┬-|       |  / <こいつ最高にアホだお
  \     ` ー'´     //
  / __        /
  (___)      /

813 :デフォルトの名無しさん:2010/11/01(月) 22:04:46
winXP(C:)と7(Q:)をデュアルブートしてて、7でPython使いたい
Python プログラミングをする上で、ルートがC:ドライブじゃない場合不具合とかってある?

814 :デフォルトの名無しさん:2010/11/01(月) 22:17:12
なんで、金持ちのクセにデュエルしたがるのかなぁ…
別々に2台のPCを使った方が、ラクチンだと思うんだけどなぁ…
あ、キーボード・マウス共用はするべきか。

815 :デフォルトの名無しさん:2010/11/01(月) 22:24:15
用語が無茶苦茶だな

816 :デフォルトの名無しさん:2010/11/01(月) 22:26:50
海馬社長AA禁止

817 :デフォルトの名無しさん:2010/11/01(月) 22:31:16
デュアルとデュエルをかけてるのかガチで勘違いしたのかどっちだ

インストーラがCと決め打ちしていて動かないことはよくある
他にも多少の手間が生じる可能性は否定できないけど
そもそもWindowsの単一のルートを持たないファイルシステムが終わってるので
そんな気にしなくてもいいんじゃないかとも思う

818 :デフォルトの名無しさん:2010/11/01(月) 22:46:27
> インストーラがCと決め打ちしていて動かないことはよくある
そんなことあるのか。
業務用のライブラリとか?

819 :デフォルトの名無しさん:2010/11/02(火) 00:32:48
>>818
ディストリビュータによる。

820 :デフォルトの名無しさん:2010/11/02(火) 00:36:02
???

821 :デフォルトの名無しさん:2010/11/02(火) 00:37:00
>>818
例えばこれとか
https://code.google.com/p/pythonxy/issues/detail?id=117

でも「よく」は言い過ぎた。稀で
他のドライブでも半角スペースや日本語の混じったパスに入れなければ平気かな

822 :デフォルトの名無しさん:2010/11/02(火) 00:42:19
ディストリビュータがシステムパスを動的に取得できない場合は直指定つってんだろ

823 :デフォルトの名無しさん:2010/11/02(火) 00:43:42
Cじゃないとダメなインストーラは、要はレジストリのPythonPathの設定を
見ていないのだろうから、Cじゃないとダメどころか、フォルダも想定してる
場所じゃないとダメだろう

俺はDの適当な場所に入れてるけど、そういうひどいのに当たったことは一度も無い
もっともいつもsetup.pyで、インストーラ使ったことはほとんど無いのだがw


824 :デフォルトの名無しさん:2010/11/02(火) 00:44:58
それはdistutils固有の話じゃないのか

825 :デフォルトの名無しさん:2010/11/02(火) 00:45:44
>>823
Pure Python なライブラリーなら気にすることない。

826 :デフォルトの名無しさん:2010/11/02(火) 00:46:21
>>824>>822あてね

827 :デフォルトの名無しさん:2010/11/02(火) 00:47:21
>>825
ああいや、Python本体も自分でビルドしてるし拡張も大抵は
自分でsetup.pyでビルドしてるんだ

だいたい、パスまで決めうちされたら、複数バージョン(2.xと3.xなど)は
共存できないよね
そういう糞は無視でいいんじゃないの

828 :デフォルトの名無しさん:2010/11/02(火) 00:50:17
>>824
Win32 API に依存するライブラリーを作って、
Wix とかのディストリビュータで Windows インストーラを作って配布する時の話。

829 :デフォルトの名無しさん:2010/11/02(火) 00:52:31
>>828
了解した

830 :デフォルトの名無しさん:2010/11/02(火) 00:52:45
>>827
そうね。パス決め打ちでインストールされても、site-package に突っ込めば動くのが多い。

831 :デフォルトの名無しさん:2010/11/02(火) 00:57:17
windows だと easy_install で foo.msi とかでインストールするやつとかもある。
Windows Installer のバージョンが古いと MSI は動かない。
だから古い OS でも動作するようなインストーラを作るとなると、
ディストリビュータは限られる。

古いディストリビュータはシステムパスを動的に取得できないのもある。

だから c: 決め打ちになっちゃう。

Windows 2000 移行対応ってのが多いのはそのせい。

832 :デフォルトの名無しさん:2010/11/02(火) 00:59:17
>>813
7で立ち上げたときのpythonパスをC:にすればそのまま使えるだろう

833 :デフォルトの名無しさん:2010/11/02(火) 01:26:22
>>832
OS の差異による互換ってあるの?

834 :デフォルトの名無しさん:2010/11/02(火) 14:23:30
下のような感じで、Cythonで作ったクラスのオブジェクトの変数を、Pythonのソースからソートしたいのですが
どうしたらいいですか?

#ball.pyx

cdef class ball:
  cdef:
    object R
  def __init__(self,r):
    self.R = r
  def get_R(self,):
    return self.R

#main.py
import random,ball,operator
ball_list = [ball.ball(random.random()) for i in range(100)]
ball_list.sort( key = operator.attrgetter("R") )


### エラー文
AttributeError: 'ball.ball' object has no attribute 'R'

835 :デフォルトの名無しさん:2010/11/02(火) 14:32:49
ググれかす

836 :デフォルトの名無しさん:2010/11/02(火) 14:42:59
>>834
http://docs.cython.org/src/userguide/extension_types.html#attributes

外に見せたい属性にはpublicを指定しろ


837 :デフォルトの名無しさん:2010/11/02(火) 15:18:09
>>835
ググった結果
#ball.pyx
def __getattr__(self,name):
  return self.R

これで、とりあえず実行は出来ました
で、変数増えたらどうすればいいんだろ…?って状況でした
>>836
ありがとうございます
無事出来ました

838 :デフォルトの名無しさん:2010/11/02(火) 21:58:18
c++のスレから誘導して貰いました。

mypaintっていうオープンソースのお絵かきソフトに
photoshopみたいな拡大縮小機能(選択した部分を変形させたい)を付けたいけど
それをするのにはpythonでおkですか?
OKならまず何が必要ですか?
参考書とかソフトとか何を買えばいいですか?
プログラムはプラスとかビジュアルの付いていないC言語で
ifやforとかで条件分岐させてぐるぐる回すとかの
プログラムの作り方の基本的な部分しか分かりません。
↓mypaintのコード概要
http://wiki.mypaint.info/index.php?title=Documentation/ForDevelopers

839 :デフォルトの名無しさん:2010/11/02(火) 21:59:35
OK
PIL

840 :デフォルトの名無しさん:2010/11/02(火) 23:12:37
>>839
ありがとうございます!!

841 :デフォルトの名無しさん:2010/11/03(水) 15:25:28
なぜ関数名の先頭に数字を使えないんだろう…
なんか積極的な理由があるのかな?

842 :デフォルトの名無しさん:2010/11/03(水) 15:26:39
バーサーの実装がややこしいから

843 :デフォルトの名無しさん:2010/11/03(水) 15:46:47
モジュール名も先頭数字だめなのかな?くだらない質問で本当にごめん

844 :デフォルトの名無しさん:2010/11/03(水) 16:13:52
あと数値リテラルと混ざったら可読性が下がるからじゃないかな?

845 :デフォルトの名無しさん:2010/11/03(水) 16:17:00
>>841
0x1234 なんて関数を定義されたらややこしいだろ?

846 :841:2010/11/03(水) 16:52:37
>>845
なるほど!ありがとう納得した

847 :デフォルトの名無しさん:2010/11/04(木) 16:33:02
http://www.python.jp/Zope/intro/instant_python_jp

インスタントパイソンを読んでみたりしてるけど
そもそもプログラムがクラッシュしたかどうか
どうやってわかりますか?

x = input("Please enter a number: ")
print "The square of that number is", x*x
をtest.pyにコピペして保存してダブルクリックしてみたけど
何か入力したら一瞬で黒い画面が閉じる
その後どうしたらいいですか??

848 :デフォルトの名無しさん:2010/11/04(木) 16:46:40
コマンドラインからやれば分かるよ
PythonのPath通してから
python test.py

849 :デフォルトの名無しさん:2010/11/04(木) 16:54:45
最後にinput("Please press Enter")とか付け足せばいいんじゃない

850 :デフォルトの名無しさん:2010/11/04(木) 16:58:13
>>848
Pythonのpathを通すというのは具体的にはどういう作業ですか・・・?
パイソンの場所をどうこうするって事ですよね・・・?
コマンドラインというのは
インストールしてあるpython(command line)でいいんですよね?

851 :デフォルトの名無しさん:2010/11/04(木) 17:03:36
>>850
環境変数PATHの設定
ttp://www.pythonweb.jp/install/setup/index1.html


852 :デフォルトの名無しさん:2010/11/04(木) 17:11:36
>>850
OSの使い方から勉強するといいよ

853 :デフォルトの名無しさん:2010/11/04(木) 17:23:23
>851をc:\Python25でやってみましたが
ハロ-ワールドすら通らないです。
http://up3.viploader.net/ippan/src/vlippan164382.jpg

すいません、どうしたらいいですか?



854 :デフォルトの名無しさん:2010/11/04(木) 17:25:48
>>853
普通のコマンドプロンプトを使う
python(command line)ってやつじゃなくて

855 :デフォルトの名無しさん:2010/11/04(木) 17:26:53
ファイル名を指定して実行 -> cmd
cd C:\XXXX\XXXX # test.pyのあるディレクトリ・フォルダを指定
python XXXX.py

856 :デフォルトの名無しさん:2010/11/04(木) 17:28:44
>>854
ありがとうございます!!出来ました!!

857 :デフォルトの名無しさん:2010/11/04(木) 23:35:56
ありがと〜♪~♪ d(⌒o⌒)b♪~♪やった〜!
ボク以下の能力の人類がやって来たじゃなイカ!

858 :デフォルトの名無しさん:2010/11/04(木) 23:50:49
海に帰れ

859 :デフォルトの名無しさん:2010/11/05(金) 00:07:48
Pygameのページがリンク切れしてるんだけど、手に入らない?

860 :デフォルトの名無しさん:2010/11/05(金) 00:14:59
www.pygame.orgなら見えるけど?

861 :デフォルトの名無しさん:2010/11/05(金) 00:15:40
Pygameのページとは何ですか?

862 :デフォルトの名無しさん:2010/11/05(金) 00:16:18
859じゃないが俺も見えない。経路障害かもね。

863 :859:2010/11/05(金) 00:18:00
Pythonでゲーム作るときに便利なモジュールらしい。
使ってみたいんだがどうやってもダウンロードできない。

>>860
ダウンロードできそう?

864 :デフォルトの名無しさん:2010/11/05(金) 00:20:34
経路障害じゃなくて名前解決が出来ないみたい。IPアドレス直打なら行けるんじゃ。

865 :デフォルトの名無しさん:2010/11/05(金) 00:21:08
>>863
普通に落とせるな

866 :859:2010/11/05(金) 00:22:43
>>864
ごめん。詳しくないからちょっとわからない;

>>865
だったらリンク切れってわけではないのか。

867 :デフォルトの名無しさん:2010/11/05(金) 00:28:22
急に本スレ並みにレベル下がったな

868 :デフォルトの名無しさん:2010/11/05(金) 00:42:21
http://pygame.seul.org/project-Entris-1659-2920.html

アヒルさんフイタ

869 :859:2010/11/05(金) 00:45:47
>>868

マジでサンクス

870 :838:2010/11/05(金) 21:33:49
PILをインストールしようとして調べたら
windows for python2.6
というのがあって現在python2.5をインストールしてたんで
2.6をインストールし直そうとしたら
http://www.python.jp/Zope/download/pythonjpdistでは
Python 2.3.4 日本語環境用インストーラ(Win32)
というのがありました
どのバージョンをインストールすればいいのでしょうか??

871 :デフォルトの名無しさん:2010/11/05(金) 21:43:23
そこは罠なので公式からどうぞ
http://www.python.org/download/

872 :デフォルトの名無しさん:2010/11/05(金) 21:44:32
ねんのため
http://www.python.org/download/releases/2.6.6/

873 :デフォルトの名無しさん:2010/11/05(金) 22:25:50
だめ押し
http://www.python.org/ftp/python/

874 :838:2010/11/05(金) 22:33:40
ありがとうございます。無事いんすとーるできました!

875 :デフォルトの名無しさん:2010/11/05(金) 22:37:34
>>870
このダウンロードページ、さっさと消せばいいのに
トップを見に行ったら案の定壊れてたw

876 :デフォルトの名無しさん:2010/11/05(金) 23:09:14
まあ問題の日本語環境用インストーラは今となっては老害みたいなものだからな
消しても無問題

877 :デフォルトの名無しさん:2010/11/05(金) 23:21:56
python.jp からはダウンロードするなとおじいちゃんが言ってた

878 :デフォルトの名無しさん:2010/11/05(金) 23:24:49
俺なんて予備知識もなく
日本ユーザー会的なデザインのサイトからはインストーラを拾うなと感が働いて
その当時最新版でおすすめのPython 2.6を選ばずに2.5でライブラリマンセーしてたんだぞ

879 :デフォルトの名無しさん:2010/11/05(金) 23:26:43
>>870
罠だよな

http://www.python.jp/ から入って一番最初に目に付くダウンロードをクリックすると
http://www.python.jp/Zope/download へ飛ばされるんだけど
なぜか一覧の中で
・Python標準リリース
よりも
・日本語環境用インストーラ(Win32),Python 2.3.4ベース
の方をクリックしたくなってしまうのは漏れが日本人だからか

特に python 初めてって人に対しては紛らわしすぎて優しくないと思う

880 :デフォルトの名無しさん:2010/11/05(金) 23:28:25
まあ必要とする人もいるかもしれないから
本家のドキュメントみたいに"Deprecated"とか"廃止"とかって
大きく表示しとけばいいんじゃないかな

881 :デフォルトの名無しさん:2010/11/05(金) 23:29:45
たしかどっかのページに
現在は日本語対応出来ているので
わざわざ日本語環境用インストーラとか
日本語CODECとかダウンする必要ありません
って書いてあったページを見たことがある

882 :デフォルトの名無しさん:2010/11/05(金) 23:31:32
こういうところにも日本でpythonが流行らない原因があるのか

883 :デフォルトの名無しさん:2010/11/05(金) 23:32:30
ダウンロードのドキュメントも現状に即してなくて混乱するし
リファレンスも何故かhttp://pythonjp.sourceforge.jp/dev/が新しいという・・・

884 :デフォルトの名無しさん:2010/11/05(金) 23:49:15
ドジャンゴ臭がしてきたなこのスレ

885 :デフォルトの名無しさん:2010/11/05(金) 23:51:34
ダンジョーは他のサイトのことdisってないで自分のこと心配しろよ(wWwwWWwwWWWwww
温泉でケツマンコボルってる場合じゃないだろ(wWWwWWWwww

886 :デフォルトの名無しさん:2010/11/05(金) 23:55:57
どうぞ本スレで俎上にのせて好きなだけやってください
ここは電池の本数を競うスレではありません

887 :デフォルトの名無しさん:2010/11/05(金) 23:57:37
日本のドジャンゴはサーバのメンテする人もいないし
翻訳も古くて役に立たないから塩まいて近寄るなってばっちゃんが言ってた

888 :デフォルトの名無しさん:2010/11/06(土) 00:13:43
自分がダメなことの理由を他者に求めるのはクソ

889 :デフォルトの名無しさん:2010/11/06(土) 00:23:05
python.jp は django 温泉じゃなくて Zope 温泉でそ

890 :デフォルトの名無しさん:2010/11/06(土) 00:27:48
風俗用語か!

891 :デフォルトの名無しさん:2010/11/06(土) 00:34:43
風俗用語か!

892 :デフォルトの名無しさん:2010/11/06(土) 00:44:42
効用パラダイスですねわかります

893 :デフォルトの名無しさん:2010/11/06(土) 01:40:35
なんで django 嫌いなの?
俺あれすごい好きなんだけど。

894 :デフォルトの名無しさん:2010/11/06(土) 03:57:35
今のdjangoは昔のZopeの匂いがする。

895 :デフォルトの名無しさん:2010/11/06(土) 05:05:26
もっと具体的に言うと?


896 :デフォルトの名無しさん:2010/11/06(土) 05:29:33
せっけんの香りがします

Zopeだけに

897 :デフォルトの名無しさん:2010/11/06(土) 05:55:19
zopeland

898 :デフォルトの名無しさん:2010/11/06(土) 07:53:46
エクストリームバカの香りがする

899 :デフォルトの名無しさん:2010/11/06(土) 08:31:32
>>898
いじるなよ、また沸いて出るだろ(wwww

900 :デフォルトの名無しさん:2010/11/06(土) 11:14:12
class Foo:
  a = ''
  b = ''

foo = Foo()
foo.a = u'あいうけお'
foo.b = u'かきくけこ'

この後、JSON形式で
{"a":"あいうえお","b":"かきくけこ"}
というような形でファイルに書き出したいのですが、
どうする方法がスマートでしょうか。(python2.6系です)

901 :デフォルトの名無しさん:2010/11/06(土) 12:29:28
foo.__dict__

902 :デフォルトの名無しさん:2010/11/06(土) 13:18:41
{'a': u'\u3042\u3044\u3046\u3048\u304a', 'b': u'\u304b\u304d\u304f\u3051\u3053'}
になります…
{"a":"あいうえお","b":"かきくけこ"}
とファイルに出すにはどうすれば良いでしょうか?

903 :デフォルトの名無しさん:2010/11/06(土) 13:30:32
>>> import json
>>> print json.dumps(foo.__dict__, ensure_ascii=False)
{"a": "あいうえお", "b": "かきくけこ"}
>>>

904 :デフォルトの名無しさん:2010/11/06(土) 13:48:33
import json
class Foo(object):
  a=''
  b=''
foo = Foo()
foo.a = u'あい'
foo.b = u'か\'"き'
foo.__dict__
{'a': u'\u3042\u3044', 'b': u'\u304b\'"\u304d'}
json.write(foo.__dict__)
u'{"a":"\u3042\u3044","b":"\u304b\'\\"\u304d"}'

905 :デフォルトの名無しさん:2010/11/06(土) 14:13:07
ありがとうございました

906 :デフォルトの名無しさん:2010/11/06(土) 14:41:16
>>903
有難うございます。出来ました。

ちなみに、
Fooクラスのインスタンスのリストfoolistを持つクラスBar、
というような、少し複雑な構造のものも同様にJSON形式で出力することは出来ないでしょうか?
そのままだと、
print bar.__dict__
すると、
{'foolist': [<__main__.Foo object at 0x100449f10>]}
と出力されてしまいますし、
json.dump(bar.__dict__)しようとしても
TypeError: <__main__.Foo object at 0x100449f10> is not JSON serializable
と言われてしまいます…。

907 :デフォルトの名無しさん:2010/11/06(土) 14:43:50
>>906
def fook(obj):
    isinstance(obj, Foo) or isinstance(obj, Bar):
        return obj.__dict__
    return obj

json.dump(bar, default=obj)

ってやってみて。

908 :907:2010/11/06(土) 14:44:43
間違えた、
print json.dumps(bar, default=hook)
ね。

909 :デフォルトの名無しさん:2010/11/06(土) 14:44:46
おいおい1から10まで全部他人から聞く気かよ。自分で勉強して分からない部分だけ聞けって。

910 :838:2010/11/06(土) 15:08:43
http://kansai.anesth.or.jp/gijutu/python/man-gui/man-pil/howto-pil.php#test
をやってみてるんですけど
setenvでエラーが出てしまいます。
これはどうしたらいいですか?
http://up3.viploader.net/ippan/src/vlippan164971.jpg

911 :デフォルトの名無しさん:2010/11/06(土) 15:23:34
>>910
vi .cshrc
は、「viというエディタを使って.cshrcを編集しろ」ってこと。
で、.cshrcファイルの中で
setenv PYTHONPATH :/usr/local/lib/python2.5/site-packages/PIL
と書けということ。

912 :デフォルトの名無しさん:2010/11/06(土) 15:27:56
つまりWindows+サクラエディタでその2行を丸写しにしても
まったく意味ないということ

913 :デフォルトの名無しさん:2010/11/06(土) 16:10:03
>>910
インストーラでPILを入れたならPYTHONPATHの設定は必要ない

914 :デフォルトの名無しさん:2010/11/06(土) 17:16:53
おまえら基地外相手にすんなよ

915 :デフォルトの名無しさん:2010/11/06(土) 21:34:34
>>913
ありがとうございます
プログラム自体はやっと動き出したのですが
↓windowsフォトギャラリーが開いても画像が開かなかったです。
http://up3.viploader.net/ippan/src/vlippan165188.jpg
画像のアドレスをc:/users/モザイク部分/desktop/1277641573.JPGにしても
結果は同じでした・・・。
これは何が悪いんでしょうか?
もう、本当にすいません。



916 :デフォルトの名無しさん:2010/11/06(土) 21:38:11
>>915
そのサイト糞だから参考にしない方がいいよ

917 :838:2010/11/06(土) 22:29:44
えっ・・・
じゃ・・・他に参考になるサイト教えて頂けませんか?

918 :デフォルトの名無しさん:2010/11/06(土) 22:53:13
ttp://d.hatena.ne.jp/white_wheels/20100319/p2
ttp://d.hatena.ne.jp/techlabo/20080323/1206277055

919 :デフォルトの名無しさん:2010/11/06(土) 22:57:21
>>918
なんでwxなの?mypaintってPyGTKだよ?

920 :デフォルトの名無しさん:2010/11/06(土) 22:58:47
>>918
ありがとうございます。やってみます!!

921 :デフォルトの名無しさん:2010/11/06(土) 23:00:53
>919
リロ忘れ・・・
>>918じゃだめってこと??


922 :838:2010/11/06(土) 23:01:50
ああああ
>920=>921=>838です

923 :デフォルトの名無しさん:2010/11/07(日) 01:05:38
>>917
わざわざ劣化コピーサイト見るんじゃなくて
オリジナルのマニュアルを見るべきだよ
http://www.pythonware.com/products/pil/

924 :838:2010/11/07(日) 10:12:57
pygtkを使えるようにしたいんですが
http://www.pygtk.org/downloads.html
このページのPyGTK→2.6→pygtk-2.6.3-1.win32-py2.4.exe
でいいですか?

翻訳ソフトの和訳
Windows(あなたは、パイソン・ダウンロードでそれを得ることができる)ページのためのパイソン通訳。
GTK+実行時。我々は、あなたが公式GTK+包み(gtk+-bundle*.zipファイル)を用いたそれをインストールすることをおすすめする。
ちょっと利用できる最新版を選びなさい。
完全にこの束をインストールするために、あなたはフォルダでuncompressにその内容を必要として、手でごみ箱サブフォルダをシステム経路に加える。
PyGTK、PyCairoとPyGObjectモジュール(このサイトから利用できる、ちょうど関連続く、そして、一番最後のバージョン選ぶ)。
彼らをダウンロードするとき、あなたはPyCairo、PyGObjectとPyGTK版が対応するパイソン通訳版に合ったことを確認しなければならない、
そして、あなたには比較的最近のGTK+実行時がある。それらの拡張を構築するのに用いられるパイソン版は、インストーラー名で書かれる(例えばパイソン2.6のための『py2.6』)。
あなたがあなたのPyGTKアプリケーションを開発するのを援助するための偉大な仲間は、空地ユーザ・インタフェース・デザイナーである。

925 :デフォルトの名無しさん:2010/11/07(日) 10:18:33
>>924>>909>>909>>909

926 :838:2010/11/07(日) 10:28:59
>925
ごめんなさい

インストールしようとしたら
インストールできない、パイソン2.4が必要である
みたいな事言われたので
いまのパイソン2.6を2.4でインストールし直して
きます



927 :デフォルトの名無しさん:2010/11/07(日) 10:34:09
>>926
Python2.6とPython2.7用のPyGTKインストーラがあるよ
そのページに書いてあることをよく読んで自分で探せ

928 :838:2010/11/07(日) 10:56:05
>>927

うわあああありがとうございます!!
よく読んだらGTK+ runtimeが必要って分かりました。
さらにGTK+をインストールする前にcygwinなるものも必要でした・・・

本当にすいません出直してきますOTL

929 :デフォルトの名無しさん:2010/11/07(日) 11:21:08
>>928
Cygwinはいらないよ
もう一度落ち着いて辞書引きながら>>924のURLを嫁
PyGTKを動かすのに必要なものが書いてある

930 :838:2010/11/07(日) 13:03:54
↓手持ちの翻訳ソフト+超意訳だけど訳してみた。

PyGTKダウンロード

PyGTKをインストールしよう!
マイクロソフトウィンドウズ用PyGTK
PyGTKをWindows上にインストールするために、必要なもの:

 ・ウィンドウズ用パイソンインタプリタ(パンソンダウンロードページから取得できる)
 ・GTK+runtime 公式GTK+バンドル(gtk+-bundle*.zipファイル)を用いたものをインストールすること推奨する。
  すぐに利用できる最新版を選びなさい。
  完全にこのバンドルをインストールするために、フォルダを解凍して、
  手動でbinサブフォルダをシステムパスに加える必要がある。
 ・PyGTK、PyCairoとPyGObjectモジュール
  (このサイトから利用できる、このリンクの一番新しいバージョンを選ぶ)。
  これらをダウンロードするとき、PyCairo、PyGObjectとPyGTK版が対応するパイソンインタプリタの
  バージョンに合ったことを確認しなければならない。
  比較的最近のGTK+runtimeがある。それらの拡張を構築するのに用いられるパイソンのバージョンは、
  インストーラー名で書かれる(例えばパイソン2.6のための『py2.6』)。

PyGTKアプリケーションを開発するのを援助するための偉大な仲間は、
Gladeユーザ・インタフェース・デザイナーである。
より詳細な方法はPyGTK FAQを参照。

931 :デフォルトの名無しさん:2010/11/07(日) 13:12:56
>>929
ありがとう、先走ってCygwinインストールしてしまったOTL

と言うわけで、必要なもの
Python2.6(インストール済み)とgtk+-bundle*.zip(解凍済み)と
2.6用のPyGTK、PyCairoとPyGObjectモジュールを見つける事が出来たけど
gtk+-bundle*.zipの「手動でbinサブフォルダをシステムパスに加える必要がある。」の部分は
何をすればいいのでしょうか?

解凍した中にbinというフォルダーがあったので
それをどうのこうのということなんでしょうか?

932 :デフォルトの名無しさん:2010/11/07(日) 13:16:03
だからまずは自分で調べろよ
このスレでもちょっと前にパスの設定の仕方の話が出てただろ
死ね

933 :デフォルトの名無しさん:2010/11/07(日) 13:19:20
>>930
そんな程度の翻訳わざわざ貼らなくたって。

934 :838:2010/11/07(日) 13:28:23
>>932
正直、何をどう調べたらいいのか皆目見当もつかないという・・・r(y
>>851の環境設定の事ですか?
ヒントありがとうございます!!

935 :838:2010/11/07(日) 13:41:01
pygtkの例題が動き出しました!!
色々アドヴァイスありがとうございます!
教えて貰った中にあった
http://www.pythonware.com/library/pil/handbook/index.htm
も頑張って読んでみます!!
本当にありがとうございました!!!

936 :デフォルトの名無しさん:2010/11/07(日) 13:41:54
はっきり言おう
GTKは糞
もう一度言う
GTKは糞

937 :デフォルトの名無しさん:2010/11/07(日) 13:56:23
くだすれPython(超初心者用) その9
http://hibari.2ch.net/test/read.cgi/tech/1289105386/

938 :838:2010/11/07(日) 14:52:15
>>915の何が悪いんだろうかと思って
最初は画像の場所の書き方が悪いんだろうかと思いましたが
パイソンコマンドラインで
import Image
im = Image.new( "RGB", ( 480, 360 ), ( 0, 0, 0 ) )
im.show()
を一行づつ手入力しても
同じくwindowsフォトギャラリーが開くだけで
「画像またはビデオが選択されていません」とでます。
てっきりPILのインストールが出来ていないのかと思いましたが
パイソンコマンドラインでimport PILをやっても
エラーメッセージが出ませんでした。

すいません、ヒントだけでも教えて下さいませんでしょうか???


939 :デフォルトの名無しさん:2010/11/07(日) 15:08:06
>>935は口先だけかと小一時間
頑張って読んでどうしても分かんなかったら質問しる

940 :デフォルトの名無しさん:2010/11/07(日) 15:20:47
>>938
環境は?
64bitだと色々問題があるみたいだけど


941 :デフォルトの名無しさん:2010/11/07(日) 15:25:53
Python: PIL + show() + Vista
ttp://programming.itags.org/python/60680/

942 :デフォルトの名無しさん:2010/11/07(日) 16:28:41
pythonから使えるGUIの決定版がそろそろ決定したはず
おしえろ

943 :デフォルトの名無しさん:2010/11/07(日) 16:29:56
python関係ないからスレ違い

944 :デフォルトの名無しさん:2010/11/07(日) 16:32:25
>>938
http://www.pythonware.com/library/pil/handbook/index.htm
>show
>im.show()
>Displays an image. This method is mainly intended for debugging purposes.
>On Unix platforms, this method saves the image to a temporary PPM file, and calls the xv utility.
>On Windows, it saves the image to a temporary BMP file, and uses the standard BMP display utility to show it.
>This method returns None.

im.show() 使う香具師は馬鹿


945 :デフォルトの名無しさん:2010/11/07(日) 21:33:01
>>942
逆に考えるんだ。wxWidgets, Qt, gtk といったGUIプラットフォームにまだ決定版が無いけど、
そのGUIを使う言語は C++/Python が決定版になったんだ。

946 :デフォルトの名無しさん:2010/11/07(日) 21:41:35
>>942
もうQtでいいよ

947 :デフォルトの名無しさん:2010/11/07(日) 22:07:31
pyside

948 :デフォルトの名無しさん:2010/11/07(日) 22:15:50
HTML + JavaScript

949 :デフォルトの名無しさん:2010/11/07(日) 22:28:06
>>940
windows vista 32bit
python2.6
PILfor2.6

>>941
最初の質問者の解決法
import Image,os
img = Image.open(r"D:\FLundhNoNude.jpg")
os.startfile(img.filename)
だと確かに動きましたが
根本的にwindowsフォトギャラリーが待たないってところから先がまったく意味が分からないです・・・


>>944
和訳してみたけど殆ど意味がわかりませんOTL
もしかしてWindowsではBMP表示用に設定されているソフトが起動するよって事ですか?
windowsフォトギャラリー以外のソフトを設定しておけばいいってことですか?

show
im.show()
イメージを表示する。
この方法は、主に目的をデバッグすることを意図とする。
Unixプラットホームで、この方法は当面のPPMファイルにイメージを保存して、
xvユーティリティーを呼ぶ。
Windows上で、それは当面(テンポラリ)のBMPファイルにイメージを保存して、
それを示すために、標準的なBMP表示ユーティリティーを利用する。
この方法は、何も返さない。

950 :デフォルトの名無しさん:2010/11/07(日) 23:00:34
OSの知識が足りないと何をしようと思っても苦労するよね

951 :デフォルトの名無しさん:2010/11/07(日) 23:06:28
>>949
動かない理由なら>>941の下の方に書いてあるが
>>949を理解することが>>838を解決する上でなんか意味あるの?
Vista以上ではImage.show()はうまく動かない。それだけのことじゃないか?

952 :838:2010/11/07(日) 23:16:40
>951
アドバイスありがとう!
動かない、でいいですよね!
ていうか、Pythonをやろうと決めてから数日たっても
まだろくにプログラム作れないとっつきの悪さ
(英語のみしか参照できるところが無いせい?)
が日本でなかなか広まらない原因だろうか???

953 :デフォルトの名無しさん:2010/11/07(日) 23:20:55
数日でプログラムがスラスラ作れるようになる言語があるなら
教えて欲しいわ

954 :デフォルトの名無しさん:2010/11/07(日) 23:29:33
>>942
ライセンスに問題さえなければ、PyQt4で何も悪いことはない気がする。

955 :デフォルトの名無しさん:2010/11/07(日) 23:30:18
>953
例えばvbsやバッチファイルはすぐコピペでなんとかできるよね。
まあ、インストール不要っていうのもあるし
解説サイトも多いからすぐ書けるようになるよね。

こういうレベルの話でごめんね。

956 :デフォルトの名無しさん:2010/11/07(日) 23:34:51
>>955
それは"書けるようになる" と言えないんじゃwwwww
コードが読めた上でコピペするのと、
何も読めないでコピペするのって、全然違う。


957 :デフォルトの名無しさん:2010/11/07(日) 23:38:38
>>952
im.show('mspaint')とかim.show('iexplore')とかでもダメだった?
vista持ってないから知らないけど。

> ていうか、Pythonをやろうと決めてから数日たっても
> まだろくにプログラム作れないとっつきの悪さ
> (英語のみしか参照できるところが無いせい?)
> が日本でなかなか広まらない原因だろうか???
自分の能力不足を、言語のせいにしないでくれ。

958 :デフォルトの名無しさん:2010/11/07(日) 23:50:48
WxかQt、ほかよりはTkでいい
WxとQtはぜんぜん違うから好みでいいよ
俺はWxが大好き、Qtはライセンス以前の問題で大嫌い

959 :デフォルトの名無しさん:2010/11/07(日) 23:53:19
>>957
だめでした。

>956
まあ、解説サイトに説明があるから
全て理解しなくとも
すぐに理解して改造とか欲しい機能だけ
組み合わせる事も簡単だよねって程度の意味なんだwww


960 :デフォルトの名無しさん:2010/11/07(日) 23:59:54
Windows7使ってるけど普通にShowメソッドで画像でますが?

961 :838:2010/11/08(月) 00:07:18
>>960
自分となにがちがうんですかね??

962 :デフォルトの名無しさん:2010/11/08(月) 00:18:30
そのShowは環境によっては動かない
あくまで簡易なデバッグ用の手段として用意されてるだけなので
動作しなかったらしなかったで仕方ない程度の代物

どうしてもShowしたければ自分で適当に似たものをでっちあげたらいい
Imageインスタンスをファイルに書き出して
そのファイルを好きなイメージビューアに読ませるだけの簡単なお仕事だ

963 :デフォルトの名無しさん:2010/11/08(月) 00:56:06
フォトビューアーはDLLで実装されてるのか。
そりゃすぐに処理が戻るはずだわ。

964 :デフォルトの名無しさん:2010/11/08(月) 01:37:23
おれ Tkinter はあまり好きじゃないけど
GTK 使うくらいなら Tkinter 使う方がまし

965 :デフォルトの名無しさん:2010/11/08(月) 01:41:59
>>951
うち Vista で Fireworks デフォにしてるけど
im.show() でちゃんと Fireworks 開いて表示されるお

966 :デフォルトの名無しさん:2010/11/08(月) 01:42:52
>>952
馬鹿には無理

967 :デフォルトの名無しさん:2010/11/08(月) 01:45:33
>>961

>>838のアホさ加減から言うと
やみくもにごちゃごちゃいじって
OSの設定壊してるんだろうな


968 :デフォルトの名無しさん:2010/11/08(月) 01:47:00
>>962
ありがとう!インスタンス出来るようになったよー!!
ファイルビューアーに読み込ませる方法はまだわかんないけど
朝に比べたら格段に進歩した!!

969 :デフォルトの名無しさん:2010/11/08(月) 01:48:59
>>838
お願いだから次スレには来ないでくれ

970 :デフォルトの名無しさん:2010/11/08(月) 01:52:18
>>969
それは無理

971 :838:2010/11/08(月) 01:57:54
>>968=>>838
インスタンスじゃなかった・・・IdentifyだったOTL

今度こそじっくり勉強する・・・おやすみ


972 :デフォルトの名無しさん:2010/11/10(水) 00:21:55
おまえら 1 日 1 レスを絶やすなよ!

もっと本気だせよ!

973 :デフォルトの名無しさん:2010/11/10(水) 00:32:38
oltu.py 72,6824,5600,2400 byte 02/08/04

974 :デフォルトの名無しさん:2010/11/11(木) 13:01:36
つーかね、次スレ建てるの早すぎ

975 :デフォルトの名無しさん:2010/11/11(木) 13:19:27
980超えるとdat落ちする

976 :デフォルトの名無しさん:2010/11/11(木) 17:26:56
だから970ぐらいで次スレ建てればいいだろ

977 :デフォルトの名無しさん:2010/11/11(木) 17:34:56

http://hibari.2ch.net/test/read.cgi/tech/1289105386/

978 :デフォルトの名無しさん:2010/11/11(木) 20:38:27
ここでまた誘導か、すまんね。

979 :デフォルトの名無しさん:2010/11/11(木) 20:53:51
あと21レスくらい埋めなさい

980 :デフォルトの名無しさん:2010/11/11(木) 20:58:42
( ゚∀゚)o彡°おっぱい!おっぱい!

981 :デフォルトの名無しさん:2010/11/11(木) 21:04:28
>>838は諦めたのだろうか

982 :デフォルトの名無しさん:2010/11/11(木) 23:05:09
なんでpyてょんには++が使えないの

983 :838:2010/11/11(木) 23:08:32
>>981
昨日、本屋でpythonの本買ってきて読んでるところ。


984 :デフォルトの名無しさん:2010/11/11(木) 23:22:19
ププッ

985 :デフォルトの名無しさん:2010/11/11(木) 23:24:23
なんか838さんは行動の人っぽいね
俺なんかぱいてよnインスコするのに随分色々サイト見てからインスコした気がする
IDE使うのか使わないのかとかTKにすんのかとかQTにすんのかとか
その辺は俺よか全然パイソニックってことなんだろうな

ここくだすれなのに騒ぐ奴多いね
せめて黙ってることは出来んのか

986 :デフォルトの名無しさん:2010/11/11(木) 23:30:35
何を基準に言ってるのか、そもそもそういうのは
匿名でないコミュニティでやって欲しいわけだが
本スレでもこのスレでもPythonの本なんてネタ扱いされるし
IDEなんて過半数が使ってないしTkとQTを迷うって
どういう思考回路と知識を持ったらそんな事が言えるのか理解し難い
つまり長文書いてないで埋めなさい

987 :デフォルトの名無しさん:2010/11/11(木) 23:37:54
長文には長文で返すとインテリジェンスに満ちてるように見えるわけですね埋まります

988 :デフォルトの名無しさん:2010/11/11(木) 23:45:08
>>986
随分と凝り固まった頭してんのな
ツールの選択なんて状況によるだろ

989 :デフォルトの名無しさん:2010/11/11(木) 23:53:48
Pythonの本で悩むのがloo.py
GUItoolkitを悩むのがPythonic
IDEかエディタか悩むのはDOSer

990 :デフォルトの名無しさん:2010/11/11(木) 23:58:22
くだらない質問は匿名でないコミュニティでやれってことでFA?

991 :デフォルトの名無しさん:2010/11/12(金) 00:01:59
まぁ、ネタ質問にマジレスするバカ(ジエンだろうけどさ)が居る事が問題なんだけどね。

992 :デフォルトの名無しさん:2010/11/12(金) 00:02:52
ここはおまえらの込み入った事情を抜きにして
質疑応答される場だから質問側が配慮しろって事だろ
どうしてもならメイン州に住む天才サイキックのジョンスミスさんに聞いてね

993 :デフォルトの名無しさん:2010/11/12(金) 00:04:10
ここの無能に質問しても仕方ないよ

994 :デフォルトの名無しさん:2010/11/12(金) 00:04:56
今日の夕食: 梅茶漬け

995 :デフォルトの名無しさん:2010/11/12(金) 00:07:57
http://en.wikipedia.org/wiki/Qt_(framework)
http://en.wikipedia.org/wiki/Tk_(framework)

= you dunno be not same

996 :デフォルトの名無しさん:2010/11/12(金) 00:07:58
まず朝食を決めた方がいい

997 :デフォルトの名無しさん:2010/11/12(金) 00:11:18
ここのつまらん質問にイラッとすることはないが
ここのつまらん返しにイラッとすることは多い

998 :デフォルトの名無しさん:2010/11/12(金) 00:12:36
埋めてることすら気づかないどんぱい

999 :デフォルトの名無しさん:2010/11/12(金) 00:14:24
金曜って国会ある?
APECは土曜から連日見れるみたいだけど
11日の予算委は温すぎて途中で見るの嫌になったけど
今回は10日の小泉孝太郎自民党議員の質問が最大の山場だったなあ

1000 :デフォルトの名無しさん:2010/11/12(金) 00:15:58
1000じゃなイカ?

くだすれPython(超初心者用) その9
http://hibari.2ch.net/test/read.cgi/tech/1289105386/

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

243 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)