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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
このスレッドは、他のスレッドでは書き込めない超低レベル、
もしくは質問者自身何が何だか分からない質問を勇気を持って書き込むスレッドです。
へび使いが優しくコメントを返しますが、
お礼は Python の布教と初心者の救済をお願いします。

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

前スレ
くだすれPython(超初心者用) その6
http://pc12.2ch.net/test/read.cgi/tech/1264686181/

関連スレ
Pythonのお勉強 Part37
http://pc12.2ch.net/test/read.cgi/tech/1268467168/
2デフォルトの名無しさん:2010/04/23(金) 13:35:10
PEP-8とか
http://www.python.org/dev/peps/pep-0008/
http://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/04/23(金) 13:36:11
     >>774
    とりあえずこれでいい
    http://www.python.org/ftp/python/2.6.5/python-2.6.5.msi

    しかしいつの間にかテンプレ消えてんじゃねーか
    ◆関連リンク
    Python の Home Page
    http://www.python.org/

    Python 日本語ドキュメント - Pythonistaのお友達
    http://www.python.jp/doc/release/

    最新版直リン - 2.Xが推奨。3.Xはライブラリやドキュメントが使えないことも
    http://www.python.org/download/

    Python のコーディングガイド PEP8
    http://www.python.org/dev/peps/pep-0008/

    Python のコーディングガイド PEP8 - 日本語訳
    http://www.oldriver.org/python/pep-0008j.html

    日本語文字列コード問題まとめ
    http://python.matrix.jp/tips/string/encoding.html

    インタラクティブモードのエンコード
    http://python.matrix.jp/tips/compatibility/interact_encoding.html
4デフォルトの名無しさん:2010/04/23(金) 13:37:23
        ヘ⌒ヽフ
       ( ・ω・) dd
       / ~つと)

777 デフォルトの名無しさん [sage] 2010/04/09(金) 23:22:52 ID: Be:
    >>775
    Pythonの文字化け対策:sys.setdefaultencodingの謎
    http://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を変更する
    http://d.hatena.ne.jp/perezvon/20070715/1184469534

778 デフォルトの名無しさん [sage] 2010/04/10(土) 00:28:18 ID: Be:
    >>775にいたるまでテンプレ消えても誰も指摘しなかったのかw
    おおらかでいいな
5デフォルトの名無しさん:2010/04/25(日) 05:40:24
いちおつ
6デフォルトの名無しさん:2010/04/25(日) 23:39:22
s = 'abcdefgh'
のとき
['ab', 'cd', 'ef', 'gh']
みたいに2文字ずつ切り出すには
どう書くのがスマートですか?
7デフォルトの名無しさん:2010/04/25(日) 23:49:25
it = iter('abcdefgh')
map(operator.add, it, it)
8デフォルトの名無しさん:2010/04/26(月) 01:08:12
pythonのインタラクティブシェルで日本語入力できないんだが…どうすれば…
ググたけどもうお手上げ
9デフォルトの名無しさん:2010/04/26(月) 01:14:07
ALT+半角全角でとりあえず入力はできるけど・・
10デフォルトの名無しさん:2010/04/26(月) 01:25:51
>>8
環境は?
11デフォルトの名無しさん:2010/04/26(月) 07:31:09
>>6
>>7のは上手いなぁ。それよりも愚直にはなるが、
[s[2*n:2*n+2] for n in range(len(s)/2)]
って方法もある。
12デフォルトの名無しさん:2010/04/26(月) 07:57:40
環境はpython2.6.2でwin32
インタラクティブシェル開くと言語バーが消えてしまうんっすよね
だからalt+半角/全角にしても切り替わってくんない
13デフォルトの名無しさん:2010/04/26(月) 09:01:34
方々、すいません
設定が米国語になってましたorz
にぽん語にして再起動したら入力でけるようになりました

おさわがせいたしましたぁ
14デフォルトの名無しさん:2010/04/26(月) 12:18:59
>>7
びっくりしたあと納得した
15デフォルトの名無しさん:2010/04/26(月) 12:37:35
同じイテレータの.next()が呼び出されるからこうなるんだよね
端的だけどすぐには思いつかないから、分かりやすいかは微妙に感じる

operator.add() って引数全部足すのかと思ってたらもちろん違った
3つだったらこんな感じか
map(lambda *a: ''.join(i for i in a if i), *(it, ) * 3)
ワンライナーだな―これは
16デフォルトの名無しさん:2010/04/26(月) 12:51:48
>>11
*2はダサイから、
[s[n:n+2] for n in xrange(0, len(s), 2)] かな。

他には、 [t + u for t, u in zip(s[::2], s[1::2])] とか、
map(operator.add, s[::2], s[1::2]) とか

でも、 >>7 はイテレータの神
17デフォルトの名無しさん:2010/04/26(月) 12:54:47
>>13
びっくりしたあと納得した
18デフォルトの名無しさん:2010/04/26(月) 14:42:47
特にお勧めはしないが
re.findall('..', s)
でもいいよ
19デフォルトの名無しさん:2010/04/26(月) 15:12:02
>>18 は正規表現の神
20デフォルトの名無しさん:2010/04/26(月) 16:09:21
Cだと互いに影響しあうようなものを引数にするのはタブーだけど
Pythonは関数の引数の呼び出し順は決まってるん?
21デフォルトの名無しさん:2010/04/26(月) 16:37:46
>>20
>>7のことを言っているのなら、何か誤解していると思う
func(expr1, expr2)
CやPythonのような正格な言語では、式expr1, expr2が評価されてから
funcが呼ばれる
expr1とexpr2のどちらが先に評価されてかは(少なくともCでは)決まっていないので、
それに依存するプログラムは邪悪とされる

>>7の場合、式it, itをmap()に渡しているので、iteratorオブジェクトitが
そのままmap()に渡るだけなので、上の問題とは無関係なことに注意して欲しい
勿論map()の実装には依存しているけどね
22デフォルトの名無しさん:2010/04/26(月) 16:52:35
ええっ
map(operator.add, it, it)
のことなら
左のitが先に評価されて右のitが後から評価されているからこそ
それがmapでうまく処理される訳で
右が先で左が後なら正しい結果にならないでしょ?
23デフォルトの名無しさん:2010/04/26(月) 16:53:29
>>22
iteratorオブジェクトitがそのままmap()に渡るだけなので
2421:2010/04/26(月) 16:59:54
>>22
言葉が足りなかったかな
it.next()を評価して、itから値を取り出すのは「map()の中」なんだよ

勿論左の引数から先に値を取り出すようにmap()が実装されていなければ
望みの結果にはならないけど、
関数の引数として渡した式が、関数を呼ぶ前にどういう順序で評価されるかが
不定である、という問題とは関係が無いわけさ
2520:2010/04/26(月) 17:33:53
>>21
ありがとう。言われてみれば確かにそうだ。
引数で渡した時点では副作用はないね。
2622:2010/04/26(月) 18:17:46
>>24
ありがとう。言われてみれば確かにそうだ。
引数で渡した時点では副作用はないね。
27デフォルトの名無しさん:2010/04/26(月) 22:24:43
>>7は 約10秒でレスしてる
ウヒョー
28デフォルトの名無しさん:2010/04/26(月) 22:38:26
10分
2927:2010/04/26(月) 22:53:46
orz
3011:2010/04/26(月) 23:38:19
>>15
lambdaでも可変長引数とれたんだ。知らなかった、ありがとう。

>>16
そういやrangeってステップ指定できたなぁ。いつも必要なときに忘れるんだ
31デフォルトの名無しさん:2010/04/27(火) 06:06:44
このスレ知らないことがたくさんでてきて勉強になります。
ただ>>15だけ試してみたけど
なんでそうなるのか分からなかったので、
初心者にも分かるように教えてもらえませんか?


map(lambda *a: ''.join(i for i in a if i), *(it, ) * 3)
32デフォルトの名無しさん:2010/04/27(火) 06:12:00
すいません、途中でおくってしまいました。

このスレ知らないことがたくさんでてきて勉強になります。
ただ>>15だけ試してみたけど
なんでそうなるのか分からなかったので、
初心者にも分かるように教えてもらえませんか?

よく分かっていない部分
1. map(lambda *a: ''.join(i for i in a if i), *(it, ) * 3)
は構文的に通るのに
print i for i in aが通らない理由

2. map(lambda *a: ''.join(i for i in a), *(it, ) * 3)
ではダメな理由

3. 処理が行われる順番

4. *(it, ) * 3はどんな意味?

以上です。よろしくお願いします。
33デフォルトの名無しさん:2010/04/27(火) 06:57:26
1.引数はタプルだから
2.nextじゃなくてforの場合はStopIterationにならないから
    if i はいらないんじゃないの
3.括弧の中からっぽい
4.同じ1つのイテレータの入ったタプルを展開

自分も初心者なんで適当
34デフォルトの名無しさん:2010/04/27(火) 06:58:22
訂正
4.同じ1つのイテレータが3つ入ったタプルを展開
3534:2010/04/27(火) 07:24:12
すんません

map(lambda *a: ''.join(a), *(it, ) * 3)

これでも同じ結果になるような気がするんですが、
間違っていますか
3634:2010/04/27(火) 07:28:08
lambda *a: ''.join(i for i in a)の(i for i in a)はジェネレータ表記になっている必要性がありませんよね
lambdaは*aで、タプルの引数としてイテレータから3つ要素を取ってきてそのままjoinに渡すんですよね
間違っているのかどうかわからん
3715:2010/04/27(火) 09:25:24
俺のが一番魔術的だったわけだ
1. 引数に渡すときは()を省略してジェネレータ表記に出来る
2. 余りが出たときのため。例外出すかこういう風に処理するかは場合によるよね
3. どこのこと?
4. >>33の通り

>>33 for は StopIteration で終了してるよ
3834:2010/04/27(火) 09:50:31
>>37
引数がタプルになるのは、星があるときだけでしたね
ジェネレータの括弧が省略可能ってことか

forは裏でStopIterationをtry exceptみたいな感じか

>>33は適当すぎましたね
すみません
3934:2010/04/27(火) 09:54:44
というかjoinがどうなっているのかわからん以上、
引数のタプルがどうとかは言えないんだった
40デフォルトの名無しさん:2010/04/27(火) 10:45:49
要素が足りなくなったときに(itがStopIteration吐いたときに)Noneを補完してるのはどの部分?

it=iter('abcdefgh');map(lambda *a: a, *(it,)*3)

---> [('a', 'b', 'c'), ('d', 'e', 'f'), ('g', 'h', None)]
4140:2010/04/27(火) 10:54:06
ごめん、自己解決した。mapの仕様ですね。
map(lambda a,b: (a,b), range(3), range(5))

---> [(0, 0), (1, 1), (2, 2), (None, 3), (None, 4)]
42デフォルトの名無しさん:2010/04/27(火) 11:22:42
ひょっとしてこのスレは2.6が標準なのかな
43デフォルトの名無しさん:2010/04/27(火) 11:31:11
Oh,Yes!
44デフォルトの名無しさん:2010/04/27(火) 11:55:37
Python2.6、IDLEを使ってGUIアプリを作ろうと目論んでます。
F5でモジュールを起動してチェックしてるのですが、出てきたウィンドウを閉じると次回起動させる時に
Exception in Tkinter callback
中略
AttributeError: ModifiedInterpreter instance has no attribute 'interp'
とでて一度IDLEを閉じてから起動させるハメになります。
自分に何か足りないんだと思いますがいい方法はないものでしょうか?
4544:2010/04/27(火) 13:04:11
自己解決デストロイ
46デフォルトの名無しさん:2010/04/27(火) 13:14:47
解決方法教えて
4744:2010/04/27(火) 13:40:02
ど初心者なので詳しくはわかりませんが、
ttp://www.python.jp/doc/2.4/lib/node701.html
のサンプルコードでできました。
最初は最下段のroot=Tk() , root.destroy()かと思ったけどself.quitな予感も…。
今色々試してます。
48デフォルトの名無しさん:2010/04/27(火) 13:43:12
del root
49デフォルトの名無しさん:2010/04/27(火) 13:48:13
>>44
2.5 だけどうちはもんだいない
5044:2010/04/27(火) 13:57:27
>>48
ありがとうございます。調べてみます。
>>49
マジすか。
普通にウインドウの×ボタン押して閉じてたりdestroyだけした時にこうなるので何かの記述が足りないのかなと。
self.quitだと全部閉じちゃうしなーorz
51デフォルトの名無しさん:2010/04/27(火) 14:01:32
自分で調べるより最小限の再現手順(コード含む)と環境貼って
誰かに調べてもらったほうがいいと思うぞ
Tcl/Tk, Tkinter, IDLE と登場人物が多くて切り分けるのが大変だし
5244:2010/04/27(火) 14:20:30
ttp://paison.hp.infoseek.co.jp/paison/tkinter/pytk2.html
より下記コードを引用(不要部分は削除)
from Tkinter import *
class App(Frame):
def init(self):
b = Button(self, text="Bye", command=self.cmd_clicked)
b.pack(side=TOP)
def cmd_clicked(self):
self.master.destroy()
def __init__(self, master=None):
Frame.__init__(self, master)
self.pack()
self.init()
if __name__ == "__main__":
app = App()
app.mainloop()
このコード(他もですが)でウインドウの×ボタンで閉じた場合とdestroyした場合にもう一度起動する時に>>44のエラーがでてモジュールを起動できません。
OS:Ubuntu9.10 64bit
Python2.6
53デフォルトの名無しさん:2010/04/27(火) 14:31:41
モジュールをアンロードしてからリロードするようにしてみたら?
5444:2010/04/27(火) 14:39:41
>>53
すみません、どうやればいいかわかりませんorz
55デフォルトの名無しさん:2010/04/27(火) 14:43:21
ちょっとは自分で調べろ
オウム返ししてると返事もらえなくなるぞ
56デフォルトの名無しさん:2010/04/27(火) 15:00:22
>>44
別ウインドウを出すコードは、WindowsのIDLEから実行すると
おかしくなることが多いね。

普通のコマンドライン版から試してみるといいかも。
matplotlibとかturtleとかはIDLEだと駄目でコマンドラインだといける。
57デフォルトの名無しさん:2010/04/27(火) 15:04:14
二回目からは
app = App()
を消して
app.mainloop()
だけにして動かすと動くと思うよww
5844:2010/04/27(火) 15:33:47
>>49
今2.5も入れてやってみましたが同じく失敗しました。
何が違ったんでしょう…
>>55
調べましたがimport→reloadのではないですよね?
私の勘違いだと思いますがPython Shellを閉じてもう一度だと本末転倒なので…
>>56
おぉ!一気に楽になりました!
本当にありがとうございます。
5932:2010/04/27(火) 19:26:30
>>33,37
答えてくれてありがとうございます。
色々勉強になりました。

ジェネレータ表記はよく分かってなかったので、
これを気に勉強します。

また分からないことがあったらよろしくおねがいします。
60デフォルトの名無しさん:2010/04/27(火) 19:45:07
>>58
IDLEを -n オプションをつけた状態で起動したら (Shell に No Subprocess と表示)
そのエラーがでたけど、つけない場合エラーはでなかったよ
6144:2010/04/28(水) 09:43:38
>>60
ショートカットを確認したら確かに -nと付いていたので消したら治りました。
ありがとうございます。
今作ってるのが一段落したら何故こうなったのかも調べてみたいと思います。
勉強になりました。
62デフォルトの名無しさん:2010/04/28(水) 14:22:23
>>7
name 'operator' is not defined
>>18も同じく定義してないってエラーが
何かimportせにゃならんとかですか?
>>15は動きました
63デフォルトの名無しさん:2010/04/28(水) 14:29:08
>>7
import operator
>>18
import re
が必要
64デフォルトの名無しさん:2010/04/28(水) 14:38:18
>>63
ありがとうごいます
65デフォルトの名無しさん:2010/04/28(水) 16:57:28
親切だな
66デフォルトの名無しさん:2010/04/28(水) 17:07:23
大学の図書館にはクックブックとpythonプログラミング入門しかなかったから
それぞれをパラパラ読んで後者を借りてきた。これでGWにCでやったアルゴリズムをpythonで書き直したりしようと思う
情報がかなり薄いけど、不満があるとすればそこじゃなく、変数にやたらと l を使って、わざわざコメントで「←これは小文字のエル」と注意してること
67デフォルトの名無しさん:2010/04/28(水) 17:29:38
pyExceleratorを使って、Excelからデータ読みこんで
適当なテキストファイルに書き写したんだけど
データに改行があった場合、\nを削除しても勝手に改行される
どうすればいい?

あと、変数の中身をraw文字には出来ないの?
68デフォルトの名無しさん:2010/04/28(水) 17:42:10
>>66
吹いたww
何その糞本w
69デフォルトの名無しさん:2010/04/28(水) 17:50:54
small LはPEP8でも使うなって言ってんのに…
70デフォルトの名無しさん:2010/04/28(水) 19:52:58
Pythonでアップロードを行った時進行状況を知る方法はありますか?
ダウンロードであればファイルオブジェクトをread(1000)とかでループすることで知ることができるようですが
アップロードの場合がわかりません

71デフォルトの名無しさん:2010/04/28(水) 20:05:28
>>67
\x0D\x0A じゃなくて
\x0D だけのところを消さないといけない
72デフォルトの名無しさん:2010/04/28(水) 20:07:07
>>70
どうやってアップロードをしているのか書いてくれないと答えようがないぞ
73デフォルトの名無しさん:2010/04/28(水) 20:33:42
mime-multipart です
74デフォルトの名無しさん:2010/04/28(水) 23:21:21
>>71
ありがとうございます
でも結局良くわからなくて、別の方法で回避しました
ごめんなさい
75デフォルトの名無しさん:2010/04/29(木) 00:41:23
取り込みたいファイルはshift-jis形式のcsvロガーファイル
getdefaultencoding()は'mbcs'のWindows環境

みんなのPythonで勉強しているのですが、コード内部ではなるべくユニコードをってところでつまづいています。
csvファイルの1列目に日本語タグがある為、csv.reader()でユニコードへ変換しつつ取り込もうとすると
リストには対応していないとエラーになり…
open()でreadlines()を使いunicode()でユニコード化しても、リストのインデックス取り出しが1文字ずつになり不便に…
csv.reader()みたいにコンマ区切りにする方法か、csv.reader()でユニコード変換する方法はないのでしょうか;
それともユニコード化は別処理で考えたほうがいいのかなぁ…
76デフォルトの名無しさん:2010/04/29(木) 01:12:49
>>75
csvパーサの本体はCで実装されてて、かつstr(char*)を期待してるみたいなんで、
その時点でunicodeにするのは無理
stream = codecs.getreader('cp932')(open('foo.csv'))
みたいなのをcsv.reader()に渡すことは可能ではあるが、
csvパーサに渡るときに、どのみちstrに変換される

なので、uniocdeにしたければ自分で変換すると良いよ
row = [ col.decode('cp932') for col in row ]
程度で済む話だ
77デフォルトの名無しさん:2010/04/29(木) 11:26:57
>csvパーサの本体はCで実装されてて、かつstr(char*)を期待してるみたいなんで、

糞だな
こういうあホガイるから Python3 での決断が必要になったんだろうな
78デフォルトの名無しさん:2010/04/29(木) 12:40:59
ホガイ の検索結果 約 218 件中 1 - 10 件目 (0.11 秒)

http://www.nichibun.ac.jp/YoukaiCard/C0410695-000.shtml
この沼は昔大沼で、岸に弁天堂があり、沼は祭につかうホガイという飯びつのような形であった。
若宮八幡宮造営に際し、社殿が落成するころ、むし立ての赤飯が入っているホガイが毎日沼から
現れ、働いている人々がいくら食べても尽きなかったという。
79デフォルトの名無しさん:2010/04/29(木) 14:01:18
ホガイほすい
80デフォルトの名無しさん:2010/04/29(木) 14:02:05
>>76
ありがとうございます。
自分で変換する方法でいきますね。
81デフォルトの名無しさん:2010/04/30(金) 00:26:51
日本語と英語が混ざっている箇条書きの文が書き連ねられた
ファイルinput.txtがあります。

input.txtの中身は

WINDOWS, WINDOWS CE(9X系およびNT系は最新版、WINDOWS 3.1およびMS-DOSは旧版のみ)
MACINTOSH(OS 9以前およびOS X以降ともに)
各種UNIX
LINUX(LINUX STANDARD BASE3.2で標準仕様となった)
PLAN 9(PYTHON 3.Xは未移植)
PALMOS
S60
JAVAプラットフォーム (JYTHON)
.NET FRAMEWORKプラットフォーム (IRONPYTHON)

です。
このinput.txtの書く行に対して, 各英単語の先頭だけを大文字にする処理をしたいのですが、
適当な標準関数などありますでしょうか?

よろしくお願い申し上げます。
82デフォルトの名無しさん:2010/04/30(金) 00:55:49
ありません

次の方どうぞ
83デフォルトの名無しさん:2010/04/30(金) 00:57:10
>>81
無理だったけど(Os, Ironpython, .Net になる)せっかく書いたので

# coding: sjis
import re

for line in open('input.txt', 'rb'):
  line = line.decode('sjis')
  line = re.sub(ur'\b([A-Z(][A-Z]+)', lambda m: m.group(0).title(), line)
  print line,
84デフォルトの名無しさん:2010/04/30(金) 01:00:32
>>83
ありがとうございます。
いただいたコードで大分良くなります。

本番用のテキストに適用して、微妙なヵ所は手動で直します。
大変助かりました。
85デフォルトの名無しさん:2010/04/30(金) 01:09:52
f=open("foo")
x=f.readlines()
myfunction(x)
の様にxを使用した後、もうxはこれから先 一切 使用しないのですが、
fooが巨大なファイルであるとき、メモリ上にx(が指す先のメモリ領域)が残っている
と物理メモリを圧迫しそう(正確にはプロセス毎の領域ですが。)なので、
GCをxに対して発動させる事はできますでしょうか?

実際には上の状況に限らず、一般的に
変数xが巨大なデータ過ぎて、でももう使わない等という時に
そのメモリ領域を開放したいのです。

C++で長年プログラミングしていると無駄なメモリ領域を明示的に開放する
処理を書きたくなってくるのです。

よろしくお願い申し上げます。
86デフォルトの名無しさん:2010/04/30(金) 01:18:12
>>81
import re

def shuffle(xs, ys):
    while True:
        yield xs.next()
        yield ys.next()

toks = iter(re.split(r'(\W+)', open('input.txt').read()))
print ''.join(shuffle((x.capitalize() for x in toks), toks))
8786:2010/04/30(金) 01:20:51
書いたはいいが、これはShift JISみたいなエンコーディングだと駄目だな
その場合は、open('input.txt').read()を
codecs.getreader('cp932')(open('input.txt')).read()とでもしてね
88デフォルトの名無しさん:2010/04/30(金) 01:25:04
>>85
Pythonはリファレンスカウントなので、xは誰も参照してなければすぐ消される
が、C++プログラマなら知ってるだろうが、Pythonプロセスのヒープにメモリが
返却されたからと言って、OSにメモリが返却されるとは思わないほうがいい

readlines()で一気に全行読む必要は本当にあるの?
89デフォルトの名無しさん:2010/04/30(金) 01:26:23
>>86-87
ありがとうございます。
活用させていただきます。
90デフォルトの名無しさん:2010/04/30(金) 01:28:13
>>88
>物理メモリを圧迫しそう(正確にはプロセス毎の領域ですが。)なので、
とか
>実際には上の状況に限らず、一般的に変数xが巨大なデータ過ぎて、
とか言っているようだが。

詳細は本人が来るまで知らん。
91デフォルトの名無しさん:2010/04/30(金) 01:32:53
>>86
それだと
you're the best.

You're The Best.
になってほしいのに
You'Re The Best.
になってしまわないか?
9285:2010/04/30(金) 01:35:46
>>88
>>90
ありがとうございます。

xを指していた先を指している他のオブジェクトが存在していない時、
明示的にそのメモリを破棄する方法が無いとしても、

参照カウント方式でしたら、
x = None
とすればそれだけでGCが発動してくるって理解でよろしいでしょうか?
93デフォルトの名無しさん:2010/04/30(金) 01:38:11
>>92
いや通常そんな必要は無い

xがローカル変数で、その参照をreturnするなどしなければ、
普通はその関数から抜けるなどすれば、すぐGCされる
明示的に消したい時は
del x
94デフォルトの名無しさん:2010/04/30(金) 01:39:03
>>91
ああ、そういうケースまでは真面目に考えてない
95デフォルトの名無しさん:2010/04/30(金) 01:41:45
pythonで文字列mystrの末尾に改行コードがあったら
削除するっていう操作はどうすれば可能でしょうか?
96デフォルトの名無しさん:2010/04/30(金) 01:45:20
mystr.rstrip(r'\r\n')
97デフォルトの名無しさん:2010/04/30(金) 01:51:11
>>96
ありがとうございます。
9885:2010/04/30(金) 01:53:59
>>93
del x
まさにそれが知りたかったです。
ありがとうございます。
9985:2010/04/30(金) 02:02:20
>>92
前半のコード
f=open("foo")
x=f.readlines()
myfunction(x)
後半のコード

の形をしている時、C++では{}でくくる事によって
明示的にスコープを新たに作る事ができました。
すなわちC++ライクに擬似コードを書くと

前半のコード
{
File_type f=open("foo") ;
Line_type x=f.readlines() ;
myfunction(x) ;
}
後半のコード

とすれば、{で新しいスコープに入り制御が}に達した瞬間に
ローカル変数であるfとxのデストラクタが発動します。

100デフォルトの名無しさん:2010/04/30(金) 02:03:49
しかしPythonでは上述>>99のC++の{}に相当するような方法が良く分かりませんでした。
例えば

前半のコード
if True :
 File_type f=open("foo") ;
 Line_type x=f.readlines() ;
 myfunction(x) ;
後半のコード

のように意味のないifブロックをわざと作ってみても、
そのifを脱出した後の後半のコードの部分でも x や f が有効なようです。(ですよね?)

まあPythonを使っていてメモリがどうとか言う方がおかしい(センス無い or C++に毒されすぎ)のかもしれませんが。

101デフォルトの名無しさん:2010/04/30(金) 02:05:26
>>99
Pythonでスコープを作りたければ、明示的にdefで関数にするしかないけど
その例なら、単に
myfunction(f.readlines())
と書けばすぐ回収されると思うよ
102デフォルトの名無しさん:2010/04/30(金) 02:07:05
>>101
ああなるほど、確かに一時的にxを用意する必要はありませんでした。
103デフォルトの名無しさん:2010/04/30(金) 02:22:08
そもそも、メモリ使用量を意識する場合は、リストではなくてイテレータを使う
104デフォルトの名無しさん:2010/04/30(金) 02:30:47
1パスで済まない仕事なら仕方ない
行位置だけ覚えて、要求されたら
ファイルから行を遅延fetchするようなクラスを書くのが理想
105デフォルトの名無しさん:2010/04/30(金) 12:08:20
つlinecache
106デフォルトの名無しさん:2010/05/01(土) 04:01:37
>>85
del x
107デフォルトの名無しさん:2010/05/01(土) 04:05:13
>>100
前半のコード
def block():
 File_type f=open("foo") ;
 Line_type x=f.readlines() ;
 myfunction(x) ;
block()
後半のコード
108デフォルトの名無しさん:2010/05/02(日) 12:40:33
def reverse(data):
print 1
print data
for index in range(len(data)-1, -1, -1):
yield data[index]

print 2
reverse("golf")
print 3

と言うのを試してみたのですが、
何故かprint 1, print dataが表示されません。
(2,3は表示されます。)

理由が分からないのですが、教えていただけないでしょうか?
109デフォルトの名無しさん:2010/05/02(日) 13:27:56
print reverse("golf")してみるといい
yieldがあるから呼ばれてない
for inとか明示的に.next()を呼ぶとかlist()とかに渡すとか
ジェネレータを使う処理をしないとダメ
110デフォルトの名無しさん:2010/05/02(日) 13:28:29
そのreverseは普通の関数ではなくてジェネレータだからな

reverse("golf")は、ただgenerator objectを返すだけで
その中身はまだ実行されないんだよ

g = reverse("golf")
g.next()
のように、next()呼ぶと、yield一回分中身が実行されて、yield式の値が
返る

まあ普通は単に
for x in reverse("golf"):
  print x
みたいに書いて、next()を自分で明示的に呼ばないことが多いが
111108:2010/05/02(日) 14:07:51
>>109,110
なるほど、next()を行うまでは呼ばれないのですね。
すごくよく分かりました。
ありがとうございます。
112デフォルトの名無しさん:2010/05/02(日) 14:16:30
>>108
ちなみに、もし後じゃなくて今表示したいなら、こういう方法もある。
def reverse(data):
def gen():
for index in range(len(data)-1, -1, -1):
yield data[index]
print 1
print data
return gen()
113デフォルトの名無しさん:2010/05/02(日) 14:17:54
ごめんよ、インデント崩れた。
def reverse(data):
    def gen():
        for index in range(len(data)-1, -1, -1):
            yield data[index]
    print 1
    print data
    return gen()
114108:2010/05/02(日) 15:52:10
>>113
なるほど、関数の中にyieldを入れることもできるのですね。
色々教えて頂きありがとうございます。
115デフォルトの名無しさん:2010/05/03(月) 02:14:01
シーケンスから最大要素のインデックスを取得する方法について
seq.index(max(seq))だと無駄がありそうなので
よりいい方法があれば教えてください
116デフォルトの名無しさん:2010/05/03(月) 02:25:58
>>115
>>> from operator import itemgetter
>>> max(enumerate([2,5,3,4]), key=itemgetter(1))[0]
1
117デフォルトの名無しさん:2010/05/03(月) 09:59:12
numpy.argmax(seq)
118デフォルトの名無しさん:2010/05/03(月) 16:30:04
クラスについて教えて欲しいんですが。
恥ずかしいんですが、クラスってなんだろう。
119デフォルトの名無しさん:2010/05/03(月) 18:01:11
役職
120デフォルトの名無しさん:2010/05/03(月) 20:15:08
オブジェクト指向について解説してある記事を嫁
121デフォルトの名無しさん:2010/05/04(火) 00:28:20
オブジェクト指向信者にはなるなよ
痛いだけだからな
122デフォルトの名無しさん:2010/05/04(火) 00:40:03
オブジェクト指向って名前がカッコイイよな
123デフォルトの名無しさん:2010/05/04(火) 00:50:38
「まさか、後罪(オブジェクト指向)の触媒(パラダイム)を<讃来歌(メタプログラミング)>無しで?」
124デフォルトの名無しさん:2010/05/04(火) 01:19:51
モジュールの読み込みについて質問です。

dir/
  hoge.py
  package/
      __init__.py
      piyo.py
      fuga.py

とあって、hoge.py の中で

import package.piyo

としてpiyoをインポートしています。さらに piyo.py の中で

import .fuga

としてfugaをインポートしているのですが、この形だと
piyo.pyを直接実行したときに、

ValueError: Attempted relative import in non-package

と怒られます。

hoge.pyとpiyo.pyどちらを実行した場合でも、正常にインポート出来る
ようにするには、どのようなインポート文を書いたらいいのでしょうか?
125デフォルトの名無しさん:2010/05/04(火) 01:28:03
import .fuga でなく import fuga でいいんじゃまいか
126デフォルトの名無しさん:2010/05/04(火) 01:45:12
ありがとうございます。

import fuga

だとhoge.py実行時に

ImportError: No module named base

というエラーが出てしまいます。
127デフォルトの名無しさん:2010/05/04(火) 02:00:17
baseってなんだ?
128デフォルトの名無しさん:2010/05/04(火) 02:29:57
すみません。base=>fugaです。
129デフォルトの名無しさん:2010/05/04(火) 03:43:40
sys.path.append
130デフォルトの名無しさん:2010/05/04(火) 04:03:25

from package import piyo

としてpiyoをインポート
さらに piyo.py の中で

from . import fuga

131デフォルトの名無しさん:2010/05/04(火) 13:07:46
from . import fuga

だと

ValueError: Attempted relative import in non-package

といわれます。sys.pathについては、ディレクトリ移動したときに
変更が必要になりそうなので使わないようにしてましたが
最終手段として考え直してみます。
132124:2010/05/04(火) 13:19:54
とりあえず__name__つかって分岐させてました。
スレは継続してチェックさせていただくので、なにかいい方法があればお願いします。


ありがとうございました。
133デフォルトの名無しさん:2010/05/04(火) 13:40:39
piyoを直接実行って、どうやってる?ちゃんと
python -m package.piyo
ってやってる?
134デフォルトの名無しさん:2010/05/04(火) 14:13:47
ケリー・クラークソンって素敵じゃね
135デフォルトの名無しさん:2010/05/04(火) 14:21:18
とっくに
おぺvbs炭
136デフォルトの名無しさん:2010/05/04(火) 16:47:00
python超初心者です
つかプログラミング自体超初心者

django使ってwebアプリ作ろうとしているのですが
views.pyの行数がドンドン増える。
サイト配下のアプリを複数にするべきですか?
それともアプリ一つで長いviews.pyでOK?

アホな事聞いてごめん
137デフォルトの名無しさん:2010/05/04(火) 17:59:13
>>136
django使ったこと無いからどんなもんかは分からないが、
一般にファイルの行数がどんどん増えるような実装はしない。
メンテナンスが大変になるから。
容易さにつられて、本来とは違う使い方してるんじゃないの?
138デフォルトの名無しさん:2010/05/04(火) 18:20:38
ありがとう

models.pyでデータベースに格納するデータを
views.pyで処理を
urls.pyでURLを

それぞれ管理するんだけど、今は"ユーザ登録"っていう一つの処理を
views.pyにそれぞれ書いて(defによる宣言)いってる。
つまり"ユーザ削除"とか"ユーザ変更"やその他各種情報に関する処理毎に
関数作ってそれをurls.py経由で読み出すって感じなんだ。

サイト配下のアプリ毎に分ければ、すっきりはするんだけど、アプリ間でのリレーションとかも気にしないといけないから、皆どうしてるんだろうなぁと。
views.pyを分割する事も出来るみたいだけど...
139デフォルトの名無しさん:2010/05/04(火) 18:28:12
>>138
MVCフレームワークのコントローラみたいに機能ごとにアプリで分けるのが恐らく普通
140デフォルトの名無しさん:2010/05/04(火) 18:32:10
とりあえずここ読んでみたら
http://www.python.jp/doc/release/tut/node8.html
views.pyと同じディレクトリにuserviews.pyとか置いて、from userviews import *とかするの
141デフォルトの名無しさん:2010/05/04(火) 18:53:04
142デフォルトの名無しさん:2010/05/05(水) 01:33:42
>>132
バージョンは2.5以降ということで、いいのですよね?
ttp://www.python.jp/doc/2.5/tut/node8.html
ttp://dmsolutions.jp/wp/python/package/
らへん見る限りは、合ってる気がしますが…
143デフォルトの名無しさん:2010/05/05(水) 03:38:44
>>139 ありがと!やってみたら全然問題無かったw

>>140 参考になりました。ありがとー
>>141 あっちは過疎ってるぽいすね
144デフォルトの名無しさん:2010/05/05(水) 10:15:37
    ┌─┐
    │●│
    └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘      おっぱい!おっぱい!
145デフォルトの名無しさん:2010/05/05(水) 12:47:00
>>133
Pythonスクリプトを直接実行するときは、普通shebangじゃないの
少なくともUnix likeな環境で、スクリプトをそんな風に実行する人は
いないと思うけど
146デフォルトの名無しさん:2010/05/05(水) 20:51:55
>>132
http://www.python.org/dev/peps/pep-0366/
2.5だと__name__を使うしかないが2.6だと修正されてると思う
147デフォルトの名無しさん:2010/05/05(水) 21:08:16
>>145
shebangを使うようなコマンドとして直接実行されることを目的としているファイルは、
そもそもパッケージに入れたりしないよ。
__name__ が '__main__' になってしまうから、例えばどこかで import package.piyo したら、
同じモジュールを別の名前で2重にロードすることになってしまう。

モジュールをスクリプトとして実行する場合は、 Python -m モジュール名 ってする。
例えば、 python -m doctest とするとdoctestができたり、 -m cProfile とか、いろいろ例がある。

モジュール内の main() などを関数をコマンドとして直接起動できるようにしたい場合は、
ブートストラップとなるスクリプトを手動で別に用意するか、setuptoolsの機能を使って
ブートストラップを自動生成する。
148デフォルトの名無しさん:2010/05/05(水) 21:14:28
>モジュール内の main() などを関数をコマンドとして直接起動できるようにしたい

だったら os.system("python hogehoge") で起動すればいいんだお
簡単だお
149デフォルトの名無しさん:2010/05/05(水) 22:26:39
だれもそんな話はしとらんぜ
150デフォルトの名無しさん:2010/05/06(木) 07:59:37
# -*- coding: utf-8 -*-
import re
data = ur"""1
998.7 1003.1 -- -- -- 6.0 10.9 1.8 36 16 2.6 4.8 北西 9.4 北西 6.9 -- -- 晴後一時曇 快晴
2
1014.6 1019.1 -- -- -- 7.0 12.1 2.7 43 24 2.5 5.0 北西 9.4 北北西 9.0 -- -- 快晴 晴後曇"""
for rec in [reduce(lambda r,(i,v): r + [v] if i in [0,5] else r,
enumerate(line.split()),
[])
for line in
data.split('\n') if not re.search('^\d{1,2}$', line)]:
print rec[0], "\t", rec[1]

分からない事があるので教えてください。
上記のr,i,v変数がよく分かっておりません。
動きから想像するとrは[]で
iはenumerate(line.split())の0,1,2…
vはenumerate(line.split())の998.7,1003,1…
となるような気がするのですが

私のイメージでは
lambdaの引数はenumerate(line.split())の値なので
0,1,2…のシーケンシャルな値と998.7,1003.1等のdataから作成される値
で構成されているのかなと思っていたので
ちょっと分からなくなってしまいました。

お手数ではございますが、解釈の仕方を教えていただけないでしょうか?
151デフォルトの名無しさん:2010/05/06(木) 08:40:50
眠いのでまたあとで
152デフォルトの名無しさん:2010/05/06(木) 12:38:30
昼飯食って眠いのでまたあとで
153デフォルトの名無しさん:2010/05/06(木) 17:56:51
>>150
そのコードは1行に詰め込み過ぎなので、要素ごとに分解してみれば分かるかと。
あと、lamdaの部分を適当な関数にして、r, i, vをprintさせてみるとか。
154デフォルトの名無しさん:2010/05/06(木) 18:21:11
>>150
reduce()のことは知ってるの?
reduce(f, xs, init)は、ループで書くと

acc = init
for x in xs:
    acc = f(acc, x)
のような計算を行う

accの初期値はinitで、計算の結果が次々に積まれていくので、
「累積変数」「アキュミュレーター」と呼ばれる

そのコードで言うと、rは累積変数で、
(i, v)にはenumerate(line.split())の要素が最初から順番に渡されることになる
iはenumerateで付加された0からはじまるindex
vのほうが、line.split()で得られる実際のデータ(スペース区切りの語)だね
155デフォルトの名無しさん:2010/05/07(金) 04:57:40
pythoner(通称パイソナ)

どうよ?
156デフォルトの名無しさん:2010/05/07(金) 09:37:43
>>153,154
なるほど、ありがとうございました。
157デフォルトの名無しさん:2010/05/07(金) 20:28:52
アキュム(^^;)
158デフォルトの名無しさん:2010/05/09(日) 12:25:11
すいません、linux(Ubuntu)のターミナルから
grg
とか
greagerag
とか適当にコマンドを打ったら、

/usr/bin/python: can't find '__main__.py' in '/usr/share/command-not-found'

と表示されるようになってしまったんですが、これ一体なんなんでしょう??
どなたか教えていただけると嬉しいです。
159158:2010/05/09(日) 12:28:14
bashの時だけなるようです。zshに変えたら普通に
command not found と出るようになりました。
bashrc見てみたのですが、変な記述は見当たりません。
どなたかおたすけください。。
160158:2010/05/09(日) 12:41:26
sudo apt-get install command-not-found
で解決しました。
どうやら打ったコマンドが見つからない時に「sudo apt-get install 〜〜〜」すれば
そのコマンドが使えるようになるよって教えてくれるpythonのプログラムがあったのですが、
python2.6を一回全部アンインストールした時にそのプログラムも削除されてしまっていたのが原因だったようです。
失礼いたしました。
161デフォルトの名無しさん:2010/05/11(火) 00:23:58
質問です
背景を黒にしたり文字の色を変えたりってのはtkinterなどのGUIの領域でしょうか?
なにか特別なものをimportすること無しに文字の色変えるなんてことは可能でしょうか?
162デフォルトの名無しさん:2010/05/11(火) 00:35:58
質問するときは
OSのバージョン
ツールのバージョン
環境を書けと教わらなかったか?
163デフォルトの名無しさん:2010/05/11(火) 07:01:18
164デフォルトの名無しさん:2010/05/11(火) 14:45:31
ちょいと質問
例えば"東京"でググったら↓のURLになる
http://www.google.co.jp/search?hl=ja&q=%E6%9D%B1%E4%BA%AC&btnG=%E6%A4%9C%E7%B4%A2&aq=f&aqi=&aql=&oq=&gs_rfai=

これを代わりに
http://www.google.co.jp/search?hl=ja&q=東京&btnG=%E6%A4%9C%E7%B4%A2&aq=f&aqi=&aql=&oq=&gs_rfai=
でやっても同じ結果になる

python使って下の方のURLで開きたいんだけど
いい方法ある?
165デフォルトの名無しさん:2010/05/11(火) 14:48:44
>>> import urllib
>>> urllib.quote(u'東京'.encode('utf8'))
'%E6%9D%B1%E4%BA%AC'

とかすれ
166デフォルトの名無しさん:2010/05/11(火) 14:51:02
ありがとうございます
167デフォルトの名無しさん:2010/05/11(火) 14:52:03
マルチ
168デフォルトの名無しさん:2010/05/11(火) 14:55:13
169デフォルトの名無しさん:2010/05/11(火) 15:05:59
変換する方法があればそれでいいし、それはpythonに限ったことじゃないから文字コードスレに書いて
それ以外に方法があれば、それはpythonの話になるからこっちに書いたのですが
マルチとみなされたようでしたら、すみませんでした
170デフォルトの名無しさん:2010/05/11(火) 15:19:38
>>162
OS、環境など垣根なしの普遍的な質問かと考えましたもので
winxp、python2.6ですが、回答に何か影響あるでしょうか?

>>163
どもです
GUIか。。。どれでいこうか検討します
wxなあ。。。
171デフォルトの名無しさん:2010/05/11(火) 15:23:43
>>170
なんの背景なのか>>161からはわからないから環境を聞かれてるんだよ
コマンドプロンプトの背景色なのか、Tkinterで出したウインドウの背景色なのか
それともそれ以外なのか
172デフォルトの名無しさん:2010/05/11(火) 15:28:10
>なにか特別なものをimportすること無しに文字の色変える
この時点で少なくともtkinterは消えるわけで
173デフォルトの名無しさん:2010/05/11(火) 15:35:07
何が「特別」かは人それぞれだろう
174デフォルトの名無しさん:2010/05/11(火) 15:36:51
>>171
OSに限定せずテキスト周りの色変更は可能か否かを聞きたかったのです
175デフォルトの名無しさん:2010/05/11(火) 16:16:41
例えばどこに描画されたテキスト?
176デフォルトの名無しさん:2010/05/11(火) 16:44:59
>>175
例えば、IDLEとかです
177デフォルトの名無しさん:2010/05/11(火) 17:07:56
>>176
訂正
IDLEで実行して出力されるshell上にて現状出力されるのは青一色かと思いますが
それをこの文字は黄、この文字は赤、この文字の背景は黒など変更出来るものか
どうかってことです
178デフォルトの名無しさん:2010/05/11(火) 17:08:51
IDLEの使い方の質問ってム板じゃなくてマ板の方だっけ?
179デフォルトの名無しさん:2010/05/11(火) 17:09:52
>>177
Options -> Configure -> Hilights
180デフォルトの名無しさん:2010/05/11(火) 17:25:23
おまえらわざとだろw
解答者の質低すぎねえか?ww
解答者はとりあえず>>1嫁www
181デフォルトの名無しさん:2010/05/11(火) 17:53:59
>>179
それだとshell stdoutで変更できてもさらにその中身を細かく変更はできないですね
とりあえず意思疎通の仕方が難しいんだと言うことはよく分かりました
つまらない水掛け論になりそうなんで去ります さようなら
182デフォルトの名無しさん:2010/05/11(火) 18:53:35
おまえら大人げないな
183デフォルトの名無しさん:2010/05/11(火) 18:56:42
というか回答者の根気強さに涙した
184デフォルトの名無しさん:2010/05/11(火) 19:28:31
最初にプログラムの内の話なのか外の話なのか説明できなかったのが
そもそもの原因だな
185デフォルトの名無しさん:2010/05/11(火) 19:41:30
結局いまだに何をしたかったのか理解出来ていないんだけど
みんなは分かったの?
186デフォルトの名無しさん:2010/05/11(火) 19:45:16
質問者は知識が少ないのと自分の思い込みがあるから
どうしても説明が足りなかったりその道筋が正しいと
勝手な解釈をしてしまう傾向がある
一方で回答者はあれかもしれないこれかもしれないと
変に気を回しすぎるため質問者がどこで詰まっているかを
深読みすればするほどエスパーするのが面倒になる
187デフォルトの名無しさん:2010/05/11(火) 21:26:51
でっていう
188デフォルトの名無しさん:2010/05/11(火) 21:55:14
>>185
勝手な想像だが、Pythonでの文字出力に
色々色を付けたいってことじゃね?

【テンプレ】
PC ASUS Eee PC 4G-X (eMobile契約)
OS WindowsXP Professional
Tool Python 2.6 + IDLE
環境 2DK
質問 (40字以内)
検索 ぐぐる × やふー ×
   OKWave × 発言小町 △
189デフォルトの名無しさん:2010/05/11(火) 22:31:05
import sys
from ctypes import *
from ctypes.wintypes import *
GetStdHandle = windll.kernel32.GetStdHandle
GetStdHandle.argtypes = [c_int]
GetStdHandle.restypes = c_int
SetConsoleTextAttribute = windll.kernel32.SetConsoleTextAttribute
SetConsoleTextAttribute.argtypes = [c_int, c_int]
SetConsoleTextAttribute.restypes = c_int
SetConsoleCursorPosition = windll.kernel32.SetConsoleCursorPosition
SetConsoleCursorPosition.argtypes = [c_int, c_int]
SetConsoleCursorPosition.restypes = c_int
def cursor(h, y, x):
  SetConsoleCursorPosition(h, (y << 16) | (x & 0x0000FFFF))
def conattr(h, bg, fg):
  SetConsoleTextAttribute(h, (bg << 4) | (fg & 0x0F))
def puts(s):
  sys.stdout.write(s)
def cls(h, t, b, l, r, c):
  for j in xrange(t, b):
    for i in xrange(l, r):
      cursor(h, j, i)
      puts(c)
def beep():
  puts('\a')
h = GetStdHandle(-11)
cls(h, 0, 25, 0, 80, '.')
conattr(h, 1, 13)
cursor(h, 12, 30)
puts('abc')
cursor(h, 24, 0)
beep()
190デフォルトの名無しさん:2010/05/13(木) 09:08:55
オブジェクト指向のクラスのイメージが湧かない…Orz
みんpy買って読んでるけど意外にもわかりにくいな、この本
オレが頭悪いだけなんだろうなw

なんかオススメの入門書ってある?
191デフォルトの名無しさん:2010/05/13(木) 09:12:52
>>190
こだわらなくていい。オブジェクト指向信者はうざいだけなので。
192デフォルトの名無しさん:2010/05/13(木) 09:15:29
>>190
無理に湧かそうとしなくてもいいから安心すれ
Pythonでは名前空間や属性って考え方のほうがよっぽど大事だ
193デフォルトの名無しさん:2010/05/13(木) 09:31:09
>>190
無名の日本人が書いた本とIBMのサイトで記事を書いたりPythonの講習を何年間も行っている人が書いた本とどちらが良いと考えられるかは分かるんじゃない?
194デフォルトの名無しさん:2010/05/13(木) 09:43:16
>>193
前者ですねわかります
195デフォルトの名無しさん:2010/05/13(木) 10:01:43
虫が瞬殺されてて笑う(www
196デフォルトの名無しさん:2010/05/13(木) 12:06:39
>>192-195
ごめんなさい
超初心者なもんで勉強のしかたすらわからなくて…

無理にオブジェクト指向にこだわらなくてもいいんですな

197デフォルトの名無しさん:2010/05/13(木) 15:47:33
>>193
名無しのチンカスの言うことを信じる奴は居るの?
198デフォルトの名無しさん:2010/05/13(木) 15:53:19
>>196
そう、動いて読めればいいんですよ
199デフォルトの名無しさん:2010/05/13(木) 18:51:39
>>190
むしろPythonなんて、ほとんどのライブラリがオブジェクト指向だから
自然に覚えられないかな?

っていうより、オブジェクト指向でないものを知らないから、逆に
オブジェクト指向が何なのか分からないというのはあるかもしれんが。
200デフォルトの名無しさん:2010/05/13(木) 21:12:25
むしろPythonって、関数もオブジェクトだし、モジュールもオブジェクトだから、、、
っていうと、クラスとメソッドがオブジェクト指向と考えている人が混乱するなw
201デフォルトの名無しさん:2010/05/14(金) 00:53:07
いやーメソッドと関数をわけてみたらなんとなく頭の中で整理できてついでにオブジェクトがなんたるかが理解できてきた
202デフォルトの名無しさん:2010/05/14(金) 19:06:49
自分はなんとなくこれがオブジェクト指向かなとは思ってる気分でいるが全然違うかもしれない
203デフォルトの名無しさん:2010/05/14(金) 20:51:27
だがイテレータとかジェネレータとか出てきてまた混乱してきたwwww
204デフォルトの名無しさん:2010/05/14(金) 22:25:24
考えすぎて頭がイテレータ
205デフォルトの名無しさん:2010/05/15(土) 05:41:08
>>190
非オブジェクト指向から考えるといいよ。
例えば住所録の入ったcsvを読み込んで、XMLを吐き出すプログラムをライブラリを使わないで作る場合を考えると、
非オブジェクト指向だと

array = CSV読み込み(fileName)
addressList = アドレスリスト変換(array)
xml = XML生成(addressList)
書き込み(xml)

見たいにメインの入り口を作って、サブルーチンを作っていく感じになる。
またサブルーチンも、必要に応じてもっと細かいサブルーチンに分割していく。
単純明快で分かりやすく、短時間でちょっとしたツールを作るときは大抵このやり方になる。
まずはこのやり方を覚えてからオブジェクト指向の本を読めば、何が違うのかわかると思うよ。
206デフォルトの名無しさん:2010/05/15(土) 08:08:09
>>205
横からですまんがありがとう。つかマジ感謝
なんかこーなんだかあと少しで分かりそうな気がする
ちなみにそのXML吐き出すプログラムをオブジェクト指向でやるとするとどんな感じになるんでしょう?
救いの一手をざっくりでおねがいしまする
207デフォルトの名無しさん:2010/05/15(土) 09:36:59
>>206
# CSVを読み込んで任意のインスタンス変数に格納
xml = Foo(fileName)
# CSVを変換し任意のインスタンス変数に格納
Foo.アドレスリスト変換()
# XMLを生成して任意のインスタンス変数、self.xmlに格納
Foo.XML生成()
# 処理が終わったFoo.xmlを参照
書き込み(Foo.xml)

みたいな感じで処理を一つのクラスにまとめたりする
こういうのはコーダーによって違うからコード書いたり読んだりした方がいい
208デフォルトの名無しさん:2010/05/15(土) 10:07:17
これくらい短いとあんまりオブジェクトの恩恵ないような気がする
209デフォルトの名無しさん:2010/05/15(土) 10:08:27
例だw
210デフォルトの名無しさん:2010/05/15(土) 11:04:42
SmallTalkについてはどうなのか知らないが、少なくともC++とかLLとかに載ってるオブジェクト指向は
「こうあるべき」って理論から来てるんじゃなくて「こうできたら便利だよね」から来てる。

そこらへんを知らずに、いきなり「犬がワン、猫がニャー」の説明をされても分かるわけが無い。
まずはある程度プログラム組めるようになってからだと、すんなり受け入れられる。
そういう意味で>>205の考え方はすごくわかりやすい。
211デフォルトの名無しさん:2010/05/15(土) 13:44:59
>>206
設計は人それぞれだけど、1つ例を挙げるなら

addressList = AddressList(fileName)
xml = addressList.toXML()
xml.write(outputFileName)

こんな感じかな。
住所録っていう実在するもの(エンティティという)に対応したクラスを作って、
そのクラスに必要な操作を追加していく、って感じ。
プログラムの規模が大きくないと、メリットがあまり無いうえ、設計がキモで、
設計によって良いプログラム(再利用性が高い)にも糞にもなりうる。
他に継承やオーバーライドというキーワードがあるので調べておこう。

多少分かったら、次はポリモーフィズムやデザインパターンを勉強するといい。
これがオブジェクト指向が何たるを理解するための最短ルートだと思う。
212デフォルトの名無しさん:2010/05/15(土) 15:47:59
どんだけ横文字使いたいんだ
そういう気持ち悪いレスするから食わず嫌いがでるんだろ。
213デフォルトの名無しさん:2010/05/15(土) 15:55:09
206です
皆さん感謝
いやもうほんとなんか今ちょっと自分の中で何か分かりそうな
のどから手が出そうな感じになってます
これ見ながら参考書なんぞ片手にコード書きまくることにしまする
214デフォルトの名無しさん:2010/05/15(土) 16:10:06
>>211
デザパタはあくまでJavaのものだしなぁ。
C++とかじゃわりと使えるけど、Python的には使えないのも多い。

ポリモーフィズム(多態性)を継承によるものじゃなく、同じ方法でできるかどうかにまで拡張したのがダックタイピングだね。
オーバーライドは、Pythonみたいに変数(やメソッド名)が名前の束縛に過ぎず、ダックタイピングな考え方の言語では
特別なことしてるってよりはむしろ、普通の代入と同じ。


オブジェクト指向って言葉自体が抽象的なものだから、これがオブジェクト指向だ!ってのはない。
けど重要なのは、処理とデータをまとめてしまうこと、似たことは同じ方法でできるようにすること、
似たものを作るには、違う部分だけを作り直せばいいということ。
215デフォルトの名無しさん:2010/05/15(土) 16:19:18
>>212
この世界じゃ、横文字の単語が普通に使われてるから、知らないと
苦労するだけだよ。
しかも単語を日本語に直せば分かりやすくなるわけじゃないし。
↓みたいになっても分かりやすくはならないし、一般に使われていない
単語を使っても後々混乱するだけだよ。


住所録っていう実在するもの(実体という)に対応した級を作って、
その級に必要な操作を追加していく、って感じ。
算譜の規模が大きくないと、利点があまり無いうえ、設計がキモで、
設計によって良い算譜(再利用性が高い)にも糞にもなりうる。
他に継承や覆しという重要単語があるので調べておこう。

多少分かったら、次は多態性や設計類型を勉強するといい。
これが物指向が何たるを理解するための最短経路だと思う。
216デフォルトの名無しさん:2010/05/15(土) 16:25:56
直訳しかできない英語力でプログラミングするのはどうかと思う
217デフォルトの名無しさん:2010/05/15(土) 16:44:39
そんなに難しく考える必要ないよ
Pythonでは構造体やレコード型が無いし、そういうの使いたい時は
クラスだ
(まあ最近はnamed tupleってのがあるけど)

クラスはデータだけでなくデータの操作/手続きを一緒に持てるから、
そうしたほうが自然な手続きは一緒に持たせましょうというだけのことだ

逆に言えば、関数で構わないものは関数でいいんだよ
Pythonで必要も無いのにOOPにこだわる意味はゼロ
218デフォルトの名無しさん:2010/05/15(土) 21:07:52
>>215
煽りにも親切
219デフォルトの名無しさん:2010/05/15(土) 21:56:40
自演(w
220デフォルトの名無しさん:2010/05/15(土) 23:13:38
横文字なら各自好きに翻訳すれば大意は伝わる
犬がワン猫がニャーは翻訳しようがない
どちらがいいかと問われたら前者を推す
221デフォルトの名無しさん:2010/05/16(日) 03:32:45
自演(w
222デフォルトの名無しさん:2010/05/16(日) 12:32:05
今夜は自然薯でとろろ飯だな・・・
223デフォルトの名無しさん:2010/05/16(日) 16:36:54
アルファベットがいいならローマ字にすればいいじゃない
まさにCOBOL!
224デフォルトの名無しさん:2010/05/16(日) 18:09:10
自演(w
225デフォルトの名無しさん:2010/05/16(日) 22:43:25
import random
def testR():
return random.randint(1, 100)
class Test():
random.seed()
aaa = random.randint(1, 100)

a = testR()
b = testR()
c =Test.aaa
d =Test.aaa
print testR()
print testR()
print testR()
print a
print b
print testR()
print '-------'
print Test.aaa
print c
print d
print Test.aaa

seed()について質問です
def:今までseed置いてましたが今外してみると4つとも違う数字を吐く
初期化は不要ということでしょうか?

class:色んな所にseed置きましたがどの印字も同じ結果
(実行する度に違う乱数を吐く)
4つの結果を違うものにしたい場合何処にseedを置けば良いのでしょう
というかそもそも初期化の考え方が間違ってるのでしょうか?
226デフォルトの名無しさん:2010/05/16(日) 22:45:40
import random
def testR():
____return random.randint(1, 100)
class Test():
____random.seed()
____aaa = random.randint(1, 100)

インデントはこんな感じってことで
227デフォルトの名無しさん:2010/05/16(日) 23:17:49
>>225
randomはimportするときにrandom.seed()も実行されてるから初期化は不要
228デフォルトの名無しさん:2010/05/16(日) 23:30:09
>>227
そうでしたか
classのほうはclassを理解できてないからってことですかね
何から手を付けたらいいのかすら分からない状態でして
229デフォルトの名無しさん:2010/05/17(月) 15:05:59
質問です。
キーが全て整数の辞書dがあるとします。
ここでもしfor i in d:とやった場合、iにはキー値が小さい順に入る事が保証されてますか?
230デフォルトの名無しさん:2010/05/17(月) 15:20:35
no
試せば分かるだろ
231デフォルトの名無しさん:2010/05/17(月) 15:53:54
(i) < そんな大きいの・・・入りません・・・
232デフォルトの名無しさん:2010/05/17(月) 17:15:38
dictの取り出し順はランダムだと思って使う
順序関係が欲しいならsorted()に渡すなりなんなりする
2.7/3.1にはodictだかOrderedDictだかが入るらしい
233デフォルトの名無しさん:2010/05/17(月) 17:29:15
これで使いやすかった日にはnamedtupleちゃんの立場がなくなるのか
234デフォルトの名無しさん:2010/05/17(月) 17:33:48
namedtupleちゃんにはimmutableって存在意義があるだろ
235デフォルトの名無しさん:2010/05/17(月) 17:51:38
namedtupleちゃんはimmutableなこと自体に意義があるっていうか
順序保持する辞書のように使えることに意義があったんじゃないのか
本物が出てきたらお役ごめんだろう

と思うんだが素敵な使い方があるのかもしれない
236デフォルトの名無しさん:2010/05/17(月) 18:08:58
>>230
保証なしでしたか。
試してみたら順番に出てきたっぽかったので・・・

また別件なんですが、リスト内包で、例えば[str(i) for i in range(10)]とやると、このiは内包の外に出てきちゃうんですね。
内包はスコープ作ってくれた方が良いのに。
for i in...とやってるfor分の中でうっかりこんなことしたらおかしくなりました。
237デフォルトの名無しさん:2010/05/17(月) 18:20:16
>>227
228です
となるとseedというのはどういう時に使うのでしょう?
毎度違う乱数を得たいときに使うものだと思ってたのですがこの考え方は間違ってるのでしょうか?

なお、その後継承して新しいクラスを作って実行すればどうにか違う結果が出ました
どうにも遠回りな感じがするのですがこれ以外に解法はないんでしょうか
238デフォルトの名無しさん:2010/05/17(月) 18:32:56
>>237
横だが
> となるとseedというのはどういう時に使うのでしょう?
同じseedを与えると乱数を発生させたときにいつも同じ値が返る。
>>> import random
>>> random.seed(100)
>>> random.randint(1, 100)
15
>>> random.seed(200)
>>> random.randint(1, 100)
5
>>> random.seed(100)
>>> random.randint(1, 100)
15
>>> random.seed(200)
>>> random.randint(1, 100)
5
239デフォルトの名無しさん:2010/05/17(月) 19:07:30
Pythonの辞書はソートされて出てくるよ
240デフォルトの名無しさん:2010/05/17(月) 19:17:20
>>239
具体例
241デフォルトの名無しさん:2010/05/17(月) 19:17:31
>>238
自分もそのつもりでいたんですが
>>225において書いた通り
seedを置かなくてもdef testR():は呼び出す度に違う数字を返します
(自分はずっとseed置いて毎回初期化してるつもりでいました)

一方class Test():は何度呼び出しても同じ数字を返してきます
seedの置き場所がまずいのかそもそもなにか根本的に間違ってるのか

seed()はシステム時計から値をとるなら呼び出す度に違う数字になるかと思うのですが
242デフォルトの名無しさん:2010/05/17(月) 19:18:38
> python
Python 2.6.5 (r265:79096, Mar 19 2010, 21:48:26) [MSC v.1500 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> d = dict()
>>> d['a'] = 100
>>> d['z'] = 200
>>> d['b'] = 300
>>> d.keys()
['a', 'z', 'b']

('A`)
243デフォルトの名無しさん:2010/05/17(月) 19:59:48
デマ乙
>>> d['c'] = 400
>>> d.keys()
['a', 'c', 'z', 'b']
244デフォルトの名無しさん:2010/05/17(月) 20:07:18
>>242>>239に対してね

>>241
randomが生成する乱数の列は「決定論的」
例えばseed(1)で初期化したrandomは毎回同じ数列を返す

>>> import random
>>> random.seed(1)
>>> for i in range(10): print random.randint(1, 100),
...
14 85 77 26 50 45 66 79 10 3
>>> random.seed(1)
>>> for i in range(10): print random.randint(1, 100),
...
14 85 77 26 50 45 66 79 10 3

あとクラスの中の文はクラスオブジェクト生成時に「一度」実行される

>>> class Foo(object): print 'in Foo'
...
in Foo
>>> Foo()
<__main__.Foo object at 0x02567490>
>>> Foo()
<__main__.Foo object at 0x0256EF90>
245デフォルトの名無しさん:2010/05/17(月) 20:19:08
>>244
なるほど
非常にわかり易い解説ありがとうございます。感謝
246243:2010/05/17(月) 20:30:45
>>244
ゴメンよ
247デフォルトの名無しさん:2010/05/17(月) 21:50:11
プログラムすら初心者なんですが、最近ようやく勉強の仕方がわかりだした
文献も大事だけどウェブ上のほうが噛み砕いた説明をしてくれてる人が多いから初心者にもわかりやすい
248デフォルトの名無しさん:2010/05/17(月) 22:11:44
実際みんなのPython半分読んだけど、具体的に役に立つ事ができる気がしなかった(汗
仕事で使うわけではないから、諦めるのもありなんだけど・・・ただセンスないだけか・・・
まだ学習不足?
249デフォルトの名無しさん:2010/05/17(月) 22:34:34
みんなのPythonの著者のセンスがないだけ
250デフォルトの名無しさん:2010/05/17(月) 22:35:42
スクリプト言語なんて構えて勉強するほどのもんじゃないでしょ
○○作りたいって思いついたらライブラリカジってなれればいつの間にか身についてる
251デフォルトの名無しさん:2010/05/17(月) 22:42:23
だよな
趣味ならますますそうだわ
自分のペースで何作ってもいいんだから
本なんて読んでる暇があったら何か作ればいいのに
252デフォルトの名無しさん:2010/05/17(月) 23:00:24
>>248
センスが悪いと自分にレッテルを貼るのはやれることを全部やってからにしる

役に立つプログラムを書いてる連中だって
本一冊読んですぐ書けるようになったわけじゃないんだ
253248:2010/05/17(月) 23:01:28
マジですか
とっても参考になりました。
ありがとうございます。
基本的なルールだけは身につけて、あとはライブラリで頑張ります。
趣味なのでゆっくりじっくりとやってみます。
254デフォルトの名無しさん:2010/05/17(月) 23:01:50
虫が瞬殺されてて笑う(ww
255デフォルトの名無しさん:2010/05/17(月) 23:08:41
虫(バグ)は潰されるためにあるのです。
256デフォルトの名無しさん:2010/05/18(火) 00:06:28
RubyにPythonを仕込みたいのですがどうすればよいのでしょうか
257デフォルトの名無しさん:2010/05/18(火) 00:26:23
>>248
自分もみんパイは意味がわからなかったスw
多分著者にセンスがないw

ウェブ上で調べてみんパイ見て自分なりの解釈をする→自分なりにみんパイを元にいろいろ試してみる

を繰り返してボカァなんとか理解してきました

実際に何か作ってみたいんですけどねぇ・・・どんなことができるのかが分からないのが初心者でもアルんですw
258デフォルトの名無しさん:2010/05/18(火) 00:50:45
本を買うのは、買うこと自体がモチベーションになる人だけでいいよ
>>250みたいにとりあえず手を動かした方が早い
別に汚くても目的が達成できればいい
259デフォルトの名無しさん:2010/05/18(火) 00:57:43
虫が瞬殺されてて笑う(ww
260デフォルトの名無しさん:2010/05/18(火) 13:05:22
俺もwxpythonでオブジェクト指向の利便性を理解できたな
pygameなんか関数で作ってたけどクラスにした方が早かった
261デフォルトの名無しさん:2010/05/18(火) 14:55:50
学習と実践は別だよね。
Python以前の話ではないでしょうか。
262デフォルトの名無しさん:2010/05/18(火) 17:08:15
>>235
namedtupleは順序付き辞書の代わりじゃなくて、構造体の代わりだろ……
263デフォルトの名無しさん:2010/05/18(火) 23:27:44
関係ないけどみんpyってなんで評価されてんの?
こんな支離滅裂でまとまってない本が売れてる意味がわからん

日本語の文法おかしすぎすし
264デフォルトの名無しさん:2010/05/18(火) 23:56:53
Pythonの手ごろな入門書が手薄なところに
たのしいRubyと同じサイズの版型でソフトバンクから出したから
265デフォルトの名無しさん:2010/05/18(火) 23:59:58
>>263
評価されてるように見えるのは
著者の自作自演だからw
266デフォルトの名無しさん:2010/05/19(水) 00:26:04
>>263
>日本語の文法おかしすぎすし
>日本語の文法おかしすぎすし
>日本語の文法おかしすぎすし
>日本語の文法おかしすぎすし
>日本語の文法おかしすぎすし
>日本語の文法おかしすぎすし
267デフォルトの名無しさん:2010/05/19(水) 00:27:17
虫が瞬殺されてて笑う(www
268デフォルトの名無しさん:2010/05/19(水) 00:29:48
日本語の文法がおかしすぎすキチガイはjava-jaとか勉強会詐欺に騙されてろ(WW
269デフォルトの名無しさん:2010/05/19(水) 00:40:40
しゃれの解らん人が多すぎてw
そんなに>日本語の文法おかしすぎ寿司を連発しなくてもいいですよw

日本語の文法→おかしすぎ寿司で…まぁいいや
アホは揚げ足と言葉遊びの区別がつかんのだろうからw

そんなこと指摘されると思ってなかったから度肝抜かれた感100ですわw
270デフォルトの名無しさん:2010/05/19(水) 00:42:04
虫が言い訳してて笑う(ww
271デフォルトの名無しさん:2010/05/19(水) 00:44:42
キチガイは詐欺価格のケーブルでも売ってろ(wWwwwWWwww
272デフォルトの名無しさん:2010/05/19(水) 01:21:19
勉強会詐欺とかいう単語、こことお勉強スレでしか見ないんだけど、
誰か1人が頑張ってFUDしているようにしか見えない。
273デフォルトの名無しさん:2010/05/19(水) 01:23:43
虫虫言ってるアホとキチガイしか言えないアホ

以上をremoveメソッドで味わってください
274デフォルトの名無しさん:2010/05/19(水) 01:24:45
ガチ初心者が見たら気持ち悪がるから本スレでやっておくれ
275デフォルトの名無しさん:2010/05/19(水) 01:42:13
うん、キモいね。
276デフォルトの名無しさん:2010/05/19(水) 01:48:48
java-jaの出番が訪れたようだな・・・
277デフォルトの名無しさん:2010/05/19(水) 02:01:44
このスレはガベージコレクション内蔵してないの?
278デフォルトの名無しさん:2010/05/19(水) 13:25:14
>>273
>以上をremoveメソッドで味わってください

日本語がジューシーすぎる。
279デフォルトの名無しさん:2010/05/19(水) 20:09:58
enumerateって、どんな時に使うと便利なの?
280デフォルトの名無しさん:2010/05/19(水) 20:28:49
foo = ["bar", "baz", "bax"]
for f, i in zip(foo, range(len(foo))):
  print f, i

enumerate使うとスッキリする
281デフォルトの名無しさん:2010/05/19(水) 23:01:48
emumerate使ってないがな!
282デフォルトの名無しさん:2010/05/19(水) 23:14:36
>>281
俺は>>280じゃないけど
>>280のコードをenumerate使って書き直すとスッキリ書けるよ、ということだよ
283デフォルトの名無しさん:2010/05/20(木) 19:05:33
すみません。ここで聞いていいことかどうか分かりませんが、教えてください(ご誘導ください)。
利用サーバー:さくらインターネット プレミアム(さくら質問スレよりここへ来ました。)

SSH接続して、サイトマップを生成しています。(cronでも毎日一回実行)
<こちらを参考にしました>http://senrioka-info.net/0_google_sitemap/sitemap_generator.htm

python sitemap_gen.py --config=config.xml

ところが、冒頭に警告メッセージが出るようになりました。ただし、サイトマップは生成できます。
sitemap_gen.py:65: DeprecationWarning: the md5 module is deprecated; use hashlib instead import md5

「md5モジュールは非推奨で、代わりにhashlibを使いなさい」ということだと思うのですが、
具体的にどうすればよいのでしょうか?
確かに、sitemap_gen.pyの65行目には、import md5とあります。

今までずっと気付きませんでしたが、
過去のcronメールを見ると、2009/6/25以降からずっとこの警告メッセージが冒頭につくようになっていました。
サーバーの仕様が変わったのかもしれませんが、よく分かりません。
サイトマップ自体の生成に問題はないような気もしますが、警告が毎回出るのはすっきりしません。

よろしくお願いします。
284デフォルトの名無しさん:2010/05/20(木) 19:21:42
import md5 -> import hashlib
md5.new(...).digest() -> hashlib.md5(...).digest()

-> の左を右に変えればたぶん動く
よくわかんなかったら親切な人がパッチくれるのを待って
285デフォルトの名無しさん:2010/05/20(木) 19:25:05
import hashlib as md5
ですべて解決
286デフォルトの名無しさん:2010/05/20(木) 19:39:53
しないぞ
hashlibとmd5じゃnewの引数がぜんぜん違う
287デフォルトの名無しさん:2010/05/20(木) 20:07:17
>>283
問題は解決されないけど、とりあえずエラーをしかとする方法
http://stackoverflow.com/questions/879173/how-to-ignore-deprecation-warnings-in-python
288デフォルトの名無しさん:2010/05/20(木) 20:23:17
じゃあ>>285
md5.new = md5.md5
を追加
289デフォルトの名無しさん:2010/05/20(木) 21:21:19
déjavèw?
290デフォルトの名無しさん:2010/05/23(日) 23:07:10
pyscripter1.9.9.7の補完リストのフォントを変更する方法ってわかる方いますか?

できればフォントサイズだけでも大きくしたいんですが…
291デフォルトの名無しさん:2010/05/28(金) 09:40:27
292デフォルトの名無しさん:2010/05/28(金) 11:59:53
デストラクタが呼ばれることと、
名前が無効になることは別問題だな。

デストラクタがやりたいなら少々面倒だが、with statement という構文がある。
名前束縛を消したいならちょっと上で出てる del を明示的に使うしかないかな。
Pythonのスコープはグローバルと関数内ローカルの2つしか無かったと思う。
(クラスメンバはどうだったか忘れた)。
少なくともブロック全てがスコープになるC++と同じにはできない。
293デフォルトの名無しさん:2010/05/29(土) 12:10:43
リバースエンジニアリング ―Pythonによるバイナリ解析技法が欲しい
294デフォルトの名無しさん:2010/05/29(土) 13:29:38
import re
re.search = 'uhouho'

のように書くとモジュールの中身を破壊できてしまいますが、こういう仕様なんですか?
ちょっと怖いです。
295デフォルトの名無しさん:2010/05/29(土) 13:52:55
そんなもんです。書き換える方がおかしいので
296デフォルトの名無しさん:2010/05/29(土) 17:29:12
モジュールの中身を書き換えるというのはおかしい。
Pythonの現行プロセスのみだよ、それが有効なのは。
reload すれば元に戻る。
297デフォルトの名無しさん:2010/05/29(土) 18:55:40
変更されんの?
モジュールオブジェクトが属性の書き換えを禁止してないだけ
すんなの一言で済むから妙な実装しなかっただけだと思ってる
298デフォルトの名無しさん:2010/05/29(土) 19:25:24
>>294
どこが「怖い」のか良く分からない
自分で外部モジュールをインポートしておきながら、
事故やミスでそのモジュールの属性を上書きするようなコードを記述することは
無いと思うんだが

意図的だとして、そういうこと(モンキーパッチ)が「出来る」のは普通に便利だぞ
例えばeventletは、そうやって組み込みのソケットやそれを利用するライブラリに
実行時パッチを当てて、ソケット操作を非同期でコルーチン上で実行するように
している
299デフォルトの名無しさん:2010/05/29(土) 19:40:54
だったらその辺のモジュールファイルを全部読み取り専用にしたらどーなんだろ
300デフォルトの名無しさん:2010/05/30(日) 03:30:30
>>294 が ruby の Rails なんか見た日には卒倒するだろうな
301デフォルトの名無しさん:2010/05/30(日) 09:38:50
rubyは言語の中身を破壊できてしまうのでpythonより上。
302デフォルトの名無しさん:2010/05/30(日) 10:11:40
del __builtins__
dir() # NameError
303デフォルトの名無しさん:2010/05/30(日) 18:34:52
誘導されたんだけど、
Ubuntu10.04なんだけど

最初 django-admin.py startproject xxxx が実行できなくて
しょうがないから PATH 通して実行したんだけど
今度は作成したプロジェクトフォルダで manage.py runserver ってやっても
実行できない
これって何が原因なの?Pythonスレで聞くような事じゃ無いのかもしれないけど
なんか設定必要?
304デフォルトの名無しさん:2010/05/30(日) 18:47:17
django使ってる人ってなんでこんなにバカっぽいの?
305デフォルトの名無しさん:2010/05/30(日) 19:06:16
>>303
どんなエラーが出てるか略さずに書いた方がいいよ
306デフォルトの名無しさん:2010/05/30(日) 19:08:32
>>303
Pythonルートとsite-packagesのPATH通して.pyに関連付けしてあるか確認しろ
307デフォルトの名無しさん:2010/05/30(日) 19:31:33
Djangoスレあるよ
過剃ってるけど

【Python】Webフレームワーク Djangoスレ Part1
http://pc11.2ch.net/test/read.cgi/php/1156612854/
308デフォルトの名無しさん:2010/05/30(日) 19:33:21
2006年のpart1(x
まぁpygameよりはマシか
309デフォルトの名無しさん:2010/05/30(日) 22:41:15
>>303
質問するときには、「エラー」とか「動かない」とかだけじゃだめ。
実際に実行したコマンドと、表示されたエラーメッセージをそのままコピペして。
310デフォルトの名無しさん:2010/05/30(日) 23:58:34
BlenderでPythonを使いたいのですが
おすすめの解説サイトなどございませぬでしょうか。
わたくしは、Blenderのコマンドをどうやって調べるのかすら知らない程の初心者ですが
宜しくお願い致します。
311310:2010/05/31(月) 00:04:40
大変申し訳ございませんでした↓↓
blenderのスレに行って自己解決しました↓↓
何も考えずにレスしてしまってごめんなさい↓↓
312デフォルトの名無しさん:2010/05/31(月) 00:08:06
↓↓
313デフォルトの名無しさん:2010/05/31(月) 00:08:27
どういたしまして↑↑
314デフォルトの名無しさん:2010/05/31(月) 00:10:53
↑↑↓↓←→←→
315デフォルトの名無しさん:2010/05/31(月) 00:13:54
ニア必殺技
←→←
キー入力ミス!
316デフォルトの名無しさん:2010/05/31(月) 00:17:38
blenderってネーミングがかっこいいわ
317デフォルトの名無しさん:2010/05/31(月) 00:21:36
planterみたいでかっこわるい
蘭のプランター、なんつって
318デフォルトの名無しさん:2010/05/31(月) 10:33:57
蘭のプランター

何それかっこいいいいいいいいいい!!!!!!!!!!!!
319デフォルトの名無しさん:2010/05/31(月) 17:03:55
Pythonダウンロードしました。
最初に打つ基本的なコードを幾つか教えてください!
320デフォルトの名無しさん:2010/05/31(月) 17:12:53
import this
321デフォルトの名無しさん:2010/05/31(月) 17:43:18
>>320
やって見ました!!もう感動です!
ありがとうございます。
322デフォルトの名無しさん:2010/05/31(月) 19:16:09
a = [[0] * 5] * 5
a[0][0] = 1
print a

実行結果
[[1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0], [1, 0, 0, 0, 0]]

これが納得いきません
普通の2次元配列なら[0][0]の要素だけが1になるはずだし
*で単純にコピーされてるなら全部1になるはずですよね?
323デフォルトの名無しさん:2010/05/31(月) 19:24:19
自分で分かってるじゃん

aはリストのリストであって2次元配列ではないし
*はディープコピーは行わないから、そうなるんだよ
324デフォルトの名無しさん:2010/05/31(月) 19:27:07
>>> a = [[[]] * 5] * 5
>>> a[0][0].append(1)
>>> print a
[[[1], [1], [1], [1], [1]], [[1], [1], [1], [1], [1]], [[1], [1], [1], [1], [1]], [[1], [1], [1], [1], [1]], [[1], [1],
[1], [1], [1]]]
325デフォルトの名無しさん:2010/05/31(月) 19:53:19
んむむ…
326323:2010/05/31(月) 20:20:25
よく読んでなかったw
それ、本質的には以下と同じだよ

a = 0
b = a
a = 1
(bは0のまま)

a = [ 0 ]
b = a
a[0] = 1
(b[0]は1になる)

a = [ 0 ]
b = a
a = [ 1 ]
(bは変わらず)
327デフォルトの名無しさん:2010/05/31(月) 20:29:28
理解するには図を書くといいとおもう
a -> [ b, b, b, b, b ]
b -> [ c, c, c, c, c ]
c -> 0
こうなってるのが、

a -> [ b, b, b, b, b ]
b -> [ d, c, c, c, c ]
c -> 0
d -> 1
こうなる
328デフォルトの名無しさん:2010/05/31(月) 20:35:50
a = [[0] * 5 for _ in range(5)]
これでよくね?
329デフォルトの名無しさん:2010/05/31(月) 21:12:47
どっちを値渡し・参照渡しと呼ぶべきかいつも一瞬わかんなくなる…
330デフォルトの名無しさん:2010/05/31(月) 21:17:30
>>> x = [ set()] * 5
>>> x
[set([]), set([]), set([]), set([]), set([])]
>>> x[0].add(1)
>>> x
[set([1]), set([1]), set([1]), set([1]), set([1])]
331デフォルトの名無しさん:2010/05/31(月) 21:26:38
仕方ないから
b = [[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0],
[0, 0, 0, 0, 0]]
これ使います
332デフォルトの名無しさん:2010/05/31(月) 21:27:37
行列計算みたいなのやりたければ
numpy超オススメ
無理に標準のlistでやることないよ
333デフォルトの名無しさん:2010/05/31(月) 22:06:58
>>329
Pythonは全て参照渡し
変更不能オブジェクトなら>>322の(a[0][0] = 1)とかできないから
問題が起きないだけ
334デフォルトの名無しさん:2010/05/31(月) 23:49:09
入門書嫁。
335デフォルトの名無しさん:2010/05/31(月) 23:50:39
チュートリアルの該当ページのURL貼ってよ
336デフォルトの名無しさん:2010/06/01(火) 00:00:53
>>333
それどこに書いてあったのか教えてくれ
intに収まる範囲なら即値でやってると思うんだが
337デフォルトの名無しさん:2010/06/01(火) 00:06:11
intobject.c
338デフォルトの名無しさん:2010/06/01(火) 01:11:47
うーむ横からだが
上の話でなんとなく理解した気でいたが
>>>a = [[0] * 5] * 5
>>>a[3][4]=5
>>>a
[[0, 0, 0, 0, 5], [0, 0, 0, 0, 5], [0, 0, 0, 0, 5], [0, 0, 0, 0, 5], [0, 0, 0, 0, 5]]
なんでこーなるのかが分からん
list index out of rangeならまだ何となく納得出来るんだが
339デフォルトの名無しさん:2010/06/01(火) 01:30:30
>>> map(id, a)
340デフォルトの名無しさん:2010/06/01(火) 01:54:53
>>338

>>>a = [[0] * 5] * 5

>>>b = [0] * 5
>>>a = [b] * 5

>>>a[3][4]=5

>>>b[4] = 5
341デフォルトの名無しさん:2010/06/01(火) 04:10:32
>>339
なんか混乱したけどなんかわかってきた!
>>340
なるほど納得トン

なんかややこしいなあw
結論としては俺もnumpy入れるわ
342デフォルトの名無しさん:2010/06/01(火) 04:23:54
Enthought Python Distribution入れてるから重いのかな
343デフォルトの名無しさん:2010/06/01(火) 09:28:05
全くのプログラミング素人なのですがPythonを勉強してみようと思い、
チュートリアルの和訳や書籍「初めてのPython」を読み始めてから
いろいろ調べてみますと、Pythonに関わらず言語の習得前には
C言語の習得が基本のような気がしてきました。
遙か以前、学生の頃購入し挫折したC言語の入門書を開いてみたのですが、
どの程度までC言語を勉強したあとPythonに移行すれば良いのでしょう?

Python等はメモリ管理や変数の型など、C言語に比べ自動化されて
便利になっているが、初心者はC言語によるPCの動作原理を知っておけと言う
意味だと解釈しているのですが・・・
344デフォルトの名無しさん:2010/06/01(火) 09:50:40
無理にC言語を覚えるのもあれだけど
PCのリソース関連だったり基本的な仕組みくらいは知っておいた方がいい
もしC言語やってからPythonに挑みたいなら、構造体あたりまでは学習した方がいい。
なぜならそこら辺まではPythonにも似てる所が結構あるし、C言語より使い易くて感動したりできる。
345デフォルトの名無しさん:2010/06/01(火) 10:35:14
>344

なるほど、構造体ですか。
手持ちの入門書の最終章一つ前が構造体の章でした。
とりあえずC言語の入門書一冊分を読んで理解できてから
Pythonを勉強してみようと思います。
レスありがとうございました。
346デフォルトの名無しさん:2010/06/01(火) 14:45:32
効率の良いプログラムを書くのにメモリのことを把握しておいた方が良い
それで静的型付けでポインタもあるCの学習は最適
でもPHPやJavascriptの方が見た目はCっぽい
347デフォルトの名無しさん:2010/06/01(火) 16:07:37
買う本間違えると,遠回りをするだけでなく変な虫まで付いてくるという例。
348デフォルトの名無しさん:2010/06/01(火) 17:45:02
>>343
「プログラミング言語C」
この一冊マスターしとけばオケ。
349デフォルトの名無しさん:2010/06/01(火) 17:49:25
普通PythonなんてASMやらCやらJAVAやらマスターしてから使うよな。
350デフォルトの名無しさん:2010/06/01(火) 18:22:24
マスターはしなくてもいいと思うがその言語での考え方とかは知っておいたほうが良いよね。
351デフォルトの名無しさん:2010/06/01(火) 18:45:43
プログラム言語全般に言えることだろ
使えないより使えた方がいいし、たまに応用の知識も得られてお得
352デフォルトの名無しさん:2010/06/01(火) 20:37:42
別にCやってからPythonじゃなくて
いきなりPythonで良いと思うが
Cも理解出来ないような頭じゃ
遅かれ早かれPythonでも挫折するだろうな
353デフォルトの名無しさん:2010/06/01(火) 20:43:52
Rubyでいいよ
354デフォルトの名無しさん:2010/06/01(火) 20:58:14
>>348
K&Rを初心者に勧めるのはやめたほうがよさげ。
あれの場合Unixの知識まで必要になるし、内容も初心者向けではない。
355デフォルトの名無しさん:2010/06/01(火) 21:05:04
なるほど、勉強になる
オレもCから入ることにする
356デフォルトの名無しさん:2010/06/01(火) 21:23:06
Pythonの本って読んだこと無いんだけど、あんましっかり書かれた本が無いのかね
昨日の>>322のような問題は、他言語経験者なら簡単に理解できるだろう
(ポインタや参照型、といった概念を通して)

でもPythonでプログラミングに触れる本物の初心者が理解するには、
Lispの本でよく出てくるconsセルのボックス表記みたいな図を通して
Pythonの変数とオブジェクトのモデルを理解させる必要があるように思う

そういうしっかりした学習ルートが無いのなら、確かに他の言語から入ったほうが
近道かも知れないね
357デフォルトの名無しさん:2010/06/01(火) 21:27:35
いや、Cから入るのは多分望ましくない気がする。

Cで「コンピュータ・アーキテクチャ」を知っておくというのならお勧めできるのだが。

『プログラムはなぜ動くのか』という本にあるような事柄を知るためにね。

まあ、PythonとCを並行して勉強するのが理想なのかもしれない。

358デフォルトの名無しさん:2010/06/01(火) 21:27:46
前の質問を引き合いに出すとかタチ悪いわ
359デフォルトの名無しさん:2010/06/01(火) 21:42:18
>>356
その辺りのことは、

『初めてのPython』http://www.amazon.co.jp/dp/4873113938
の「6章 ダイナミックな型付け」に図も含めて詳しく書かれてあった。


360デフォルトの名無しさん:2010/06/01(火) 21:45:01
>>357
こういう風にやたらと改行するやつなんなの?
361357:2010/06/01(火) 21:48:52
>>360
すまん。普段折りたたみ表示で書いているので、コピペミスでこうなった。
362デフォルトの名無しさん:2010/06/01(火) 22:12:25
>>359
ありがとう、その辺がちゃんと書いてあるんなら、問題ないかも知れないね
363デフォルトの名無しさん:2010/06/01(火) 23:43:47
ありゃー…wxPythonの日本語解説サイト消えちゃったのか…
364デフォルトの名無しさん:2010/06/02(水) 02:49:21
>>360
空行が多いのは、ほぼ携帯と思っていい
365デフォルトの名無しさん:2010/06/02(水) 02:53:48
       /:::/::::::::;: --- 、:::::::::|::::::::ヽ
        |::::|:::::::├――┤:::::::l::::::::::|
        |:::」.ィ ┴――┴‐- L::::::::|
       |´ : | , -‐ 、   ‐- 、| `T ト、     ありゃー
       l: : : |{  じ   じ  }: : :V::::::}     解説サイトとうとう死んじゃったのか・・・
        〃!: : | ー      ー | i: : }_/
      / |:i ; | u   '     jイ : ハ
          l:ト、:ト .  ^TTIト .イ/: /: :ヽ
       | ヾ ィ>イl川´}∨∠ェー ´
       _.. ヘ ヽ 川||/  ハー- ._
    , ィ''´    }  ンrtく  {      /ヽ
   /  l 、\ {_/ |o| \_}     /  ,
   {、 l  >--\   |o|     、 ,′   、
   ハ_} / _二ヽ \ Ll       V/     ヽ
   {  /   -- 、ン‐ヘ         {i   __}
   に7  ‐ァ-一'’_¨二\二二¨ `Y⌒ヾ_-―‐ノ
  //  /ヽ、<´ ミ=三ゝ=ミ `>ノ ノ  `ヽ |
366デフォルトの名無しさん:2010/06/02(水) 08:57:19
>>356
間接参照の概念の理解という点に関しては、、Cが一番理解しづらい(というか面倒くさい)と思う。
ポインタの本はいっぱい出てるのに間接参照の本が出てるのは見たことがない。
ポインタには余計な機能がいっぱいついてる分、理解しづらい側面があるんだろう。
367デフォルトの名無しさん:2010/06/02(水) 15:06:09
機械語の知識があれば一目瞭然だからだろ
368デフォルトの名無しさん:2010/06/02(水) 16:12:12
まあ具体的物理的メモリレイアウトの理解無しでは結局Cのコードは書けんし
そういう意味でアセンブラからやった方が早いぜと考える人は多いかも知れんね
別にCから入るのも「無理」ではないけど
Cの場合は具体と抽象の両面を理解する必要がある
369デフォルトの名無しさん:2010/06/02(水) 17:30:13
いや、普通はCから入るから。識者ぶって意味不明なこと言わないように
370デフォルトの名無しさん:2010/06/02(水) 18:11:59
別に意味不明なことは書かれてないようだが?

まあ、たしかに電子系・組み込み系の人なら普通はCからだろうね。
あと、段階的にカリキュラムを進めていける大学の授業とか
(それでもあのMITとかでも最近はPythonから教えるみたいだけど)。

それにしても、(超?)初心者用にしては厳しすぎる
コメントが多いなあこのスレって。
こんなんじゃ>>353みたいなのに客を取られてしまうぞ。


371デフォルトの名無しさん:2010/06/02(水) 18:16:14
本スレ(?)が荒らされてるから
初心者以外がここで暇つぶしてるんでしょ
372デフォルトの名無しさん:2010/06/02(水) 18:20:31
実際、日本の初心者はRubyで良いよ。MITで教えるとか言ってる方が寒いから
373デフォルトの名無しさん:2010/06/02(水) 18:36:44
プログラミング自体初心者で日本語しか読めない人はそうかもね
374デフォルトの名無しさん:2010/06/02(水) 18:37:52
    R    し!     _  -── ‐-   、  , -─-、 -‐─_ノ  R
  小 u     // ̄> ´  ̄    ̄  `ヽ  Y  ,  ´     )  u え
  学 b     L_ /                /        ヽ  b  |
  生 y     / '                '           i y  マ
  ま が    /                 /           く !? ジ
  で 許    l           ,ィ/!    /    /l/!,l     /厶,
  だ さ   i   ,.lrH‐|'|     /‐!-Lハ_  l    /-!'|/l   /`'メ、_iヽ
  よ れ   l  | |_|_|_|/|    / /__!__ |/!トi   i/-- 、 レ!/   / ,-- レ、⌒Y⌒ヽ
  ね る   _ゝ|/'/⌒ヽ ヽト、|/ '/ ̄`ヾ 、ヽト、N'/⌒ヾ      ,イ ̄`ヾ,ノ!
   l の  「  l ′ 「1       /てヽ′| | |  「L!     ' i'ひ}   リ
    は   ヽ  | ヽ__U,      、ヽ シノ ノ! ! |ヽ_、ソ,      ヾシ _ノ _ノ
-┐    ,√   !            ̄   リ l   !  ̄        ̄   7/
  レ'⌒ヽ/ !    |   〈       _人__人ノ_  i  く            //!
人_,、ノL_,iノ!  /! ヽ   r─‐- 、   「      L_ヽ   r─‐- 、   u  ノ/
      /  / lト、 \ ヽ, -‐┤  ノ  キ    了\  ヽ, -‐┤     //
ハ キ  {  /   ヽ,ト、ヽ/!`hノ  )  モ    |/! 「ヽ, `ー /)   _ ‐'
ハ ャ   ヽ/   r-、‐' // / |-‐ く    |     > / / `'//-‐、    /
ハ ハ    > /\\// / /ヽ_  !   イ    (  / / //  / `ァ-‐ '
ハ ハ   / /!   ヽ    レ'/ ノ        >  ' ∠  -‐  ̄ノヽ   /
       {  i l    !    /  フ       /     -‐ / ̄/〉 〈 \ /!
375デフォルトの名無しさん:2010/06/02(水) 18:38:28
>>370
お前こそ2ch初心者か?ここは合わなさそうだな、さっさと出て行け。
376370:2010/06/02(水) 19:13:12
>>371
そうか。教えてくれてありがとう。

>>375
すまん。書き込み内容が寒い、ここに合わないことは確かだ。
いや、初心者ではないのだが久々だったので。
さっさと出て行くことにする。どうか、これ以上荒れないように頼む。
377デフォルトの名無しさん:2010/06/02(水) 19:21:57
本スレでやれ
378デフォルトの名無しさん:2010/06/02(水) 19:52:55
とりあえずみんなのPythonだけは超初心者には意味が解らなかった
オライリーの初めてのPythonのほうがまだ意味が解る
379デフォルトの名無しさん:2010/06/02(水) 21:28:29
チュートリアルはC++知らなかったら多分投げてた
380デフォルトの名無しさん:2010/06/02(水) 21:32:21
>>333

じゃあこれは嘘書いてるの?

The actual parameters (arguments) to a function call are introduced
in the local symbol table of the called function when it is called; thus,
arguments are passed using call by value (where the value is always
an object reference, not the value of the object).

http://docs.python.org/tutorial/controlflow.html
381デフォルトの名無しさん:2010/06/02(水) 21:58:12
>>380
文脈的に、どうみても関数呼び出しとは何の関係も無い話だったから
「全ての型が参照型である」というつもりの話なんだろうと
スルーしてたな俺は

関数呼び出しは参照渡しか値渡しかで言えば勿論値渡しが正しいけど
参照型の値渡しって独特だから
call by sharingとかいう呼び方もあるみたいだね
ttp://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_sharing
382デフォルトの名無しさん:2010/06/02(水) 23:28:38
いわゆる「すべてはオブジェクト」ってやつだろ
383デフォルトの名無しさん:2010/06/03(木) 03:54:11
参照を理解している人 = >>7を理解できる人
384デフォルトの名無しさん:2010/06/03(木) 13:05:53
>>383 はヤレば出来る子
385デフォルトの名無しさん:2010/06/03(木) 13:31:58
>>7
map(add, it, it)
>it.next() + it.next()
ab
cd
ef
gh
>StopIteration

どこに参照がでてくるの?
386デフォルトの名無しさん:2010/06/03(木) 13:49:20
>>> map(operator.add, it, it)
['ab', 'cd', 'ef', 'gh']
>>> map(operator.add, iter('abcdefgh'), iter('abcdefgh'))
['aa', 'bb', 'cc', 'dd', 'ee', 'ff', 'gg', 'hh']
387デフォルトの名無しさん:2010/06/03(木) 13:51:17
>>385
>>383ではないが
itと、mapに渡ってくる第2、第3実引数が同じオブジェクトインスタンスを
「参照」してるから、そういう動きになるんだろ
388デフォルトの名無しさん:2010/06/03(木) 15:05:05
Python使うとなんでも参照になっちゃうな
この程度なら小学生でもわかるだろうし、いちいち意識してたらやってられんぞ
389デフォルトの名無しさん:2010/06/03(木) 15:26:35
薄いCのラッパーで参照が絡むとイケてないよね
390デフォルトの名無しさん:2010/06/03(木) 21:55:36
>>385はあんまり分かっていない子
391デフォルトの名無しさん:2010/06/03(木) 23:52:05
俺は分かっている子!
そう思っていた時期が(ry
392デフォルトの名無しさん:2010/06/04(金) 00:43:40
import csv
reader = csv.reader(file("a.csv", "rb"))
for name, body in reader:
 print name, body

csvモジュールを使ってcsvファイルからデータを読み込んでprintするプログラムですが、
130行以上のファイルだと下記のエラーが出ます。

ValueError: too many values to unpack

130行以上のcsvファイルの場合はどう対処すればいいんでしょうか?
393デフォルトの名無しさん:2010/06/04(金) 00:51:58
んー、それは129行ずつに分割するしかないなー
394デフォルトの名無しさん:2010/06/04(金) 00:55:08
130行以上でなくてa.csvの130行目が2要素以上あるんでしょ
for row in readerみたいに一つの変数で受けて len でチェックすれば?
395デフォルトの名無しさん:2010/06/04(金) 01:29:10
>>394
ありがとうございます。
ちゃんと確認したらcsvファイルの130行目のデータが間違った形式になってました。
直したら問題なく処理できました。
396デフォルトの名無しさん:2010/06/04(金) 07:50:00
>>393はあんまり分かっていない子?
397デフォルトの名無しさん:2010/06/04(金) 08:33:11
お前はなんも分かってないおっさん
398デフォルトの名無しさん:2010/06/04(金) 09:29:19
>>397
そんな顔真っ赤にすんなよw
399デフォルトの名無しさん:2010/06/04(金) 12:11:33
>>383辺りから馬鹿な流れ作ってる奴なに?>>7本人?
400デフォルトの名無しさん:2010/06/04(金) 12:37:18
別に7は単純なコードだけどとても参考になるのは違いない
だからといって強引に流れに絡めるのは低脳Ruby厨に違いない
401デフォルトの名無しさん:2010/06/05(土) 09:41:09
>>383 = >>11こそが真理。本人が言うんだから間違いない。
402デフォルトの名無しさん:2010/06/05(土) 10:37:16
>>11からずっと>>7にこだわってるわけ?いい加減にしてくれ
403デフォルトの名無しさん:2010/06/05(土) 11:17:54
こだわってるわけじゃなく深い感銘を受けたってことじゃないの
404デフォルトの名無しさん:2010/06/05(土) 12:11:18
>>402
そこから400近くなるまで、ずっと出てこなかったのに?
関連してる話が出てきたら、前の方で出た良レスを引っ張ってくるのはごくごく当たり前のこと。
405デフォルトの名無しさん:2010/06/05(土) 12:53:07
じゃあ>>7をテンプレ化して次スレにも貼りつけることだな
406デフォルトの名無しさん:2010/06/05(土) 14:14:00
>>405
お前自分で言ってることがおかしいってわかってるんだろw
それともあれか>>385あたりの理解できずに文句いわれた人?
だったら完全にお門違いだろ

>>399
別に馬鹿な流れじゃない
むしろ今こそ馬鹿な流れだ
407デフォルトの名無しさん:2010/06/05(土) 14:29:01
○○は出来る子とか○○は理解してる人とか、つまりいかにも自画自賛する幼稚な流れを馬鹿だと言ったんだが
408デフォルトの名無しさん:2010/06/05(土) 14:38:05
おまいらほかでやってくれよ
409デフォルトの名無しさん:2010/06/05(土) 14:40:27
本スレが腐り過ぎてこっちにも浸食してきたか
410デフォルトの名無しさん:2010/06/05(土) 14:50:45
いろんな言語のスレあるがpyてょnは間違いなくひどい部類だな
天下のググるが使ってるって本当なのかと疑いたくなる
411デフォルトの名無しさん:2010/06/05(土) 14:54:34
まずは自分の頭がひどくないかを考えてみた方が良いよ
412デフォルトの名無しさん:2010/06/05(土) 15:08:50
Ruby最強ということでFA?
413デフォルトの名無しさん:2010/06/05(土) 15:10:52
それはない
414デフォルトの名無しさん:2010/06/05(土) 15:11:33
つーか結局、このスレを荒らしてた奴はRuby厨かよ。敵対心強過ぎw
415デフォルトの名無しさん:2010/06/05(土) 15:29:57
ここで颯爽とjava-jaが登場
416デフォルトの名無しさん:2010/06/05(土) 19:24:40
java-jaって何?
417デフォルトの名無しさん:2010/06/05(土) 19:26:51
そういうコミュニティがあるんだが
まあ気にするな
418デフォルトの名無しさん:2010/06/05(土) 19:37:24
ジャバじゃ
419デフォルトの名無しさん:2010/06/05(土) 19:43:27
ジャルーザダマジャの兄さんかなんかじゃね
420デフォルトの名無しさん:2010/06/05(土) 19:49:29
Come Cleanの人か
なつかしいな
421デフォルトの名無しさん:2010/06/07(月) 00:42:26
pygameを使いたいんだけど。
idle ではコード補完が利いたり効かなかったりするんですけど
pygame. の後に候補が出てほしい
わかるひとおしえてください
422デフォルトの名無しさん:2010/06/08(火) 18:21:06
はじめまして 他言語からPythonをちょっとかじってつまづいてます。

def get_location():
if self.is_gps:
str = 'これはGPS'
else:
str = 'これはGPSなし'
return str

def is_gps(self):
list = ('841SHs','942SH','943SH')
return self.model in list

のような関数を内蔵したクラスを外部から呼んでmodelに'V801'を代入してからget_location()を呼ぶと
これはGPSって言われます。なにかまずいことやってますでしょうか?教えてください。
よろしくお願いします。
423デフォルトの名無しさん:2010/06/08(火) 18:22:24
あ・・・インデントが消えてしまった・・・ すみません脳内補完お願いします。orz
424デフォルトの名無しさん:2010/06/08(火) 18:39:22
>>422
self.is_gps 関数オブジェクトなので True
self.is_gps を呼びたいのなら self.is_gps()

ほかの言語使えるなら公式チュートリアルお勧め
425デフォルトの名無しさん:2010/06/08(火) 20:20:30
>>424
うあああ ありがとうございます!! 文化の違いってほんとたいへんですね・・・
426デフォルトの名無しさん:2010/06/08(火) 20:24:49
なんだ、括弧が省略できる方面の人か
427デフォルトの名無しさん:2010/06/08(火) 22:12:15
一目でわかるだろって思ったが、そんな方面があるのか
428デフォルトの名無しさん:2010/06/08(火) 22:26:40
正しくは、括弧を省略できるようにしたばっかりに呼び出し可能オブジェクトが変数に代入できなくて困ってた方面の人だね
429デフォルトの名無しさん:2010/06/08(火) 22:26:56
関数呼び出しで括弧が省略できるのなら関数そのものを指したいときってどうするんだろ
430デフォルトの名無しさん:2010/06/08(火) 23:13:02
前に何か記号つけんじゃね?
431デフォルトの名無しさん:2010/06/08(火) 23:26:01
呼び出し可能オブジェクトなんてないから。
関数そのものもないから。

さすが Python 初心者スレだなw
432デフォルトの名無しさん:2010/06/08(火) 23:59:10
>>431
楽しそうだね
433デフォルトの名無しさん:2010/06/09(水) 01:40:13
>>431
Python 初心者スレなんてないから。
434デフォルトの名無しさん:2010/06/09(水) 07:32:25
431が自分の世界にひたっていて羨ましい。
435デフォルトの名無しさん:2010/06/09(水) 08:50:11
ここでは ruby ってワードはタブーなのですか?
436デフォルトの名無しさん:2010/06/09(水) 09:13:00
あるとかないとか初心者の俺は混乱するんですけど
初心者向きのスレで誤情報はホント勘弁して欲しいんですけど
437デフォルトの名無しさん:2010/06/09(水) 09:40:24
だよね
438デフォルトの名無しさん:2010/06/09(水) 12:09:41
したらば辺りに避難所作ることを考えんといけない時期かもね
>>431は俺も何言ってるか分からない。Rubyの話なのか?
439デフォルトの名無しさん:2010/06/09(水) 12:25:10
自治気取り死ねカス
440デフォルトの名無しさん:2010/06/09(水) 16:06:39
リアルの鬱憤ここで晴らすなよ
迷惑だし不愉快だわ
飯食って屁こいてとっとと寝ろ
441デフォルトの名無しさん:2010/06/09(水) 20:06:58
どんだけ効果あるか正直怪しいと思うが、それでもID欲しいなー
442デフォルトの名無しさん:2010/06/10(木) 00:58:46
IDって有って困るものじゃないと思うんだけど、なんか問題でもあるのかね
他のIDない板でも、あった方が良いって話題は必ず出る
443デフォルトの名無しさん:2010/06/10(木) 02:16:22
>>436
細かいことなので、初心者のうちは気にしなくていい。

>>431の内容についてまともに答えるなら、
呼び出し可能オブジェクトって名前だったかどうかはさておき、オブジェクトの後ろに()って付けて__call__メソッド呼び出せるオブジェクトはいくらでもある。
関数だって所詮、__call__メソッドを持ってるオブジェクトにしか過ぎないって意味では、純粋な関数なんてない。
ということなんだけど、細かいことは詳しくなるにつれて自然についてくる。
444デフォルトの名無しさん:2010/06/10(木) 02:20:08
詭弁
445デフォルトの名無しさん:2010/06/10(木) 03:58:07
体言止め
446デフォルトの名無しさん:2010/06/10(木) 08:31:16
>443
友達いないだろ?
447デフォルトの名無しさん:2010/06/10(木) 10:26:25
ともだちならあたりまえ
448デフォルトの名無しさん:2010/06/10(木) 12:44:29
おしえてください。
rssで取得したデータなんですが、titleの中を日本語にパースする方法がわかりません。

<item>
<title>kabuwakitahama: イラン人たちが国内で
覚醒剤を製造していた
というニュース。警察
の話では終戦直後はと
もかくその後国内では
製造されていないとい
うことです。でも私が
昔覚醒剤について取材
した時には国内で製造
していました。国内で
の製造はないと信じて
いるためいつまでも根
絶出来ないのでは。株
以外の話でした。</title>
449デフォルトの名無しさん:2010/06/10(木) 13:47:19
英語なら出来んの?
450デフォルトの名無しさん:2010/06/10(木) 15:06:14
すいません、勘違いしてました。
そのままでいいみたいでした。
"北"ってそのままマルチバイトなんですね
451デフォルトの名無しさん:2010/06/10(木) 17:16:03
>"北"ってそのままマルチバイト
どういう事か分からんです
452デフォルトの名無しさん:2010/06/10(木) 17:32:02
中国漢字に置き換えられるらしく1バイトもあるんだって
453デフォルトの名無しさん:2010/06/10(木) 20:13:31
SJISの半角カナみたいなものじゃろか
454デフォルトの名無しさん:2010/06/14(月) 23:35:09
ctypesのソースを見ると

Python-2.6.5/Lib/ctypes/__init__.py
383 if _os.name in ("nt", "ce"):
384
385   class WinDLL(CDLL):
386     """This class represents a dll exporting functions using the
387     Windows stdcall calling convention.
388     """
389     _func_flags_ = _FUNCFLAG_STDCALL

Python-2.6.5/Modules/_ctypes/callproc.c
777 #if defined(MS_WIN32) && !defined(MS_WIN64) && !defined(_WIN32_WCE)
778   if ((flags & FUNCFLAG_CDECL) == 0)
779     cc = FFI_STDCALL;
780 #endif

みたいな感じでcygwinでSTDCALLなWin32API呼出しはできないようにされてる風に見えるのですが
>>> import ctypes
>>> user32 = ctypes.CDLL('user32.dll')
>>> user32.MessageBoxW(0, u'波浪ワールド', u'てすと',0,0)
で呼び出せています。

私のPCはメッセージボックスを表示させるたびに死へと近づいてるのでしょうか?
それとも私の知らないなにかが良きに計らってくれて安全が保たれてるのでしょうか?
教えてください
455デフォルトの名無しさん:2010/06/15(火) 14:04:58
良きに計らってくれて安全
456デフォルトの名無しさん:2010/06/15(火) 16:59:39
死ぬよ
win版だと普通にエラーでるよ
457デフォルトの名無しさん:2010/06/15(火) 18:20:23
win版はcdeclとstdcallの両方サポートしてなかったっけ?
458デフォルトの名無しさん:2010/06/15(火) 19:36:41
サポートはしてるけどcdllとwindllを使い分けないといけない
459デフォルトの名無しさん:2010/06/15(火) 19:56:44
ctypesの使い方をよく見ろ
460デフォルトの名無しさん:2010/06/15(火) 23:26:30
libffi的には問題なしだと思うのだけど、どういう理由なのだろう
461デフォルトの名無しさん:2010/06/17(木) 19:37:15
java-ja の宣伝してたひと居なくなって良かった
462デフォルトの名無しさん:2010/06/18(金) 07:58:23
月間PythonとかPyCon Japanとか,一過性のネタが多くなってきた。
java-jaと似てる。
463デフォルトの名無しさん:2010/06/18(金) 08:16:18
Actually, there is the Python Japan User's Group like java-ja
I said don't make User's Group were slepted in Japan
464デフォルトの名無しさん:2010/06/18(金) 08:20:32
>>463
怪しい外人はウザいからなんとかしたほうがいいよね。
465デフォルトの名無しさん:2010/06/18(金) 08:22:22
英語がおかしい日本人も一緒になんとかなってくれ
466デフォルトの名無しさん:2010/06/18(金) 08:36:08
slepted(wwWwwwWWWwwwWwwww
467デフォルトの名無しさん:2010/06/18(金) 08:44:40
間違ってはないだろ
おかしいだけで
468デフォルトの名無しさん:2010/06/18(金) 10:39:45
高卒でも許されないレベルの間違い
469デフォルトの名無しさん:2010/06/18(金) 11:39:40
You is fool.
470デフォルトの名無しさん:2010/06/18(金) 11:41:08
soo fuulish you are
471デフォルトの名無しさん:2010/06/18(金) 12:05:12
Wherever it is, we is, I love it truly
472デフォルトの名無しさん:2010/06/18(金) 19:33:22
本スレでやれ
473デフォルトの名無しさん:2010/06/19(土) 03:50:42
java-jaの出番だな・・・
474デフォルトの名無しさん:2010/06/19(土) 11:09:38
この粘着さんとjava-jaのあいだでなにがあったん?
475デフォルトの名無しさん:2010/06/19(土) 11:47:14
寂しがり屋さんなんあぢょ
476デフォルトの名無しさん:2010/06/19(土) 13:05:55
なかまにいれてもらえなかった
477デフォルトの名無しさん:2010/06/19(土) 13:39:41
低学歴の粘着がひどすぎる
478デフォルトの名無しさん:2010/06/19(土) 13:41:58
479デフォルトの名無しさん:2010/06/19(土) 13:46:09
あまりに高学歴過ぎても低学歴過ぎても
視野の狭い経験で語っちゃうとプログラマとして終わり
480デフォルトの名無しさん:2010/06/19(土) 13:49:29
プログラマ(笑)
481デフォルトの名無しさん:2010/06/19(土) 13:57:01
プログラマを笑ってるようじゃ、IT土方以下ですね。
482デフォルトの名無しさん:2010/06/19(土) 14:00:13
ドカタのみなさん、低賃金で土日もお仕事ご苦労様です。
483デフォルトの名無しさん:2010/06/19(土) 14:02:19
はい
484デフォルトの名無しさん:2010/06/19(土) 14:04:16
賃金低いの?
485デフォルトの名無しさん:2010/06/19(土) 14:05:53
486デフォルトの名無しさん:2010/06/19(土) 14:10:01
本スレ巡回から外したのにここでもやんのかよ…
487デフォルトの名無しさん:2010/06/19(土) 14:12:10
巡回しなくていいよ。いやマジで
488デフォルトの名無しさん:2010/06/19(土) 14:13:53
くだすれではやんないでほしいわ
489デフォルトの名無しさん:2010/06/19(土) 14:14:07
Python巡礼の地
490デフォルトの名無しさん:2010/06/19(土) 14:15:02
反省しろよ低学歴
491デフォルトの名無しさん:2010/06/19(土) 14:15:51
相手してるのも低学歴?
492デフォルトの名無しさん:2010/06/19(土) 14:24:21
低学歴のために学歴板があるんだよ
493デフォルトの名無しさん:2010/06/20(日) 00:31:43
thinkの発音は「進化」に似てて、
アメリカだと(端折られて)「しんっ」になる。
イギリスなら(淡白に)「しんく」
thankは「みっつのキウイ」って感じで、
アメリカなら「さんきう」
イギリスならもちろん「さんきうい」
問題のthrillerは
アメリカなら「左様なら」みたいに「さやぅぬらー」でいい
イギリスなら「サウナなら」みたいに「さうぬあーら」
494493:2010/06/20(日) 00:33:12
すいませんすいません英語板と間違えましたすいません!
495デフォルトの名無しさん:2010/06/20(日) 01:15:32
pycryptoで作った公開鍵をpickle.dumps(key)して送りたいんだけど、
linux→windowsだとpickle.loads(key)したときにこける。
_fastmathがwindowsにないのが問題みたいなんだけど、どうしたらいいかな?
・・・って書いてる途中にpycryptoのソースを覗くことを閃いた。

import Crypto.PublicKey.RSA
Crypto.PublicKey.RSA._fastmath = None
Crypto.PublicKey.RSA.generate = Crypto.PublicKey.RSA.generate_py
Crypto.PublicKey.RSA.construct = Crypto.PublicKey.RSA.construct_py
送る側のimportのところに3行追加。

_slowmathってのがあるらしいけど、インストールしたpycryptoにはなかったんで。
他に悩む人がいるかどうかわからないけど、
解決してうれしいのでとりあえず書いときます。
496デフォルトの名無しさん:2010/06/20(日) 17:44:05
pgr
497デフォルトの名無しさん:2010/06/21(月) 18:10:56
飛ぶ鳥おとす勢いのGOOGLEが採用してるからさぞかしここも盛り上がってるの
かと思って覗いてみたが随分寂しいことになってるんだな
業務に携わる人達ってのはこんな所には来ないってことなんだろうか
498デフォルトの名無しさん:2010/06/21(月) 20:45:53
ニューカス民さんお勤めご苦労、帰っていいよ
499デフォルトの名無しさん:2010/06/21(月) 22:53:11
ニューカスって何?
500デフォルトの名無しさん:2010/06/21(月) 22:54:57
人間の屑が集まる所
501デフォルトの名無しさん:2010/06/21(月) 23:17:13
人間の屑ってあの人のことでしょ?
502デフォルトの名無しさん:2010/06/21(月) 23:19:15
σ(゚∀゚ )
503デフォルトの名無しさん:2010/06/23(水) 20:59:28
Windows XP Service Pack 3
Python 2.6.4
です。

 str1="ディレクトリのパス"
 str2=".jpeg"
 str3="piyo"
となっている時、
str1の中およびそのサブディレクトリ以下のファイルで、
ファイル名がstr2で終わる物、ファイル名にstr3が含まれる物
を一気に削除するようなpythonプログラムは
どう書けばよいでしょうか?

str3の方はファイルを1つずつ回って、
if str3 in ファイル名 :
で行けそうですが、str2はどうすればよいでしょうか。

よろしくお願い申し上げます。
504503:2010/06/23(水) 21:13:56
あ、endswithなんてものがあるのですね。
505デフォルトの名無しさん:2010/06/23(水) 21:15:47
>>503
if ファイル名.endswith(str2):
506503:2010/06/23(水) 21:20:04
>>505
ありがとうございます。
507デフォルトの名無しさん:2010/06/25(金) 05:41:58
仕事上の関係者が個人で作った module を使用すると、
内部的に C++ の例外が投げられます。
python で C++ の例外を適切に catch するにはどうしたら良いのでしょうか。

try:
hoge()
except HisEception, e:
print e

とすると、
~~~~~~~~ (C++ exception)
のように表示されて、そのまま abort します。

try:
hoge()
except:
pass

だと問題ないのですが。
508デフォルトの名無しさん:2010/06/26(土) 10:01:54
C++のコードの方で例外が発生していて、バグが原因ならC++側で対処する。
適切な例外ならC++側で例外を拾って、Pythonの例外でくるんで返す。
ttp://www.python.jp/doc/release/ext/errors.html
509デフォルトの名無しさん:2010/06/26(土) 20:32:14
>仕事上の関係者が個人で作った module を使用すると、
>内部的に C++ の例外が投げられます。

って書いてあるのに・・・
510デフォルトの名無しさん:2010/06/26(土) 22:07:47
C++部分のソースコードを一切改造できないと仮定するなら
1. C++製Python用モジュールとPythonインタプリタの間に1つ噛ませて
そちらでC++例外を処理して、Python例外にする。
2. PythonインタプリタをC++の例外を処理できるように改造する。
511デフォルトの名無しさん:2010/06/26(土) 22:33:17
>>507
それで問題なくなるならPythonも例外を投げてるはずなんだけど、何投げてる?
それか、諦めてexcept:で受けてしまうのがいいのかも。
512デフォルトの名無しさん:2010/06/27(日) 03:09:43
なんでpassがいるのですか?
空の関数でも、コンパイラはインデントで判断できるのでは?
513デフォルトの名無しさん:2010/06/27(日) 03:26:30
最初に実行される.pyファイルも
モジュールと呼んでいいのでしょうか?
それとも他のプログラムから読み込まれることを前提としたファイルのみがモジュールでしょうか?
514デフォルトの名無しさん:2010/06/27(日) 09:26:42
win,linuxで動くGUIアプリで作るなら、tkinter, pyqt, pygtk, wxpythonどれがいいの?
515デフォルトの名無しさん:2010/06/27(日) 09:35:42
手軽さからtKinterを使ってたけど、DnDできないのでwxに移行した。
最初大変だったけど、慣れてしまえばどってことない。
デモが便利で助かる。webにもサンプルいっぱい落ちてるし。
516デフォルトの名無しさん:2010/06/27(日) 09:39:44
Blender.exe中にパイソンのスクリプトを使うのですが
Blender.exeのフォルダにGANGu.dllを入れてBlender.exe中でそれを使うスクリプトを使うと
pyのパス line 15 in <module>
import GANGu
Import Error : No module named GANGu
と出ます。これはGANGu.dllのパスが間違っていて見れないと言う意味でしょうか?
Python25です。どうすればできますか?
517デフォルトの名無しさん:2010/06/27(日) 10:20:41
>>515
tkinterだとdndできないんだ・・
参考にさせてもらいます
518デフォルトの名無しさん:2010/06/27(日) 11:05:49
>>516
スクリプトと同じ場所に置いとけ
519デフォルトの名無しさん:2010/06/27(日) 12:58:30
>>512
一行で書ける
520デフォルトの名無しさん:2010/06/27(日) 13:10:58
>>512

def func1(hoge):
  fuga

def func2(hoge):

def func3(hoge):
  hige

どうだろう
521デフォルトの名無しさん:2010/06/27(日) 15:10:26
PythonでWebプログラミング覚えるのに良い本ありますか?
522デフォルトの名無しさん:2010/06/27(日) 15:57:52
質問が漠然としすぎだろ
Pythonはどの程度できるのか
Webプログラミングって具体的にはどんなことがしたいのか
そういうこと書かないとまともな答えは返ってこないと思うよ
523デフォルトの名無しさん:2010/06/27(日) 16:05:37
>>522
そうですね。
まだちょっと勉強不足なので>>521
無視して下さい。
ありがとうございました
524デフォルトの名無しさん:2010/06/27(日) 17:54:46
djangoでもやっとけ
525デフォルトの名無しさん:2010/06/27(日) 18:07:54
>>521
みんなのパイソン webアプリ編
526デフォルトの名無しさん:2010/06/28(月) 16:49:57
オーナーがrootのpythonのライブラリを
/usr/local/に配置して、
一般ユーザで実行したら、
pycファイルが生成される時に問題になりますよね。
pycファイルが生成されるディレクトリは一般ユーザにも書き込み可にしておくのでしょうか?
それともrootで一度全部実行してpycファイルを生成しておくのでしょうか?
527デフォルトの名無しさん:2010/06/28(月) 19:05:39
>>526
事前にコンパイルするもの。
python -m compileall /path/to/lib
で、再帰的にコンパイルできるはず。
528デフォルトの名無しさん:2010/06/28(月) 22:42:12
>pycファイルが生成される時に問題になりますよね。

ならない
毎回pycが作られずに実行されるだけ
529デフォルトの名無しさん:2010/06/29(火) 01:11:20
python3はいつごろ主流になりますか
530デフォルトの名無しさん:2010/06/29(火) 01:14:12
>>529
3-5年後
531デフォルトの名無しさん:2010/06/29(火) 04:04:15
>>527
>>528

よく分かりました
ありがとうございました。
532デフォルトの名無しさん:2010/06/29(火) 06:53:28
>>530
去年も同じこと聞いた。
来年も同じこと聞くのかな。
533デフォルトの名無しさん:2010/06/29(火) 07:17:26
python4はいつごろ?
534デフォルトの名無しさん:2010/06/29(火) 07:20:14
3-5年後
535デフォルトの名無しさん:2010/06/29(火) 08:47:09
>>532
ちゃんと前進しているよ。
PyQt、CherryPy、Cython、lxml、docutils、etc... がPython3対応しているし、
今年のGSoCでもいろいろな有名プロダクトがPython3対応プロジェクトを
上げてるし、Python2最後となるPython2.7のリリース目前で、すでに開発者
MLはPython3への移行をどうやって加速するかの話題で一杯。
536デフォルトの名無しさん:2010/06/29(火) 08:48:50
>>533
10年後くらいに登場して、15年後くらいに普及するんじゃない?
537デフォルトの名無しさん:2010/06/29(火) 09:49:31
月間Pythonはいつ出ますか?
538デフォルトの名無しさん:2010/06/29(火) 09:52:12
月間
539デフォルトの名無しさん:2010/06/29(火) 23:04:53
月刊「桃井かおり」の次
540デフォルトの名無しさん:2010/06/30(水) 12:34:00
>>535
おれも自分のプログラムをいくつか、3.1で動くようにしてみた。
が、やってみて、ふと思ったのは、3.1に対応するメリットって
なんだろう?ってこと。
3.1で欲しい機能のほとんどは、2.xにバックポートされてるし、
対応ライブラリもとぼしいのにって考えたら、何のためにやって
んのか、よくわからなくなってしまった…
541デフォルトの名無しさん:2010/07/01(木) 00:16:33
>>540
でも、それは2.7で終わりで、これからは新しい機能はPython3にしか導入されない。
New GIL はPython3.2から搭載されるし、unladen swallowで開発されたLLVM JITは
Python 3.3 で configure オプションになるべくPython3用に開発が継続している。
542デフォルトの名無しさん:2010/07/02(金) 10:46:13
context.Dr7 |= condition << ((available * 4) + 16)
これは
context.Dr7とconditionで論理和をとり、その値をcontext.Dr7に
代入してさらに((available * 4)+16)分だけ左にビットシフトするという
意味ですよね?
543デフォルトの名無しさん:2010/07/02(金) 10:55:52
プログラミングの知識もないのにttp://www.oreilly.co.jp/books/9784873114484/読んだりするなよ(wWwwwWWwww
544デフォルトの名無しさん:2010/07/02(金) 11:07:12
>>542
context.Dr7 |= condition << ((available * 4) + 16)

context.Dr7 = context.Dr7 | condition << ((available * 4) + 16)
と等価

<< と | の優先順位は << のほうが先なので
condition を avaialbe * 4 + 16 で左シフトしてから
context.Dr7 と論理和とって context.Dr7 に代入するって意味
545544:2010/07/02(金) 11:08:05
typoがひどいが煽られても泣かない
546デフォルトの名無しさん:2010/07/02(金) 11:11:21
>>543
サーセン;; c言語ちょっとかじったレベルで挑戦してます;;

>>544
ああ なるほど優先順位が高いんですね ありがとうござます><
547デフォルトの名無しさん:2010/07/03(土) 00:07:02
>>544
結果的に正しいけど、
context.Dr7 = context.Dr7 | (condition << ((available * 4) + 16))
とした方がいいと思うよ。

a *= 2+1 と等価なのは、
a = a * 2+1 じゃなく
a = a * (2+1) だから。
548デフォルトの名無しさん:2010/07/03(土) 00:09:55
いちいち()が面倒だから
a *= 2 + 1
で言いと思うぞ
っつーかここらは C でも同じはずなんだが
549デフォルトの名無しさん:2010/07/03(土) 00:48:13
なんでpythonにビット演算子入れようとしたんだろう
高級言語だとそこまで需要高くないと思うし、関数かメソッドで十分じゃね?
550デフォルトの名無しさん:2010/07/03(土) 00:51:46
>>548
ちょwちゃんと嫁w
551デフォルトの名無しさん:2010/07/03(土) 00:58:48
>>550
さすがに
a *= 2 + 1

a = a * 2 + 1
と解釈するアホはおらんだろ
552デフォルトの名無しさん:2010/07/03(土) 01:00:08
>>549
なんでSQLにビット演算子入れなかったんだろう
553デフォルトの名無しさん:2010/07/03(土) 01:30:34
>>551
的外れなレスだな。
554デフォルトの名無しさん:2010/07/03(土) 01:33:49
>>551
じゃあ
context.Dr7 |= condition < ((available * 4) + 16)
だったら?
555デフォルトの名無しさん:2010/07/03(土) 01:39:22
556デフォルトの名無しさん:2010/07/03(土) 01:49:38
>>555
え?ほんとに?
557デフォルトの名無しさん:2010/07/03(土) 01:58:00
>>555
class context:
    Dr7=7
condition=100
available=0
context.Dr7 |= condition < ((available * 4) + 16)
# ==> context.Dr7 = 7
context.Dr7 = context.Dr7 | condition < ((available * 4) + 16)
# ==> context.Dr7 = False
558デフォルトの名無しさん:2010/07/03(土) 03:34:10
PyScripterで実行を停止するにはどうしたら良いかわかりますか?
止め方がわからないと無限ループに入ったときに為す術がないので聞きたいです。
559544:2010/07/03(土) 06:20:16
>>547
ああ本当だ。考え方が完全に間違っていた
<< と | の優先順位を云々するまでもないね
指摘ありがとう
560デフォルトの名無しさん:2010/07/03(土) 20:00:30
>>> import cairo

Traceback (most recent call last):
File "<pyshell#9>", line 1, in <module>
import cairo
File "C:\Python26\lib\site-packages\cairo\__init__.py", line 1, in <module>
from _cairo import *
ImportError: DLL load failed: 指定されたモジュールが見つかりません。


???
561デフォルトの名無しさん:2010/07/03(土) 20:33:38
エラーメッセージを書かないのは論外だが、エラーメッセージだけをかくのもいかんだろ。
どうやってインストールしたかぐらいは書け。
562デフォルトの名無しさん:2010/07/03(土) 21:17:09
python初めて三日の俺にも指定されたモジュールが見つからなかったっていうエラーなのはわかる
どこが???なんだ
563デフォルトの名無しさん:2010/07/03(土) 21:21:39
ここまで答える気が失せる質問も珍しい
564デフォルトの名無しさん:2010/07/03(土) 21:30:21
GTK+がインストールされてないと予想してみる
565デフォルトの名無しさん:2010/07/03(土) 21:33:11
GTKは糞
566デフォルトの名無しさん:2010/07/03(土) 23:07:57
あっはい
python2.6.5を使っていて、pycairoを使おうとしまして
「pycairoモジュールについて http://python.matrix.jp/modules/pycairo.html
ここのインストーラへのリンクが切れてたりするので、適当にpy2.6用を探してきました↓
http://sourceforge.jp/projects/sfnet_ecell/downloads/Third-party%20Packages/Windows/pycairo-1.8.8.win32-py2.6.exe/
http://sourceforge.jp/projects/sfnet_ecell/downloads/Third-party%20Packages/Windows/pygtk-2.16.0.win32-py2.6.exe/

gtkのインストールは
gtk+-bundle_2.20.0-20100406_win32でで、
http://kyle-in-jp.blogspot.com/2009/03/pycairowindows.html
ここの
pkg-config --cflags gtk+-2.0
このコマンドを実行しただけなんですが、普通にインスコしないと駄目なんでしょうか
バージョンのミスマッチとかですか?一体どうすればいいのやら
567デフォルトの名無しさん:2010/07/03(土) 23:22:13
gtkのbinフォルダが環境変数のPATHに加わってないんじゃない?
568デフォルトの名無しさん:2010/07/03(土) 23:25:11
>>566
_cairo.dllも入ってるはずなのに、どういうわけか入ってないって内容のエラー。
身に覚えがないなら、よそからpycairo拾ってきたらいいと思う。
569デフォルトの名無しさん:2010/07/04(日) 00:57:19
_cairo.pyd が依存している DLL (多分 libcairo-2.dll) が見つからないってエラーでしょ
570568:2010/07/04(日) 01:57:39
>>569
ごめん。俺が間違ってた。
>>568なら
ImportError: No module named _cairo
って出るはずだな。
571デフォルトの名無しさん:2010/07/04(日) 08:06:15
>>569
そのdllがあればいいんですか?
572デフォルトの名無しさん:2010/07/04(日) 23:41:32
プログラム自体超初心者です。ある入門書に下記のように書いてありました。
何度も読み返し、丸二日自力で考えたのですが、どうしても書いてある意味が分かりません。
特に”実際のデータ”、”実体”が何なのか分かりません。
結局”初期化メソッド”、”インスタンス”とは何なのでしょうか?

datetime.date(2030,4,14)
ところで、dateはデータ型の名前そのものですが、見方を変えると、datetimeが持っているdateという関数のようにも解釈できます。
つまり、ある型”の実際のデータ”を用意するには、その型と同じ名前のメソッドを呼び出せばいいのです
この”型と同じメソッド”の事を、特に初期化メソッドと呼びます。また、このように生成されたデータ型の”実体”の事を、特に、インスタンスと呼びます。

573デフォルトの名無しさん:2010/07/05(月) 00:24:31
>ある入門書

さっさと捨てろ
574デフォルトの名無しさん:2010/07/05(月) 00:41:35
インスタンスは型を具象化させたもので、具象化させるプロセスが初期化メソッドかな
まあその本はさっさと投げ捨ててプログラム書いてみた方が早いよ
575デフォルトの名無しさん:2010/07/05(月) 00:48:40
>>572
ほんとはオブジェクト指向なんて、初心者のうちから叩き込まれても何が嬉しいのか分からないんだよ。
だから今はあっさり流して、いつかプログラムが自分でも結構かけるようになった日に見返して、
なるほど、そういう意味だったんだと気づけたらそれでいいのだけど。

※上級者の方へ: 以下、厳密でないのは分かっている。間違いの指摘や補足は、初心者を困らせないような前置きをしてから頼む。

君は、日付を扱いたい。
君が簡単に日付を扱えるように、Pythonの作者たちが日付を扱うための「型」としてdateを用意してくれている。
「データ型」と「型」は同じものと考えていい。

そして、date型を作るためにはどうすればいいか? datetime.dateを関数呼び出しのように使えばいい。
それが「見方を変えると、datetimeが持っているdateという関数のようにも解釈できます」の意味。

別に、makeDate()でもdateFactory()でも名前なんて何でもよかったんだけど、
Pythonでは、型の名前を関数呼び出しのようにすると型を作れる、というルールになっている。
(他にもそういうルールになってる言語も結構あるから、そこそこメジャーなルールと言えるけど)

date()を呼び出しのようにすると、Pythonでは、
1. date型を作り出す
2. date.__init__()って関数を、最初の引数に1で作り出した型、第二引数以降にdate()の引数を入れて呼び出す
ということが行われる。
ここで、date.__init__()関数は、dateを使うための準備をするための関数で「初期化メソッド」と呼ばれている。

ところで、dateがどういう風にできているのか、というのを見ると、
dateはこんな関数を持ってるよ、といった内容の「クラス定義」だけが書いてある。

実際に日付のデータを持っているのはdateそのものではなく、「date()で作り出したもの」のみ。
そういう「クラス定義」から作り出したものを「インスタンス」と呼んでおり、インスタンスが日付のデータを実際に持っている。
つまり、「クラス定義」という作り方マニュアルを使って、作り出した「実体」が「実際のデータ」を持っているインスタンス、ということだ。

……って、わっかんねーよなぁ。
576デフォルトの名無しさん:2010/07/05(月) 01:24:42
140字以内でお願いできますか
577デフォルトの名無しさん:2010/07/05(月) 02:06:04
その本は漏れも捨てたほうがいいと思うけど、それはさておき

>>572
datetimeはモジュールで、その中にはdateというクラスが入っている
クラスは「呼び出し可能」であり、関数のように呼び出すことができる
呼び出すことでクラスはインスタンスを生成して返す

下はdateクラスからインスタンスd1, d2を生成し、属性の参照とメソッド呼び出しをする例
>>> import datetime
>>> d1 = datetime.date(1945, 8, 15)
>>> d2 = datetime.date(2000, 1, 31)
>>> d1.year, d2.year
(1945, 2000)
>>> d1.isoformat(), d2.isoformat()
('1945-08-15', '2000-01-31')

初期化メソッド(たぶん__init__のこと)については自分でクラス定義するようになったらわかるよ
578デフォルトの名無しさん:2010/07/05(月) 02:10:57
とりあえずプログラムを書け。小難しいことは後で必要があったら考えろ
579572:2010/07/05(月) 02:20:25
>>575,577
本当に本当にありがとうございます!!!
クラスやinitなどまだ勉強していない部分なので詳細は理解できませんが、中で何をやっているのか仕組みは分かってきました。
明日早いのに感動して色々調べてたらこんな時間に・・
入門用の本はやさしい書き方なのですが、自分のように論理的に納得できないと前に進めないタイプは
ちょっと難しくても詳しく書いてある本の方がいい気がしてきました。

580デフォルトの名無しさん:2010/07/05(月) 02:23:01
何のためにコンストラクタが一つと決まってるのか分からん。Javaはいくつもできるじゃん
581デフォルトの名無しさん:2010/07/05(月) 02:54:46
>>580
理由1(実装による理由)
Pythonでは名前空間がname manglingもしない単純な辞書になってるから、それをしようと思ったらすごく面倒になるし、
関数の引数に型をつけないから、引数の数でしか曖昧性を排除する手段がない。
けど、引数の数だけでいいんだったら、可変数引数をとればいいだけのこと。

理由2(ややPython信者めいた理由)
そもそもコンストラクタを複数作る必要はない。
どうせどれも似たような処理だったり、似てはいなくても共通部分が多く存在することは多い。
C++やJavaで、別のコンストラクタを呼び出すだけのコンストラクタを作ったことがある人も多いのでは?

もともとコンストラクタ(に限らず、同名の関数)を複数作らなければならないのは、
型に縛りがあることや、可変長引数が扱いにくい/扱えないことにあるので、
それが可能なPythonには、コンストラクタ(や関数)をいくつも作る必要がない。
582デフォルトの名無しさん:2010/07/05(月) 03:22:04
俺もCを学校で習った程度の者なんだけど
>>572の"初期化メソッド"ってつまり、コンストラクタの事?
583デフォルトの名無しさん:2010/07/05(月) 03:27:02
そう取るのが妥当じゃね?
コンストラクタに複雑な引数渡すくらいならclassmethodからインスタンス返した方がいいよ
win32apiみたいなのはごめんだ
584デフォルトの名無しさん:2010/07/05(月) 12:39:00
いわゆるファクトリ関数だな
585デフォルトの名無しさん:2010/07/07(水) 11:34:21
最適化アルゴリズムをpythonで組んでるのですが
10000回反復し、10〜100回くり返し試行するため
実行時間が数時間かかります
無駄な処理を省き8時間かかっていたものを4,5時間までに短縮できましたが
まだまだ遅すぎます。
そこでcythonなどを使おうと調べてるのですが、
解説サイトが少なく(英語読めませんごめんなさい)、使い方がほとんどわかりません
わかりやすい解説サイトもしくは使い方を教えてください。
まずは、簡単なやつから作ろうと思ってます。
その次の段階としてルーレット選択は全てcythonなどで実行できるようにしたいです。
ちなみにpython3使っていて、2.xにする気はほとんどないです。
586デフォルトの名無しさん:2010/07/07(水) 12:21:42
>>585
そのルーレット選択とかいう、Cythonで書きたいコードの元になるPythonコードを貼って。

コードを一切見せずに日本語でやりたいことだけ言われても、どう返していいかわからない。
587デフォルトの名無しさん:2010/07/07(水) 17:11:22
>>586
# 次の都市決定
def next_city(self,tau,eta):
""" 評価値計算 """
val_L = [ (tau[self.pre][omega]**self.alufa)*eta[self.pre][omega] for omega in self.omega_list ] # 未訪問評価値リスト作成
s = sum(val_L) # 評価値の合計
""" 評価値が0の時 """
if not s: # 評価値の合計が0なら
val_L = [ eta[self.pre][omega] for omega in self.omega_list ] # 距離の評価値のみでリスト作成
s = sum(val_L) # 評価値の合計更新
""" 相対値 """
val_L = [(i/s) for i in val_L] # 相対的な評価値
#s = sum(val_L) # 評価値の合計更新

""" ルーレット選択 """
tmp_sum = 0 # 合計
val_prob_L = [] # 評価値の確率リスト
for val in val_L: # 評価値リスト
tmp_sum += val # 評価値加算
#tmp_sum += val/s # 評価値加算
val_prob_L.append(tmp_sum) # 評価値確率リスト作成

self.pre = self.omega_list[bisect.bisect(val_prob_L,random.random())] # 次の都市

とりあえずはこの部分をcythonで書きたいです
tau,eta は、n*nの二次元リストです。 今、nは51です。
self.pre:現在の場所,omega未訪問の場所
eta:現在地と未訪問の場所との距離(の逆数)
あとわかりづらい部分あったら言ってください

基本的に独学なので変なコードですいません
コメントは自分でわかりやすいように書いてあるやつなので表現が間違ってることもあります
588デフォルトの名無しさん:2010/07/07(水) 17:13:54
インデント…

  # 次の都市決定
  def next_city(self,tau,eta):
    """ 評価値計算 """
    val_L = [ (tau[self.pre][omega]**self.alufa)*eta[self.pre][omega] for omega in self.omega_list ] # 未訪問評価値リスト作成
    s = sum(val_L) # 評価値の合計
    """ 評価値が0の時 """
    if not s: # 評価値の合計が0なら
      val_L = [ eta[self.pre][omega] for omega in self.omega_list ] # 距離の評価値のみでリスト作成
      s = sum(val_L) # 評価値の合計更新
    """ 相対値 """
    val_L = [(i/s) for i in val_L] # 相対的な評価値
    #s = sum(val_L) # 評価値の合計更新

    """ ルーレット選択 """
    tmp_sum = 0 # 評価値の合計
    val_prob_L = [] # 評価値の確率リスト
    for val in val_L: # 評価値リスト
      tmp_sum += val # 評価値加算
      #tmp_sum += val/s # 評価値加算
      val_prob_L.append(tmp_sum) # 評価値確率リスト作成

    self.pre = self.omega_list[bisect.bisect(val_prob_L,random.random())] # 次の都市
589デフォルトの名無しさん:2010/07/07(水) 17:46:06
糞どうでもいいけど、Cythonってなんて発音すんの?
590デフォルトの名無しさん:2010/07/07(水) 17:50:41
サイソンでしょ
591デフォルトの名無しさん:2010/07/07(水) 17:53:48
アメリカ:サイソン
イギリス:シーソン
ロシア:スサン
ドイツ:サイスン
イタリア:シッスナ
フランス:スーさん
中国:シェンシゥン
韓国:サアソン
日本:なんて読むの?
592デフォルトの名無しさん:2010/07/07(水) 18:31:22
カイソン
593デフォルトの名無しさん:2010/07/07(水) 21:46:26
http://docs.cython.org/src/quickstart/build.html
英語わからないっつってもこれくらいならなんとかなるんじゃないの?
594デフォルトの名無しさん:2010/07/07(水) 22:02:01
ちぃちぃょん
595デフォルトの名無しさん:2010/07/08(木) 00:01:16
糞どうでもいいけど、数あるプログラミング言語がある中で、

Pythonを選んだ理由を教えてください。
596デフォルトの名無しさん:2010/07/08(木) 00:03:35
名前がかわいい
597デフォルトの名無しさん:2010/07/08(木) 00:06:22
Guidoさんが好みのタイプなので
598デフォルトの名無しさん:2010/07/08(木) 00:13:29
括弧が少ないから
599デフォルトの名無しさん:2010/07/08(木) 00:15:23
2タブが気に食わなかったから
600デフォルトの名無しさん:2010/07/08(木) 00:18:19
$があまり出てこないから
601デフォルトの名無しさん:2010/07/08(木) 00:19:39
インストールとかモジュールの追加が楽だから
602デフォルトの名無しさん:2010/07/08(木) 01:29:25
Perlが嫌いだったから
603デフォルトの名無しさん:2010/07/08(木) 01:40:18
インデント強要ウザいとかいうバカがいないから
604デフォルトの名無しさん:2010/07/08(木) 03:36:56
hello.pyx
def say_hello_to(name):
  print("Hello %s!" % name)

C:\Users\test\>python C:\Python31\Scripts\cython.py hello.pyx

Error converting Pyrex file to C:
------------------------------------------------------------
...
def say_hello_to(name):
^
------------------------------------------------------------

C:\Users\test\hello.pyx:1:23: Unrecognized character

こんなエラーが出るんですがどうしたらいいですか?
605デフォルトの名無しさん:2010/07/08(木) 07:54:04
>>604
BOM付きUTF-8で書いてるんじゃない?
606デフォルトの名無しさん:2010/07/08(木) 10:28:55
>>605
ありがとうございます
どこで、BOM付きUTF-8に設定しているのかわからずに、
とりあえず、適当にエンコードしてみたら、

UTF-8 - Win(CR +LF)  にしたら、同じエラー
UTF-8 - Unix(LF)    にしたら通りました。

で新たなエラーが

thon setup.py build_ext --inplace
running build_ext
cythoning hello.pyx to hello.c
building 'hello' extension
error: Unable to find vcvarsall.bat

調べた結果
http://pythonlife.seesaa.net/archives/200909-1.html
>MSVCかMinGWまたはCygwin上のgccが必要となる。
とあり、MinGWは入っているので、これを利用し、

>後で判ったことだが、PythonでMinGWをdefaultで使いInstallする場合には、Python26/Lib/distutilsに
>次の内容distutils.cfgとして作成しておくと良いそうだ。今後は概ね「setup.py install」だけで大丈夫かもしれない。
>[build]
>compiler=mingw32
Python31/Lib/distutils/distutils.cfgを追加し、エラーもなくコンパイル出来ました。
import helloとし、実行した結果なんとかできました。

あとは、setup.pyの書き方がいまいち理解してないので、もう少し勉強してみます。
607デフォルトの名無しさん:2010/07/08(木) 10:58:54
まずBOM有無が決められるエディタを探すのが先じゃないかな?
608デフォルトの名無しさん:2010/07/08(木) 11:31:25
tmp.py
----
import hello
----

C:\Users\test>python tmp.py
Traceback (most recent call last):
File "tmp.py", line 1, in <module>
import hello
UnicodeDecodeError: 'utf8' codec can't decode byte 0x8d in position 22: unexpected code byte
対話モードだと出来るのですが、テキストで.pyを作成して実行すると上記のエラーが起きます
これは何が問題になっているのでしょうか?

C:\Users\test>python
Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import hello
>>> hello.say_hello_to()
Hello!
>>>
609デフォルトの名無しさん:2010/07/08(木) 12:03:22
>>607
emacs23使ってます
.emacs.elを書き換えて
デフォルト保存をutf-8から,utf-8-auto-unixにしたらコンパイルは問題なくなりました
610デフォルトの名無しさん:2010/07/08(木) 20:53:18
>595
マジレスすると、numpyとmatplotlibが使いたかった

そんだけ
611デフォルトの名無しさん:2010/07/09(金) 01:57:53
>>608
エラーメッセージはちゃんと読んだ?
612デフォルトの名無しさん:2010/07/09(金) 13:00:11
cursesでstdscrの画面右下(24 x 80のコンソールなら23, 79)に書き込もうとすると
ERRが返ってくるんだけど、うちだけ?

import curses
stdscr = curses.initscr()
maxy, maxx = stdscr.getmaxyx()
stdscr.addch(maxy - 1, maxx - 1, 'A')
curses.endwin()

File "bugtest.py", line 4, in <module>
stdscr.addch(maxy - 1, maxx - 1, 'A')
_curses.error: addch() returned ERR

stdscr.addstr()でも同じ。

Cからだといけるんだけど、Pythonで回避法ってある?
Python 2.5.1と2.6.1で確認済。Macです。
613デフォルトの名無しさん:2010/07/09(金) 14:31:15
うちもなる。
Cの方は単に返り値を無視してるだけでは?
scrollokとかするとエラーでないっぽい。
614デフォルトの名無しさん:2010/07/09(金) 14:45:27
Cでは確かに返り値をチェックしてない。
try:〜except: passでとりあえず回避。Thx。
615デフォルトの名無しさん:2010/07/10(土) 01:09:38
>>611
unicodeデコードエラー
解読出来ませんでした。

どうやったら直るのでしょうか・・・・?
文字コードをいくつか変えて実行してもダメで、どうすればいいかわからないです。
616デフォルトの名無しさん:2010/07/10(土) 01:14:06
UnicodeDecodeError: 'utf8' codec can't decode byte 0x8d in position 22: unexpected code byte

要点は
utf8' codec can't decode byte 0x8d

unexpected code byte
617名無しさん@そうだ選挙に行こう:2010/07/10(土) 12:34:54
対話モードで、
>>> repr(open('tmp.py', 'rb').read())
を実行してみて。
618名無しさん@そうだ選挙に行こう:2010/07/10(土) 20:36:35
window.pyという名前で保存したのに、ダブルクリックで起動できません
何が原因でしょうか?
619名無しさん@そうだ選挙に行こう:2010/07/10(土) 20:39:49
>>618
コマンドプロンプトから起動してね
620名無しさん@そうだ選挙に行こう:2010/07/10(土) 20:40:50
>>619
それしかないんでしょうか
621名無しさん@そうだ選挙に行こう:2010/07/10(土) 20:45:18
>>620
というか起動はしてるんだけど
処理を終えたかエラーで止まったかでプロンプトが閉じちゃってるんだと思うよ

これ以上はwindow.pyの内容と何がしたいのか(どういう結果がほしいのか)が
わからないとなんともいえない
622名無しさん@そうだ選挙に行こう:2010/07/10(土) 20:46:47
>>621
なるほど、解決しました
623名無しさん@そうだ選挙に行こう:2010/07/10(土) 23:55:07
お礼は?
624名無しさん@そうだ選挙に行こう:2010/07/11(日) 00:24:47
三行以上で?
625名無しさん@そうだ選挙に行こう:2010/07/11(日) 01:26:35
>>617
C:\Users\test>python tmp.py
Traceback (most recent call last):
 File "tmp.py", line 1, in <module>
  import hello
UnicodeDecodeError: 'utf8' codec can't decode byte 0x8d in position 22: unexpected code byte

C:\Users\test>python
Python 3.1.2 (r312:79149, Mar 21 2010, 00:41:52) [MSC v.1500 32 bit (Intel)] onwin32
Type "help", "copyright", "credits" or "license" for more information.
>>> #utf-8 Win
>>> repr(open('tmp.py', 'rb').read())
"b'import hello\\r\\nhello.say_hello_to()\\r\\n'"
>>> #utf-8 Unix
>>> repr(open('tmp.py', 'rb').read())
"b'import hello\\nhello.say_hello_to()\\n'"
>>>

でした。

>>616
>UnicodeDecodeError: 'utf8'コーデックは位置22でバイト0x8dを解読できません: 予期していなかったコードバイト

>'utf8'コーデックはバイト0x8dを解読できません。
0x8d がどれを指してるのかが・・・
>予期していなかったコードバイト
0x8dがダメなんですよね?
utf8自体がダメなんですかね

飯食って、グレープフルーツゼリー作って、そのあと意識があれば調べてみます
626名無しさん@そうだ選挙に行こう:2010/07/11(日) 02:18:16
なんだ中学生か
627625:2010/07/11(日) 02:20:59
う〜ん・・・
結局よくわからないです

hello.pydがいけないんですか?
この中なら\x8d は何回か出てきてます
でもそしたら、対話モードでもimport出来ないはず...?

今度こそ飯を
628名無しさん@そうだ選挙に行こう:2010/07/11(日) 02:33:41
バイト数が問題なんですか><
629名無しさん@そうだ選挙に行こう:2010/07/11(日) 04:30:08
まずBOM有無が決められるエディタを探すのが先じゃないかな?
630名無しさん@そうだ選挙に行こう:2010/07/11(日) 04:42:33
>>629
そのためにpyscripter入れたけどダメでした
631名無しさん@そうだ選挙に行こう:2010/07/11(日) 04:49:59
馬鹿には無理
632名無しさん@そうだ選挙に行こう:2010/07/11(日) 07:45:36
notepad++オヌヌメ
633名無しさん@そうだ選挙に行こう:2010/07/11(日) 09:23:34
結局どうしたいいんですか?
634名無しさん@そうだ選挙に行こう:2010/07/11(日) 10:08:13
>>627
pycじゃなくてpyd?
よくわかんないから関連ファイル全部まとめてzipでうpしてくれると話が早い
635名無しさん@そうだ選挙に行こう:2010/07/11(日) 12:46:52
>>627
対話モードと直接実行時でロードしている hello モジュールが違ってる気がする。

tmp.py で
try:
  import hello
except UnicodeDecodeError as e:
  print(repr(e.object), (e.start, e.end))
import os, imp
print(os.path.abspath(imp.find_module("hello")[1]))
636名無しさん@そうだ選挙に行こう:2010/07/11(日) 12:47:38
BOMって関係あんの?
637名無しさん@そうだ選挙に行こう:2010/07/11(日) 12:51:54
>>604 の Unrecognized character のエラーは codecs.open 使ってるのに
'\r' を読み取る事を考慮していない Cython のバグ
638名無しさん@そうだ選挙に行こう:2010/07/11(日) 12:59:03
俺が体験してきた中で
一番最初に出会って、頻繁に出るのはBOM関連のエラーだな
たまにBOM付きじゃないとダメってのがあるけど基本なしですれば問題ない
まずBOM無しUTF-8を既定にできるエディタをさがすべき
639名無しさん@そうだ選挙に行こう:2010/07/11(日) 13:38:55
>>638
で、そのBOM関連エラーでどうやって0x8dが出るんよ。
640名無しさん@そうだ選挙に行こう:2010/07/11(日) 13:54:11
ソースコードエンコーディング絡みなら SyntaxError が出るはず
641名無しさん@そうだ選挙に行こう:2010/07/11(日) 14:03:33
こんなprintの段階でググる能力すらないのが終わってる
どうしても答えが欲しいなら別言語に移ったほうがよさそう
恐らく、このまま甘やかすとこのスレに日記帳のように書き込まれる
642名無しさん@そうだ選挙に行こう:2010/07/11(日) 14:20:06
cythonのことよく知らなくて変なレスつけちゃった
>>634はスルーしてね

>>637のとおり、CPythonでコード書くときには\rを落としとけってことなのね

http://groups.google.com/group/pinoy-python-users/browse_thread/thread/f558512bdf42134b
> Just remember to replace CR/LF endings in Windows to LF. Use Notepad+
> +'s Edit > EOL Conversion to convert line-endings or else Cython will
> argue about invalid characters when compiling.
643名無しさん@そうだ選挙に行こう:2010/07/11(日) 14:21:01
訂正。CPythonじゃなくてcython
644名無しさん@そうだ選挙に行こう:2010/07/11(日) 14:57:16
PyQt4を試してるんですが
Qt4(C++)の方でQHogehogeクラスを継承して定義したQHagehageクラスを
PyQt4から使用するにはどのような使い方をすればよいのでしょうか?
645名無しさん@そうだ選挙に行こう:2010/07/11(日) 14:59:19
PyQTは糞なので
WxPythonかGTK使ってください。
646名無しさん@そうだ選挙に行こう:2010/07/11(日) 15:09:31
おっPyQT
647名無しさん@そうだ選挙に行こう:2010/07/11(日) 15:17:53
おっPyQTとはどういう意味ですか?
648名無しさん@そうだ選挙に行こう:2010/07/11(日) 15:30:45
QHagehageをラップしたC拡張ライブラリを作らないと駄目じゃないの?
649648:2010/07/11(日) 15:32:22
C拡張ライブラリ => C拡張モジュール
650名無しさん@そうだ選挙に行こう:2010/07/11(日) 18:03:43
俺も>>644知りたいわ。
651名無しさん@そうだ選挙に行こう:2010/07/11(日) 18:21:16
sip使って自分で拡張モジュール作る。
652625:2010/07/11(日) 21:38:48
>>635
ありがとうございます

C:\Users\test>python tmp.py
b'C:\\Users\\test\\hello.pyd' (22, 23)
C:\Users\test\hello.pyd
でした
653名無しさん@そうだ選挙に行こう:2010/07/11(日) 22:25:08
Python3とPython2が混じってるのかな?
Python2はインストールしていない?
654デフォルトの名無しさん:2010/07/11(日) 23:50:12
ウィンドウズのコマンドプロンプトだと↑キーを押すと以前入力した文字が入力されますが
Python Shellで、同じような事は出来ないでしょうか?
655デフォルトの名無しさん:2010/07/11(日) 23:56:47
漏れも知りたい鯛
656デフォルトの名無しさん:2010/07/12(月) 00:06:25
IDLE だったら Options -> Keys の history-next, history-previous で Alt+n, Alt+p じゃない
657デフォルトの名無しさん:2010/07/12(月) 00:07:19
つrlwrap
658デフォルトの名無しさん:2010/07/12(月) 00:13:30
>>656,657
ありがとうございます!
659デフォルトの名無しさん:2010/07/12(月) 00:57:43
>>654
ipython便利だよ。windowsだとpyreadlineといっしょにいれるとよろし。
660デフォルトの名無しさん:2010/07/12(月) 01:05:00
661デフォルトの名無しさん:2010/07/12(月) 01:18:27
ズバリtwitterクライアント作ろうと思ったら、何が必要ですか?

右も左も分からない初心者です
662デフォルトの名無しさん:2010/07/12(月) 01:29:26
189 デフォルトの名無しさん [] 2010/07/12(月) 00:13:57 ID: Be:
    Twitterクライアント
    クリップボード監視に向いてる言語は何ですか?
663デフォルトの名無しさん:2010/07/12(月) 01:57:28
お前の頭骨に入ってる塊より百段上等な脳みそ
664デフォルトの名無しさん:2010/07/12(月) 02:14:34
665デフォルトの名無しさん:2010/07/12(月) 03:22:15
Python3.12 の Windows 版で日本語を含むフォルダ内のC拡張モジュールを
インポートするスクリプトを実行するとUnicodeDecodeErrorが発生するみたい。
おそらく Python3 のバグ。
(importdl.c の _PyImport_LoadDynamicModule => _PyImport_FindExtension => PyDict_GetItemString等
=> ... => PyUnicode_DecodeUTF8 の流れで cp932 のバイト列が utf8 で変換されてエラーになる)

再現例:
D:/ほげほげ/winsound.pyd, D:/ほげほげ/a.py の状態で a.py を実行する。
winsound.pyd は Python31/DLLs のをコピー a.py の中身は import winsound のみ
666デフォルトの名無しさん:2010/07/12(月) 03:25:36
>>625 のエラーはこのせいだと思う
667デフォルトの名無しさん:2010/07/12(月) 05:40:41
>>653
混じってます
Vista HomeBasicSP1とwindows7の2台で利用していますが
VistaはCygwinの中にPython2.4と2.5が入っています。
cygwinは普段利用していなく、コマンドプロンプトを利用しています。
windows7では、最近2.7と2.6を入れました。
このエラーが起きてから入れたような気もします。定かではないですが・・・

Vista
C:\Python31 , C:\cygwin\lib\Python2.4 , C:\cygwin\lib\Python2.5
windows7
C:\Python31 , C:\Python27 , C:\Python26
こんな感じの場所にいます
668デフォルトの名無しさん:2010/07/12(月) 06:08:14
>>665
ありがとうございます
直りました

>>653
色々教えていただきありがとうございます
時間を取らせてしまって、ごめんなさい。
ここにレスするときに、ディレクトリ名が乗せられなくて、勝手に手で消してからレスしていました。
そのディレクトリ名の中に日本語が含まれていました。
申し訳ありません
一言、消していることを明記すべきでした。
b'C:\\Uers\\test\\******\\\x8d(ry
ごめんなさいごめんなさい....orz
669デフォルトの名無しさん:2010/07/12(月) 06:50:27
センスないな
670デフォルトの名無しさん:2010/07/14(水) 17:34:50
クラスにメソッドを後付けすることはできますか?
継承せずに、メソッドを定義したいのですが
671デフォルトの名無しさん:2010/07/14(水) 20:06:45
>>670
できます。
class Foo(object):
    pass
def _bar(self):
    pass
Foo.bar = _bar
672デフォルトの名無しさん:2010/07/16(金) 01:05:22
>>671
そんな簡単にできるのですね
ありがとうございました
673デフォルトの名無しさん:2010/07/16(金) 02:18:16
けどbuiltinなクラスには後付けできないという...
これって、できないようにする積極的な理由あるの?
674デフォルトの名無しさん:2010/07/16(金) 02:21:16
継承すれば済む話だろ
675デフォルトの名無しさん:2010/07/16(金) 02:29:31
builtin typeに追加できてもカオスになるだけだと思うわ
676デフォルトの名無しさん:2010/07/16(金) 02:33:04
それどこの Ruby on Rails www
677デフォルトの名無しさん:2010/07/16(金) 02:52:55
>>673
変更不可能にすることで、メモリ消費量を削減したり、呼び出しを高速化したりできる。
基本的に変更可能な属性は dict 型のオブジェクトを使って管理されているので、
その呼び出しはハッシュテーブルからの検索とかオーバーヘッドが少し大きい。

あと、基本型を弄るとどこに副作用が起こるかわからないという理由もあるな。
基本的に直接弄るんじゃなくて継承しろという方針。
678デフォルトの名無しさん:2010/07/16(金) 03:29:16
>>677
なんだ、実装上の都合なのか。

Pythonは理想追い求めるより現実的な落としどころ見つける言語だってのは知ってるけど、
それでも一貫性のなさを感じる。
679デフォルトの名無しさん:2010/07/16(金) 03:35:59
読解力のなさに絶望した
680デフォルトの名無しさん:2010/07/16(金) 05:00:38
builtinクラスに後付けしたいケースってありますか?
ちょっと思いつかないな
681デフォルトの名無しさん:2010/07/16(金) 07:36:12
list.joinしたいんだろ
682デフォルトの名無しさん:2010/07/16(金) 23:26:13
file.foo = 1 はできないのに、
StringIO.StringIO.foo = 1 ができる合理的理由が見当たらない。
683デフォルトの名無しさん:2010/07/16(金) 23:44:22
684デフォルトの名無しさん:2010/07/17(土) 00:14:02
>>682
お前には cStringIO をやる
685デフォルトの名無しさん:2010/07/17(土) 14:34:23
__slot__
686デフォルトの名無しさん:2010/07/18(日) 03:35:53
aiueo = input()
import aiueo

みたいに読み込むモジュールを入力して与えることって出来るの?
687デフォルトの名無しさん:2010/07/18(日) 04:01:21
Yes, we can.
688デフォルトの名無しさん:2010/07/18(日) 05:05:59
>>686
__import__()
689デフォルトの名無しさん:2010/07/18(日) 11:49:25
imp モジュールもあるよ
690デフォルトの名無しさん:2010/07/19(月) 04:15:36
質問です
dictが入れ子になってるdictの構造だけをコピーしたいのですが
copyで浅いコピーをしているつもりが、入れ子の中までは担保されません

In [2]: a = {"a":{"b":"con_b","c":"con_c"}}
In [3]: b = a.copy()
In [4]: a
Out[4]: {'a': {'b': 'con_b', 'c': 'con_c'}}
In [5]: b["a"].update({"b":"hoge"})
In [6]: b
Out[6]: {'a': {'b': 'hoge', 'c': 'con_c'}}
In [7]: a
Out[7]: {'a': {'b': 'hoge', 'c': 'con_c'}}

これを a["a"]["b"] == "con_b" としたいのですが
updateというアプローチは間違っているのでしょうか
691デフォルトの名無しさん:2010/07/19(月) 04:37:26
>>> a = {"a":{"b":"con_b","c":"con_c"}}
>>> b = a.copy()
>>> b["a"].update({"b":"hoge"})
>>> a
{'a': {'c': 'con_c', 'b': 'hoge'}}
>>>
692デフォルトの名無しさん:2010/07/19(月) 04:40:31
>>> import copy
>>> a = {"a":{"b":"con_b","c":"con_c"}}
>>> b = copy.deepcopy(a)
>>> b
{'a': {'c': 'con_c', 'b': 'con_b'}}
>>> b["a"].update({"b":"hoge"})
>>> b
{'a': {'c': 'con_c', 'b': 'hoge'}}
>>> a
{'a': {'c': 'con_c', 'b': 'con_b'}}
693デフォルトの名無しさん:2010/07/19(月) 05:07:31
>>692
おー、ありがとうございます
こういうケースはcopy.deepcopy()しないといけないんですね
694デフォルトの名無しさん:2010/07/19(月) 05:12:43
>dictが入れ子になってるdictの構造だけをコピーしたいのですが
>copyで浅いコピーをしているつもりが、入れ子の中までは担保されません

質問の仕方が変だ
695デフォルトの名無しさん:2010/07/19(月) 10:08:58
>>693
浅いコピーってのは、
b = {}
for key in a:
  b[key] = a[key]
と同じだから、この場合
b["a"] = a["a"]
ってしたことになる。ここで、 a["a"]は辞書型なのでmutable。

浅いコピーでも完全にコピーされるのは、
・要素が全部immutable(int, float, str, tupleなど)
・要素の要素、要素の要素の要素、...が全部immutable
のときのみ。
もちろん、完全にコピーされないことを知った上で大丈夫だと分かっててコピーするのはOK

要素の要素がmutableで浅いコピーがうまくいかない例:
a=(1,(2,[3,4]))
b=a
b[1][1][1]=0
print b
# ==> (1, (2, [3, 0]))
print a
# ==> (1, (2, [3, 0]))
696デフォルトの名無しさん:2010/07/19(月) 12:32:02
pythonの初心者参考本を見て、elseを使おうとしたのですが
SyntaxError: invalid syntax
というエラーが出てしまいます。何か間違ってるところがあったら教えてください。コードはこんな感じです。

color = '緑'
score = 20
if color == '赤':
bonus = 0
  
ここでelseを入れるとエラーが出ます。あとインデント幅も妙です。
参考本ので説明に使われているpythonのバージョンと今使ってるバージョンが違うので
書き方に違いがあるのかと思ってぐぐってみたんですが分かりませんでしたorz
697デフォルトの名無しさん:2010/07/19(月) 14:26:45
>>696
こんな感じで普通に動くと思うけど。
インデントは全角スペースにしてるから気をつけてね

color = '緑'
score = 20
if color == '赤':
 bonus = 0
else:
 bonus = 20
print bonus


elseの後に:を入れ忘れているんじゃないかと予想。
698デフォルトの名無しさん:2010/07/19(月) 16:56:13
>>697
if color == '赤'
bonus = 0
この後改行するとbonusの"b"と同じ列から入力するようになっていてelseを入れてみると
   bonus = 0
    else:

SyntaxError: invalid syntax
というエラーが出てしまいます。丸々コピーしてみても駄目でしたすみません。
何かすごい根本的な問題のような気がするのでこのままスルーして頂いても結構です。ありがとうございました。
699デフォルトの名無しさん:2010/07/19(月) 17:10:01
>>698
elseを打つときはデデント(インデントの反対)して
ifと同じ桁から始めなきゃだめだよ

あともし統合環境使ってるのであればPythonに慣れるまでは凍結して
シンプルなテキストエディタとコンソール(コマンドプロンプト)を使ったほうがいい
700デフォルトの名無しさん:2010/07/19(月) 17:53:47
>>699
デデントしたらできました!ありがとうございます。
701デフォルトの名無しさん:2010/07/19(月) 20:31:18
なんだ自演か
702デフォルトの名無しさん:2010/07/20(火) 03:25:51
なんだかうまい方法を思いつかない

before =[
{"id":"0","aaa":"fdafdsadafdas"},
{"id":"0","bbb":"dafdgdfagdfsg"},
{"id":"0","ccc":"dafdgdfagdfsg"},
{"id":"1","aaa":"gdfagdfsgdsaf"},
{"id":"1","bbb":"dgfagdsdaffsg"},
{"id":"1","ccc":"dadfgdfddfasg"},
{"id":"1","ddd":"dadfgdfddfasg"}
]

という要素として辞書を持ったリストを

after =[ {"id","0","aaa":"fdafdsadafdas","bbb":"dafdgdfagdfsg","ccc":"dafdgdfagdfsg"}, {"id":"1","aaa":"gdfagdfsgdsaf","bbb":"dgfagdsdaffsg","ccc":"dadfgdfddfasg","ddd":"dadfgdfddfasg"}
]

のように"id"を共通のキーにしてまとめたい
どのようにすればいいだろうか
703デフォルトの名無しさん:2010/07/20(火) 03:50:43
[dict(reduce(operator.add, map(dict.items, b))) for a, b in itertools.groupby(before, operator.itemgetter("id"))]
704デフォルトの名無しさん:2010/07/20(火) 05:44:08
>>703
動きました。いいワンライナーですね!
itertools と reduce、 まだ怖くて使ったことがないです…
自分も使いこなせるようになろう
705デフォルトの名無しさん:2010/07/20(火) 07:22:19
ワンライナーにおしこめないで判りやすくするにはこんな感じかな。
t = defaultdict(dict)
for item in before:
    t[item['id']].update(item)
after = t.values()
706デフォルトの名無しさん:2010/07/21(水) 05:11:58
>>704
>怖くて

どういう意味?
707デフォルトの名無しさん:2010/07/21(水) 10:29:25
でもそういう便利機能を使いこなしちゃうとあとで読みにくかったりするわな
708デフォルトの名無しさん:2010/07/21(水) 23:16:18
>>688
出来ましたありがとうございます。
709デフォルトの名無しさん:2010/07/22(木) 02:24:28
コンパイル済ヘルプ chm (win) 形式の日本語言語リファレンスの
新しいのはないでしょうか。
2.5 まではあったんですが。
http://www.python.jp/pub/doc_jp/
710デフォルトの名無しさん:2010/07/23(金) 16:55:06
tkinterの良い勉強サイトや本ってない?
可能ならば3に対応してる奴で、英語か日本語のもの
711デフォルトの名無しさん:2010/07/23(金) 17:01:14
あるよどっかに
712デフォルトの名無しさん:2010/07/23(金) 17:29:23
pythonを勉強してたんだが全く意味がわからんのでまずはプログラムのイロハを学びたいと思います

LINUXでC言語でも勉強したいと思います
713デフォルトの名無しさん:2010/07/23(金) 17:32:24
こう言っては何ですがプログラミング自体を諦めたほうがいいのではないでしょうか
714デフォルトの名無しさん:2010/07/23(金) 17:38:39
pythonで学ぶプログラム作法おすすめ
715デフォルトの名無しさん:2010/07/23(金) 17:51:31
どうでもいいけど、このスレに居る奴って英語読めなさそうだな
716デフォルトの名無しさん:2010/07/23(金) 17:53:37
英語読めれば>>714もただで読めるのにね
717デフォルトの名無しさん:2010/07/25(日) 17:16:57
#!/usr/bin/python
# -*- coding:utf-8 -*-

if __name__ == '__main__':
 print 'java-ja great!!!'
718デフォルトの名無しさん:2010/07/25(日) 17:48:11
>>717
特定されました
719デフォルトの名無しさん:2010/07/25(日) 19:00:33
classを作って、アトリビュートaを設定してるつもりなのですが
インポートしてaを開こうとするとそんなアトリビュート無いと言われます
何が間違っているのでしょうか
http://www.dotup.org/uploda/www.dotup.org1051891.jpg.html
720デフォルトの名無しさん:2010/07/25(日) 19:14:35
>>719
1. class は import しない。 import test としたら、 class test と全く別の test モジュールが import され、 test クラスは消え去る。
2. self.a = 0 では、クラスではなく、クラスのインスタンスに属性を追加しているので、インスタンスを作らないと a は見えない。

class test:
    def __init__(self):
        self.a = 0

t = test()
t.a
721デフォルトの名無しさん:2010/07/25(日) 19:15:24
>>719
importはモジュールを読み込み、初期化する文。
classとは関係ない。

その例だと、testという名前でクラスを定義した後に、
testというモジュールをimportしている。
722デフォルトの名無しさん:2010/07/25(日) 19:20:46
>>720,721
なるほど!ありがとうございます。

723デフォルトの名無しさん:2010/07/26(月) 16:36:07
askopenfilenameって3.0以降でどう書けばいいの?
tkFileDialogのimportの変更点も分かってないから誰か解説してくれ
724デフォルトの名無しさん:2010/07/26(月) 17:09:13
2to3.py
725デフォルトの名無しさん:2010/07/26(月) 17:11:10
neetossan.py
726デフォルトの名無しさん:2010/07/26(月) 18:17:58
助かった、tkinterも変えてくれるのね
アスキーコード云々もsitecustomize.pyに2行足しただけですんなり行った
727デフォルトの名無しさん:2010/07/27(火) 00:34:17
__init__
とか__がやたら目につくのはなぜ?
気持ち悪いんだけど
728デフォルトの名無しさん:2010/07/27(火) 01:51:47
誰かいる??
729デフォルトの名無しさん:2010/07/27(火) 02:00:45
(゚Д゚≡゚д゚) 今ぱいスレには俺様しかいない!
730デフォルトの名無しさん:2010/07/27(火) 02:00:51
居ないけど何よ?
731デフォルトの名無しさん:2010/07/27(火) 02:03:38
pythonでmsecまでを表示したいんですが、
何か良い方法は無いでしょうか??

例えば

2:00:44.009727 の時だと

7244.010 みたいなかんじです。

マイクロsecをとって//1000すると、9 とかになるので、
マイクロsecから丸める方法でも3桁にしたいです・・

お知恵をお貸し下さい。
732デフォルトの名無しさん:2010/07/27(火) 02:07:07
俺じゃ答えはわからないけど一緒に考えることなら出来るよたぶん
733デフォルトの名無しさん:2010/07/27(火) 02:07:22
>>731
>>> sec = 12345.12345
>>> print "%.3f" % (sec,)
12345.123
734デフォルトの名無しさん:2010/07/27(火) 02:09:02
python] ミリ秒まで表示させる
■[python] ミリ秒まで表示させる 00:35 ミリ秒まで表示させる -
With skill and creativeness を含むブックマーク はてなブックマーク - ミリ秒まで表示させる - With skill and creativeness ミリ秒まで表示させる - With skill and creativeness のブックマークコメントCommentsAdd Star

参考URL

import datetime
now = datetime.datetime.now()
print now.strftime("%Y%m%d%H%M%S.") + "%04d" % (now.microsecond // 1000)
→ '20081118003037.0479'

これは?
ttp://d.hatena.ne.jp/shohu33/20081117/1226936130
735デフォルトの名無しさん:2010/07/27(火) 02:11:21
ありがとうございます。

datetime.datetime.now()とかで、
秒換算して取得することって出来ますか?

それと、>>733を組み合わせると、完璧の予感!
736デフォルトの名無しさん:2010/07/27(火) 02:15:28
>>> datetime.datetime.now()
datetime.datetime(2010, 7, 27, 2, 14, 21, 705000)

日本語が理解できない
これで秒取って、足したり引いたりじゃだめなの?
737デフォルトの名無しさん:2010/07/27(火) 02:27:16

d = datetime.datetime.now()

sec = ((d.hour*60 + d.minute)*60 + d.second)

print sec
print "%.3d" % (d.microsecond // 1000)

数値型で sec.msec にするには、あと、どうしたらいいですか・・・
行き詰まってしまいました
738デフォルトの名無しさん:2010/07/27(火) 02:39:45
d = datetime.datetime.now()
sec = ((d.hour*60 + d.minute)*60 + d.second)
msec ="%.3d" % (d.microsecond // 1000)
print sec + float(msec)/1000
これでいいか。
739デフォルトの名無しさん:2010/08/01(日) 23:52:56
readで引数を細かくとったり、urllib.urlretrieveを使うことで
ダウンロードの進捗状況を知ることができるのは分かったのですが

アップロードの進行状況(POST)を知る方法は標準ライブラリでありませんか?
urllib2とかurllibを使って
740デフォルトの名無しさん:2010/08/02(月) 00:12:41
windowsでeasy installを使いたいのですが、
c:\Python25\Scriptディレクトリ自体がありません
どうしたらいいでしょうか
741デフォルトの名無しさん:2010/08/02(月) 00:19:55
>>740
なくてもインストールできるからさっさと入れればいいだろ
742デフォルトの名無しさん:2010/08/02(月) 00:26:52
は?
743デフォルトの名無しさん:2010/08/02(月) 00:29:38
>>739
その方法で本当にDL進捗状況がわかるのか気になる
socket使えばアップ・ダウン両方できる
744デフォルトの名無しさん:2010/08/02(月) 00:30:31
easy install自体が見あたらないのです
http://www.python.jp/Zope/download/pythoncore
ここのpython-2.5.2.msiを使用しました。
745デフォルトの名無しさん:2010/08/02(月) 00:42:46
>>744
そうじゃない
まずeazy_installをいれろよアホがっつってんだよカス
746デフォルトの名無しさん:2010/08/02(月) 00:45:18
えっ、easy installは最初から入ってるものではなかったのですか?
その方向で調べてみます
ありがとうございます。
747デフォルトの名無しさん:2010/08/02(月) 00:57:01
>>743
すいません後出となって申し訳ないのですが、ソケットを直接つかうの以外で
無いだろうかと探していました

748デフォルトの名無しさん:2010/08/02(月) 01:12:31
eazy_installをeazy_installでインストール出来ないのは大問題だな
749デフォルトの名無しさん:2010/08/02(月) 01:59:53
今はsetuptoolsじゃなくてdistributeだから気をつけなよ>easy_installの入手
750デフォルトの名無しさん:2010/08/02(月) 03:17:27
一度タイムゾーンを設定したら
以後、時刻関係の関数は一律そのタイムゾーンで値を返してくるようにしたいのですが
そういうことできますか?
751デフォルトの名無しさん:2010/08/02(月) 03:32:50
環境変数で TZ=hoge する
752デフォルトの名無しさん:2010/08/02(月) 20:46:35
'''
プログラム超初心者です
↓のようなことをするときにbreakは書いたほうがいいのでしょうか、、、
あともっとスマートに書ける方法があったら教えてください。

ユーザーから続けて数字の入力を受け付け
合計が100に近づくまでその数値を足し続けるプログラムを書きなさい
'''
hundred = 100
value = 0
def numint(x):
  while True:
    try:
     y = raw_input(x)
     z = int(y)
    return z
    #break ←ブレイクは書いたほうがいいのでしょうか?
    except ValueError:
      print u'Error : 文字ではなく数値を入力してください'

value += numint('数値を入力してください>> ')

while value < hundred:
  print value, u'まだ足りないみたいです'
  value += numint('もっと大きな数字を入力しましょう>> ')
print value, u'合計が100以上になりました'

753デフォルトの名無しさん:2010/08/02(月) 20:49:01
また突っ込み所満載のネタを・・・
754デフォルトの名無しさん:2010/08/02(月) 22:06:48
>> 752 です
http://www.python.jp/Zope/intro/instant_hacking_jp
プログラムの練習に↑のInstant hacking をしていたのですが
例外処理を加えようとして pylint が到達不能code を警告していたので
どうしたもんかなぁと思って書き込みしてみたところです

ぐぐったところ while True はあまり書かない方がいいみたいなので
他の手を使ってみます、、、

while True したら break を書くものとばかり思っていたので
頭が混乱してしまいました…
755デフォルトの名無しさん:2010/08/03(火) 00:26:47
昔PHPにループからreturnするとメモリリークするというバグがあった
756デフォルトの名無しさん:2010/08/03(火) 03:24:01
>>752
質問に答えるなら、returnの後の行はどうせ実行されないのだから、breakは不要。
けれどこれ、except節はtry節が終わった直後に置かないといけないからSyntaxError出ると思うよ。

そしてお説教。
> hundred = 100
こういう名前の付け方は意味が無い。
変数は、
・いちいち書くと長ったらしい/処理を分けたいから名前をつけたい
・今後変更される可能性に備えて、名前をつけておきたい
ときに使うものだから。仮に200に変更したとき、
hundred = 200
にするわけにはいかないでしょう。
これもあんまりいい名前じゃないけど、俺ならNにしちゃうかな。

numintの引数xも、一目でxが何か分からないから問題あり。

例外が出なかったときに処理したいのなら、Pythonでは例外の後のelse節でそれができる。

N = 100
value = 0
def numint(msg):
  while True:
    y = raw_input(msg)
    try:
     z = int(y)
    except ValueError:
      print u'Error : 文字ではなく数値を入力してください'
    else:
      return z
757デフォルトの名無しさん:2010/08/03(火) 07:03:55
>>756
ありがとうございます!!! めちゃくちゃスッキリしました!!
なぜかerrorを出さずに実行できてしまっていたのでどうしよう…ってなっていたところでした

みんなのPythonを1/3ほど読み終えたところですが、変数の名前は適当でいいのかなぁとか思っていました、、、

もっと基礎を勉強したほうがいいですねorz
多謝です!!
758デフォルトの名無しさん:2010/08/03(火) 10:08:33
>>757
>みんなのPythonを1/3ほど読み終えたところですが、変数の名前は適当でいいのかなぁとか思っていました、、、

そんなことが書いてあるの!?
酷い本だ。
759デフォルトの名無しさん:2010/08/03(火) 10:13:52
今までプログラムを触ったことがないならまずはC言語からの方がいいと思う、教材の良とか質とかもあるし。
オライリーのヘッドファーストシリーズお勧め
760デフォルトの名無しさん:2010/08/03(火) 10:15:59
handred = 100は教材以前の問題じゃないだろうか。
自分の子供に「息子」という名前を付けるのと同じだ。
761デフォルトの名無しさん:2010/08/03(火) 11:27:02
なんとかjr
762デフォルトの名無しさん:2010/08/03(火) 11:30:31
handredってなに、手が赤いの?
763デフォルトの名無しさん:2010/08/03(火) 12:40:08
>>762
半分ドレッドな臭い頭のひとのことです
764デフォルトの名無しさん:2010/08/03(火) 12:41:39
>>758
いえ、変数の名前のつけ方とかはみんなのPythonには書いてなかったので、、、
読んでみた感想は、なんとなくプログラムを大雑把に理解できる感じでした
ビット演算の項でつまずいてますけどorz

変数の名前にhundredを使ったのは私ですのでみんパイは悪くないです
図書館で借りたので文句のつけようがないです、、、

>> 759
「みるみるプログラミングがわかる本」掌田津耶乃
「 C言語プログラミング入門―C99対応―」田中敏幸
[改訂新版] これからはじめるプログラミング基礎の基礎]谷尻 かおり
あたりを図書館で借りて勉強しようと思います

「エキスパートPythonプログラミング 」Tarek Ziade
「Head First JavaScript」Michael Morrison
は買ってみます



765デフォルトの名無しさん:2010/08/03(火) 21:40:06
確かに
みんパイ読んだけどちんぷんかんぷんだった
で、Cの本を適当に読んだら非常に解りやすい
やっぱプログラム初心者にパイソンはむついのかなーと何気に感じた今日この頃
766デフォルトの名無しさん:2010/08/03(火) 21:43:43
みんなのPythonは前半は実践編が無いからな〜
767デフォルトの名無しさん:2010/08/03(火) 23:36:04
Webにあるチュートリアルじゃむずいの?
768デフォルトの名無しさん:2010/08/04(水) 00:24:30
数千円でプログラミングのエッセンスが身につくと思っているとかおめでたいな。
769デフォルトの名無しさん:2010/08/04(水) 00:28:01
6千ちょいだせばなんとか
http://www.amazon.co.jp/dp/0262062798/
770デフォルトの名無しさん:2010/08/04(水) 00:39:28
ビッド演算で躓く子が、ポインタを理解できるのかい?
771デフォルトの名無しさん:2010/08/04(水) 00:42:50
>>770
整数はbit幅が固定じゃないからcよりも理解しにくいんじゃない?
772デフォルトの名無しさん:2010/08/04(水) 00:58:45
>>770
ビッド演算とか言ってないからたぶん大丈夫だろう
773デフォルトの名無しさん:2010/08/04(水) 01:22:47
>>764
命名規約だけで大議論が起こるくらいにはネーミングは重要だよ。
Pythonの命名規約は「PEP8」でググれば出てくるから調べてみな。
774デフォルトの名無しさん:2010/08/04(水) 09:24:20
>>773
http://bitbucket.org/tavisrudd/pylint_etc_wrapper.py/src/tip/pylint_etc_wrapper.py
上のエラーチェックを使っているのですが、defaultにpep8を追加して使えるようにしました

「l」「0」「I」は使わない、関数名は小文字、classは先頭大文字などとても参考になります

ビット演算は否定のところでつまづいてます。
26(10) 11010(2) の否定は 100101(2) のはず?なのに
26 11010 -27 -11011
と出るので…考えれば考えるほどわからないorz
自分の書いたスクリプトが悪いのでしょうか…
スレ違いすいません、、、
775デフォルトの名無しさん:2010/08/04(水) 09:45:37
「2の補数」でぐぐれ

>>> ~26
-27

26(10) = 11010(2)
-27 = ~26(10) = 1111...(ここの1が論理的に無限に続く)...111100101(2)
これで 26 + (-27) = -1 になることを考えてみるとわかりやすい
111111 = -1
111110 = -2
111101 = -3
111100 = -4
...
100111 = -25
100110 = -26
100101 = -27
776デフォルトの名無しさん:2010/08/04(水) 15:58:27
>>775
ありがとうございます!! めちゃくちゃ助かりました!!
なんとなくですけど、理解できたような気がします!

~(not)はビットを反転させて、1の補数をとっているんですよね。
>>format(26, 'b')
11010
>> ~ 26
-27
>>format(-27, 'b')
-11011

単行演算子 - は2の補数をとるので、表示は1111..(32列)..1100101ではなく
-11011となっていたのですね!

この理解であっているでしょうか、、、
777デフォルトの名無しさん:2010/08/04(水) 16:46:19
血が牛
778デフォルトの名無しさん:2010/08/04(水) 18:41:38
>>776
format(n, 'b')はnを2進表記にした文字列を返すってだけだよ
整数の内部表現を返すわけではない
779デフォルトの名無しさん:2010/08/04(水) 19:00:07
一応補足しておくと b って意味は、
2進数表記の際に、頭につける 0b からきてる。
これは16進数の0xと一緒の意味。
format(num, 'b')は単純に
数字を変換、どんな物かというとb、bの意味は2進数。
780デフォルトの名無しさん:2010/08/04(水) 19:04:39
それは補足じゃなくて蛇足
781デフォルトの名無しさん:2010/08/04(水) 19:06:23
なんでbなんだ
782デフォルトの名無しさん:2010/08/04(水) 19:10:20
binary
783デフォルトの名無しさん:2010/08/04(水) 19:14:02
なんでxなんだ
784デフォルトの名無しさん:2010/08/04(水) 19:25:38
hexともしました
785デフォルトの名無しさん:2010/08/04(水) 23:23:55
つまり6進数か。
786デフォルトの名無しさん:2010/08/05(木) 01:01:11
2進数16進数はわかるけど8進数の存在意義がよくわからん.
言語によっては数値リテラルを0から始めると8進数として扱ったり
16進数で十分じゃん
787デフォルトの名無しさん:2010/08/05(木) 01:18:52
chmod 755
788786:2010/08/05(木) 03:25:08
そういえばそれは8進数だな

けどソースコードを書く上での存在意義がよくわからんのだよ>8進数
わざわざ8進数を記述する文法があるわけだから何かしら意義はあるのだろうけど
789デフォルトの名無しさん:2010/08/05(木) 03:31:47
分かった。16進だと記号が入ってウザいから
790デフォルトの名無しさん:2010/08/05(木) 03:46:54
10進数のつもりが8進数でした・・・になるより記号付きの方がいいと思うんだけど
791デフォルトの名無しさん:2010/08/05(木) 06:11:08
8進数は64bitと相性が良い
792デフォルトの名無しさん:2010/08/05(木) 06:14:00
>>790
2進数 0B01234567
8進数 0O01234567
16進数 0X01234567
793デフォルトの名無しさん:2010/08/05(木) 06:20:07
>>792
このおねぼけさん
794デフォルトの名無しさん:2010/08/05(木) 07:59:55
>>793
2進数 0b01111111
8進数 0o01234567
16進数 0x01234567
795デフォルトの名無しさん:2010/08/05(木) 08:03:08
ぶっちゃけ Python から Ruby の ActiveRecord に相当するものを使いたいときって
どんな ORM があるの?
http://takaki-web.media-as.org/blog/archive/2007/02/19/pythonactiverecord
とか
SQLAlchemy とか
Elixir とか

796デフォルトの名無しさん:2010/08/05(木) 14:24:33
すみませんGAEでpythonいじってます。
サンプルコードにconfig.pyってのがあって、グローバル変数の初期化をしています。
そこにBASE_URL =とあってURLを設定します。

で、これだとローカルテストとデプロイでいちいちURLを変えないといけないので改造したいわけです。

しかし、grepしてみてもどこからもconfig.pyを明示的に呼び出したりしてません。
pythonはアプリケーション起動時にアプリケーションディレクトリ以下のすべてのpyファイルを読み込むのでしょうか?
だとするとself.request.urlの戻り値が期待できないタイミングだと予想されます。

requestのタイミングで毎回セットするならグローバル変数にする意味ない気がするし・・・

こんなとき、自分のドメインを調べてグローバル変数にセットする一番標準的な方法を教えていただければ幸いです。

よろしくお願いします。
797デフォルトの名無しさん:2010/08/05(木) 17:11:34
BASE_URL = os.path.split(os.path.abspath(__file__))[0]
798デフォルトの名無しさん:2010/08/05(木) 18:00:02
>>797
これはローカルのパス・・・・ですよね?
799デフォルトの名無しさん:2010/08/05(木) 22:02:49
>サンプルコード

どこの?
800デフォルトの名無しさん:2010/08/05(木) 22:56:55
「新規」という名前のフォルダを作りたいのですが以下だとダメでした。
アドバイスいただきたいです。

import os
dir_name = '新規'
os.mkdir(dir_name)
801デフォルトの名無しさん:2010/08/05(木) 23:16:26
普通に作れると思うけどソースにencoding指定がないとかだろうか

とりあえずOSとPythonのバージョン
実行形態(スクリプトとして実行、あるいは対話型シェルから等)
あとエラーメッセージとどう「ダメ」だったのかをどうぞ
802デフォルトの名無しさん:2010/08/05(木) 23:17:17
import os
dir_name = u'新規'
os.mkdir(dir_name)
803デフォルトの名無しさん:2010/08/05(木) 23:24:16
作れなかったから例外が発生すると思うのだが
804デフォルトの名無しさん:2010/08/05(木) 23:29:18
コンソールからでなくアイコンをダブルクリックで起動してるとかかも

>>801にソースコードの文字コードも追加で
805デフォルトの名無しさん:2010/08/05(木) 23:35:08
作成権限ある?
806デフォルトの名無しさん:2010/08/06(金) 04:18:42
組み込み関数のソースコードを見ることはできないのでしょうか?
807デフォルトの名無しさん:2010/08/06(金) 04:56:46
808デフォルトの名無しさん:2010/08/06(金) 07:47:33
エロリおかず用HDDが逝ってからどうでもよくなった
エロサイトのブクマ外したり内臓HDDのエロ全消去して
エロ禁&オナ禁初めて現在14日目
最近ではIVやティッシュはもちろん、テレビでもエロイ事してる人がいるから
テレビも部屋から出した。
徹底してるぜ俺
809デフォルトの名無しさん:2010/08/06(金) 08:06:02
実況乙
810デフォルトの名無しさん:2010/08/06(金) 09:59:17
>>799
すみません個人ブログなので貼れません
811デフォルトの名無しさん:2010/08/06(金) 10:09:57
なんで?
812デフォルトの名無しさん:2010/08/06(金) 10:36:01
Windows XP SP3
Python 2.6.4
です。

ファイルのフルパスを受け取った文字列があります。
これを
ディレクトリパスとファイル名(拡張子なし)と拡張子名に分割し、再び結合する
というPythonプログラムはどうかけるでしょうか?

例えば
full_p_str = "D:\Dir1\Dir2\Dir3\filename.html"
のようにファイルのフルパスを受け取ってfull_p_strに格納し、
full_p_str_result = os.path.join(ディレクトリパス, 拡張子のないファイル名 + "." + 拡張子名)
のようにしたいのです。

よろしくお願いいたします。
813812:2010/08/06(金) 10:40:33
os.path.split
でフルパスをフルパス名を分割できるようですが、
ファイル名を拡張子とそうでない部分に分割するにはどうしたらよいでしょうか?
814デフォルトの名無しさん:2010/08/06(金) 10:43:55
それ専用なものは無いので正規表現をつかえばいいんじゃないですか?
815デフォルトの名無しさん:2010/08/06(金) 10:51:56
>>814
正規表現ですか。
ありがとうございます。
816デフォルトの名無しさん:2010/08/06(金) 11:08:02
>>> import os
>>> fullpath = r'D:\Dir1\Dir2\Dir3\filename.html'
>>> dirname, filename = os.path.split(fullpath)
>>> filename_wo_extension, extension = os.path.splitext(filename)
>>> os.path.join(dirname, filename_wo_extension + extension)
'D:\\Dir1\\Dir2\\Dir3\\filename.html'

>>> 'hoge.piyo.fuga.html'.rsplit('.', 1)
['hoge.piyo.fuga', 'html']
817デフォルトの名無しさん:2010/08/06(金) 11:09:09
os.path.basepath
os.path.filepath
818デフォルトの名無しさん:2010/08/06(金) 12:13:47
みなさんありがとうございます。
それで解決できました!!
819デフォルトの名無しさん:2010/08/06(金) 12:16:49
ttp://imagepot.net/image/128106448608.jpg
このようなコードを書くと、
インデントがおかしいと言われてしまいます。

このコードでコメントを全部消して一行につなげれば
通りますが、そうなると可読性が下がってしまいます。

どうすればこのような一見して分かる可読性を維持しながら
インデントで怒られないでしょうか?

よろしくお願いいたします。
820デフォルトの名無しさん:2010/08/06(金) 12:27:40
#bbb から#eeeの話だよな?
+ で繋ぐ部分はインデントどうやっても構わなくなるはずなんだけど

怒られてるの違う部分じゃないの?
821デフォルトの名無しさん:2010/08/06(金) 12:28:24
TypeError: bad operand type for unary +

って言われます・・・。
822デフォルトの名無しさん:2010/08/06(金) 12:31:44
s = 'aaa' + \
 ', ' + foo + \
 ', ' + bar + \ ...

文字列リテラルだけなら

s = ('aaa'
 'bbb'
 'ccc')
823デフォルトの名無しさん:2010/08/06(金) 12:32:25
+ \
ですか。
ありがとうございます。

それで解決します!
824819:2010/08/06(金) 12:34:57
+ \
で解決するかと思ったのですが、

SyntaxError: unexpected character after line continuation character

と言われてしまいました。
各行にコメントを後ろに付けたいので、そういう場合はどうすればよいでしょうか?
825デフォルトの名無しさん:2010/08/06(金) 12:46:12
a = (1 +  # one
     2 +  # two
     3)  # three
826819:2010/08/06(金) 12:56:08
>>825
ありがとうございます。
それで完全解決いたしました。

感謝申し上げます。
827812:2010/08/06(金) 13:05:43
>>812です。

環境は
Windows XP SP3 Python 2.6.4です。

Shift-JISのファイルを読み込んでUTF-8に変換し、
そのファイルを加工した後
再びShift-JISに戻したいのですが、どのようにすればよいでしょうか?

import codecs
f = codecs.open(ファイルのフルパス,"r", "utf_8", "ignore")
とすると元のファイルがUTF-8でないと開けず、
かといって
f = codecs.open(ファイルのフルパス,"r", "shift-jis", "ignore")
とすると開いたファイルがShift-JISのままです。

どなたか解決策を教えていただけますでしょうか?
828デフォルトの名無しさん:2010/08/06(金) 13:23:07
codecsの挙動わかってる?
f = codecs.open(ファイルのフルパス,"r", "shift-jis", "ignore")
この状態でreadすればUnicode文字列として読み込まれるから普通に加工できる。書き出すときも
w = codecs.open(ファイルのフルパス,"w", "shift-jis")
とやってwriteにUnicode文字列を渡せば、shift_jisに変換して書き込んでくれる
UTF-8相当のstrにして何かやりたいならencodeメソッドなりご自由に
829デフォルトの名無しさん:2010/08/06(金) 13:27:17
似たような質問をどこかで見たぞ??
830デフォルトの名無しさん:2010/08/06(金) 13:32:36
>>828
ありがとうございます。
codecsってそういう動作なのですね。
助かりました。
831デフォルトの名無しさん:2010/08/06(金) 17:50:32
s = 'aaa' + \ # hoge
 ', ' + foo + \ # fuga
 ', ' + bar + \ # hage ...

s = 'aaa' + # hoge \
 ', ' + foo + # fuga \
 ', ' + bar + # hage \ ...

どっちもだめなのか
832デフォルトの名無しさん:2010/08/06(金) 17:53:35
>>828

f = codecs.open(ファイルのフルパス,"r", "cp932", "replace")
w = codecs.open(ファイルのフルパス,"w", "utf-8", "replace")

が良くね?
833デフォルトの名無しさん:2010/08/06(金) 19:22:15
>>831
何スレか前に似たような内容を書き込んだ覚えがある
前者のような書き方は許して欲しいんだけどねぇ
834デフォルトの名無しさん:2010/08/06(金) 23:28:38
Python 2.6.4です。
<tab>単語1<tab>単語2
という形式の文字列が延々と羅列されてるtxtファイルで、
単語1の部分が以前の行で既出で重複している場合に、その行を消すにはどうしたらいいでしょう?
835デフォルトの名無しさん:2010/08/06(金) 23:56:52
>>834
もう少し具体的に
836デフォルトの名無しさん:2010/08/07(土) 00:00:18
tsvファイルからデータを読み込んで重複除去したいんでしょ
順序は維持しないとだめ?
837デフォルトの名無しさん:2010/08/07(土) 00:08:45
>その行を消す

この場合消すのは今見ている行なのか
既出で重複していた方の行なのか
あと2行じゃなくて3行以上の複数行が既出だったらどうするのかとか
838デフォルトの名無しさん:2010/08/07(土) 00:10:08
既出の単語1が単語2の位置にあっても既出とみなすのか
同じカラムのときだけ既出扱いするのか
839デフォルトの名無しさん:2010/08/07(土) 03:51:47
単語1同士の重複を処理するだけでいいなら、単純に:

fr = open("sample.txt", "r")
fw = open("output.txt","w")
catch = []

for line in fr:
 if line[1] not in catch:
  catch.append(line[1])
  fw.write(line)
840デフォルトの名無しさん:2010/08/07(土) 08:23:23
レスありがとうございます。
>>839さんの試してみます。

<tab>*STD_PAUSED<tab><tab><tab>"一時停止"
<tab>*STD_GAME<tab><tab><tab>"ゲーム"
<tab>*SYS_SHADERMODE0<tab><tab>"Auto"
<tab>*SYS_SHADERMODE1<tab><tab>"0.5"
<tab>*SYS_SHADERMODE2<tab><tab>"1.1"
<tab>*SYS_SHADERMODE3<tab><tab>"1.1"
<tab>*STD_PAUSED<tab><tab><tab>"Paused"
<tab>*STD_GAME<tab><tab><tab>"Game"

こういう感じの形式で、タブ、*から始まるタグ、不定数のタブ、"文字列"という行が延々と続いています。
上記の例だと*STD_PAUSED、*STD_GAMEのタグが重複しているので、
<tab>*STD_PAUSED<tab><tab><tab>"Paused"
<tab>*STD_GAME<tab><tab><tab>"Game"
の2行を削除したいのです。
行にあるタグが既出の場合その行を消すと言ったらいいのでしょうか。
841デフォルトの名無しさん:2010/08/07(土) 08:52:06
>>839さんのうまくいきませんでした・・・
842デフォルトの名無しさん:2010/08/07(土) 09:25:26
import sys

tags = []
for line in sys.stdin:
  tag = line.split('\t')[1]
  if not (tag in tags):
    tags.append(tag)
    print line,

C:\tmp> type src.txt | python hoge.py > dest.txt
843デフォルトの名無しさん:2010/08/07(土) 10:00:28
>>842
ありがとうございます。
ですがエラーが出てしまいます。

C:\Users\HOGE>type src.txt | python hoge.py > dest.txt
Traceback (most recent call last):
File "hoge.py", line 5, in <module>
tag = line.split('\t')[1]
IndexError: list index out of range
プロセスが、存在しないパイプに書き込もうとしました。

となります。
ここまで来たら自分でやれよ!ってレベルなんでしょうがほんとすいません・・・
844デフォルトの名無しさん:2010/08/07(土) 10:21:48
\tがない行がある
最後の行とか大丈夫か?
何行もあるなら例外処理だな
845デフォルトの名無しさん:2010/08/07(土) 10:38:00
なるほど\t(タブ)でsplitしようにもTabがねーよってエラーメッセージですか。
改行しか無い行が割とあってその最初でエラーが出てます。
他にもコメントだけの行などあるので、
行頭のタブと*付きのタグから始まらない行は例外処理したほうがよさそうですが
その処理も書けませんのでお願いします・・・

情報を後出しにしちゃってすいません。
txtファイルは5000行くらいで*付きのタグは3000種類くらいあると思います。
行によっては
<tab>*tag<tab><tab><tab>"str"
のstrが長く200文字くらいの場合もあります。
846デフォルトの名無しさん:2010/08/07(土) 10:44:32
あらほんとだ。ごめん

for line in sys.stdin:
  if not line.startswith('\t*'): continue
  tag = line.split('\t')[1]
  ...

こんな感じでひとつ
847デフォルトの名無しさん:2010/08/07(土) 11:03:09
tags = []
じゃなくて
tags = set()
とでもしたほうがいいと思うよ
ほかは同じでいいけど

毎回わざわざリニアサーチする必要は無い
848デフォルトの名無しさん:2010/08/07(土) 11:15:28
ごもっともです
痛いところをつかれたので書き直しますね

import sys

tags = set()
for line in sys.stdin:
  if not line.startswith('\t*'):
    continue
  tag = line.split('\t')[1]
  if not (tag in tags):
    tags.add(tag)
    print line,
849デフォルトの名無しさん:2010/08/07(土) 11:30:41
できました!!長々とありがとうございました!
例外の行はそのまま残したかったので以下のようにしました。

import sys

tags = set()
for line in sys.stdin:
 if not line.startswith('\t*'):
  print line,
  continue
 tag = line.split('\t')[1]
 if not (tag in tags):
  tags.add(tag)
  print line,
850デフォルトの名無しさん:2010/08/07(土) 11:51:40
The winner takes it all.
851デフォルトの名無しさん:2010/08/07(土) 12:28:02
すいませんまた質問させてください。

>>840のようなタブ、*から始まるタグ、不定数のタブ、"文字列"の形式で書かれている(例外もある)ファイルが2つあって、
例えばfile_en.txtには

<tab>*STD_PAUSED<tab><tab><tab>"pause"
<tab>*STD_GAME<tab><tab><tab>"game"

のように、file_jp.txtには

<tab>*STD_PAUSED<tab><tab><tab>"一時停止"
<tab>*STD_GAME<tab><tab><tab>"ゲーム"

となっている場合に、タグが同じところから文字列を引っ張ってくるといった処理は
どうやったらできるでしょうか。
852デフォルトの名無しさん:2010/08/07(土) 12:36:40
ちったぁ自分で考えろやボケ
853デフォルトの名無しさん:2010/08/07(土) 12:48:40
>>851 まず二つのファイルを1つに合わせて、ライン別に処理。
重複を見つけたらその行を " で割って文字列の部分だけ取り出す
やりたい事がわからんので違ってたらスマソ
854デフォルトの名無しさん:2010/08/07(土) 13:14:13
>>851
records_en = dict()
fields = '<tab>*STD_PAUSED<tab><tab><tab>"pause"'.split('\t')
tag, text = fields[1], fields[-1]
records_en[tag] = text

あとはがんがれ
いちいち質問してたら時間もったいないよ
855851:2010/08/07(土) 14:00:09
その通りです、楽しようとしすぎだ俺。
Pythonの初歩としてちょうどよさそうだから勉強がてらやってみます
856デフォルトの名無しさん:2010/08/07(土) 14:28:31
>>827
2.6以降でファイルを加工するなら、codecs.openより、ioモジュールの
io.openを使ってみるのはどうかな。
文字列とバイト列の扱いがPython3と同じでわかりやすくなっているし、
ファイルオブジェクトと同じように扱えて全改行文字サポートもある。
こっちの方が便利なんじゃないかな。
857デフォルトの名無しさん:2010/08/07(土) 15:03:29
質問する側がちゃんと質問できてればそうはならんと思う
ちょっと煽るくらいで情報引き出さないと想定できる問題点が多すぎて回答できないとかどうなのよ?

質問者は
素人判断で問題点を想像してそれを根拠に質問するな
大本の判断材料からすでに間違ってることが多すぎる
素直に最終的にやりたい事と現状どうなってるかを明確書け
858デフォルトの名無しさん:2010/08/07(土) 15:17:36
それが書ける奴なら質問しねーよバーカ
859デフォルトの名無しさん:2010/08/07(土) 15:18:38
質問者は回答するのに必要な情報を小出しながらも的確に提示し
エラーの原因を特定する能力もあったね

問題は単に丸投げしようとしてたこと
860デフォルトの名無しさん:2010/08/07(土) 15:27:57
質問者は、とりあえず
挙げた内容でわかる範囲の答えが欲しいだけ。

それで望む答えが得られなけば、掘り下げて
質問を続ける。または打ち切る。

いたって普通の2chの使い方じゃねーの。
861デフォルトの名無しさん:2010/08/08(日) 20:12:55
>>845
> \t(タブ)でsplitしようにもTabがねーよってエラーメッセージですか。
それは違う。

tag = line.split('\t')[1]

fields = line.split('\t')
tag = fields[1]
に変更すると、どの行でエラーが出るだろうか。

>>851は、俺ならこんな感じで実装するけど、こういうのって正直どうよ?
def add_dict(dic, item, value, overwrite=False):
  if overwrite or item not in dic:
    dic[item] = value

tags = dict()
for line in sys.stdin:
 if not line.startswith('\t*'):
  print line,
  continue
 line_sp = line.split('\t')
 if not (tag in tags):
    add_dict(tags, fields[1], fields[-1])
862デフォルトの名無しさん:2010/08/08(日) 21:26:16
>>834,840,851とかです。
今やってることをはっきり言うとThe Chronicles of Riddick Escape from Butcher Bayという
PCゲームの日本語化ファイルが公開されているのですが、
私が買ったThe Chronicles of Riddick Assault on Dark Athenaでそれを流用したいのです。
AoDAにはEfBBの内容も含まれているのでそのままでも一応日本語化は出来ますが完全ではありません。
なのでAoDAの字幕ファイルにうまいことEfBB日本語化の成果をマージ出来ないかとやっていたんです。

しかしいろいろいじっているとそういう作業をしなくても割と綺麗に表示されるようになってしまいました。
Pythonの勉強はまた今度だな・・・!

ちなみのこのゲーム
http://store.steampowered.com/app/9860/
863デフォルトの名無しさん:2010/08/08(日) 21:49:08
リディックって映画で見たような。なつかしす
つかほかのゲームでもPythonはよく使うから勉強続けなさいYO
864デフォルトの名無しさん:2010/08/08(日) 23:39:10
Pythonの悩みはjava-jaがなんとかしてくれるよ。
865デフォルトの名無しさん:2010/08/09(月) 01:13:46
以下のアドレス、

http://yasu1987.blogspot.com/2010/06/simple-twitter-bot-on-google-app-engine.html

から落としてきたソースをパスとユーザー名だけ書き換えてGAEにupすると以下のようなエラーが出ます。
<type 'exceptions.UnboundLocalError'>: local variable 'recent_tweet' referenced before assignment
Traceback (most recent call last):

python2.5、App Engine SDK 1.3.5です。ちなみに他の、あらかじめ指定した
言葉をポストするだけのプログラムはちゃんと動きました。どこをチェックするべきでしょうか。
866デフォルトの名無しさん:2010/08/09(月) 01:51:26
>local variable 'recent_tweet' referenced before assignment
ローカル変数「recent_tweet」に値が代入されるまえに参照されています.

recent_tweetまわりを確認
867デフォルトの名無しさん:2010/08/09(月) 02:03:49
868デフォルトの名無しさん:2010/08/09(月) 03:13:22
>>866
ありがとうございます。ほぼいじり始めたばかりなので理解があやふやなのですが、
「recent_tweet」は def run(name, pswd, search_term): の中で初めて出現し、
36行目で出現と同時にs.textが代入されています。値が代入される前に参照されていると
言うことはないように思うのですが…

>>867
最初、webプログラミングのあるスレで聞いてたんですが
いくらなんでもレベルが低いかな、と思ったのでこちらで…
エラーメッセージもpythonに一般的なことかと思ったので。
GAEに本質的に関わることは向こうで聞くつもりですがダメでしょうか?
869デフォルトの名無しさん:2010/08/09(月) 03:20:38
半年ROMってろ
870デフォルトの名無しさん:2010/08/09(月) 03:25:48
くだらない質問スレなんだからpython関係ならとりあえずいいっしょ
だから>>868ぐらいでいいんでねーの?
871デフォルトの名無しさん:2010/08/09(月) 03:52:24
>>865
そのコードだと、statusが空もしくはRTから始まるデータが1つもないときに
recent_tweetが初期化されない。
872デフォルトの名無しさん:2010/08/09(月) 03:53:38
# for s in status:
# if s.text.startswith("RT"):
# recent_tweet = s.text
# break
# else:
# print "The following tweet would be posted by hand, so skipped it."
# print "Tweet: " + s.text.encode('utf8')
# print
#
# print "Recent Tweet: "+recent_tweet.encode('utf8')

status の中で s.text.startswith("RT") が 真 のものがひとつもなければ
referenced before assignment になるだろう
873デフォルトの名無しさん:2010/08/09(月) 03:55:08
かぶった(笑
しかもこんな時間に orz
874デフォルトの名無しさん:2010/08/09(月) 04:50:49
>>871
>>872
あ、そうか…なるほど。ありがとうございます。
つまりfor文の前にrecent_tweetに適当なダミーの値でも入れておけばいいですか?
作法としてはどうすべきなんでしょうか。
875デフォルトの名無しさん:2010/08/09(月) 06:06:48
python 的にはこんなんでどうか

for s in status:
   if s.text.startswith("RT"):
      recent_tweet = s.text
      break
   else:
      print "The following tweet would be posted by hand, so skipped it."
      print "Tweet: " + s.text.encode('utf8')
      print
else:
  recent_tweet = 'None'
     
print "Recent Tweet: "+recent_tweet.encode('utf8')
876デフォルトの名無しさん:2010/08/09(月) 23:47:14
ちょっと力を貸して欲しいんですけど
linuxでbash scriptからpython scriptを起動しようとしてます。

すると、print()行でIOErrorが出てpython scriptは終了しちゃうんです。
IOError: [Errno 5] Input/output error

terminalで実行すると問題ないので、出力先が無いためのエラーだと
思うんですが、print()行を消さなくちゃ解決できない問題でしょうか?
877デフォルトの名無しさん:2010/08/10(火) 02:27:23
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘
878デフォルトの名無しさん:2010/08/10(火) 02:53:46
print関数だよな?

def print(*args, **keys): pass
で関数を上書き
879デフォルトの名無しさん:2010/08/10(火) 07:11:15
printは関数じゃなくね?3系列ならできるんだろうか
import sys
sys.stdout = open('bbbb, 'a')
print "aaa bbbb ccccc"
的なものではどうだろうか

880デフォルトの名無しさん:2010/08/10(火) 11:29:32
もしくは起動するときに >/dev/null しておけ。
881876:2010/08/10(火) 12:32:24
>>878, 879
確かに上書きできませんでした。
879はログを作るってことですよね。

IOError現象は初めて気づいたのですが、
結局アウトプット先を明示する処理を挟まないと
エラーになるってことなんですかね。

そこらへん自動でやってくれる方法があるものだと
思い込んでました。

なぜかバックグラウンドでプログラムが落ちまくるので
変だなーと思ってました。

>>880
自分も/dev/nullでイケるかと思ってたんですが
なぜか、同じ結果になりました。
882デフォルトの名無しさん:2010/08/11(水) 02:30:44
>>875
ありがとうございます!ダミーでもよさそうでしたけど
そっちの方が綺麗なのでそうします。
883デフォルトの名無しさん:2010/08/12(木) 02:57:25
>>881
stdoutが上流で閉じられてるが、エラーにはしたくないということかな
とりあえず__builtins__.print()にモンキーパッチでいいんじゃないかな

builtins_print = print

def myprint(*a, **w):
 try:
  builtins_print(*a, **w)
 except:
  pass

__builtins.print = myprint

こんな感じでエラーを握りつぶすものに置き換える
884デフォルトの名無しさん:2010/08/12(木) 02:58:10
ああ最後の行__が足りないかも
ごめんそこは適当に直してw
885デフォルトの名無しさん:2010/08/12(木) 03:27:57
こまりますん
886デフォルトの名無しさん:2010/08/13(金) 23:10:46
pdbは対話的なデバッグなのでウェブアプリには使えませんよね
ウェブアプリのデバッグはどうするのがいいでしょうか?
887デフォルトの名無しさん:2010/08/13(金) 23:13:48
Firebug
888デフォルトの名無しさん:2010/08/14(土) 21:05:01
>>886
java-jaに質問を投げろ。ここでweb開発の質問は厳禁だカス
889デフォルトの名無しさん:2010/08/14(土) 23:52:36
LinuxのシステムファイルをWeb経由でいじれるようにroot権限でCGIを実行させたいのですが、
pythonにsuidperlみたいなものはありますか?また、他に良い方法があればそちらもご教示お願いします。
よろしくおねがいします。
890デフォルトの名無しさん:2010/08/15(日) 01:52:07
Cで汎用の安全に配慮したwrapper書いてる
891889:2010/08/15(日) 03:29:29
自前でhttpdを書くことで解決しました。
892デフォルトの名無しさん:2010/08/16(月) 01:26:11
http://abc.com/test.py?val=aaa
こんな感じでアクセスした時にvalの値をgetするにはどうしたらいいのでしょうか?
893デフォルトの名無しさん:2010/08/16(月) 02:25:49
import cgi
f = cgi.FieldStorage()
aaa = f.getvalue('val', 'no data')
894デフォルトの名無しさん:2010/08/16(月) 09:08:55
wsgi なら webob とか
http://pythonpaste.org/webob/
895デフォルトの名無しさん:2010/08/16(月) 12:00:52
ありがとうございました
896デフォルトの名無しさん:2010/08/16(月) 23:55:37
ShiftJISをUTF8に変換する方法をおしえてください。
897デフォルトの名無しさん:2010/08/16(月) 23:58:36
s.replace('ShiftJIS', 'UTF8')
898デフォルトの名無しさん:2010/08/17(火) 00:21:09
文字コードです><
899デフォルトの名無しさん:2010/08/17(火) 03:50:07
>>898
'死ね'.decode('cp932').encode('utf-8')
900デフォルトの名無しさん:2010/08/17(火) 05:42:08
'死ね'.decode('cp932', 'replace').encode('utf-8', 'replace')
901デフォルトの名無しさん:2010/08/17(火) 10:42:15
java-jaならやさしく教えてくれるのに><
902デフォルトの名無しさん:2010/08/17(火) 17:26:10
本スレで氏ね
903デフォルトの名無しさん:2010/08/18(水) 05:03:40
>>883
遅れましたが、ヒントをありがとうございます。
その手でいこうとおもいます。

from __future__ import print_function

builtins_print = __builtins__.print

def myprint(*a, **w):
try:
builtins_print(*a, **w)
except:
pass

__builtins__.print = myprint

こんな感じにしたら思い通りになりました。
904デフォルトの名無しさん:2010/08/19(木) 07:46:18
正規表現でヒットした文字列だけ取り出すやりかた教えて
905デフォルトの名無しさん:2010/08/19(木) 07:56:48
re.search
re.findall
re.match
906デフォルトの名無しさん:2010/08/19(木) 08:00:05
http://docs.python.org/library/re.html#re.findall

import re

s = "Hello,world."
L = re.findall("H.+,|w.+\.", s)
print " ".join(L)
907デフォルトの名無しさん:2010/08/19(木) 16:06:39
すみません。質問させてください。

環境
OS:WindowsXP バージョン:Python2.6 開発環境:エディタ+コマンドライン
やりたいと思っていること:
 WEBページでHTTPの応答としては正常で HTMLのページ内に"エラーが発生しました。"
 と表示されているページでエラーを検知したい。

描いたコード一部
//ヘッダの部分に下記追加
# -*- coding: utf-8 -*-

req = urllib2.Request(url)

  rawdata = opener.open(req).read()
chk = re.search(u"エラーが発生しました。",rawdata)
  if chk:
   print("失敗")
sys.stdout.flush()

downo = open( os.path.basename(savename) ,"wb")
  downo.write(rawdata)

というようなコードを書きました。この方法ではページ上のエラーが発生しましたという文字を検知できませんでした。
どなたかアドバンスをお願いできませんでしょうか?ちなみに、書き込んだhtmlファイルはUTF8で書き込まれておりました。
908デフォルトの名無しさん:2010/08/19(木) 16:14:39
utf8でかかれてたなら検索時に
re.search(u"エラーが発生しました。",rawdata.decode('utf-8'))
が必要じゃないかな

ユニコードとutf8の違いがわかってないと思われる
909デフォルトの名無しさん:2010/08/19(木) 16:39:20
re.search(u"エラーが発生しました。",rawdata.decode(req.header['Content-charset']))
見たいに書ければいいんだけどな
910デフォルトの名無しさん:2010/08/19(木) 16:40:51
アドバンスって釣りか?w
911デフォルトの名無しさん:2010/08/19(木) 16:56:22
UnicodeとUTF-8の違いは? その2
http://hibari.2ch.net/test/read.cgi/tech/1274937437/
912デフォルトの名無しさん:2010/08/19(木) 17:00:25
>>911
この場合はPythonでの扱いの話なんだからそっちに行ったら余計混乱しそうだ

u""とかdecodeによって作られるユニコード文字列は、utf8とは又違う文字コードだと考とけば大体大丈夫だろう
913デフォルトの名無しさん:2010/08/19(木) 17:05:41
返答ありがとうございます。
UnicodeとUTF8の違いわかってないですね。

調べてみました。
u指定での文字指定はUnicode型(符号化がUCS-2/4)で、UTF8とはちゃうんだよ
ってことですね。

てかそもそもの自分の勘違いはヘッダのcodingですね。
これソースを単にUTF-8で読み込みますってだけなのか。よく調べてみたら。
内部的に全部UTF-8になるものだと思ってました。

結果を得るまでに時間がかかりそうですが試してみます。
ありがとうございます。
914デフォルトの名無しさん:2010/08/19(木) 17:15:31
すみません
あるディレクトリにある xxx.png ファイルをすべて *.gif に変換したいのですが
python ではどのように書けば出来ますか?
915デフォルトの名無しさん:2010/08/19(木) 17:17:07
丸投げは宿題スレでも行ってろカス
916デフォルトの名無しさん:2010/08/19(木) 17:18:04
PIL
917907:2010/08/19(木) 17:33:15
ほんとだ アドバンスになってたわww
918デフォルトの名無しさん:2010/08/19(木) 17:38:18
919デフォルトの名無しさん:2010/08/20(金) 10:14:14
>>916
ありがとうございます
とりあえず
ttp://www.pythonware.com/library/pil/handbook/image.htm
を参考にして思った動作が出来るようになりました
920310:2010/08/21(土) 03:06:48
凄い初歩的な質問で申し訳ないのですが
Pythonで1行に複数の変数を定義しようと思って
a=0 \n b=1\n
こんな感じで書くとエラーになるのですが
どうしたら1行内に収めることが出来ますでしょうか
921デフォルトの名無しさん:2010/08/21(土) 03:08:31
a=0; b=1

pythonぽくないけど
922デフォルトの名無しさん:2010/08/21(土) 03:10:27
>>921
おお、ほんとだ
そう言えばPythonでも;って使えるんでしたね
ありがとうございます!
923デフォルトの名無しさん:2010/08/21(土) 06:55:56
a, b = 0, 1
こっちのほうがPythonぽい
924デフォルトの名無しさん:2010/08/21(土) 08:32:02
>>923
なにそのワンライナー
925デフォルトの名無しさん:2010/08/21(土) 10:32:29
多重代入も知らんのか
926デフォルトの名無しさん:2010/08/21(土) 12:37:17
知ってましたよ
927デフォルトの名無しさん:2010/08/21(土) 12:38:46
>>923
同意
928デフォルトの名無しさん:2010/08/21(土) 13:10:47
Explicit is better than implicit.
Simple is better than complex.
Sparse is better than dense.
929デフォルトの名無しさん:2010/08/21(土) 13:18:22
訳: ドイツの女よりもスペインの女のほうがよかった
930デフォルトの名無しさん:2010/08/21(土) 13:44:50
Young is better than old.
931デフォルトの名無しさん:2010/08/21(土) 18:45:38
畳じゃねえんだぞw
932デフォルトの名無しさん:2010/08/21(土) 18:49:06
e s s e esse
933デフォルトの名無しさん:2010/08/21(土) 19:06:59
Young is better than old.
画像でググった俺に隙はなかった
934デフォルトの名無しさん:2010/08/21(土) 19:13:48
When I was younger, so much younger than today!
935デフォルトの名無しさん:2010/08/21(土) 23:54:15
Oh, java-ja nice!!
936デフォルトの名無しさん:2010/08/22(日) 00:11:50
Java-ja is so neat.
but they are some hot shit.
937デフォルトの名無しさん:2010/08/22(日) 01:56:42
java-ja night開催をクリスマスに向け企画中
938デフォルトの名無しさん:2010/08/22(日) 20:40:16
Windows VistaでPython 2.6です。

質問しようと思ったら
自己解決しました。
939デフォルトの名無しさん:2010/08/22(日) 20:42:33
お礼くらい言えよ
940デフォルトの名無しさん:2010/08/22(日) 20:48:43
わろた
941デフォルトの名無しさん:2010/08/22(日) 20:53:00
>>939
大丈夫です
すでに直接言っておきました
942デフォルトの名無しさん:2010/08/22(日) 22:45:31
Windows XP SP2 で Python2.6です。

lis = ["aaa", "bbb", "ccc"]
の様に、文字列がいくつか格納されたリストがあります。
これを引数argとして受け取り
"aaabbbccc"
のように全てつなげた文字列として返す関数func(arg)を書きたいと思います。

lis.join()で行けるかと思ったら
AttributeError: 'list' object has no attribute 'join'とエラーになりました。

lisの要素数は確定していませんので、len(lis)で取得せねばなりません。
len(lis)==0である可能性と、lisの各要素がまた空文字列である可能性もあります。
しかしlisの要素がもしあるならそれは全て文字列であることだけは確定しています。


こんな関数func(arg)はどのように書けば良いでしょうか?
あるいはそれをしてくれる組み込み関数はありますか?

よろしくお願い申し上げます。
943デフォルトの名無しさん:2010/08/22(日) 22:49:56
reduce()
944デフォルトの名無しさん:2010/08/22(日) 22:50:44
''.join(lis)
945デフォルトの名無しさん:2010/08/22(日) 23:03:04
ありがとうございます。
lis = ["aaa", "bbb", "ccc"]
print 'lis'
print lis
print '"".join(lis)'
print "".join(lis)
はうまく動作しました。

print 'lis'
print lis
print 'reduce(labmda x, y: x+y, lis)'
print reduce(labmda x, y: x+y, lis)
だと
 reduce(labmda x, y: x+y, lis)
          ^
SyntaxError: invalid syntax
というエラーになります。
これはなぜでしょうか??
946デフォルトの名無しさん:2010/08/22(日) 23:08:18
lambda
947デフォルトの名無しさん:2010/08/22(日) 23:09:48
某サイトよりコピペしていました。


ありがとうございました。
948デフォルトの名無しさん:2010/08/23(月) 02:33:27
すみません、ランブダってなんですか?
949デフォルトの名無しさん:2010/08/23(月) 02:38:09
本当はもう気づいているのでしょう、ランブダが何であるかを。
950デフォルトの名無しさん:2010/08/23(月) 02:38:44
深いな
951デフォルトの名無しさん:2010/08/23(月) 08:09:32
ランブダは始まりであり全てである
952Perl忍者仙人モード ◆M5ZWRnXOj6 :2010/08/23(月) 09:16:56
なにこのキモイスレ
953デフォルトの名無しさん:2010/08/23(月) 13:31:31
950超えたので一応立てておきます
仲良く使ってね

くだすれPython(超初心者用) その8
http://hibari.2ch.net/test/read.cgi/tech/1282537545/
954デフォルトの名無しさん:2010/08/23(月) 13:32:38
pythonって日本語弱いんですか?
955デフォルトの名無しさん:2010/08/23(月) 14:12:22
>>954
そんなことはない。
Windowsで使うならR*byよりいいと思う。
956デフォルトの名無しさん:2010/08/23(月) 14:13:35
>>954
だれがそんなこと言ったんだ
957デフォルトの名無しさん:2010/08/23(月) 14:14:29
私だ
958デフォルトの名無しさん:2010/08/23(月) 14:18:17
>>954
自分の経験から言うと日本語の文字列を扱う際に文字コードなんかを曖昧なまま処理した場合
Perl や Ruby は間違ってても「なんとなく」動くが Python はきっちりエラーになる
エラー出さずに勝手に文字化けするか例外出して中断するかの違いだな
959デフォルトの名無しさん:2010/08/23(月) 14:18:42
特にパス関係については他の追従を許さないぜ
960デフォルトの名無しさん:2010/08/23(月) 14:19:59
Javaのヌルポみたいなもんですね
961デフォルトの名無しさん:2010/08/23(月) 14:20:40
漏れはちなみにそこは Python の弱点じゃなくて利点だと思っている
962デフォルトの名無しさん:2010/08/23(月) 14:32:14
でも、WindowsのIDLEでは u"ほげ" ができない。 (Python3では直る)
sys.argv もUnicodeじゃなくてcp932なので、渡せないファイル名があり、
対策するには自分でGetCommandLineWしてコマンドライン解析しないといけない。
(これもPython3では直る)

WindowsのUnicode対応に関して言えば、Python3が最強だと思う。
963デフォルトの名無しさん:2010/08/23(月) 15:05:24
>sys.argv もUnicodeじゃなくてcp932なので、渡せないファイル名があり、

kwsk
964デフォルトの名無しさん:2010/08/23(月) 20:10:23
>>963
Python2 は int main(int argc, char *argv[]) で受け取った引数をそのバイト列のまま sys.argv
に入れてる。
Python3 は int _wmain(int argc, wchar *argv[]) で受け取った引数をそのUTF-16のまま
sys.argv に入れてる。
965デフォルトの名無しさん:2010/08/24(火) 05:35:23
urllib,urllib2を試してるんですが
なんで2つに分かれてるんですか?
あとcookieはどうしたら使えますか?
966デフォルトの名無しさん:2010/08/24(火) 08:12:49
os.path は UTF8 と Unicode がごちゃ混ぜ実装。
文字列の置き換えとか文字列処理用途には使えないや
967デフォルトの名無しさん:2010/08/24(火) 09:24:51
>>965
日本語リファレンスには書いてない話:urllibとurllib2の違いってなんだ
http://hylom.net/2010/02/10/urllib_and_urllib2_usag/
968デフォルトの名無しさん:2010/08/24(火) 09:32:07
>>966
嘘を書くな
969デフォルトの名無しさん:2010/08/24(火) 10:02:50
これは糞スレ
970デフォルトの名無しさん:2010/08/24(火) 10:56:59
Pythonスレの遅い初夏ですね
971デフォルトの名無しさん:2010/08/24(火) 11:05:54
>>965
import cookielib
cookielib.CookieJar() を変数に保存しておいて必要に応じて
urllib2.build_opener(urllib2.HTTPCookieProcessor())
に渡す
972デフォルトの名無しさん:2010/08/24(火) 11:10:27
>>967
ありがとうございます
2つの違いについては答えが見つかりましたが
そもそも2つに分かれている理由が判りません

>>971
ありがとうございます
やってみます
973デフォルトの名無しさん:2010/08/24(火) 11:26:59
>>972
>そもそも2つに分かれている理由が判りません

後方互換性を維持するためかなあ。
974デフォルトの名無しさん:2010/08/24(火) 11:36:12
>>> import re
>>> r = re.compile(r'hoge(.*)', re.I)
>>> for m in r.findall(u'hogefuga\nhogehage\nhogehoge\n'):
... print m
...
fuga
hage
hoge
各行毎に出て来ますが
'fuga\nhogehage\nhogehoge\n'
を出力として欲しいときはどうすれば良いでしょう?
975デフォルトの名無しさん:2010/08/24(火) 11:43:59
>>974
import re
r = re.compile(r'hoge(.*)', re.I)
x = r.findall(u'hogefuga\nhogehage\nhogehoge\n')
print u'\\n'.join(x)

でもお前正規表現における.と改行の扱い勘違いしてないか?
976デフォルトの名無しさん:2010/08/24(火) 11:53:39
r = re.compile(r'hoge(.*)', re.I | re.S)
977デフォルトの名無しさん:2010/08/24(火) 11:57:11
>>975
それだと
fugahagehoge
になっちゃいますよね

>>976
出来ました
ありがとうございました
978デフォルトの名無しさん:2010/08/24(火) 13:05:23
>>> import re
>>> r = re.compile(r'hoge(.*)hoge', re.I | re.S)
>>> for m in r.findall(u'hogefuga\nhogehage\nhogehoge\n'):
... print m
...
fuga
hogehage
hoge
これは
'fuga\nhogehage\nhoge'
が検出されているということだと思いますが
re.S をつけたままで
'fuga\n'

'hage\n'

''
が出て来るようにするにはどうすれば良いでしょう?
979デフォルトの名無しさん:2010/08/24(火) 13:11:32
>>978
それは最大一致になってる
(.*) → (.*?)
980デフォルトの名無しさん:2010/08/24(火) 13:59:13
>>979
出来ました
ありがとうございます

でも
'fuga\n'

'hage\n'

''
じゃなくて
'fuga\n'

''
しか取れません
981デフォルトの名無しさん:2010/08/24(火) 14:11:06
知らんがな
982デフォルトの名無しさん:2010/08/24(火) 21:48:50
くだすれPython(超初心者用) その8
http://hibari.2ch.net/test/read.cgi/tech/1282537545/
983デフォルトの名無しさん:2010/08/24(火) 21:54:11
hoge(.*?)(?=hoge)
984デフォルトの名無しさん:2010/08/24(火) 21:56:12
>>983
出来ました
ありがとうございます
985デフォルトの名無しさん:2010/08/25(水) 10:57:14
コマンドの返り値がabcだとして

select = コマンド
select.replace('ab','cc')

これだと上手くいかないのは何故
986デフォルトの名無しさん:2010/08/25(水) 19:10:36
そんなに氏ねって言われたいのか
987デフォルトの名無しさん:2010/08/25(水) 19:17:23
>>985
>コマンドの返り値がabcだとして

kwsk
988デフォルトの名無しさん:2010/08/25(水) 19:58:18
   ┌─┐
   │●│
   └─┤
   _   ∩
  ( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘      おっぱい!おっぱい!
989デフォルトの名無しさん:2010/08/25(水) 20:12:29
select = select.replace('ab','cc')
じゃね?
990デフォルトの名無しさん:2010/08/26(木) 02:26:20
あまりの過疎スレぶりに(ry
991デフォルトの名無しさん:2010/08/26(木) 16:59:53
ume
992デフォルトの名無しさん:2010/08/26(木) 17:00:21
ume
993デフォルトの名無しさん:2010/08/26(木) 23:26:03
うめ
994デフォルトの名無しさん:2010/08/26(木) 23:28:20
うめ
995デフォルトの名無しさん:2010/08/27(金) 01:07:28
ほっとけばおちるのに
996デフォルトの名無しさん:2010/08/27(金) 01:08:41
>>995はjava-ja
997デフォルトの名無しさん:2010/08/27(金) 01:19:56
人格の問題でしょ
998デフォルトの名無しさん:2010/08/27(金) 01:21:41
この板、dat落ち早すぎね?
最後まで拾えない事もしばしば
もっと速い板もありゅ
981を越えて落ちる時間は、もしかして板によらず一定なのかも。
運営のどこかに希望を持ってけば変えられるかなぁ?
dat落ちの条件って、確か
・一定レス数未満のスレで、一定時間書き込みが無い
・一定レス数以上(981?)のスレで、一定時間書き込みが無い
・板別に設定されたスレ保持数を超えた際、最終書き込み日時が古いもの
の3つだったっけ?
あ、でも最後のは定期的にチェックしてるだけで新スレが立った瞬間じゃないんだっけ
1ヶ月ルールがある板もある
999デフォルトの名無しさん:2010/08/27(金) 05:02:54
うめ
1000デフォルトの名無しさん:2010/08/27(金) 05:03:37
くだすれPython(超初心者用) その8
http://hibari.2ch.net/test/read.cgi/tech/1282537545/
10011001
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。