|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
| i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
_,,,......,,__
/_~ ,,...:::_::;; ~"'ヽ
(,, '"ヾヽ i|i //^''ヽ,,)
^ :'⌒i i⌒"
|( ´∀`) < きのこ のこーのこ げんきのこ ♪
|(ノ |つ
| |
⊂ _ ノ
""U
_,,,......,,__
/_~ ,,...:::_::;; ~"'ヽ
(,, '"ヾヽ i|i //^''ヽ,,)
^ :'⌒i i⌒"
(´∀` )| < エリンギ まいたけ ブナシメジ ♪
⊂| (ノ |
| |
ヽ _ ⊃
.U""
|
| ミ
| ミ サッ!
| ミ
|
先輩方に質問させてください
RubyではなくなぜPythonを選んだのですか?
Zen of Pythonに共感したから。
圧倒的にPythonの方がメジャーだから。
「国産」なんて売り文句を付けないと信者の勧誘もできない、という点に
ネガティブな印象を感じた事も否定できない。
RubyからPerl臭がしたから
C(C++じゃなく)に慣れてるとRubyよりPythonの方が気持ち良い
選ぶもなにも両方自然にできるでしょ
俺も7と一緒だな。
Perlが嫌で別のを探したのに、RubyからはPerl臭がした。
┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘
PyScripterは不評みたいだけど
みんなエディタとかIDEとか何つかってんの?
}やendを書く手間が省けるから
windowsではnodepad、linuxではgedit使ってる
間違えた。notepad++
vim
emacs
操作がVi(Vim)方式で、モダンなエディタが登場したら、
それを使うわ。
超重いけどeclipse
Eric4
俺はPyScripter好きだよ。
軽いし、スクリプト実行した後やブレイクしたときに
内蔵のシェルに変数の値等が全部そのまま残ってるから
テストコードとか書かなくても色々確認できて便利だし。
単なるエディタには戻れないな。
xyzzy
RoR との対比で Python で言えば django って思ってるひとは多いみたいだけど
werkzeug とか Pyramid とかが今後の流れっぽい
シンプルなものが流行るのは良い傾向
komodo edit
フレームワークとかDSLは規模がでかくなりすぎてコストに見合うか疑わしいレベルになってきてる
俺は自家製XMLテンプレートエンジンでシコシコやるわ
>>30 オートインデントしてくれる?
ならWindowsでは秀丸使ってもいい。
Tkinterの使い方を調べているのですが
αbrendでWindowを透過させる方法はありますか?
無ければregionでも結構です
あれば教えてください
正解: tkを捨てる
>>32 tkinterはよく知らんがこれのことか?
import Tkinter as tk
root = tk.Tk()
# use transparency level 0.1 to 1.0 (no transparency)
root.attributes("-alpha", 0.3)
root.mainloop()
出来ました!!
ありがとうございます!!!
ふと思い立って
math.exp(1+1j)
とか試したらダメだった
xyzzyはできるみたいだな
まさかテキストエディタで複素解析できるとは(何に使うのか知らないが……)
(exp (complex 0 pi)) -> #C(-1.0d0 1.224606353822377d-16)
(exp (complex 0 (* 2 pi))) -> #C(1.0d0 -2.449212707644755d-16)
cmath.exp(1+1j)
>>37 サンクス!別のモジュールとは盲点だったぜ……
構文が覚えられない
考えるな、フォースを感じるんだ。
IDLE最強他は糞
pass
#!/usr/bin/python
import&ndsp;sys
if&ndsp;len(sys.argv)&ndsp;==&ndsp;2:
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;tab&ndsp;=&ndsp;int(sys.argv[1])
else:
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;tab&ndsp;=&ndsp;8&ndsp;
for&ndsp;c&ndsp;in&ndsp;sys.stdin.read():
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;space&ndsp;=&ndsp;'&ndsp'&ndsp;+&ndsp;';'
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;p&ndsp;=&ndsp;sys.stdout.write
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;if&ndsp;c&ndsp;==&ndsp;'&ndsp;':
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;p(space)
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;elif&ndsp;c&ndsp;==&ndsp;'\t':
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;for&ndsp;i&ndsp;in&ndsp;range(tab):
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;p(space)
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;else:
&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;&ndsp;p(c)
#!/usr/bin/python
import sys
if len(sys.argv) == 2:
tab = int(sys.argv[1])
else:
tab = 8
for c in sys.stdin.read():
space = ' ' + ';'
p = sys.stdout.write
if c == ' ':
p(space)
elif c == '\t':
for i in range(tab):
p(space)
else:
p(c)
文字化けについて質問させてください。
# -*- coding: utf-8 -*-
print "ㅇ"
print "ㄴ"
だと正常に出力されるのですが、
# -*- coding: utf-8 -*-
print "ㄴ"
だと文字化けしてしまいます。
"ㄴ".decode("utf-8") にすると
UnicodeEncodeError: 'ascii' codec can't encode character u'\u3134' in position 0: ordinal not in range(128)
import sys
import codecs
sys.stdout = codecs.getwriter('utf_8')(sys.stdout)
を追加すると
UnicodeDecodeError: 'ascii' codec can't decode byte 0xe3 in position 0: ordinal not in range(128)
環境はWindows7, Python2.6.1で行なっています。
出力は
>python.exe hoge.py >hoge.txt
でテキストに出力して確認しています。
どうすれば文字化けをしないようにできるのでしょうか?
pythonで、メモリ消費量を量りたい時はどうすればいい?
できれば
with memorychecker() as m:
計測対象コード
print m.check()
とかすればメモリ使用量が見れるとうれしい。
>>46 Python 2.x系列のprintでは、次のように、unicodeではなく標準出力のエンコーディング(Windowsならcp932)に合わせたstrを渡す必要がある。
# coding: utf-8
print u'ほげ'.encode('cp932')
unicodeを渡せるようにするには、一度エンコーディングを指定したらあとは与えられたunicode文字列をデコードして出力してくれるcodecs.getwriterを使う。
# coding: utf-8
import sys
import codecs
sys.stdout = codecs.getwriter('cp932')(sys.stdout)
print u'ほげ'
ねーねー、pipって、もしかしてバージョン番号を指定してインストールするのができない?
かなり困るんだけど・・・
pip install hoge==3.14
ド素人の質問で申し訳ありません。
↓のようにコードを実行するとエラーが出るのですが何ででしょうか…
クラスというものの仕組みがいまいち分かりません。。
class testSuperClass():
X = 5
class test(testSuperClass):
def printXvalue():
print X
test.printXvalue()
教えてください。
クックブックに「メソッドや関数の発行にディクショナリを使う」というのがあります。
if(多言語ではcase)の代わりに使える、との事ですが、関数を辞書に入れていくという
処理が、速度低下につながるという事はないのでしょうか。
ちょーデカいライブラリファイルhoge.pyを
import hogeして、hogeの定数を使う(tempファイルに書き出す)んだけど
書き出した後は使わない。そういう時ってhoge.pyの為に使ったメモリ量を
解放?したいんだけど、どうやるものですか?
特に動作上気にする必要はないだろうけど
どうしても気になるのです。del hogeとかやればOK?
>>53 可能性の話をしたら「ある」。
運悪くキーがことごとく衝突しまくるという可能性。
>>51 class testSuperClass():
X = 5
class test(testSuperClass):
@classmethod
def printXvalue(cls):
print cls.X
test.printXvalue()
>>54 sys.getrefcount(hoge)
とすると 3 と出る。
1つは sys.modules['hoge']
残り1つは何だ?
>>52 自分が使わない分には良いですが他の人のソースコードが読めないのは困りますね…
>>56 ありがとうございます!!!
しかし何でこう書くとうまく行くのかワカラン。。。
オブジェクト思考ムズカシス
ネットで@classmethodを調べてみたら
↓こんなのがあったのですが
class Foo():
@classmethod
def add1(cls, n):
return n + 1
Foo.add1(2)
クラス内の関数を呼び出す場合は、@classmethodを使うってこと…????
python3はいつになったらpythonになりますか?
easy_installでSyntaxErrorばかりなのは疲れたです
>>58 > クラス内の関数を呼び出す場合
それはこう
class testSuperClass():
X = 5
class test(testSuperClass):
def printXvalue():
print testSuperClass.X
test.printXvalue.im_func()
何がどう違うのかワカラン
>>58 まず、Pythonでクラス使うにおいて覚えておかなければいけないのは、
C++やJavaと違って、クラス内のメソッドであっても、メンバ変数やメソッドに直接アクセスできない。
直接アクセスするかわりに、第一引数にとるselfを介してアクセスする。
class Foo:
# 略。
foo = Foo() となっているとき、 foo.method(arg) は、次のように解釈される。
Foo.method(foo, arg)
まずはその基本を叩き込め。
>>51 では、self.Xを呼び出すべきなのにXを呼び出したからエラーが出たのだろう(エラーメッセージはちゃんと書け)
@classmethod は、デコレータ表記といって、基本を分かっていないと難しいので、まだ理解しなくていいが、
class Foo:
@classmethod
def method(cls):
pass
foo = Foo()
のようになっているとき、Foo.method(arg) も foo.method(arg) もどちらも
Foo.method(Foo, arg)と解釈される。
急にレベル落ちたな
なんか速度にこだわってる奴よくいるけど読みやすさ優先じゃなかったらPython使う意味ないだろ
だいたいプログラム書いてからプロファイルとって最適化するのが正道だと思うんだが
しかし放っておくとどんどんくっついて膨らんでいくからな
遅いと分かっているコードを書きたくない気持ちも分かる
>>50 >pip install hoge==3.14
動作確認した。ありがとう。
でもヘルプメッセージには書いてなさそう。
>>48 レスありがとうございます。
試したところ
UnicodeEncodeError: 'cp932' codec can't encode character u'\u3147' in position 0: illegal multibyte sequence
になってしまいました。
>>46 結論から言うと、それはPythonの問題ではない。
出力したテキストを閲覧するときに使ったエディタの問題。
エディタが文字コードの自動判定を行いやすくなるよう
余計なBOMでも先頭に出力しておくといい。
# -*- coding: utf-8 -*-
import codecs
import sys
sys.stdout.write(codecs.BOM_UTF8)
#print "ㅇ"
print "ㄴ"
>>71 ありがとうございます。
…こんな所を見落としてたなんて。
rubyに %w(foo bar hoge) が ['foo', 'bar', 'hoge'] と等価になる記法があるのですが、
pythonにこれと同じ記法はありますか?
>>73 ないよ。
書きやすさ重視の言語じゃないし。
'foo bar hoge'.split()
とするしかないね。
>>74 ないのか、残念。
レスありがとうございました。
>>73-75 'foo bar hoge'.split()
じゃだめなの?
しまった、すでに74に書かれてた。
ちょっと埋まってくる。
u'foo bar hoge'.split()
だと繋がる不思議
%w(foo bar hoge)
なにこれ?こんな構文がいくつもあるの?
3日触れなきゃ完全に忘れそうだな
繋がるとはどういう意味?
>>> u'foo bar hoge'.split()
[u'foo', u'bar', u'hoge']
>>68 >しかし放っておくとどんどんくっついて膨らんでいくからな
非論理的すぎて失笑レベル
>>79 Perlにあるからなあ
Rubyは名前もだが、中身もかなりPerlを意識してるから入れたんだろう
>>81 まともなコードはどんどん使い回していくからなんのかんのとくっつく(依存していく)もんなんだよ
そのうち当初考えもしなかった使われ方をして妙なところでボトルネックになるよりは
そういう懸念を少しでも減らしておきたいと思うのも人情という意味
最適化はあとでやればいい。
「早すぎる最適化」って言うでしょ。
パフォーマンス気にする人が測らずに終わることはないよ大抵
直感的な分かりやすさだって気にすると思うけど伝わらないようだからもういいや
小手先のテクニック頑張って覚えても実装やらバージョンやらプラットフォームが変わった程度で無駄になると思う
つまりお前のやってることはほぼ無駄な努力ってみんなあえて言わないだけ
そんなに気になるならCで書け。
>>87 最適化をコンパイラにおまかせしちゃうならCで書いた方が楽だけれども
命令ごとのスピードを気にして書くならアセンブラの方がいいかもね。
Z80機械語ならまかせろ
DJNZ と django が似てる件
Pythonのはなしをしなさい。
そういえば年末か年明けに出るね
ラクダ本の新版が
Perlはオワコン
unittestで、ある特定のテストだけを実行する方法は?
プログラムの引数にテスト名を指定するだけ
関数を変数に代入し、その変数を関数として使っているコードをチラホラを見かけます。
どんなメリットがあるのでしょうか?
突き放すわけじゃないけどそのコード見て必要性が分からないうちは使う必要ないよ
98 :
96:2011/11/17(木) 21:17:16.90
>使う必要ないよ
使いたい訳ではないのです。勉強中なので、色々なTipsやテクニックの趣旨や
メリットデメリットを知っておきたいのです。
boost::python (2.x) で std::wstring の受け渡しってどうするの?
>>96 op = {'add': lambda a, b: a + b, 'mul': lambda a, b: a * b}
[op[k](2, 3) for k in op]
102 :
デフォルトの名無しさん:2011/11/18(金) 15:25:02.56
エイトクイーン問題をpythonで解きたいと思い、以下のコードを書きましたが、何も結果が返ってきません。
修正箇所を教えていただけないでしょうか。。
確かに何も無いな
104 :
デフォルトの名無しさん:2011/11/18(金) 15:27:42.63
改行が多くて書き込めないようです。。出直してきます。
codepad.orgとかideone.comを使ってね
codepadとかideoneとかに上げろよ
107 :
99:2011/11/18(金) 16:11:59.44
うまくいきました
ほんとうにありがとうございました
python って boost と相性ばっちりじゃん
釣れますか?
boostを使うと人間性が穢れるってばっちゃが言ってた。
Yes, we can.
111 :
デフォルトの名無しさん:2011/11/18(金) 21:10:32.98
UnicodeEncodedError: 'ascii' codec can't encode characters in position 0-4: ordinal not in range(128)
と、androidのSL4Aに言われてしうのですが、SL4Aは日本語が表示できないですか?
ちなみに同コードをLinuxのuxtermで実行するとエラーになりません。
「同コード」が見たい
そこは神通力で黙って座ればピタリと当てて貰いたい。
ヒサヤ大黒堂的な
>>111 Linux上で、ファイルにリダイレクト ($python hoge.py > aaa) したときに
エラーになるならおまえさんのコードが悪い。
116 :
62:2011/11/19(土) 02:52:47.73
>>66,
>>84 もしdict使った方がifより早いからそっち使うって言ったなら、そういう意見もあるかもしれんがねぇ。
通常は、switchのかわりはdictじゃなくif使うものだ。
普通のやり方をしないことに、どんな利点があるのかを知るために速度を測っておくことは決して間違ったことじゃないし、
「dict使うのはトリッキーな上に速度上のメリットもないからifを使う」というのは早すぎる最適化でもなんでもない。
それに、速度を気にするならC使えって言葉は、スクリプト言語でなら効率を気にしない愚かな処理を多様していいという意味ではない。
例えば、速度や効率の観点から、ループ回して何度も文字列を結合したいときは、+演算子での結合でなくlistに入れて後でjoinすることが推奨されているし、
まともなPython使いならそうしている。
ほうほう。ほんなら、わざわざトリッキーで推奨されてないことをあえてする必要はないんじゃね
いいから黙ってプロファイル取れよ
119 :
111:2011/11/19(土) 05:16:16.03
>>115 ありがとうございます。
Linux上で $ python hoge.py > aaa とするとSL4Aと同じ UnicodeEncodeError が出たので
(1) print var_en, var_jp みたいのを
(2) print var_en, var_jp.encode('utf-8') にするとSL4Aでも日本語が出ました。よかったよかった。
それでは、と codecs.open("txt",r,"utf-8") で上(1)をやると同エラー。
難解すぐる。
>>117 そうすることに明確なメリットがあるのなら、するだろうね。
O(nlogn)のアルゴリズムがあるのにO(n^2)のアルゴリズムを使っちゃう
みたいなのを愚かだというのは分かるが、
文字列の結合をjoinで、みたいなのはしょせん
くだらないノウハウの類いだよね。
うるせぇ。神は細部に宿るんだよ。
pass
piss
try:
insert(角電池)
くだらないノウハウだと思うなら、使わないでいいんじゃない?
ま、joinを使わないで結合した場合の計算オーダくらいは調べてみても損はないよ。
同じオーダーのアルゴリズムでも組み込む関数の方が速いよね(´・ω・`)
文字列の置き換えで
replaceを使ってるんだけど置き換える場所を指定するいい方法ある?
2番目にマッチする文字だけをおきかえたいんだけど
例えば
'ABBBABBBBB'
を
'ABBBCBBBBB'
にしたい感じ
間にあるBは長さは不定(Aがはいることはない)
Aは実際は複数の文字
今は
s = 'ABBBABBBBB'
s = s.replace('A','C')
s = s.replace('C','A',1)
ってやってるんだけど無駄が多い気がする
じゃあ一つ一つ辿って、二番目だけ置き換えればいいんじゃね
>>128 いかにもオートマトン的な処理だから、
正規表現でやるのが無難だと思うけど、速度はどうなるか分からん。
131 :
130:2011/11/19(土) 17:22:33.92
じゃなくて
pos0 = s.find("AAA")
pos1 = s.find("AAA", pos0 + len("AAA"))
でいいや。
はい
はいじゃないが
いいえ
bytes型についての質問です。
bytes型の変数から一部分を抽出(部分コピー)したいんですけど、
なかなか方法が見つかりません。
javaのarraycopyみたいな感じです!
どなたか、教えてください!
よろしくお願いします。
普通にスライスするだけ
buf = b'abcde'
buf[1:3] # b'bc'
>>121 >文字列の結合をjoinで、みたいなのはしょせん
>くだらないノウハウの類いだよね。
さすがにこれはない。
これはO(nlogn)のアルゴリズムがあるのにO(n^2)のアルゴリズムを使っちゃうくらいに愚かなこと。
joinじゃなくてもいいのは、結合する文字列の数が2個とか3個程度の場合のみ。
>>95 遅れたけど、さんくす。unittestで、あるテストだけを実行する方法がわからなくて、毎回全体をテストしてたから、すごい助かった。
できれば正規表現でフィルタとかできるとうれしいけど、そこまではunittestではできないよね。
>>138 >joinじゃなくてもいいのは、結合する文字列の数が2個とか3個程度の場合のみ。
測定もせずに、「2個とか3個程度の場合のみ」なんて馬鹿としか思えない。
長い文字列を構築するときに += を使ったらそりゃ遅いに決まってますよね。
Pythonの文字列はimmutableだから毎回copyが発生しますし。
まぁ、あたしはそういうときjoinじゃなくて、cStringIOを使いますケド。
☆(ゝω・)vキャピ
StringIOだとunicode文字列がそのままじゃ連結できないよね。
>>141 cStringIOは遅いから、文字列結合のためにつかうのはよしたほうがいい。
>>140 素直にすべての場合でjoinを使ったほうがいいって言えばいいのにね
joinいいんだけどさ
アタマに付ける「''.」がキモいんだよねー
いっそsumとかでくっついてくれたほうがキモくないような気がしなくなくなくもない。
> 気がしなくなくなくもない
どっちだよw
join = ''.join
array.join(delim) と delim.join(list) のどっちがいいかというのは定期的に話題になるな
>>149 ま、Pythonの場合、イテレータが多用されるから、前者の形式は難しいわな。
join(iterator, delim='')
みたいな組み込み関数があっても悪くないが、組み込み関数も基本は削減の方針だしね。
別にPythonでも書きたければ
str.join(':', ('foo', 'bar'))
と書けるよ
':'.join('foo', 'bar')
よりタイプ数増えるけど
┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
| i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
_,,,......,,__
/_~ ,,...:::_::;; ~"'ヽ
(,, '"ヾヽ i|i //^''ヽ,,)
^ :'⌒i i⌒"
|( ´∀`) < きのこ のこーのこ げんきのこ ♪
|(ノ |つ
| |
⊂ _ ノ
""U
_,,,......,,__
/_~ ,,...:::_::;; ~"'ヽ
(,, '"ヾヽ i|i //^''ヽ,,)
^ :'⌒i i⌒"
(´∀` )| < エリンギ まいたけ ブナシメジ ♪
⊂| (ノ |
| |
ヽ _ ⊃
.U""
|
| ミ
| ミ サッ!
| ミ
|
初めまして。
質問させてください。
テキストファイルが6000行あって,
偶数行だけ抜き出したいのですがどうすればよいでしょうか?
わかるかたがいらっしゃいましたら教えてください。
お願いします。
>>154 最初が1行目(奇数行)だとすれば
from itertools import islice
with open("unko.txt") as f:
for even_line in islice(f, 1, None, 2):
print even_line
>>154 このスレに来ているということは勉強なんだよね?
なら、自分でどこまでできたか書いてくれ。
はなっからわからんと言うなら、まずは本屋に行って一番薄い Python の本を一通り読んできてくれ。
怠惰版
print ''.join(open("unko.txt").readlines()[1::2])
>>157,159,160
ありがとうございます。
今回は159を使わせて頂きます。
>>158 すみませんでした。
以後気をつけます。
リストをaとbのリストに分けたいんですが
例として
[文1,文2,文3,文4,文5,文6,文7,文8]があって
として文1と8にorangeが含まれてる
リストA[文1,文8]
リストB[文2,文3,文4,文5,文6,文7]
以下が自分の書いたプログラムです。
a = []
b = []
for list_a in list:
# print('orange' in list)
#プリントではきちんとTrueとFalseという結果が出ます。
if('orange' in list == True):
alist += list
print(alist)
で結果がでません。
何がいけないのでしょうか?
記載間違いです。
a = []
b = []
ではなく
alist = []
blist = []
でした。
('orange' in lst) == True
>>> 'orange' in lst == lst
True
>>164,165
ありがとうございます。
出力が出るようになりました。
ですがなぜか,文が1文字ずつリストに格納されてしまうのですがどうすればいいのでしょうか?
alist += list じゃなくて alist.append(list_a)組み込み関数は一通り目を通せ
>>167 助かりました、ありがとうございました。
あと、どうでも良いけど、C言語初心者に言うみたいで気が引けるけど
if(('orange' in list) == True) は
if('orange' in list) でいいだろ
ちょっと宿題の香りがする
pythonで、classとtypeのどちらかを判定するのってどうするの?
>>> clas Foo(object): pass
>>> type(Foo)
<type 'type'>
>>> type(list)
<type 'type'>
type(Foo)もtype(list)も同じ結果になるので困ってる。
types.ClassTypeは違うようだし。
>>> clas Foo(): pass
>>> type(Foo)
<type 'classobj'>
>>> type(list)
<type 'type'>
>>171 何のために区別するかわからないし、そもそもPython3では区別がない。
必要なら、 issubclass とかで代用できないの?
windowsXP、2.7.2です。
変数名直前のアンダースコアについて質問です。
(下記は説明用の例です)
「book.py」の中に、下記の変数を作成。
_BOOK_CODE = 'PB-001'
_BOOK_NAME = 'Learning PYTHON'
EDITION = 'THIRD'
「test.py」で、下記の様にインポート。
from book import *
しかしtest.pyの中では BOOK_CODE,_BOOK_NAME が参照できません(not define)。
インポート自体はエラーも出ず、EDITION は参照可能なので成功しています。
アンダースコア2個は難読化されるとの事ですが、1個の場合は変更されたくない事を
示す「単なる慣習」で、挙動は一般的な変数と変わらないと理解していましたが違う様です。
アンダースコアを1個付けると、何が変わるのか教えて下さい。
プライベート変数はマングリングしたほうがいいの?
アンダースコア2つも付けるのキモいんだけど。
180 :
177:2011/11/21(月) 20:25:27.99
>>178 ズバリ書いてありますね・・・
_* この識別子は from module import * で import されません。
書き換えないで、という意思表示以外に意味があるとは知りませんでした。
__all__で定義すればOKのようですが、余計な混乱を招きそうなので
アンダースコアを取ります。
ありがとうございました。
Webページのコンテンツにpythonの実行結果をだしたいんですけど、どういう方法がありますか?
絵的にいうと
ヘッダー
サイドメニュー
pythonの結果
フッター
こんな感じにしたいです。
動的か性的かでぜんぜん違うダロ
183 :
181:2011/11/22(火) 20:07:12.58
>>182 なるほど(^ω^;)
動的か静的かで言うと動的だと思います。
昔なつかし SSI
php-curl+wsgiとかどうですか?お勧めですか?
>>183 がんばってJavaScript上で動くPythonを作る。
187 :
デフォルトの名無しさん:2011/11/22(火) 21:57:20.85
最近やっとクラスとかインスタンスとか継承とか
オブジェクト指向的なことを覚え始めたんだ、1歩前進した気がするよ
ロッコちゃん販売の一番の障害はカ○コンだな。
なんでもないです。
>>187 そこまでなら特にPythonである必要はないな。
ほんとだわ。そんなことにpython使わないでほしい。
dateが日付って訳されてるから
わかんないよねー
>>195 わかんなかったらtype()を使って調べる。
>>181 一番簡単なのは、CGIでPythonを動かす。
ページへの埋め込みはJavaScriptなり、ヘッダから全てPythonで出力するなり。
ブラウザ上でJavaScriptのように動かしたいなら、SilverlightでIronPythonとか。
Silverlightってどうなの
>>200 何時消えさってもいいつもりで使うならおk.
202 :
デフォルトの名無しさん:2011/11/23(水) 08:43:25.42
あからさまに初心者だから煽られてるだけ
とりあえず無駄にageないでほしい
204 :
デフォルトの名無しさん:2011/11/23(水) 09:46:21.01
俺は書き込みがあったらあげてほしいけどな。
アゲ~
age嬢
ども、171です
>>173 class Foo(object)
でためしてください。
>>174 classとtypeを区別する方法は書かれてないです
>>175 ためしたけど、できないですね。
>>> issubclass(Foo, object)
True
>>> issubclass(int, object)
True
>>> issubclass(Foo, type)
False
>>> issubclass(int, type)
False
結局、pythonではclassとtypeは区別できない、でFA?
どういう状況で必要なのか、の方が気になる
209 :
195:2011/11/23(水) 18:25:20.59
レスありがとうございます。
date自体が型というかクラスのタイプ?になるんですね。
インスタンスが作成されて、それの変数にアクセスするっていう形になるんでしょうか。
なんか、関数実行して日付を返すとしかみてなかったので
>>197 isinstance使うってあったからそっちでしらべたらdatetime.dateでした。
>>184 こんなのあるんですね。
ただ、鯖側の設定あまり変えないとだめっぽいのでやめときます。
>>199 IronPython面白そうですが難しそうです。一度素のpythonにほうでやってみようと思います。
JavaScriptで呼び出すのはたぶんよくあるやつですよね。php-curl+wsgiでつまづいたら試します。
http://docs.python.org/release/2.7.2/library/urlparse.html#urlparse.parse_qsl ここにData are returned as a list of name, value pairs.ってあるんですけど、これって辞書ではないんですか?
query = urlparse.parse_qsl(environ.get('QUERY_STRING'))
return str(query)
したら
[('param1', '3'), ('param2', '4')]
みたいなのがかえってきあmした。
list = [('param1','2','3'), ('param2','3' '4')]
return str(list)
したら
[('param1', '2', '3'), ('param2', '3', '4')]
が返ってきたました。よくわかりません。。辞書とかではなくてリストの各要素がtuppleなんですか?
要素がふたつのタプルをペアというとです
>>211 ありがとうございます。スクリプトに渡すパラメータ扱うならこっちのが楽そうです。
>>212 なるほど。for文でリスト分解したあとにインデックス使ってるサンプルとかあったので、ずっと不思議に思ってました。
タプルだからインデックスとか使えてるんですね。
python勉強する人ってこの辺とか詰まらずにいけるもんなんですか。難しいです。マニュアルみてもわかんないことありますし。
わからなければ対話型インタプリタで動作を確かめるとか
$ python
>>> from urlparse import parse_qsl
>>> parse_qsl("a=123&b=456")
[('a', '123'), ('b', '456')]
それでも手に負えなかったら質問すれば誰かしら答えてくれるよ
>>213 同じパラメータが二つ以上あったら値がリストになるので気をつけろよ
>>> urlparse.parse_qs("a=1&a=2")
{'a': ['1', '2']}
>>207 is_class = lambda typ: repr(typ).find("<class ") == 0
もっと真面目にするなら
def is_builtin_type(typ):
if type(typ) is type:
try:
return getattr(__builtins__, typ.__name__) == typ
except AttributeError:
pass
return False
動作例
http://codepad.org/boee6PL6
関数を纏めて持ち運ぶのにclassを使うのは、使い方を間違っていますか?
def function1(arg):
・・・
return ans
def function2(arg):
・・・
return ans
class FuncPack(object):
def func1(self, arg): return function1(arg)
def func2(self, arg): return function2(arg)
218 :
216:2011/11/24(木) 01:23:29.21
動作例の"Copied int"はただ別名つけただけで、コピーしたわけじゃないから不適切だな。
Aliased intとでも読み替えてくれ。
>>217 間違ってないけど、classmethodかstaticmethodにしたほうがいい気がする。
220 :
217:2011/11/24(木) 01:48:31.29
>>219 始めはClassの中にメソッド定義としてfunctionそのものを書いていたのですが、
長くなったので苦し紛れに分割したらああいう形になりました。
>classmethodかstaticmethod
初耳なので検索しましたが、手を出していないデコレータが出てきて難しそうです。
少し、調べてみます。
ありがとうございました。
デコレータを自分で作る訳じゃなくて
使うだけなら難しくないよ
関数名の前の行に書いとけばいい
やっぱり入門者用のスレを復活させたほうがいいんじゃ。
>>222 せめて、なんでここじゃだめなのか書けよ。
それすら書けないなら、心の中にしまってろ。
>>223 何でそんなに怒ってるのか分からなんだけど。
>>223 住み分けしていた時のほうが、基本的な言語仕様とかの質問が気楽にできて
良かったのではないかと思った。
初心者を排除したり脅かしたりするつもりは一切なかった。
不快に思ったのなら謝る。
だがお前は死ね。
そもそも入門スレは何で落ちたんだ?
結構な頻度でレスがあったと思うけど。
みんな巣立っていったのさ。
立てちゃえばいいじゃない
初心者スレよりこっちのほうが荒れやすくて問題あったと思う
>>226 ずいぶん昔からいるんですね
初心者脱出したのになんでまだここにいるの?
>>230 >ずいぶん昔からいるんですね
「ずいぶん昔」じゃなくて、つい最近まで、このスレとは別に入門スレがあった。
>初心者脱出したのになんでまだここにいるの?
このスレは初心者専用のスレじゃないと思う。
この話題は迷惑をかけるのでもうやめます。
>>230 「初心者脱出したのになんでまだここにいるの?」
↑ ここはPython総合スッドレだよ~
>>215 >辞書のキーは一意なクエリ変数名で、値は各変数名に対する値からなるリストです。
ってあるから、値は常にリストですよね??
urlparse.parse_qs("a=1&b=1")
{'a': ['1'], 'b': ['1']}
Python2.6 ですが、
re.split("<.*?>", text, re.S)
と
re1 = re.compile("<.*?>", re.S)
re1.split(text)
で、splitの結果が異なるのですが、なぜでしょうかね?
下段のcompileを使う方がうまくいく感じです。
いろいろ間違ってる上に何を問題としているか説明も足りないからじゃね
レベルダウン来た
ちなみに間違ってるところは.とre.splitの使い方と?な
>>> text="foo<hoge>bar"
>>> re.split("<.*?>", text, re.S)
['foo', 'bar']
>>> re.compile("<.*?>", re.S).split(text)
['foo', 'bar']
>>> help(re.split)
split(pattern, string, maxsplit=0, flags=0)
だから、re.split("<.*?>", text, flags=re.S)
244 :
243:2011/11/25(金) 17:34:10.41
2.6のre.splitにはflagsオプションなかった。243は無視して
245 :
237:2011/11/25(金) 17:47:42.79
ありがとうございます。ご指摘理解しました。
re.splitを先入観で使っていました。
>>244 に書いていただいたように、split には flagsオプションが無いので、
これを使いたい場合は、compileを通さねばならないということで理解しました。
その文が何について書かれているかを判定するプログラムを作っています.
文と単語のそれぞれのリストがあって,文にある単語(例えば'みかん')が出てきたら,'果物'を返してそれ以降のをみないようにしたいのですが.
単語のリストは上にあるものが優先
新しいリスト = []
for 文 in 文のリスト:
for 単語 in 単語のリスト:
if 単語[0](みかん) in 文:
新しいリスト.append(単語[1](果物))
これだと全部見てしまうんですよね・・・
決定した文はみないようにしたいのですがどうすればよいでしょうか?
関数にするかフラグを使う
顕著なレベルダウンだな
スレ分ける意味がない
コンソール上に出した文字を消して、そこにまた文字を出すことってできる?
処理がどれくらい終わったかをprintしてるんだけど、コンソール上に文字が連続で出て見にくいんです
これで足りるといいけど
>>> import sys, time
>>> for s in ('foo', 'bar', 'baz'):
... sys.stdout.write('\r%s' % s)
... sys.stdout.flush()
... time.sleep(1)
>>251 ありがとうございます!できました!
ちなみに、表示する文字の文字数が、前に表示した文字列よりすくないと文字が被ってしまうんですけど
これの対処方法は、先にスペースで消しておくくらいしかないですか?
スペースたくさん用意しておけば大丈夫なんだけど、
出てくる文字数が予想できないときはどうするのかなと思って
>>252 画面消去してもいいなら
sys.stdout.write('¥033[2J¥r%s' % s)
最初に出力した文字列の長さを覚えておいて、
次に出力する文字列がそれよりも短かければ不足分をスペースで消すとか
でも出力が複数の物理行にわたると'\r'出力しても論理行の左端には戻らないね
端末のエスケープシーケンスやライブラリ(curses等)使うしかないのかな
この手のものは俺なら素直に諦めるかcursesを使ってしまう
>>254 ↓でやってみ。
print "quickbrownfoxjumpsoverthelazydog\r\033[Kchinko"
258 :
250:2011/11/26(土) 01:11:45.74
ありがとうございます!
とりあえず文字数カウント+スペース使ってみて、ダメなときはライブラリ使おうと思います
Windowsは知らんが、ANSI端末なら
"\033[K" でLine Eraseだぞ。
print "".join("\033[%sm\033[%sm(^o^)/おやすみ~"%(a,b)for a in range(30,38) for b in range(40,48))
>>259 WindowsではESCシーケンスは使えない。
DOSなら使えたんだけどね。
>>265 APPLIES TO
Microsoft Windows NT Advanced Server 3.1
Microsoft Windows NT Workstation 3.1
Microsoft Windows NT Advanced Server 3.1
って書いてあるけどXPやWin7でもいける?
そもそも c:\dos\command.com がもう内蔵
Cygwinなら可能
>>266-267 WindowsXP は C:\Windows\system32\command.com でいけた。
7 は、持ってないからわからん。
いま 7 使ってるんだが
cygwin 試してみるわ
7 + cygwin 1.7.9 で問題ないわ
なぜエスケープシーケンスを直に使いたがるのか理解に苦しむな
エスケープシーケンスのナウでヤングな使い方を教えてください!
>>266 x64だと16bitプログラムが使えないからANSI.SYSは動かない。
>>271 Cygwinはcygwin1.dllの中で独自にESCシーケンスを解釈しているので、当然動く。
いまさらだけど漏れも久しぶりに新しいバージョンの cygwin 使ってみた
これいいじゃん
コンソールの UTF-8 の問題が一気に解決した
エスケープシークエンスは環境依存性(端末の差を含む)が高い
Unixでは端末の差を吸収するためにtermcapやterminfoなどのデータベースが
導入され、それを使うのが作法となっており、
まともなプログラムでエスケープシークエンスが直接利用されることはまずない
(ただしシェルのプロンプトをちょっと弄ったりするのには今でも利用されるが)
Win32コンソールではどのみち使えないが
というのを踏まえたうえでの
>>272じゃないの
>>278 そのうちconfigureやmakeの遅さとfork問題に悩まされることになる
それでもまあWindows用のシェル環境として便利は便利だけどな、
まともなのが何も無いよりはマシという意味で
>>279 今回のケースは、
>(ただしシェルのプロンプトをちょっと弄ったりするのには今でも利用されるが)
程度のもんでしょ。
そうだね
どっちみち cmd.exe でも configure とか make とか fork とかしてた訳じゃないので
cmd.exe の代わりに mintty 使うことにした
configure とか make とか fork とかしたいときは普通に linux 使うし
これで完全に Windows の python で UTF-8 に一本化出来る
ありがとう
>>279 Linuxの起動スクリプトなんかはエスケープシーケンス結構出てくるよ
まったく読めないと困る
>>282 fork()するプログラムを自分では書かないとしても
Linuxエミュレーションであるcygwinでは*あらゆる*プロセス生成はfork()経由で
行われるので、fork()に問題があるというのがどういうことか考えたほうがいいよ
たとえばシェルでlsとかタイプしたとして、その時点でシェルがfork()+exec()を
実行する
色を付けたり行を消す程度のエスケープシーケンスなら、
どの端末も同じだから、
terminfoとか参照せずに、直書きするケースが多いんじゃないかな。
個人的には色とかエスケープシーケンスなんかどうでもよくて
糞cmd.exeを使わずに済むのとUTF-8が普通に使えるのがありがたい
これでようやくsetdefaultencodingともおさらばだぜぃ
そんな感じなら、
思いきってLinuxを使ったほうがずっと快適だぞ。
Cygwinは精神負担が大きい。
まあWindowsから離れられない理由があるのなら仕方ないさ
サーバやビルド環境は仮想マシンにでもLinux入れてそっちでやったほうが
百倍マシだけど
"shell environment in win32 that sucks less"としてのcygwin需要は
なくならないだろう
ちなみにcygwinは32bitオンリーだし、Vista以降はASLRのせいでさらにfork問題の
根が深くなってるし、UACでの昇格実行がCreateProcessではなく
ShellExecuteのレイヤーに実装されているのでUACとも付き合いにくいけどな
仮想マシンのファイルシステムにWindowsからシームレスにアクセスできれば
Cygwinを使う必要はないな。
bashを管理者権限で実行
>>290 ファイルアクセスだけなら大きな問題はないが
cygwinのシェルやツール群はただのwin32アプリケーションなので、
普通にwin32アプリケーションと連携できる(相互に起動したりパイプでつないだり)
win32上のシェルとしてはまさにそのようなものがほしいはずなので
こればかりはどうしようもない
296 :
272:2011/11/26(土) 18:00:22.71
歴史的経緯くらい知ってるし意図くらい汲み取れないわけじゃない
ただただ理解に苦しむというだけ
>>296 じゃあどういう方法を取ると良いの? 教えて。
というか普通にinitscriptsのfunctionsとかで、
エスケープシーケンスそのままハードコードされてるわけで、
「まともなプログラムでエスケープシークエンスが直接利用されることはまずない 」
なんてことが事実誤認だと思うけど。
ANSI標準のエスケープシーケンスなら、わざわざtermcapとか見る必要なんてないし。
>>297 理解に苦しむと言っただけ
>>255 >>298 理解に苦しむと言っただけ
linuxのinitスクリプトはシステムの初期化プロセスであり形態はどうあれ特殊
>>279を書いた俺は
>>272ではないわけだがw
>>288 そりゃはshell scriptだからだろう
shellからやるならtputコマンドだが、外部プロセスになるし
initスクリプトなんて環境依存の最たるものだからポータビリティに気をつかう
必要がない、そんな特殊な例だけ持ち出されてもね
それと「わざわざ」termcapを「自分で」見るなんてことは誰もしないし
する必要がないよ
ライブラリからたたくだけで、もちろんPythonでも利用できる
ncursesって一行単位の操作もできるの?
全画面を支配するtopとかvimみたいなものを作るために使うんだと思っていた。
使ったことないから分からないや。
もう秋田
エスケープシーケンス直に使うのが嫌なのは別にかまわないけど
だったら代替のコードを書いてくれ
>>300 あ、もちろん「termcapを見る」という表現は自分で読んでparseするという
意味ではないです。ライブラリ経由で使うことを想定して書きました。
cursesで簡単にできるなら、今度からcurses使ってみます。
304 :
300:2011/11/26(土) 18:47:19.34
なんかアンカー間違ってたっぽい、ごめんよw
>>301 Window制御とかは使わずに、文字に色つけるだけ、みたいな処理にも使えるよ。
cursesはcurses.initscr()した時点で画面がクリアされるので
以前の入力を端末に残しておきたい場合には適さないよ
initscr()は必ずしも呼ぶ必要はないよ
ちょろっと字の色を変えたりといった低レベルの操作をしたいだけなら
setupterm()だけ呼べば十分で、あとはtigetstr()やtparm()のような
関数を使う
ただし
>>276に注意
Python 関係なくね?
/)
///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ こまけぇこたぁいいんだよ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
/)
///)
/,.=゙''"/
/ i f ,.r='"-‐'つ____ いやよくねぇだろ!!
/ / _,.-‐'~/⌒ ⌒\
/ ,i ,二ニ⊃( ●). (●)\
/ ノ il゙フ::::::⌒(__人__)⌒::::: \
,イ「ト、 ,!,!| |r┬-| |
/ iトヾヽ_/ィ"\ `ー'´ /
すべての道はPythonに通ず
ああ、それはない。
>>311 そんなものはじゃどうだ
お後がよろしいようで。
蛇の道は蛇、ということか・・・理解するのに時間がかかった。
Windows7(32bit)にpyInstaller(1.5)をインストールしようとして
python Configure.py すると、
print "ERROR: PyInstaller does not support Python 64-bit on Mac OSX"
SyntaxError: invalid syntax
となる。何故???
なんで Mac ?
317 :
デフォルトの名無しさん:2011/11/27(日) 18:34:06.91
>>316 そこが分からない。
PyInstallerのConfigure.pyの↓の判定でひっかかかってる。
if sys.platform == 'darwin' and Build.architecture() == '64bit':
print "ERROR: PyInstaller does not support Python 64-bit on Mac OSX"
print "Try using the 32-bit version of Python, by setting"
print "VERSIONER_PYTHON_PREFER_32_BIT=yes in the environment"
sys.exit(2)
319 :
デフォルトの名無しさん:2011/11/27(日) 19:32:16.31
>>318 サンクス。
Python3.2が原因か、pywin32を入れてなかったことが原因かのどちらか。
Python2.7に下げて、pywin32-216.win32-py2.7.exe入れたらexe作れた。
Python2.7だとint関数の挙動が変わるから作ったアプリが異常終了する。
Python3.2に戻して、pywin32-216.1.win32-py3.2.exe入れてみる。
>>317 sys.platform == 'darwin' になる訳無いんじゃね?
321 :
デフォルトの名無しさん:2011/11/27(日) 19:38:29.32
>>320 実際そうなってるからエラーの分岐に入ってるとしか言えない。
sys.platform == 'darwin'になったのは
python3.2環境なのにpywin32をインストールしてなかったことが原因と推測。
python2.6以上の環境ではpywin32をインストールする必要あり。
これの結果はどうなってますか?
C:\>python -c "import sys; print sys.platform"
win32
馬鹿には無理
324 :
デフォルトの名無しさん:2011/11/27(日) 19:58:31.20
>>322 おかしい…
C:\>python -c "import sys; print sys.platform"
File "<string>", line 1
import sys; print sys.platform
環境は
Python3.2.2
pywin32-216.1.win32-py3.2.exe
Python3はprint(...)ってカッコつけなきゃだめだお
326 :
デフォルトの名無しさん:2011/11/27(日) 20:03:09.67
327 :
デフォルトの名無しさん:2011/11/27(日) 20:07:51.24
Python3.2にpywin32インストールした環境でも
print "ERROR: PyInstaller does not support Python 64-bit on Mac OSX"
だったお…。
結論は
PyInstallerはPython2.2~2.7までしかサポートしてないということで。
Python3.2で作ったアプリがPython2.7で動かない場合はPyInstallerでのexe化は不可能ということで。
なので、py2exeで試してみますわ…。
>>315 SyntaxErrorが出てるから単純に3.Xに対応してないだけでしょう
>>318のページにもworks under any version of Python from 2.2 up to 2.7って書いてある
馬鹿には無理
332 :
315:2011/11/27(日) 22:52:10.91
py2exe(py3exe?)もpython3.xに対応してるっぽいけどpyqt4に未対応とか情報あり。
結局、cx-breeze使ってPython3.2をexe化した。
久しぶりにJDKの1.6をインスコしたらglassfishとか良く判らんもんも一緒にインスコされたんだけどこいつがPythonで動いてるっぽい
gnuplot使おうと思ったけどmatplotlibの方が簡単だった
どうでもいいけどガンプロットと読んでたよ
馬鹿には無理
337 :
デフォルトの名無しさん:2011/11/29(火) 15:13:36.27
>>334 matplotlibはふつうのグラフを書くにはとても良いんだけど、
少しでも凝ったグラフを書こうとするとAPIの設計がキモくてイライラする。
興味ない
CMSならWordPress、wikiならPukiWikiかMediaWiki、というような世の流れに逆らって
PloneとかMoinMoinとか使ってらっしゃるPythonicな先達の方々、もしいらっしゃったら
使い勝手や管理のしやすさなど一言アドバイスいただけると幸いです
Pythonベースのものを使って勉強の糧としたいのですが…
342 :
デフォルトの名無しさん:2011/11/30(水) 02:27:01.42
WordPessはブログ
CMSならJoomlaとかDrupal
Python使える鯖が限られてるから金払って鯖借りてる奴か自宅鯖の奴くらいしか居ねぇだろうな。
CMSはPHPの独壇場かな。
WordPressは、CMSとしての利用を意識して作られていて、
最近は、WordPressをカスタマイズして作られた中小企業のホームページが増殖している。
(たぶん、技術レベルの低いWeb製作会社でも簡単に動的ページが作れるから。)
Python製のCMSはあまり良いのが無い。
Ploneは、Zopeベースで複雑怪奇で精神がやられる(設置者にとっても複雑で、ユーザにとっても複雑)。
もっとシンプルで見通しの良いものがあれば良いのだが。
自作せよ。
345 :
デフォルトの名無しさん:2011/11/30(水) 06:07:01.81
データベースを利用しない簡単な物から作ればいいんでない?
Drupalはシンプルなのに機能的なのでお手本にするにはいいかも。
WordPress, WikiMedia, phpBBは複雑過ぎる。
347 :
デフォルトの名無しさん:2011/11/30(水) 06:24:25.20
じゃぁおじさんが一つアイデアを授けよう。
python 2ch専ブラ 「Py2ch」
コンセプトはサーバー・クライアント型でrep2のように鯖に設置してcgiとして動作させる。
ここにはdatや設定、履歴、お気に入り、cookieなどを保管。
クライアントをGUIで設計して設置した鯖を選択、ログインしてデータを表示させる。
こちらは描画のみの担当でカスタマイズするテーマなどを置く。
利点は
* プラットフォームを選ばない
* PCを変えても同じログ、設定で使える
* 重くなりがちなデザインやレイアウトはクライアントで行うのでサクサク
CMSっていってるのにおまえさんときたら
脳科学的に見た場合、脱税のクオリアは身体感覚を伴わない心的表象、
及び意識的思考としてのみ存在すると考えられる。
またうまく成功した場合アハ体験により脳が活性化する
httplib2 vs urllib3
>>347 公開proxyチェックに引っかかってすぐ焼かれて終わりだな
353 :
デフォルトの名無しさん:2011/11/30(水) 11:24:32.38
>>341です。
書き漏らしてしまっておりましたが、自宅鯖での運用です。
Plone(というかZope)はやはり微妙ですか…。
取り敢えず、片っ端からVMに入れて試用してみようかと。
WordPress他PHP系を使ったら負けかなと思いつつ、良いのが無ければデファクトスタンダードで落ち着くと思います…。
自宅鯖でも公開proxyと看做されたら終わりだよ
356 :
デフォルトの名無しさん:2011/11/30(水) 14:09:20.17
馬鹿には無理
規模にもよるが、
小規模なCMSなら自作するって手もある。
なんでZope以降出てこないんだろうね
「WordPressを使ったら負け」には同意するわ。
そういうことを言うと馬鹿にされるのは分かってるけど。
よっしゃ
werkzeug
363 :
デフォルトの名無しさん:2011/12/03(土) 01:12:46.71
| /|
|____|____| / |
| _ _ |三i / |
|. 三シ ヾ三 |三/ |
| .._ _,,.. .i/ |
|でiンヽ ;'i"ィでン/ |
|、 ‐' / !、 / |
| ,' : / |
| i ,、/ ___,--───-、|
| /_,一´
| // 呼ばれてる気がするでおじゃる
|/
>>363 1.それぞれのファイルから1行づつreadして書きだした方が良いのでは?
ログファイルがデカくならない保証があれば一気に取り込んで処理
でもいいけど。
2.pasteってコマンドがありますけど、それじゃダメなん?
paste -d '' net_n.log net_10.log net_50.log > net_all.log
>>363 import sys, itertools
with open(sys.argv[1]) as s1, open(sys.argv[2]) as s2, open(sys.argv[3]) as s3, open(sys.argv[4], 'w') as dest:
for zipped in itertools.izip_longest(s1, s2, s3, fillvalue=""):
dest.write(' '.join(map(lambda x: x.rstrip("\n"), zipped)) + "\n")
入力ファイルを何個でも受けつけるようにするとwithのあたりどうやって書くんだろう
すぐ思いつかなかった
>>363 変数名がまったく意味不明。「all」ってなんだよ、「merged」でいいだろ。
44行目以下は33行目に持ってきて、ファイルをなるべく早めにクローズすべき。
if __name__ == '__main__': 以下も関数かクラスにして、if __name__ == '__main__': ではそれを呼び出すだけにしたほうがきれいだし、テストもしやすい。
>>366 13行目以下はwith文に含める必要なくない?
それともpython3だとそうかかないとダメになった?
あとそのループで「i」を使うのはよくないと思う。「lines」が妥当。
>>368 質問した人じゃないが全入力ファイルの行数が揃わないとエラーにしないといけないんじゃないの?
ここまでおれのじえん
ワタシ、書き捨てスクリプトに本気になるおとこのひとってキライだな(ゝω・)vキャピ
373 :
111:2011/12/03(土) 15:46:57.61
雑草という草や、書き捨てというスクリプトはない
コマンドに直書きすると編集がつらい長さのはスクリプトファイルにするけど何回か使って用が済んだら消してるな
IT土方に聞いても無駄
馬鹿には無理
土方はスクリプト言語は使えないイメージ
全てJavaで書きそう
JavaいいよJava
C++もいいよC++
Pythonもいいけど速くできたらもっといいw
JavaScriptに難渋。Pythonが素直でおとなしい子に思える。
>>376 実際、producer-comsumer なんて言葉を知ってるのは、
ある程度教養のある奴だけだ。
そんな例挙げなくてもrace conditionで通じるし
Pythonのテンプレートエンジンで、簡易的なものはありませんか?
Cheetahなどはファイル数なども多くちょっとした、出力には大げさすぎるのでファイル数の少ない小さなものを探しています。
tempita
string.template()
今作ってるからちょっと待って
おおげさでもいいじゃない。Jinja2
jinja2 か genshi で十分だわー
>>384 Tenjin
ファイル1個だし、特にHTML以外の出力をしたい場合に重宝してる
eRubyの作者はその人じゃないぞ
Pythonは文字列の中にコード埋め込むの向いてないよ。
それより、特殊な文字列リテラルの形でできないのかなぁ。
<?py for x in nums: ?>
<?py if x > 0: ?>
<p>Positive.</p>
<?py elif x < 0: ?>
<p>Negative.</p>
<?py else: ?>
<p>Zero.</p>
<?py #endif ?>
<?py #endfor ?>
じゃなく
for x in nums:
if x > 0:
t'<p>Positive.</p>'
elif x < 0:
t'<p>Negative.</p>'
else:
t'<p>Zero.</p>'
みたいに。
>>393 その程度であれば
buf = []
t = buf.append
t('<p>Positive.</p>')
t('<p>Negative.</p>')
print("".join(buf))
でいいような。
馬鹿ですね
わかります
私です
>>394 実際、そうやった上で、最後の行を
print(''.join(buf).format(locals()))
に変えても事足りない場合って、どんなの?
Python程度に文字列リテラルの書きやすい言語で、PHPみたいに
文字列の中にコード埋め込めたらすごく便利になる事例ってのが思い浮かばない。
>>398 俺も、Web関係はやらないから、そう思ってたけど、
テンプレートエンジンを使うと「アラ便利だわ」って心境になる。
>>398 想像力が低いなー
PHPだと、コードとHTMLのインデントが独立してるから便利。
PHPならHTMLのインデントが深くなっても、問題ない。
<body>
<div>
<ul>
<?php foreach .... { ?>
<?php if ($var) { ?>
<li><?= $var ?></li>
<?php } ?>
<?php } ?>
</ul>
</div>
</body>
Pythonだと、HTMLとコードのインデントが揃わないからたいへん見づらい
print("<body>")
print(" <div>")
print(" <ul>")
for var in list:
if var:
print(" <li>%s</li>" % item)
print(" </ul>")
print(" </div>")
print("</body>")
>>398 Pythonって、Rubyのように式を文字列の中に埋め込むのってできないよね。
それができるだけでも、テンプレートエンジンは大いに便利。
>>375 ttp://codepad.org/QIRmX8JC デザインパターンの練習であれば、もっと再利用しやすい部品にすべきだと思う。
現状だと、拡張する場合に Worker/Producer の中に手を入れないといけないし、サブクラス化してもコードが重複してしまう。
(例えば、Worker#run をオーバーライドする場合、サブクラスでもキューからメッセージ取り出しのコードを書かないといけない。等)
スレッドに関してはあまり詳しくないけど、自分の場合は
daemon=True, SIGINTハンドラ で後始末, python -i で実行
もしくは、適当なコマンドループ作ってメインスレッドをブロック(入力待ち)してます。
>>400 PHPよくしらないけど、それって余分なインデントがHTMLにはいってこない? <?php の行のインデント
HTMLのインデントって、テンプレート等でHTML自体を手書きするときは適度にいれるけど、
Pythonで出力するような場合は気にしなくなった。
整形ツールがあるし、デバッグならDOMインスペクタみたいなツール使う。
2chのhtmlとか見たら改行もなく詰め詰めだよな
>>398 >Python程度に文字列リテラルの書きやすい言語で、PHPみたいに
>文字列の中にコード埋め込めたらすごく便利になる事例ってのが思い浮かばない。
DjangoもZopeも全否定な意見だなww
mingw で __cdecl で定義した DLL(hoge.dll) 内の関数 fuga() がある場合
ctypes.cdll.hoge.fuga()
で呼べるはずですよね?
なぜか
AttributeError: function 'fuga' not found
になってしまいます
l = ctypes.LoadLibrary('hoge.dll')
は成功するので
hoge.dll 自体はロード出来るようですが
l.fuga()
とするとやっぱり失敗します
なにがおかしいのでしょう?
>>402 その内容はeRubyとERBを混同してたり、かなり間違いが含まれている。
あと今のRailsではERB使ってなくて、Tenjin作者のほうを使ってる。
typo がありました
誤
l = ctypes.LoadLibrary('hoge.dll')
正
l = ctypes.cdll.LoadLibrary('hoge.dll')
です
>>408 いや別に間違ってないと思うよ
eRubyは仕組みそのもので考案者の関さんの実装がRubyに添付してあるerb
でもって前田さんの実装もeRubyで桑田さんの実装はerubisだったか
アンカついたからレスしてるけどスレチでごめん
>>407 __declspec(dllexport)を付けてないんじゃない?
あるいはC++でextern "C"が付いてないか
>>411 どっちもつけてます
.c でやっても一緒です orz
Dependency Walkerとかでexportの確認してみたら
最小限で試してみましたが問題が再現するようです
hoge.h
#if defined(__cplusplus)
extern "C"{
#endif
__declspec(dllexport) int fuga(int);
#if defined(__cplusplus)
};
#endif
hoge.c
#include "hoge.h"
__declspec(dllexport) int fuga(int a)
{
return a;
}
コンパイラは
gcc --version
gcc.exe (GCC) 3.4.4 (mingw special)
Copyright (C) 2004 Free Software Foundation, Inc.
です
Dependency Walker で確認してみたら
Function のところに何もありませんでした orz
>>416 じゃあそういうことにしよう。この話はおしまい
>>415 手元の環境 win32/vista CPython 2.6.5/3.2 MINGW32/MSYS1.0 で
>>414 通ったよ。
> gcc --version
gcc.exe (GCC) 4.6.1
> gcc -shared hoge.c -o hoge.dll
> python -c "import ctypes;print(ctypes.cdll.hoge.fuga(10))"
10
g++ でリンクした場合、extern "C" がないと AttributeError になるのを確認。(g++ -E hoge.cでプリプロセス後のコード確認)
__declspec(dllexport) は、なしで作った DLL でも ctypes.cdll で呼べた。(上記の fuga関数でのみテスト)
>>403 おお、ありがとうございます。
今体調が悪いので、あとで参考にしてみます。
説明不足でしたが、スレッディングモデルとかはどうでもよくて(なので再利用性のこととかは考えてない)、
KeyboardInterrupt(Ctrl+C)で、安全に(個々のworkを実行中にWorkerが停止しないように)、
Workerをabortさせる方法が知りたかったんです。
worker.join()するとメインスレッドがロックしてKeyboardInterruptが受信できなくなるようなので、
join(timeout=1)としたんですが、もっと良い方法は無いかなと...
(そもそも、なんでtimeoutなしだとKeyboardInterruptが発生せず、timeoutを設定すると
KeyboardInterruptが発生するんですかね。海外の掲示板にはPythonのバグとか書いてありましたが...)
>>400 せめて、複数行の文字列リテラルくらい使ってくれよ。。。
インデントは、自動インデントしてくれる関数用意して出力段階で使えばいいだけだから、あんま本質じゃない。
422 :
デフォルトの名無しさん:2011/12/06(火) 06:04:07.97
いいセンスだ
XBEEとarduinoの本が近々出るけどそれ関係かね
424 :
403:2011/12/06(火) 08:24:13.80
>>419 正確には、KeyboardInterruptは発生するんだけど、実行されるのがメインスレッドに戻ってから・・
つまり join()に timeout を指定しないで呼んだ場合は、スレッドが終了してからになるので、スレッドの中断には使えない。
join() は中断処理をした後に、メインスレッドが終了してしまわないように呼ぶのが良さそうです。(daemonスレッドの場合)
> 個々のworkを実行中にWorkerが停止しないように
という事であれば、
>>403のコードでは KeyboardInterrupt後に各workerをjoinしないといけないですね。
workerの安全な停止という点からは、他にもいろいろと不足がありました。
通常実行時は、シグナルハンドラが呼ばれる前に終了してしまい、後始末処理が呼ばれてなかった、等。
タスクの実行完了を保証するというロジックをコードで明示するなら、
queue の task_done(), join() を使うアプローチもあります。
http://codepad.org/vauz30xt # producerをメイン・スレッドで
http://codepad.org/yEoOczlE # producerをスレッドにして、停止を generator.close で行う
>>421 LEGOとかどう?
KeyboardInterruptとかsignalはWindowsだと挙動が違った気がしたが
426 :
403:2011/12/06(火) 12:27:46.88
427 :
デフォルトの名無しさん:2011/12/06(火) 13:35:14.03
Python て OpenGL とか触ったりできる?音と同期したりとかやってみたいんだけど。
OpenFrameworks 的なの。
>>418 できました
ありがとうございます
結論は
gcc -shared -o hoge.dll -Wl,--out-implib,hoge.lib
とやってたのが原因だったのですが
エラーも何も出なかったので全く気付きませんでした
馬鹿には無理
>y_htm
>ところで住んでいる区の区報に「Pythonプログラミング講座」
>つー市民講座が掲載されていたんだけど、この区はどこに向か
>って行っているのでしょう。
>via: web
これどこの区や。
募集おわってるじゃん
string.findだと初めに見つかった一つしかかえしてくれないので
全部まとめて返してくれる関数書こうとしてたんですが、
途中で詰まってしまいました。
def string_indexes(string,s,indexes = []):
if string.count(s) <= 0:
print indexes
return indexes
else:
string_indexes(string[string.find(s)+len(s):], s, [string.find(s)] + indexes)
print string_indexes("i love you","o")
すると print indexes で [4,3] と出てるのに、 下の関数呼び出しでは None になってしまいます。
return indexes のかわりに return [4,3] としても同じくNoneのままでした。
何故これだと値が返ってこないんでしょうか?
再帰したとこでもreturnしないとだめ
re.search
>>440 再帰で文字列のスライスを渡してるけど、それだと前に見つかった位置からの距離になる。[4,3]は期待した結果通り?
関数宣言のデフォルト引数での変数の初期化リスト代入は落とし穴、関数を呼び出す度に結果が蓄積されてしまう。
再帰にしなくても、フラットなループで扱えるよ。findの第二引数を活用しよう。
http://codepad.org/kM434xuD
>>440 >def string_indexes(string,s,indexes = []):
これはだめだろ。
def string_indices(string, s, indices=None):
if indices is None: indices = []
にしないとだめ。
#Pythonのこの仕様は、めんどくさいし、間違いやすいので、きらい。
コンソールで実行中の Python スクリプトから別のコンソールアプリを
別ウィンドウを開いて実行し、自分自身を終了する方法はありますか?
Pythonってさ、癖が非常に強いよね
多言語やって慣れてるとどうにも気持ちが悪いというか・・・
慣れなのかもしれないけれど
まぁ、ワシのティンコも癖は非常に臭いみたいですけどね
お前のは仕様
>>448 癖が強くない言語ってどんなのがあるん?
>>447 副作用ある場合を考えると、
1. 定義したときに一度だけ評価する
2. 引数が指定されなかったときのみ評価する
3. 引数が指定されようがされまいが、評価はする
のどれを選ぶべきだろうか。
>>444 おおお、ありがとうございます!
2時間ぐらい調べながら読んでやっとわかりました。
(まだ、かなり理解が怪しいですが…。)
>>445>>447 こんな仕様があったんですね。
気をつけることにします。
>>452 個人的には、
>2. 引数が指定されなかったときのみ評価する
かな。
今試してみたら、C++ も同じみたいだし。
今日の一言。
エラーや情報メッセージはloggingモジュールで吐きましょう。print禁止。
ライブラリを作ってる場合は特に。
>>446 python-daemonというのがあるみたい
あとはos.system('urxvt -e ncmcpp &!') # zsh
ただ行儀悪そう
デフォルト引数の評価タイミングはバイトコード書き換えればできるけど
バイトコードいじるとジャンプのアドレスとかずれて面倒だしPyPyに期待する方が早いかも
>>454 その場合、
def func(a=aa(), b=bb(), **kwargs): pass
func(c=cc(), b=bbb()) の引数の評価順序は?
現行版だと定義時に左からaa(), bb()の順で評価されて、呼び出し時にcc(), bbb()の順で評価されるけど。
C++だと引数の評価順序決まってないから単純だけど、
そのあたりが厳格が言語だと、仕様が複雑化すると思うんだよなぁ。
>>458 >>454 だと、定義時には評価しないから、「呼び出し時に左から順に評価する」でいいと思う。
>>457 正直なに言ってるかよく理解できない。
>>459 その「左から」の意味が曖昧になることを、わざわざ例を挙げてまで
>>458では指摘しているわけだが。
デフォルト引数を毎回評価とか、明らかにパフォーマンス改悪しそうなんだけど、何か他にメリットあるの?
def func(宣言時に実行される):
呼び出し時に実行される
現状では、内部関数で宣言時に外の変数を束縛するのに使ったりする。
デコレータが導入されて宣言時に使えるフックが増えたが、どちらがいいというのとは別に、
処理系が採用すべき変更かというと、そうでもないだろう。(バージョン間の動作が異なる、テストが増える、等)
どうしても必要だって人は、自分でそういった振る舞いを提供するデコレータ等を書けばいい。
宣言時に評価して欲しくないというのは、デコレータに渡る時点で評価済なので、遅延評価等の他の方法も合わせて考えないといけないが、
毎回評価したり、デフォルト値はコピーで済まして欲しいといった場合等にもデコレータで対応できるはず。
>>440のコードでは、末尾再帰で書こうとしてて、
リストに対する副作用のある変更はないので、一応、影響のない使い方ではあるけど。
pylint等の構文チェックでは警告出し、なるべくこういうコードは避ける傾向があるね。
>>461 言語によっては、式を書いておくと
呼ばれたときにそれを計算出来るようなのもあるからなー
んで、デフォルト引数なので指定されたときは評価されない
まあメリットで言えば空リストくらいかもねえ
>>463 指定された時に評価されないのはどちらも同じなので、そこは問題じゃない。
デフォルト引数を~と言ってるので、指定されなかった時に毎回評価される点。
>>460 459じゃないけど、曖昧ではないよ。
458の例だと、実引数であるcc()とbbb()がまず評価されて、
そのあとデフォルト引数が必要になるaa()が評価される。
bb()はデフォルト引数として必要ないので評価されない。
なにも難しいことはない。
467 :
デフォルトの名無しさん:2011/12/12(月) 04:57:43.85
┌─┐
│●│
└─┤
_ ∩
( ゚∀゚)彡
┌─┬⊂彡
│●│ おっぱい!おっぱい!
└─┘
>>> def f(): print('foo',print('bar','A'),(yield 'B'),print('bar','C'),(yield 'D'))
...
>>> for k in f(): print('baz',k)
...
bar A
baz B
bar C
baz D
foo None None None None
>>>
この構文(括弧つきyield)って、どういうケースで使うんですか?
あ、単なるコルーチンか。
471 :
468:2011/12/12(月) 13:28:53.60
>>469 python3でやった結果貼ったけど、
from __future__ import print_function
すれば、2.7でも動作します。
>>470 yield文はいいとして、yield式って何のためにあるの?
lambdaでジェネレータ作るため?
472 :
468:2011/12/12(月) 13:36:39.75
「このPEPを書いたのは誰だぁ!!」
馬鹿には無理
restructuredTextを、なるべくシンプルなHTMLに変換するにはどうしたらいいですか。
rst2html.py hoge.rst > hoge.html
とすると、ごちゃごちゃしたHTMLになってしまいます。
pythonでu'A'という文字からアスキーコード65を得るには、どうやればいいでしょうか?
ord(u'A')
なんだか芋虫のAAみたいに見える、カワイイ。
まぁ、ワシは45歳のおっさんだけどな。
ウザ
print "Hello, World!" が通らなくて小一時間悩んだよ糞が
なぜ後発のLL言語はこうぽんぽん仕様を変えるんだよ氏ね
でもいいね楽しいよおっぱいそん
>>484 Pythonが後方互換性を破壊したのはこの20年で1回だけだ。
運が悪かったな。
20年て適当だろう、そんな頃にPython無ぇよ馬~鹿!
と、煽ってやろうと思ったがPediaで確認してやめた。
ありがとうインターネット!
いえいえどういたしまして
いやぁ~そんなぁ~照れるなぁ
インターネットってDTM関連のソフト売ってるあの会社のこと?
角電池
pythonっていつマルチコア対応するの?
multiprocessing
それマルチコア対応って言わない
「マルチコア対応」ってのは具体的にどういうこと?
495 :
デフォルトの名無しさん:2011/12/15(木) 17:03:25.36
CPUが利用率が全部のコアで100%になるってことだよ
これはひどい角電池
python3ってどうなった?
>>495 from multiprocessing import Pool, cpu_count
def loop(*args):
while True:
pass
if __name__ == '__main__':
pool = Pool()
pool.map(loop, range(cpu_count()))
PySideがはやくPython3に完全対応してくれんかな
pythonでwebプログラミングするならコレっていうのある?
いまだとdjangoとか?
werkzeug (wsgi)
pyramid
504 :
デフォルトの名無しさん:2011/12/16(金) 00:56:48.13
506 :
デフォルトの名無しさん:2011/12/16(金) 01:09:59.99
404 not found かと思ったぜ
PythonはPerlみたいになってほしくないので、下手に2.xを残すべきでない
どっちでもいいからメインラインを早く決めろ
>>505 3.xが出なければPython人口はもっと増えていたのに
これ以上ユーザーを混乱させてなにが楽しいんだろう。。
2.8が出ればPython終わるな
2系3系合体させて、みんな仲良く使える5シリーズの開発を始めよう。
514 :
デフォルトの名無しさん:2011/12/17(土) 00:01:59.71
Linuxを使っていて、Pythonのモジュールなどを
python setup.py install
等でインストールする時、MySQLなどと連携等の場合、yumではなくソースからインストールしていた場合、
そのパスを指定しないと連携できないと思うのですが、
どのようにして設定すればいいのでしょうか?
一般的には./configure時にパスを設定出来ますが、Pythonの場合はどのようにすればいいのでしょうか?
$(prefix)/$(lib)/python$(version)/
とか。そういう事じゃなくて?
>>514 pythonは自分自身の環境を把握しているから特に考えなくていいけど、
外部プログラムから利用するなら python-config がある。
そういう用途向けにPython以外でも {プログラム名}-config ってツールがよく用意されてる。
gentooにpython-updaterってのがあるな。
(参照先が古いモジュールを洗いだして一括で入れ直す)
他の鳥向けに応用できるのかどうか知らんけど。
日本においてはPythonの普及があまり進んでない現在のうちに、
3.x系のライブラリが出そろえば今後大きく普及する可能性だってあるのになー
もうガラパゴス化はうんざり
でも響きは強そうじゃん?
大怪獣ガラパゴス!
ガラパイ
肋骨が浮いてそう
>>523 > その為にわざわざ他のpepと番号をトレードしたらしい
> 互換性を吸収する six (2と3の公倍数)ってライブラリがある
Pythonお洒落すぎるだろ
そういえば 2.6.4 とかも
天安門で引っ掛かって中国でダウソ出来ないから
ずらしたとかなんとか事件あったな
>>518 同意。djangoとかはこのまま2.x系専用ってことにして
3.x系用に誰か新しいの作れよ
Pythonのデバッグって皆さんどうしてますか?
どんなソフトとか使っているのでしょうか?
PHPで言う、var_dump()のような、変数の中身、構造を知るような簡単なデバッグとしての関数すらないように思うのですが・・・
XDebugみたいなものはありますでしょうか?
pdbとかtracebackとかcgitbとか
>>527 >PHPで言う、var_dump()のような、変数の中身、構造を知るような簡単なデバッグとしての関数すらないように思うのですが・・・
何でそう思ったの?
disとかsys._getframeとかast.parseで構文木にして変形してからcompileとか
>>527 PHPはデバッグ云々の前にpycheckerのような標準の文法チェッカも無ければ、
pep8のような標準のコーディングスタイルチェッカも無いだろ。
そしてPHPはフリーダムなライブラリ。好き勝手な仕様に版数による挙動の違い。
なんと怖ろしい。PHP本体のバージョンアップ時のテストだけでなく
個々のライブラリもバージョンアップ毎に個々にテストしなきゃならん。
シーケンスからn個ずつ取り出す機能って標準ライブラリに無いよね?
結構使う操作だと思うんだがなぁ。
必ずループとセットで使う操作だから、itertoolsあたりに入れて欲しいな。
>>> def niter(lst, n):
... i = iter(lst)
... while True:
... l = []
... for _ in xrange(n): l.append(i.next())
... yield l
...
>>> [t for t in niter([2, 1, 3, 5, 4, 7, 8, 9, 6], 2)]
[[2, 1], [3, 5], [4, 7], [8, 9]]
>>> [t for t in niter([2, 1, 3, 5, 4, 7, 8, 9, 6], 3)]
[[2, 1, 3], [5, 4, 7], [8, 9, 6]]
>>> [t for t in niter([2, 1, 3, 5, 4, 7, 8, 9, 6], 4)]
[[2, 1, 3, 5], [4, 7, 8, 9]]
>>> [t for t in niter([2, 1, 3, 5, 4, 7, 8, 9, 6], 1)]
[[2], [1], [3], [5], [4], [7], [8], [9], [6]]
>>> [t for t in niter([2, 1, 3, 5, 4, 7, 8, 9, 6], 5)]
[[2, 1, 3, 5, 4]]
ああこれでいいのか
def niter(lst, n):
i = iter(lst)
while True: yield [i.next() for _ in xrange(n)]
>>> [t for t in niter([2, 1, 3, 5, 4, 7, 8, 9, 6], 2)]
[[2, 1], [3, 5], [4, 7], [8, 9]]
>>> [t for t in niter([2, 1, 3, 5, 4, 7, 8, 9, 6], 3)]
[[2, 1, 3], [5, 4, 7], [8, 9, 6]]
>>> [t for t in niter([2, 1, 3, 5, 4, 7, 8, 9, 6], 4)]
[[2, 1, 3, 5], [4, 7, 8, 9]]
>>> [t for t in niter([2, 1, 3, 5, 4, 7, 8, 9, 6], 5)]
[[2, 1, 3, 5, 4]]
>>> [t for t in niter([2, 1, 3, 5, 4, 7, 8, 9, 6], 1)]
[[2], [1], [3], [5], [4], [7], [8], [9], [6]]
>>533 型によって最適なコードが異なるので、率直な実装をitertoolsに含めるのは議論の余地ありだと思う。
でも一応、itertoolsのドキュメントにレシピが書いてるよ。groupter
# ファイルから n バイトずつ読み込む。
iter(lambda: stream.read(n), '')
# イテレータから nitems 要素ずつのリストで読み込む。takeはitertoolsのレシピより。
# 注意: xrangeを渡すときは、 iter(xrange(length)) とする。
iter(lambda: take(iterable, n), [])
# リストを 長さ n 毎の chunk に分解
[seq[i:i+n] for i in xrange(0, len(seq), n)]
537 :
536:2011/12/18(日) 06:52:39.76
>>536 説明が不十分だったので訂正。
xrangeを渡すときは -> xrange以外でも同様、isliceへ渡すのでイテレータ を渡さないとだめ。
リストや文字列も iter() を呼び出してイテレータを渡す。
538 :
デフォルトの名無しさん:2011/12/18(日) 08:33:14.37
expectを使わずにscpのパスワードを自動で入力できるように
したいのですが何かいい方法はないでしょうか?
paramiko
pexpect でサーバー時リモートログインすることは出来たのですが、続けて su を実行して、各種の
コマンドを実行したいと思うのですが、それって技術的に可能でしょうか。うまくいかなくて。
リモートのサーバー(Linux)にはpythonはインストールされていません。
馬鹿には無理
546 :
527:2011/12/18(日) 19:40:39.86
あぁ、別に上から目線で言ったつもりは無かったのですが・・・すみません
PHPのvar_dump()が個人的には非常に便利だと思い、そういうのがPythonでもあれば、またはライブラリなんかであれば使いたいなと思っただけです
ただ、検索したり、Docのインデックスからザッと全関数眺めてめぼしいものを確認したりしたのですが、無かったもので
pdbは変数や配列の内容を階層構造などで確認するような利用には、ちとめんどくさい(出来ないの)かなと思いまして
vars python でぐぐった結果は試してみたの?
じゃなくて var_dump python か
まだやってません
>>546 だったら最初から「PHPのvar_dump()のようなものはありますか」と聞けばいいだろ。
PHPやってた(やってる)奴なんてゴロゴロいるよ。
552 :
527:2011/12/18(日) 20:55:06.64
>>549は自分ではありません
Python var_dump()は検索しました
しかし、見た感じ近いことは出来ても、階層処理が上手くいっていないなどの状態でした
自分の他にもvar_dump()のようなものを欲しがっている人がいるのは分かったのですが、解決はしていないようだったのと、Pythonにそのような関数は無いというのは分かりました
パス
ごめんなさい
コメント書いてたらPHPer(?)向けPython入門になりそうだったので、要点だけ。
* pdbで階層表示
=> pp コマンド
* repr(obj) で <__main__.Hoge instance at 0xXXXXXXXX>。中身を表示して欲しい。
=> Pythonではrepr()の表示は各クラスの__repr__メソッドが受け持つんだけど、
とりあえず、vars(obj) でインスタンス変数をダンプした辞書を得られる。
Python場合、プロパティ参照に副作用を含めることも出来るので、
勝手に値を読まれたりすると困る場合がある。PHPで言うならリソース型みたいなものだと思うといい。
* repr(obj)だと日本語が16進表記される。日本語表示して欲しい。
=> 3.2を使う。2.xではunicodeに変換する必要あり。
# printデバッグでよく使うかもしれないsnippets
* repr(obj) # objの表現
* dir(obj) # objのメンバ一覧
* locals() # ローカル変数一覧
* vars(obj) # obj のメンバ変数のダンプ
たぶん、527にはgui なデバッガの存在を教えてやるのが一番生産的なのでは。
ちなみに俺はeclipse にpydev積んでる。
560 :
デフォルトの名無しさん:2011/12/19(月) 09:37:27.82
> * repr(obj)だと日本語が16進表記される。日本語表示して欲しい。
> => 3.2を使う。2.xではunicodeに変換する必要あり。
print repr(obj).decode('unicode-escape')
>>553 デモのコードとwatchmedoコマンドを試してみたけど、深い階層でも期待通りに動いたよ @ win/linux
ドキュメントにも recursive引数の説明には sub-directories traversed recursively とあるので、
再帰的にサブディレクトリ以下のイベントも捕らえてくれるのが正しい動作のはず。
漢は黙ってprintfデバッグ
563 :
553:2011/12/19(月) 17:36:09.71
>>561 レスありがとう。
Ubunutu10.04で確認できました。
ただMacOSX10.7でうまくいかないんだよな・・
というか何パターンかやってわかったけど階層の深さというよりも監視ファイル数が多いと駄目みたい。
Macではkqueue使ってるみたいだけど、これってかなり重いの?
ライブラリのドキュメント中でもそういう記述みつけたけど。
他にファイルイベントをフックする手段があれば、どなたか教えてください。
class UtcTzinfo(datetime.tzinfo):
# Coordinated Universal
def utcoffset(self, dt):
return datetime.timedelta(0)
def dst(self, dt):
return datetime.timedelta(0)
def tzname(self, dt):
return 'UTC'
def olsen_name(self):
return 'UTC'
class JstTzinfo(datetime.tzinfo):
# Japanese Standard Time
def utcoffset(self, dt):
return datetime.timedelta(hours=9)
def dst(self, dt):
return datetime.timedelta(0)
def tzname(self, dt):
return 'JST'
def olsen_name(self):
return 'Asia/Tokyo'
t = datetime.datetime.strptime("2011/1/1", "%Y/%m/%d")
t = t.replace(tzinfo=JstTzinfo()).astimezone(UtcTzinfo())
OK
t = datetime.date(year=2011, month=1, day=1)
t = t.replace(tzinfo=JstTzinfo()).astimezone(UtcTzinfo())
ERROR
'tzinfo' is an invalid keyword argument for this function
となります。エラーを回避して t.replace(tzinfo=JstTzinfo()).astimezone(UtcTzinfo())を成功させるにはどうしたらいいでしょうか?
t = datetime.datetime(year=2011, month=1, day=1)
http://docs.python.org/library/datetime.html date.replace(year, month, day)
datetime.replace([year[, month[, day[, hour[, minute[, second[, microsecond[, tzinfo]]]]]]]])
pytzを調べてみたほうがいい事例かも
>>563 ファイル監視にはファイル・ディスクリプタを使うので、
プロセス辺りの開けるファイルのリソース制限に引っかかってる。(パフォーマンスとは別問題)
その辺はlinuxも似たような仕組みのはずだけど、osxでは開けるファイル数の初期値が低いのかな。
READMEに書かれてるとおり ulimit -n <largenum> で制限を緩和するのが簡単な対処方法。
>他のフック
FSEventsのオブザーバーがソースには含まれてるけど、修正待ちっぽいね。
ttps://github.com/gorakhargosh/watchdog/issues/36 >Perhaps, if someone can get the fsevents code fixed before I can get around to it, you wouldn't have this problem on OS X.
567 :
553:2011/12/19(月) 23:37:53.90
>>566 ubuntuの場合はinotifyの限界値を調整していたのですが、
Mac(というかBSD系?)ではどうするのかな、と思っておりました。
また、ubuntuでは監視ファイルが多いと、OSError吐くんですが、
MacOSXでは単に監視されていないだけなんですよね。
値の調整とソース確認して対処します。
ご丁寧にありがとうございました。
568 :
デフォルトの名無しさん:2011/12/20(火) 09:28:34.62
突然すまん
pythonは、2と3のどちらを使えば良いでしょう?
・仕事ある
・webに、情報多い
・使ってる人多い
この条件を満たしているのは、どちらでしょうか?
圧倒的に2だと思われる
仕事は分からんが多分
>>564 t = datetime.datetime(year=2011, month=1, day=1)
にするとあっさりエラーが出なくなりました。
時間情報がなかったのにreplace(tzinfo=)しようとしたのがエラーの元だったみたいですね
[{"予定日": "2011/12/20 00:00:44", "本文": "てすとてすと", "コメント先": null, "消": false, "タイムスタンプ": "2011/12/20 00:00:44", "表題": "表題", "済": false, "予定終了日": "2011/12/20 00:00:44", "アクション": "来店"},
{"予定日": "2011/12/20 00:00:14", "本文": "てすとてすと", "コメント先": null, "消": false, "タイムスタンプ": "2011/12/20 00:00:14", "表題": "表題", "済": false, "予定終了日": "2011/12/20 00:00:14", "アクション": "電話あり"},
{"予定日": "2011/12/20 00:00:21", "本文": "てすとてすと", "コメント先": null, "消": false, "タイムスタンプ": "2011/12/20 00:00:21", "表題": "表題", "済": false, "予定終了日": "2011/12/20 00:00:21", "アクション": "電話あり"},
{"予定日": "2011/12/20 00:00:33", "本文": "てすとてすと", "コメント先": null, "消": false, "タイムスタンプ": "2011/12/20 00:00:33", "表題": "表題", "済": false, "予定終了日": "2011/12/20 00:00:33", "アクション": "来店"}]
このようなデータを予定日でソートするにはどうしたらいいでしょうか?
572 :
571:2011/12/20(火) 10:10:58.97
あ、質問を間違えました。質問を取り消します。
お騒がせしました。
>>568 ttp://wiki.python.org/moin/Python2orPython3 * ライブラリの問題がないなら 3.x 推奨。
* 2.x 系使うときは出来れば最新の2.7系で移植に備える。
2.xはもうメジャー・リリースでないので、(メンテナンスのみ)
2から始めるといずれは 3系 への移植が発生するってのを忘れずに。
ライブラリの都合で、実際には 2.x 使う事が多いと思うけど、
ある程度互換性のあるコードを書くことは可能なので、出来れば最新の2.7を使う。
利用者はコアな開発者程 3.x の割合増えると思う。(公式リリースがなくても、ブランチ等では3.x対応してるライブラリがある)
# ただし 2.x 捨てるまでは至らない。
仕事でも、安定版しか使わないって場合は、多くは大手の採用実績待ちじゃないかな。
>>571 sorted(data, key=operator.itemgetter("予定日"))
574 :
デフォルトの名無しさん:2011/12/20(火) 14:55:36.52
>>569 >>573 ありがとう
今は、2が多くて、これからは3が多くなるようですね
どちらかまよう。勉強始める時期を間違った
575 :
デフォルトの名無しさん:2011/12/20(火) 14:57:10.64
努力と情熱次第で自分の作りたいゲームが作れる!
ウディタの新バージョン「ウディタ2.00」が公開されました(2011年10月27日)
「WOLF RPGエディター」とは?
・高度なRPG開発が可能な、完全無料のゲーム作成ツールです。
・雰囲気はRPGツクール2000に近い。RPGツクール2000で自作システムを作りこむ際に
不満だったところがいろいろ解消されていて、かなり自由度が高いです。ただし
その分初心者には難しいかも。すでにツクール2000で自作システムを組むのに
慣れた人やRPGツクールでは物足りないけどプログラミングはちょっとという方にお勧め。
・作成したゲームは自由に配布したり、コンテストに投稿することも可能。
また本ソフトを持たない人でもプレイ可能!ファイル暗号化も完備!
>>574 後押ししてあげよう
2.7 からはじめる、2.7で3.x互換のコードを書く、徐々に3.x系へ・・・
* 3to2 は事例が少ないけど、2to3は早い人なら3~4年前から移植に取り組んでるので、情報も多い。
* 2.6のサポートはまだ続いてる。2.6 終了してから3.x への取り組みを始めても、2.7が継続してる間の猶予がある。
* 3.x系の日本語ドキュメント翻訳がまだ。翻訳が公開されてから3.x系という判断もありだと思う。多分その頃には3.3でてる。
PySideの3系対応早くしてくれー
ついてでにPyglet 1.2も早くきてくれー
初めて Python 使うなら 2.x からをおすすめします
チキン民族の日本人は2.xスタートが当然だよな。
これじゃあGoogleも誕生せんわ
googleなんてバージョン選択すげー保守的やん
自分はMacプリインストールの2.xから入ったけど、
2系は何となく気楽に書ける気がするなぁ。
3系に移行したいのは山々なんだけど、
常用パッケージが3対応してないのが実状。
centOSに標準で入っているPythonを使っているのですが、
python setup.py install
などでモジュールなどを入れた場合、rootユーザで無ければ
importがエラーで弾かれます
/usr/lib/python/site-packages/を一般ユーザにパーミッションを与えてみたのですが駄目でした
どのようにすれば一般ユーザでもモジュールが使えるようになるのでしょうか?
>>584 なるほど
ありがとうございます
例えば、fooユーザであれば、
python setup.py install --foo
としなければいけなかったと言う事ですね?
となると、既にインストール済みである場合はどうなるのでしょうか?
今Windows環境にいるもので確認できないのですが、
何かパーミッション変更して可能になるような事は出来ないのでしょうか?
やはり再インストールすべきなのでしょうか?
>>582 実際に3.x系を使うのは、ライブラリの対応を見ながら徐々に移行してけばいいと思う。
でも、準備は今からでも出来るよ。まずはこの辺りから始めよう。
* from __future__ import print_function, unicode_literals, division
* python -3 で実行
>>583 virtualenvでユーザ・ディレクトリ下にsandbox環境を作るのがお勧め。
>>585 ああ、勘違いしてた。ごめん
てっきりホームディレクトリにライブラリを入れたいって質問かと
sudo python setup.py installでインストールしたライブラリが
一般ユーザでimportするとエラーになるのなら
依存しているライブラリが不足してるといったディストロの問題ではないか
importしたときに出るエラー貼ってくれるといいかも
>>586-587 レスありがとうございます
>依存しているライブラリが不足してるといったディストロの問題ではないか
すみません
ちょっと自分の知識がないせいか、理解が出来ないのですが、これはどのような意味なのでしょうか?
su にてpythonを起動するとimport XXXは読み込まれるのですが、
一般ユーザではXXXがエラーになります
と言う事で、自分の(Python以外の)経験上、パーミッションの問題だろうと思っていたのですが
すみません
今問題の32bit版の機器が手元にないため、別の64bit版の機器を使いに行っておりました
ザッとインストール処理など済ませて簡単に実験してみてやはり出たのですが、
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ImportError: No module named _mysql
のようなエラーです
これはMySQLdbだけでなく、他のモジュールでも出たりします
rootユーザにてimportが可能というのは確認済です
djangoで日本語urlを使ってアクセスすると
urlの正規表現でキャッチ出来ません。
内部でデコードされてるのが原因ぽい感じなんですが、
止めるにはどうしたらいいですかね?
>>591 同じく、ホームディレクトリ以下へライブラリ入れたいって話だと思ってた。
rootでビルドとか、プリインストールの環境に外来ライブラリをいれるとか、
いろいろと好ましくないので、同じような問題で困ってる人ってあまりいないかも。
とりあえず、ユーザでpythonを起動したときに sys.path に _mysqlの場所は含まれてる?
パーミッションを疑ってるのなら、そのファイルのパーミッションは何になってる?
>/usr/lib/python/site-packages/を一般ユーザにパーミッションを与えてみた
この辺ちょっと要領を得ない、ディレクトリじゃなくて、
ファイルの読み込み権限が必要だけど、そこは大丈夫?
595 :
592:2011/12/21(水) 21:04:57.09
済みません説明が悪かったです。
例えば、下のようなurlを受け取る場合
domain.com/path/%e4%bb%8a%e6%97%a5%e3%81%ae%e5%87%ba%e6%9d%a5%e4%ba%8b/
(ブラウザで domain.com/path/今日の出来事/ と表示)
url(r'^path/(?P<category>[%a-zA-Z0-9]+)/$', viewname)
だと取れないんですよね
どうやらデコードされた状態で渡るっぽいようで
url(r'^sitename/(?P<category>.+)/$', viewname)
なら取れるんですが、これはやりたくなくて。
エンコードされた文字列を含むurlの、
djangoでの受け取り方を教えて頂きたいんですが。
CentOS標準のPythonは下手にいじらない方がいいと思う
普通にPython使うならepelにあるpython26を入れるなりしたほうがいいのでは
yum remove python だけはやるなよ、絶対だぞ
url(ur'^sitename/(?P<category>今日の出来事)/$', viewname)
600 :
592:2011/12/22(木) 03:45:03.84
>>599 それだと汎用性がなくてちょっとキツイんですが
いい方法ないですかね
url(r'^sitename/(?P<category>.+)/$', viewname)
せめて [^\/]+
unicode(補助漢字は含まない)の場合、
[\u0800-\u0FFF\u1000-\uCFFF\uD000-\uD7FF\uF9000-\uFFFF]+
他の文字コードでも同様に \x00-\xff みたいに 16進で範囲指定可能なので、日本語の範囲を調べて。
よほど売れてないんだな
>>605 LLスレ向きな話題かも。
浅いコピー(shallow copy) とは違い、shadowingは変数のスコープについての用語です。
num = 0
def inner():
num = 10 # numは新しい変数。外の変数 num は以降、隠れて見えなくなる(shadowing)
...
inner()
assert num == 0 # 値は元のまま
CoffeeScriptでは、不用意に外の変数を書き換えてしまうことが起こり得る。
JavaScript は var 付で変数に代入すると shadowing。
Python はデフォルトでshadowing。nonlocal付けることで外の変数を書き換え可能(3.x系)
for ループのコードは期待通りに動くコードとして提示されてるよ。
日本人発の情報って正直全然参考にならない
みんPyも無料にするくらいなら廃刊にしてくれたほうがまだありがたいわ
うわ……
成る程、全然参考にならない609であった。
廃刊になったから無料にしたんじゃないの
ところで、こないだ「みんなのPython」をみつけたので立ち読みしてみたんだけど、ひどい本だった。
どこがひどいか書く必要もあまりないが、まず誤植がメチャクチャ多い。 Jython のサイトの URL が python.org になってたり、
「p.110 を参照」と書いてあるのに実際には 117ページだったり、こういう URL とかページ番号とか周囲から類推できない部分が
間違っている。5分ぐらいパラパラとめくっただけでコレだから、本全体ではトンでもない数のミスがあると思われる。
これだけを見ても「短時間で適当に書きました」ってのがバレバレ (そもそも、ちゃんと校正したのかどうかさえあやしい)。
おまけに説明もまずい。「Python はインデントが重要」ってことで、図を使ってコードを視覚的に見せようとしている…らしいが、
ちっともそれが生きていない (ただ変数名やメソッド名を四角で囲って矢印を書くだけではなんの意味もない)。
インデントのブロック構造なども絵になっているが、実際のコードを使わずに「ただの四角」を使って説明するものだから、
ひどくわかりにくい。そのくせ、本当に図で説明する必要があるような概念、たとえばイテレータなどは、抽象的にテキトーな
説明が書いてあるだけ。そもそもこの著者は図を使ってものを説明するのが得意でないように見える。レイアウトも基本的にサボって
いると思う。ライブラリの紹介もひどい。たとえば pickle の項には loads(string(文字列)) というふうにメソッドが紹介されている
が、これは string が文字列型だって言いたいんだろうけど、これじゃかえって見づらい (実際には、最初のカッコと2番目のカッコは
微妙に違うフォントだが、どっちにせよ誤解する)。コード部分のフォントも弱いし、用語索引も貧弱だし、紙メディアであることの
利点をぜんぜん生かしてない。
いい所があるとすれば、それは日本語で書かれているということと、Python 2.3 (2.4?) に対応しようと
しているらしいということだけ。しかしそれも dive-in-pythonの翻訳と日本語リファレンスがあればすむ話で、そっちの翻訳を
やったほうがみんな幸せになれる。それでも、こういう本がどっかのページで (あきらかにまだ読んでもいない人から!)
持ち上げられているという有様をみるにつけ、「日本の Python ユーザは不幸だ!」という印象が強くなっただけだった。
まあ、でも、売れりゃなんでもいいのだろう。話題性さえあれば人は中身も見ずに買うわけだから。 Google 様様ですなあ。
結局のところ (ケッキョキ)、こういう本を欲しがる人ってのは Python を勉強したいわけではない。
参考書をいっぱい買って安心する受験生と同じようなもんですよ。
こういう「おまもり本」が売れるんなら、やっと日本の Python コミュニティも Ruby のそれらしくなってきたということか。
そしてこれこそが、一部の…いや、多数の? Python ユーザが望んでいることでもあるのだ。たぶn
>>613 いいからお前がPython本書けよ!みんな待ってるんだよ!
自分は C言語 → 色々なOO言語 → Python と
抽象化のステップを踏んで移行してきたからいいけど、
Pythonからプログラミングを始める初心者は、序盤からいきなり
イテレータみたいな抽象概念が出てきてどう感じるんだろうか。
と思いました。
try:
角電池
except:
618 :
デフォルトの名無しさん:2011/12/22(木) 20:03:41.96
PythonとApacheを連携させようと思いました
で、昔Tracを入れる際に、mod_python、mod_wsgiを入れていたので
httpd.confにて設定を記述しました
以前、mod_wsgiの方が早いという事を学習していたので、mod_wsgiを使って書きました
LoadModule wsgi_module modules/mod_wsgi.so
WSGIScriptAlias /NLP /{$PATH}/python/httpd-test.wsgi
だけで、httpd-test.wsgiをブラウザ上にHello,Worldは表示させることが出来ました
しかし、PythonとApacheの連携は出来ることは出来ましたが、
これではPHP等のように、/{$PATH}/php内に入っている.phpファイルを全部ブラウザにて表示させると言うことが出来ません
WSGIScriptAliasにてファイルのパスを毎回書く事になると思います
AddHandler cgi-script .py .wsgi
のようなものも書いてみましたがダメでした
/{$PATH}/python/内に入っているPythonファイルを、
わざわざhttpd.confにWSGIScriptAliasにて指定しなくても全てブラウザに表示させたい
と思うのですが、どのようにすれば宜しいのでしょうか?
620 :
592:2011/12/22(木) 21:55:12.57
>>602 うーん
そのパターンでもマッチ出来ないんですが、やり方間違えてるのかな
ちなみに
%e4%bb%8a%e6%97%a5%e3%81%ae%e5%87%ba%e6%9d%a5%e4%ba%8b(今日の出来事)
もマッチしますでしょうか?
django知らんけど、URLエンコードがデコードされてるだけで
その例だとUTF8エンコーディングのただのバイト列なんじゃねーの
ならunicodeに変換してunicodeの正規表現で比較汁
ヒント: djangoを捨てる
そして Flaskを手に取る
624 :
602:2011/12/23(金) 03:28:36.92
>>622 PATH_INFO の unquote は WSGI のハンドラで処理されるので、django以外でも同じ。
>>620 unicodeの例を出したのは一番簡単そうだったからで、
utf-8であればutf-8の日本語にマッチする正規表現を作る事になります。
でも、複雑な正規表現のコストを考えると、 [^\/]+ が一番手軽な対策
/今日の出来事/hoge みたいなURLを想定して .+ にしたくないのかなと思ったんだけど
他に理由があるなら、まずは [^\/]+ で駄目な理由を熟考してみて。
他は、別の方法だけど、RegexURLResolver等のサブクラスで pathを加工してから
正規表現とのパターンマッチへ渡すって手もある。
もう環境変数から直接読めよ
>>618 WSGIはプロセス常駐型Webアプリケーションのための仕組みです。
古典的なCGIとはちがって、リクエスト毎にプロセスを起動するものではないので、
Webページ毎に.pyとか.wsgiとか.phpを用意するということはしませんし、できません。
>>628 WSGIは・・・というより、アパッチ・モジュール(もしくは mod_wsgi) は・・・ではないかな。
みんパイ!
pdf読みずれ
電子書籍になるとコーディング捗るって言ったの誰だよ
2chまとめのサイトでタイトル見てると
「捗る」が乱用されてる気がする
633 :
592:2011/12/23(金) 12:41:55.40
>>621 >>624 ありがとうございます。
[\u0800-\u0FFF\u1000-\uCFFF\uD000-\uD7FF\uF9000-\uFFFF]+
はunicodeで、マッチするはずありませんですね失礼しました。
(ちゃんとunicodeって書いてありますよね)
.+を使いたくなかったのは、無闇にマッチする範囲を広げたく
無かったからなんですが、厳密な正規表現はコスト増なだけで
意味なさげですかね。
となれば[^\/]で問題ないので、これで行こうと思います。
>>631 雑誌の連載レベルの量なら読みやすいんだがなぁ
みんPyアップされてすぐ落としてきたんだけど、
見開きなのが地味に辛い。
せめて1ページずつに分けてほしかった。
>>914 同意
Rubyの糞本乱立の真似はPythonにはして欲しくないのにそうなりつつあるのが残念
>>629 いや基本的には"WSGIは・・・"でOKだと思う。
WSGIをCGIとして実行することもできるけど、あれは本来の使い方じゃないし。
from 松下電器 import 角電池
DeprecationWarning: the 松下電器 module is deprecated; use パナソニック instead
641 :
デフォルトの名無しさん:2011/12/24(土) 00:16:23.07
<p>hello</p>
こんなHTMLがあったとしてhelloだけを取り出したいのですが、どうすればいいですか。
>>641 正規表現でいいなら
import re
src = "<p>hello</p>"
m = re.search(r"<p>(.*?)</p>", src)
if m: print m.group(1)
もっと複雑なことがしたいなら、XML/HTMLパーサを使う。
BeautifulSoup or lxml
lxml版
import lxml.html
src = """<body>
<h1>2ch</h1>
<div><p>hello</p><p>world</p></div>
</body>"""
root = lxml.html.fromstring(src)
for p in root.findall('.//p'):
print p.text
645 :
デフォルトの名無しさん:2011/12/24(土) 00:53:17.31
?
最近ではガンダムもオブジェクト指向になったか
「オブジェクトオリエンテッドガンダム発進します!」
ガンダムUnsignedChar
651 :
これか:2011/12/24(土) 05:46:11.41
おJava女どれみ プログラマー猿 カウボーイ・デバッグ JAVAン
人月を探して 超電磁ロボ コンパイラーVC++ パケットモンスター
機動戦士GNUDAM エリア8KB 新言語Javaンゲリオン あらいぐまオラクル
千と千尋のバグ隠し あずまんがI/O ゲットデバッカーズ デバッグNo.1
Bugって仕様 人月姫 エスイー(SE)魔美 あしたの仕様ー 外注遣いに大切なこと
ガンダムsed ガンダムOO(オブジェクト指向) ランダムSEED
ガンパレード・デスマーチ ~新たなる行軍歌~ アルプスの少女High-C
Cosmic DataBase COMMITさん☆ ARMs ハックしよう大魔王
魁!プロパティ高校 超時空要塞マクロ 湾岸MID$RIGHT$
ルパンSun製 グレートマシン語 逆襲のchar ウルトラマンZ80
バグひな 戦え!超OS生命体TRONスフォーマー gccさくら
キャプテンmalloc 金色のハッシュ! おねがいt_char typoしちゃうぞ
フォートラーン戦記 Excelサーガ getcharロボ 焼きたて!!JAVAん
データセンターあらし 忍者バグトリ君 ときめきメモリ枯渇 修羅のMON
ゴルゴ1B(バイト) Rubyポップは笑わない ELFを狩るものたち 迷宮組込
gccさくらで根負けして笑った
現実とかぶって切ないのがかなりあるなw
続きがあるらしい
DataBaseZ Serial Interface Lain おねがいMySQL ストライクswich文
これはゾンビプロセスですか? NURUPO-ヌルポ- 疾風伝
最終納期彼女 クレームモア Angel Sheet1 Inherits Stratos ぬるりひょんの孫
二人はPrintf Max関数 DECODEギアス バグと単体テストと変換中 うる星顧客
07-HOST 攻殻機動隊 STAND ALONE SERVER .Cloneちゅるやさん 夢プロパティシエール
ヘッダリア しおんのI/O MS GOSICK ダンプーブレード フェアRetail
世紀末ヌルポ学院 11Is シナリオと単体A Tempファー 省略!以下無コメ
閃光のナイトRaid5 マクロフロンティア コンストラクターV 手書きバチ
東京ASP 継承ダイモス プロキシーエンジェル SQL・カザド 明日のプロシージャ
れじ☆すた 名探偵Common 俺の仕様書がこんなに見やすいわけがない 創聖のアQueryオン
戦場のVARCHAR Tryもん Catchアイ 神のみぞ知るDelphi Delay零 けいこく!
何と言うか、執念のようなものを感じるな…
656 :
629:2011/12/24(土) 09:44:26.20
>>638 ちょっと認識が違うなぁ
WSGIは webアプリを自由にスケールできる様にする為の仕組み。
実際に、従来の様な CGIスクリプトとして運用することが稀であるとしても
それをを WSGI 対応にする意味はあるよ。
まぁ、WSGIの説明として適切かどうかは、どうでもいいんだけど、
今回問題なのは、その常駐型アプリの為のアパッチモジュールを従来のCGIのように使おうとしてる点なので、
WSGIは・・・と言ってるのに違和感あった、mod_wsgiは・・・なら納得。後半は概ね同意です。
>>618 はそのどっちの区別もついてないんでしょ
perl と CGI と mod_perl の違いも判ってない
>>656 ああ確かに、WSGIの目的は
「インタフェースを標準化しておけば、いろんな組み合わせで運用できますよ」
ってことなので、wrapperで包んでCGI化するのもその一つと言えますね。
flupでFastCGIにする人もいるし。
CGIから作り始めて、CGIの問題点を説明し、Flaskか何かでWSGIアプリを作り、
nginxで簡単デプロイ!みたいな本を書けば売れますかね。
みんPyは叩かれてるけど、
「みんなのPython Webアプリ編」はそういう感じの構成なので教育的で良いと思った。
今どきCGIから説明を始める本は貴重。だが例題はダサい。
角電池 included
みんpyといえばうろおぼえだけど
文字列になってる数値から実際の数値に変換するために
(日本語へたくそでごめん)
def value(s):
try:
return int(s)
except ValueError, e:
return float(s)
みたいな関数作って使えって書いてあったんだけど
みんなこんなことしてる?
しない。intとfloatのどっちが返ってくるかわからない関数とか使いたくない
PyJUGのサイトで質問
>日本語オンラインドキュメント
>Pythonドキュメント翻訳プロジェクトが翻訳した日本語ドキュメントをダウンロードできます
>Python日本語ドキュメントはこちらでダウンロードできます。
http://www.python.jp/doc/ tar玉どこ?
666 :
663:2011/12/24(土) 15:25:07.49
>>664 そんなところに。
マジ感謝。ありがとう!
667 :
663:2011/12/24(土) 15:27:32.54
えっ?トナカイより蛇が好きだって???
∩ .∩
.い_cノ / ̄>O
.c/・ ・っ (ニニニ)△△
.("●" ) .(・ω・`)[∥] ここも悪い子ばかりだな
O┳Oノ)=[ ̄てノ ̄ ̄] ルドルフ!次行こう!
◎┻し◎ ◎――◎=3
/ラジャー\
TurboGearsの本(TurboGears×Python)がネットで送料込みの中古で350円だったから買ってみた
表紙に白いものが付いていた
精液ではないのは確か
何かお菓子のようなもの
で、中身を見て驚いた
350円でも損した気になった・・・
酷い内容
本も薄いが、中身はもっと薄い
よくもこの程度の本出す気になれたなと思う
ところで、上で出ているように、廃刊になったりしてウェブ上で無料公開しているようなプログラミング用のように、
コンピュータ用途の本って他にはないんですかね?
sindobookさん...
メリークリスマシュ!
>>669 やっぱりそうか
何度か立ち読みして何度も買うのを思い留まったんだけど
またうっかり立ち読みしてしまう
何度読んでも訳が判らなくて
自分の頭が悪いんだと思ってた
めりくり
日めくり
スカートめくり
簡単な数式の入ったファイルを読み込んで
Pythonに計算させて出力する方法を教えてください。
フォーマットは、
100 + 100
10 * 20 - 5
みたいな感じです。
自主勉でやってみようかと思ったけど読み込んで正規表現でぶった切るぐらいしか思いつかなかった。
はじめる前は、そのまま計算式として読ませることが可能な気がしたんですが、使ったことないけどNumpyとかのモジュールに文字列渡すような形式にしかならない?
683 :
デフォルトの名無しさん:2011/12/25(日) 20:36:32.69
エヴァる
import sys
while True:
line = sys.stdin.readline()
if line == '': break
print eval(line)
>>683-684 サンキューそ~マッチ。
よかったら基礎的な関数・メソッド等を多く学ぶ方法を教えてください。
Help読みでしょうか。いい方法ありますか?
入門書を一冊読む
>>685 既に何か言語を知っている場合は
最初は簡単なことについて、知ってる言語でこうだけど
pythonではこうすると言うのを書きながら体験する。
そうすればイチから入門書を読み下すよりは早く習得可能。
ただし、知識が偏りやすいので慣れてからでも入門を一度
読み下して見ることをおすすめする。
あざぁーっす。とりあえず精進あるのみっすね。
pythonなんか勉強しないで英語しろ
>>690 プログラミングは、コードを書き始めると過集中状態になれるんだけど、
英語の勉強はまったくやる気にならない...
英文読む際はとりあえず自動翻訳にかけて、分かりにくい部分だけ元の英文を読みなおすといいよ
機械翻訳はないわー。
そうか?
最近結構まともになってきて、技術系の文章ならそれなりに言いたい
事がわかるようになったと思うが。
そうか?
最近結構まともになってきて、技術系の文章ならそれなりに言いたい
事がわかるようになったと思うが。
印欧言語どうし(仏英とか)なら機械翻訳もかなり精度高いけど、
英日だったら原文を読んだほうが楽かなぁ。
技術系文章はPlain Englishで書くことが是とされる世界なのでなおさら。
from English import I, You, verbs, tense
i = I()
you = You()
if i.subjunctive(verbs.know(you.posessive['phone_number']):
i.subjunctive(tense.will(verbs.call(you)))
Python3でC拡張library書いてるんですが、
分けの分からない挙動をするのでちょっと助けて下さい。
telephone.Telephone('000-0000-0000')
print()
とすると、print()の箇所で以下のようなerrorが発生します。
Traceback (most recent call last):
File "telephone/test_init.py", line 4, in <module>
print()
SystemError: Objects/object.c:594: bad argument to internal function
print()を削除すると正常に終了します。
print()に影響する理由が分からず詰まっています。
可能なら、Cモジュールのコードをcodepadか何かに貼ってくり
ああ
おれも初めてのときやったわ
スタック潰してるんだよ
関係ないけど、Cは関数だけ書いて、
Pythonでそれをwrapしてクラス化するのが吉。
>>670 スレ関係ないが、今年最も素晴らしい動画らしいじゃないかそれ
観てないけど
704 :
698:2011/12/26(月) 14:09:55.60
PyObject_RichCompareBool(n, zero, Py_LE)
この様な行があるのですが、zeroにNULLを突っ込んだまま
比較をしていて
>>700さんの言うstack破壊が起こっていたようでした。
助言を下さった皆様ありがとうです。
object.cを読むと、それはスタック破壊ではなく、
NULLチェックに引っかかってるみたいだよ。
ですね、よく読んでみたらそう書いてありました。
大体、stack破壊の挙動にしてはおかしいですね。
よく読まずにお礼を書いてしまっていたということで。。。
モジュールからデータを一つだけ取り出す
効率の良い方法を教えて下さい
内容---400文字程度の日本語文字列を1500種類程
現状こんな感じにしてるんですが
def textRetarn(id):
text = {}
text['id_1'] = '日本語文字列1・・・'
text['id_2'] = '日本語文字列2・・・'
text['id_3'] = '日本語文字列3・・・'
・
・
・
text['id_1500'] = '日本語文字列1500・・・'
return text[id]
これだとアクセス毎に、全ての文字列が一旦メモリに読まれてしまいますよね?
文字列ごとにファイルをバラせば、無駄な読み込みを無くせそうですがそれは手間が掛かりすぎるので。
効率のいい方法があれば教えてもらえませんでしょうか?
sqlite3
sqlite3か、
class Foo:
def __init__(self):
self.dic[1] = '日本語文字列1'
self.dic[2] = '日本語文字列2'
self.dic[3] = '日本語文字列3'
def textReturn(self, id):
return self.dic[id]
ありがとうございます。
sqlite3を利用するのはアリですよね。
ところで、
>>709のようにクラスを利用すれば
効率が良くなるのは何故でしょうか?
>>707 わざわざsql使わなくとも、dbmで永続化でいいと思う。
辞書ライクにアクセスできるし。
ところでgettextみたいなことやろうとしてない?
>>709は、省メモリの点からいえば、キーが数値, 辞書=>リストになっただけで
データ自体はメモリ内。おそらく望んでる効率化ではないと思う。
713 :
712:2011/12/26(月) 17:29:46.64
ごめん、辞書=>リスト ってのは間違いだったかな。
dicが何かわからないけど辞書っぽい
>>712 707が求めているのは省メモリではなく、関数を呼ぶたびに辞書の生成/破棄をする無駄を
気にしてるんでしょ。
だから709の回答でいいかと。インデント崩れてて分かりにくいが。
他の回答としては、辞書をグローバル変数にする、クロージャを使う等。
すみません
配列生成のムダも省きたいんですが、
現状主に考えていたのは、メモリ的なムダを省くことです。
文字数がかなり多いので。
dbmって知らなかったんですが、
なかりいい感じに思えたので調べてみます
クラスも勉強になりました。
ありがとうございます
こんな感じでC拡張を書いているんですが、
static PyMethodDef Montgomery_methods[] = {
{"gcdext", montgomery_gcdext, METH_VARARGS, "gcdext()"},
{"mul", (PyCFunction )montgomery_mul, METH_VARARGS, "mul()"},
{"Fr", (PyCFunction )montgomery_Fr, METH_VARARGS, "mul()"},
{"Fr_inv", (PyCFunction )montgomery_Fr_inv, METH_VARARGS, "mul()"},
{"pow", (PyCFunction )montgomery_pow, METH_VARARGS, "pow()"},
{NULL, NULL, 0, NULL} /* sentinel */
};
powと組み込み関数のpow()の名前が被っています。
from _montgomery import *
とすると、組み込み関数のpow()がMontgomery_methods[]内の
powで上書きされてしまい、組み込み関数のpow()を呼び出せなくなってしまいます。
上書きしないためにはC拡張側にどのように手を入れたらどうしたら良いでしょうか?
ライブラリなどのソースコードをハックしようと思ったのですが、Pythonに慣れていないためか構造がいまいちつかめません
PHPやJavaScriptの場合は楽だったのですが
特にPHPはindex.phpから見れば、その後のライブラリの構造は(includeしたファイルなど)順々に読めていけました
しかし、Pythonの場合はどのファイルから読めばいいのか、とかが全くつかめません
__init__.pyとかある場合と無い場合があり、しかもあってもversionしか書いて無かったりです
importも標準モジュールなどが沢山かかれており、PHPのようにPEAR/Pearinfo.phpなどのように「これは明らかに外部ファイルだ」というような判別も付きにくいです
皆さんはどのファイルから読み、また、どのように辿っていくのでしょうか?
注意している点とか、何かアドバイスを頂けたらと思います
>>716 まず、名前空間を考慮するなら import * 自体すべきでないのだけど、
組み込み自体を上書きしてるのではなく、スコープ内で名前を隠してるだけなので、
組み込みのpowは __builtints__.pow で呼び出せるよ。(もしくは __builtin__モジュールからimport)
C拡張は弄る必要なく、呼び出す側で適切に名前を別の変数に入れるなどして回避する。
from __builtin__ import pow as builtin_pow
from _montgomery import pow as montgomery_pow
>>717 「ライブラリなどのソースコードをハック」の前に、
まずはPythonチュートリアルに目を通すといいです。
>>669 そのシリーズはweb系の技術書の中でもピカイチの悪評番
CakePHPはさらに悲惨
amazon で見てもレビューすら付いてないな()
Python×Djangoもひどいよ。
出版社覚えておきたい
他の本も買わないようにする
Ploneもひどいよ。
ひどいのばっかじゃないか
著者も覚えておこう
確かそのシリーズ
巻末の50ページくらいがAPIリファレンスだったと思う。
そんなもんネットで調べるっての。
>>726 漏れの以前買ったPython本の巻末には
PEP8、10、20、257、387、3000、3003が計数十ページそのまま載ってた
内容もしょぼかったしそれ以降は原則的にApressの本は買わないようにしてる
公式ドキュメントとチュートリアルと
その他ネットに無料で転がってる情報で十分である。
メソッド名をプリントする方法教えてください
pass
>>729 どれをやりたいのかわからないが、
# Fooクラスのbarメソッド名をプリント
>>> print(Foo.bar.func_name)
# モジュールのクラス・メソッド・関数一覧
$ python -mpyclbr module_name
# メンバ一覧
>>> print(dir(obj))
>>718 助言ありがとうです。
名前を別の変数にいれる方法でうまくいきました。
>>717 起動するスクリプトの if __name__ == '__main__': から読み始める。
自分も経験あるんだけど、Python言語のコードというより、
オブジェクト指向のコードを読むのがはじめてだったりしないかな?
普通に手続きで書き下されたコードならPythonでも他の言語と大差ないはずなんだけど。
ある程度の規模のソースになると、拡張しやすいように柔軟に設計されてる半面、どこに何があるかわかりにくいって事がある。
クラスがたくさんあって構造を把握しにくいって場合は、IDE等についてるクラスブラウザを使うといいよ。
>>733 いや、PHP、JavaScriptのソースコードはかなり読んでいます
ライブラリを使用する際もソースコードを見てから出ないと使わないタイプで
ただ、Pythonはコードにクセがあるせいか、まだ見慣れていないので自分には非常に分かりにくいです
自分の見た2、3のライブラリが構造が分かりにくいだけなのかもしれませんが
例えば、libとかincludeとかあれば「あぁ、これはライブラリを意味してるんだな」とか分かりますが、そういうディレクトリ構造から特に意味を読み取れないものがあり「う~ん」となっております
まぁ、Pythonにたいする慣れがまだ伴っていないせいかもしれませんが
>起動するスクリプトの if __name__ == '__main__':
というのがすみませんが分かりません
今手元にあったので、初めてDjangoの解凍したものを見てみました
/djangoへ行き、__init__.pyはバージョン情報、フォルダ名から、coreがメインだろうと入ると__init__.pyは空ファイル
これは一体どこから始まっているのか?と思いました
PHPに慣れているせいですかね
関数郡、クラス郡というより、index.phpから始まる全体的な流れを追ってしまう事が原因かもしれません
Pythonとは思想が違うのかもしれないと今思い始めてきました
平松邦夫/民主党
大阪市役所・自治労・大阪市労働組合・日教組・大阪市教育委員会・自民党・共産党・社民党・関西電力・住友グループ
・毎日放送・毎日新聞・関西経済連合・日本原子力発電株式会社 ・ 週刊文春・週刊新潮・NHK・朝日新聞・読売新聞
・部落解放同盟・朝鮮総連・在日本大韓民国民団・日本遊技関連事業協会・全日本遊技事業協同組合連合会・日本弁護士連合会・生活保護受給者・反日左翼・9条の会・革マル派・中核派
VS
橋下徹/維新の会
大阪市民・みんなの党・国民新党・亀井静香・石原慎太郎・東国原英夫
様子見:公明
>>734 「ソースコードを読む前にチュートリアルを読め」としかいえない。
UMLみたいなファイルとかもあればいいんですけどね
READMEとか見たりするんですけど、チェンジログ化したものとかあって、読む意味のないものとかも多いですし
>>737 いいからまずは言語仕様理解しようよ。Pythonに対するFUDでもしたいの?
ライブラリを使い倒してからソースコード読んだほうがいいと思うよ
Pythonに限らず
pythonの2次元listやdictをhtmlフォーマットの表として書き出す
お手軽な方法を教えて下さい!姉が死にそうなんです!!
>>741 ありがとうございます!!姉を差し上げます
これは同意せざるを得ない
from SANYO import エネループ角電池
だるい
url = "
http://www.example.com"
# リクエストオブジェクトを作成する
request = urllib2.Request(url)
# 実行する
response = urllib2.urlopen(request)
こんな感じでHTTPでHTMLを取得してるんですが、
送信してるリクエストヘッダーはどうやれば見れるんでしょう?
proxyを使う
urllib3を使う
※ 3.x へ移植の際に、手間になるかもしれないので注意
# urllib の場合
ttp://www.diveintopython.net/http_web_services/debugging.html # urllib2 の場合 (HTTPHandlerのdebuglevelを設定. httpsは HTTPSHandler)
urlopen = urllib2.build_opener(urllib2.HTTPHandler(debuglevel=1)).open
urlopen(request)
# urllib3 ... は
知らないけど、loggingモジュール使ってるのでそっちで設定可能?
# proxy経由する場合
送信したヘッダと実際にサーバが受け取るヘッダが異なる事があるので、サーバ側でも確認。
サーバ側で確認できる環境とは限らないよ
動詞の連結(?)をPythonで行うためのライブラリはありますか?
例えば
「作る」+「したい」→「作りたい」
のような処理をやりたいんです。
検索してて形態素解析をMeCabというライブラリを見つけたんですが、
高機能すぎてこれでできるかどうかわかりませんでした…。
Pythonというか日本語文法の話じゃね?
「作る」+「たい」=「作り」「たい」
という各パーツを接続可能な活用形で繋げたいんでしょ?
形態素解析は、文を解析してパーツに分けるものだよ
そういうライブラリは見たことないなぁ。
日本語の活用規則はシンプルだから、ルールセットとデータベースを作る
のは難しくないと思うけど。
なんかスパマーな匂いがするので解決策を提示するのをためらう
>>752 localhostで標準ライブラリにでもあるhttpサーバ起動すればいい
梅干し食べてスッパマー
さすがに古すぎると思います先生
>>762 python http serverとのやりとりでは送信リクエスト・ヘッダを見られないてこと?
ヘッダを見て何がしたいのかしら。
urllib2のデフォルトのヘッダラインは
HostとUser-Agentくらいだと思うけど。
Pythonって本あった方がいいですか?
>>765 ネットの情報だけで十分だと思いますよ。
プログラミングが初めてで、あえて本を読むとするなら
独断と偏見により「Pythonで学ぶプログラム作法」って本をおすすめする。
>>766 プログラミングが初めてではないのでネットだけでしばらくやっていこうと思います。
ありがとうございました。
768 :
753:2011/12/29(木) 20:02:21.70
>>754 解析してパーツに分けれるなら、
それを戻す機能も実装されてるかと思ったんですが、
また別の話なんですね。
>>755 自分で作るしかなさそうですね。
例外規則とかそれなりにありそうだったので
ライブラリがあれば使いたかったんです。
>>756 スパマーってこんなことするんですか?
自分は外国語の変化表を自動生成しようと思ってるんですが、
日本語訳に基本動詞入れるだけで
外国語の変化に対応させようと思って探してました。
command lineから実行した時に、
こっちは0って表示されるんですが、
python3 -c 'print(0)'
こっちでは0が表示されない
python3 -mdecimal -c 'print(0)'
python3 -mdatetime -c 'print(0)'
なんかのbug?って思っていますが、良い解決方法ご存知じゃないですか?
-mの正しい動作だよ
-mは指定したライブラリをスクリプトとして実行する
なのでif __name__ == '__main__': ...も実行される
% cat hoge.py
print('(^o^)/')
if __name__ == '__main__':
import sys
print(sys.argv)
% python3 -m hoge -c 'print(0)'
(^o^)/
['/tmp/hoge.py', '-c', 'print(0)']
python3 -c 'import decimal;'
で解決しました
>>768 英語の処理をしたいなら日本語なんて経由しない方がいいんじゃないかな 複雑さが増す気がする
Pythonの自然言語処理ならNLTKという最強のライブラリがある
あとオライリーから出てる入門自然言語処理って本はあなたに最適な気がする
775 :
753:2011/12/30(金) 05:18:11.36
>>774 経由ではなくて、こんな感じに表にして出力したいんですよね。
wait : 待つ
want to wait : 待ちたい
should wait : 待つべき
can wait : 待てる
本の紹介ありがとうございます。
入門自然言語処理見てみます。
よくわからんが、日本語と対応させて覚えるのはよろしくないのでは?
modal verbは文脈によって意味合いが変わるし。
Pythonでネットワークプログラミングをしていますが、よくわからないので教えて下さい。
### サーバ側のプログラム (server.py)
import socket
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.bind('/tmp/server.sock')
sock.listen(1)
try:
while True:
print("* waiting connection...")
conn, addr = sock.accept()
print("* connected")
data = conn.recv(1024)
if data:
print("* received: %r" % data)
conn.send("OK¥n")
else:
print("* break")
break
finally:
print("* close")
conn.close()
つづく
### クライアント側のプログラム (client.py)
import sys
import socket
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect('/tmp/server.sock')
for arg in sys.argv[1:]:
n = sock.send(arg)
print("*** sent : %r (%s bytes)" % (arg, n))
data = sock.recv(1024)
print("*** received: %r" % data)
sock.close()
実行結果
$ python server.py # サーバを起動
* waiting connection...
* connected
* received: 'foo'
* waiting connection...
$ python client.py foo # べつのコンソールでクライアントを実行
*** sent : 'foo' (3 bytes)
*** received: 'OK¥n'
つづき
このプログラムは、client.pyの引数が1つのときはうまく動くのですが、2つ指定するとうまくいきません。
$ py client.py foo bar # 引数が2つあると
*** sent : 'foo' (3 bytes) # 最初の引数は送れたうえで返事が返ってくるけど
*** received: 'OK¥n'
*** sent : 'bar' (3 bytes) # 2つめは送った後に返事がうけとれない
サーバ側の出力は
$ python server.py
* waiting connection...
* connected
* received: 'foo' # 1つめは受け取れているけど
* waiting connection... # 2つめは受け取れていないみたい
どこをどう直したらいいでしょうか。教えて下さい。
acceptをループの外側にもってくる
>>780 ありがとうございます。そういうことですか。
今回は、サーバ側はこのままにして、クライアント側を変更し、
引数ごとにソケットを接続し直すことにしました。
import sys
import socket
for arg in sys.argv[1:]:
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect('/tmp/server.sock')
n = sock.send(arg)
print("*** sent : %r (%s bytes)" % (arg, n))
data = sock.recv(1024)
print("*** received: %r" % data)
sock.close()
これでうまくうごきました。ありがとうございます。
それは違うんじゃないか
それコピペ
朝日新聞は一時期300人のネット工作員をかかえ、反日工作していた。
捕まった編集者は49歳ですが、こんなカスでも1500万円の年収がもらえるんですよ。
Domain Information: [ドメイン情報]
a. [ドメイン名] ASAHI-NP.CO.JP
e. [そしきめい] かぶしきがいしゃ あさひしんぶんしゃ
f. [組織名] 株式会社 朝日新聞社
-「朝日新聞社は、とある思想やパラダイムに日本の世論を誘導する見返りに、中国から大量の資金を貰っている。」-
これはおそらく週刊誌さえ書けない。
「失語症躁鬱ニートは氏ねよ」【ネット】朝日新聞社員(49)ネットで荒らし行為、会社ごとアクセス規制へ 09.3
てんさいです
【東京都渋谷区】 12/31(土) 年忘れしてはならない!紅白さくら祭 みんなで「韓流紅白」をぶっ飛ばせ!
年忘れしてはならない!紅白さくら祭 みんなで「韓流紅白」をぶっ飛ばせ!
12時00分 渋谷駅ハチ公前広場 「街頭演説」(~13時30分)
13時30分 移動
14時00分 渋谷公会堂前 「街頭演説」(~14時45分)
15時00分 代々木公園・NHK横「イベント広場」
「年忘れしてはならない!紅白桜祭」
抗議集会・コンサート・炊き出し等々
盛りだくさんでお送りします!(~21時00分)
UbuntuでVimを愛し、Githubでソースを公開し、
気に入ったプロジェクトがあればPull Requestを送り、
Haskellを勉強し、Pythonのブログを書いていたとしても、
俺は依然として無職だし、WIndowsでメモ帳でPHPを書いていても仕事は貰える!!
コピペ乙
>>783 クライアントを毎回接続するのは無駄が多いので、
普通はサーバ側を accept の内側にループ作ってその中でデータを送受信するようにします。
>>790 何が言いたいのか知らんが
asyncore とか Twisted とか調べてごらん
10回繰り返し行うけど、変数を使いたくない時に
「どう書くべきか?」といった推奨はありますか?
例えば
for i in range(10):
print "a"
とすると i が必要ないのに使われちゃう点です。
特に困ってはいないのですが、
もし推奨されてる方法があるなら
そっちを使おうかと思って質問させてもらいました。
for _ in range(10):
print "a"
print 'a' * 10
print ''.join(reduce(operator.add, [['a']] * 10))
print "aaaaaaaaaa"
>>793 _ は普通の変数と何か違いがあるんでしょうか?
>>791 その前に socket how to を読むのをおすすめする。
非同期/マルチスレッド選択判断の参考になることも書いてるし、
その前にバッファリングやブロッキングについて正しく理解しないと。
for x in iter("a" * 10)
print x
print "a"
print "a"
print "a"
print "a"
print "a"
print "a"
print "a"
print "a"
print "a"
print "a"
from __future__ import print_function
map(print, "a" * 10)
_ 変数を使うとpycheckerに怒られない。詳しいことは知らない。
don't-care variableでぐぐると小話が出てくる
あと対話型プロンプトでは最後に評価した値が入ってる
>>751 亀レスすんません。自分はPython2.xでした。ありがとうごさいます!
それにしてもどうやってその方法を知ったのか気になるんですが。。
常にアンテナを張れ
求めよさらば得られん
与えられんだろ
俺は得られんで習ったし
>>808 ぐぐったら与えられんの方しか出てこない()
思い違いかもしれん
ありがとう
求めよ、さらば与えられん。ぐぐれよ、さらば見出だせん。叩けよ、さらば開かれん。
Ask and it will be given to you.
Seek and you will find.
Knock and the door will be opened to you.
聖書って、布教するために平易な英語で書かれてるんだよな。
Pythonとかけて三が日の食事と解く
その心は
どちらもヘビーでしょう
>>814 /\/\/\/\/\/\
./ ./| /| /| ./| ./| ./|
∴\/./ . / / / / /
゚∵ |/∵|/; :|/:;;;|/.;. |/ ;.;|/
_, ,_ _, ,_ _, ,_ _, ,_ _, ,_ _, ,_
(ノ゚Д゚)ノ゚Д゚)ノ゚Д゚)ノ゚Д゚)ノ゚Д゚)ノ゚Д゚)ノ こんなくだらねー案件
/ / / // // // // / 審議に回してくるな
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
818 :
【凶】 【693円】 :2012/01/01(日) 02:24:29.12
あけおめー
819 :
【大吉】 :2012/01/01(日) 03:39:09.70
今年もよろしくお願いします。
∧_∧
( ´Д` ) おまいら
/ ヽ 新年あけまして
し、__X__,ノJ
/´⌒⌒ヽ
l⌒ ⌒l おめでとうございます
⊂ ( ) ⊃
V ̄V
∧_ 人
(;´Д(__)
( つ (__) イケメン風に
) 「( ・∀・)
|/~~~~~~ヽ
人
∧_....( )
( ´∀(へ ノ)
( つ ( ´ 」` ) さすがプロですな!
) 「( 'ー )
|/~~~~~~~~~~ヽ
メリークリスマス!
8Pニューイヤー
824 :
【豚】 :2012/01/01(日) 10:16:46.25
あけおめ~
おめぇ~
827 :
【大吉】 :2012/01/01(日) 12:19:02.62
ネトウヨのみなさんもおめ~
______
r〃〃〃 f7⌒ろ)
l∥∥∥ || f灯
|∥∥∥ || | |
|儿儿儿._」∟⊥厶
〔__o____o_≦ト、
. i / ⌒ ⌒ ヽ )
!゙ (・ )` ´( ・) i/
| (_人__) | \
\ `ー' / / ー- 、
. ,ィ(⊆≧リ≦⊇)〃 / rク\
. / | ̄r少}¨ ̄〃 / /′ ヽ
〃 l | l| | l| 〃 / / └ヽ
/ l |l | |l/″ / ! 厂 \
く, Y ! l」fレト! / | / 1
丿 | | 丿} じ’ / | / |
/ l | `¨ / レ′ |
真の思考停
(在位 2009年9月16日~2010年6月8日)
民主朝の初代考停、言行不一致、虚言、脱税、
そして外交において巨大な負の遺産を築いた。
ネトウヨ
網右翼
Pythonは左翼言語だからな
総括しろ!
松前漬けおいしいです
なるほど
はい
おっぱいそん
loggingモジュールの親から子への伝搬が良くわからん
馬鹿には無理
loggingなんて使うなprintで十分
それはない
ライブラリがprintでメッセージ吐いてたら困る。
bin(15)とか0b101011とかできるようにしたんだったら
ついでに "%08b" % 15 もできるようにしてくれたら良かったのにGuidoちん..
"{:08b}".format(15)はできるよ
ValueError: zero length field name in format
ってなっちまうだす
2.6 でも "{0:08b}".format(15) で出来るはず、
フィールド名を省略できるのは 2.7以降らしい。
22 名前:名無し募集中。。。[] 投稿日:2012/01/06(金) 23:40:34.39 0
AKB=金正恩
この意味わかるか
AKBという捏造ブームの裏に何があるか見えるか?
位置インデックスの省略は3.1から可能。それが2.7にバックポートされた。
C++からC99へ、みたいな。4.xマダァ?(・∀・ )っ/凵⌒☆チンチン
Python 2.799999
Pythonで意図的にブルースクリーンを発生させる方法は無いですか?
ネタとして仮想マシンで特定の自爆コマンドを打つと、ブルースクリーンが発生するプログラムを書こうと思っています。
意図的にブルースクリーンを引き起こすものとしてはNotmyfaultがありますが、あちらはC言語で書かれてます。
私としてはできる限りPythonで書きたいと思っているので、どなたか良い方法をご存じの方いらっしゃいませんでしょうか?
>>851 ドライバいるから、python だけだとどの道無理。
PythonのC拡張だったらPythonで書いたって言えると思うけど、
pure Python scriptだけで書きたいんだったら無理
rootでも無いのにそれが出来たら言語設計とかOSの設計がおかしいんじゃね?
ネタだったらスクリーンセーバーにしとけばいいじゃん
PCが物故割れた
Escapeが効果なくて一分ほど泣きそうになった
>>854 >rootでも無いのにそれが出来たら言語設計とかOSの設計がおかしいんじゃね?
言語設計関係ないだろ。
そんな言語が設計できたら、のっとり放題じゃんか。
861 :
857:2012/01/11(水) 00:28:57.72
862 :
デフォルトの名無しさん:2012/01/12(木) 16:12:37.00
2chやニコニコ動画に民主党から反日工作費が流れていることが知られるようになってきた。
民主党が用意した資金で工作員が2chを荒らしていることもだんだんと知られるようになってきた
>>851 WinNukeは?あれはPearlで書かれてたけど。ただ、撃ち落とせるマシン
(Win95やNTのSPが古いやつ)が手元にないだろうな。
>>865 pearl=真珠(パール) な。どうやって真珠で書くのかは知らんが
有名なプログラム言語perlより先に、pearlという名前のプログラム言語があったらしいから、それのことだろ。
peとrlの“間にa”、つまりマニア向けの言語だった模様
____
/ \
/ ⌒ ⌒ \ 何言ってんだこいつ
/ (●) (●) \
| 、" ゙)(__人__)" ) ___________
\ 。` ⌒゚:j´ ,/ j゙~~| | | |
__/ \ |__| | | |
| | / , \n|| | | |
| | / / r. ( こ) | | |
| | | ⌒ ーnnn |\ (⊆ソ .|_|___________|
 ̄ \__、("二) ̄ ̄ ̄ ̄ ̄l二二l二二 _|_|__|_
poodledoってひょっとして最大1000件しかタスク取得できないのかな?
Dive Into Python 3の日本語訳のpdfが欲しい
Python太りさん
872
各ページのhtmlを自動で落としてpdf化するツールをpythonで作ってみれ
___, - 、
/_____)
. | | / ヽ || 「パパな、2ちゃんねるに晒されてるんだ。」
|_| ┃ ┃ ||
(/ ⊂⊃ ヽ) /  ̄ ̄ ̄ \
! \_/ ! ( ( (ヽ ヽ
,\ _____ /、 | -、ヽ\ !
ゝ/  ̄ ̄ ̄ \ /. \/ ̄\/ .\ | |─ |__ /
/ _____ヽ | | _┌l⊂⊃l | | ┌ - ′ ) /
| | / ─ 、-、! | | / ∋ |__| | | ヽ / ヽ <
|__|─ | | | | /`, ──── 、 | | ` ─┐ 丨 ̄
( ` ─ o-i ヽ / \ .ノ_ .j ̄ ̄ |
ヽ、 ┬─┬ノ / ̄ ./ ヽ- 、\ /  ̄ ヽ\
// /ヽ─| | ♯| / i | ..) ) \ i ./ |\\
| | / `i'lノ))┘/ , ─│ !-l⊂⊃l┐__ヽ__/\ / | | |
| | | ̄| / /| / ( (... .ヽ / |____|∈ __./ .| | |
|_|/ヽ、_/ ./ ` ─ /\ /ヽ  ̄ \-──| \|_|
| | |───/____i l=======l |_____ __\ |\ | |
|/ ヽ── |______\ l二|^|二二|^|二l 丿______ |_丿 \|
l ̄ ̄ ̄ ̄ ̄ | | | |. | | | | | | | |  ̄ ̄ ̄ l
| ̄| ̄ ̄ ̄ ̄.| |────| |. | | | | | |.──────| | ̄ ̄ ̄| ̄|
876 :
デフォルトの名無しさん:2012/01/18(水) 07:29:27.45
関数名のつけ方で質問
PEP8に
" 更に、名前の最初や最後にアンダースコアをつけた特別な形式も、見受けら
る。(大文字・小文字の規則も一緒に適用される)
- _single_leading_underscore:弱い内部使用の識別子。たとえば、
"from M import *" は、アンダースコア1つで始まる名前のオブジェクト
を、importしない。"
ってあります。
これは、↓みたいにクラス内でのみ呼ばれる関数はわかりやすくアンダースコアつけられますよってことですか?
class a:
def __init__(self):
self.a = self._func()
def _func(self):
return "a"
>>876 クラス内でのみ呼ばれる関数であることをプログラマに示すために
アンダースコアを前置してもいいんですかって質問ならyes
Pythonプログラマはアンダースコアで始まるメソッドを
外からは(呼べるけど)呼ばないのが慣習
日本が誇る黒子と同じ。
丸見えだけど見えてないことにしてねってなもんよ。
pythonに外付けハードディスクが正常かどうか監視する事が出来るようなライブラリってありませんか?
エクスプローラで表示されるファイルのサイズを実装したいのでアドバイスお願いします
1バイトのファイルでも1KBと表示されましたこれって
1024バイト未満は1KBと表示するように作ればいいのでしょうか?
そして1KB以上の場合は単純にファイルサイズを1024で割るだけで問題ないでしょうか?
1024っていう数字は1Mや1Gや1Tなど単位が変わるごとに変わったりしますか?
>>884 端数は全て切り上げ。
1.1KBは2KBになる。
アスキーファイルの数値データを読み込んで
リストに格納したいのですが、元ファイルの
フォーマットが曲者でちょっと困っています。
【スペース区切りの小数群】
【スペース区切りの小数群】
…(以下同様に数百万行)…
【スペース区切りの小数群】
【区切り文字列】
【スペース区切りの整数群】
【スペース区切りの整数群】
…(以下同様に数百万行)…
【スペース区切りの整数群】
前半の小数値と後半の整数値の個数は等しく、
小数値f[n]と対応する整数i[n]について
list[i[n]] = f[n]となるようなlistを生成したいのです。
小規模なデータであればとりあえずreadline()で
1行ずつ読んでsplit()後append()しつつ適当に
並べ替えるのですが、データ量が膨大なので、
なるべく効率よく処理したいと考えています。
なにかいい方法はありませんか?
(◕ω◕) わけがわからないよ
>>886 1.0 2.0 3.0
----
100 200 300
とかあって、L[200] が 2.0 となるような L ということ?
数百万とかあったらリスト作るだけでメモリ食いつぶしそうだけど
とりあえずreadline, split, appendでどうなるか試してみては
>>886 pure pythonは諦めてC拡張を書いたら?
ってのは開発コストがかかって駄目?
ちょっと仕様を理解できない
数行の例を書いてみてよ
二通り以上の解釈が出来る文章を書く人って
>>886 SQLite とかの DB にぶち込んで処理した方がいいと思う。
>>891 それは思ったけどどうなんだろう。
今回の問題の開発規模(行数)は比較的小さいから、
開発速度・実行速度の両面から考えてsqliteを持ち出す利点はないと思ったよ。
行数が多いってのは一考の余地が有りそう。
(◕ω◕) わけがわからないよ
わけがわからないよ
って流行ってんの?
分けが分からないよ
『 この世界で最も理解しがたいことは、 この世界が理解できるということだ。』
って俺はずっと「理解できるとか言っちゃう奴は嘘つくな」って意味だと思ってけど
本当は「実際に理解できちゃっててすげー」って意味だったのな、オリジナルを読めば一発だが
>>892 メモリだけで処理するにはきついからファイルも使ってってことかと
>>895 不確定性原理
とか
不完全性定理
とか
anydbmとか使うって話でいいんで内科医?
899 :
886:2012/01/21(土) 11:23:34.55
色々アドバイスありがとうございます。
ファイルを2箇所から読み出したりして
うまく処理できないかなぁなどと考えたのですが
やっぱりRAMかドライブに蓄えてから
処理するのが王道ですかね…。
一応RedhatとXPの64bit環境で試したのですが、
1千万要素位のリストは問題なく作れました。
ただ、append()で継ぎ足していったら
10分弱掛かりましたが。
numpyの出番じゃね?
>>892 > 今回の問題の開発規模(行数)は比較的小さいから、
> 開発速度・実行速度の両面から考えてsqliteを持ち出す利点はないと思ったよ。
にちゃんに質問してる奴が開発速度とか、なに言ってるんだ?
この手の輩が SQLite を超える性能のプログラムを作れるとも思わないし。
一番の問題は自己の能力の見積もりができてないってことだな。
>>896 オンメモリーでもできるし、メモリー足りなきゃファイルも使える。
そもそも Python の大量データに対する実行性能ってあまり高くないと思うんだが。
※ 個人の意見です。
>>899 ファイルを2か所から読みだすとしても、区切り記号がどこにあるか探すのに
結局時間がかかるのでは?
メモリを節約するだけなら同じファイルを2つオープンするとか。
整数データがどう分布しているかによるけれど、リストなら append していく
より、最初にまとめて確保して、ふつうに代入したほうが速くない?
データが分散しているなら、辞書に入れておいて、キーでソートとか。
>>899 > ただ、append()で継ぎ足していったら
これやると計算量がO(n^2)になったはず
listappend(), list_resize()難しいです。
904 :
886:2012/01/21(土) 12:30:12.03
>>900 numpyはかじった程度なので、loadtxt()の存在を
今知りました…。
>>902 区切り位置の検出は確かにネックです。
2つファイルを開くという発想がなかったので、
これはやってみる価値があるかもです。
>>903 append()も遅いし、list = list1 + list2とすると
もっと遅くなります。当たり前ですが。
うまく連結する方法があるといいんですけど…。
月曜までデータにアクセスできないのですが、
numpyと2つファイルを開くってのを
試してみようと思います。
関係ないが、
自分のソフトに全文検索機能を入れようと思い、Pythonで実装しようとしたのだが、
逆インデクスをインメモリでソートするのはメモリ食いすぎてダメだろうし、
自前で外部ソートを実装するのはアホくさいので辞めた。
標準ライブラリに map-reduce モジュール (Cで実装) があったら良いなぁって思った。
いろいろと汎用的に使えるじゃーん。
何を言ってるのか判らない
ルートディレクトリにあるファイルを
複数ある各サブディレクトリに
shutil.copyfileでコピーするスクリプトを
作成しています。
実行すると
IOError: [Errno 13] Permission denied: 'H:\\hogehoe'
というエラーが出ました。
Windows上なのでパーミッションとか言われてもよくわからないのですが
何が原因なのでしょうか?
今までファイル移動などを行ったときにPermission云々といわれたことが
無かったもので困っています。
パーミッションが原因
>>907 >Windows上なのでパーミッションとか言われてもよくわからないのですが
Windows 9x でも使ってるのか?
shutil.copyfileではなく
shutil.copyにしたらすんなりいきました。
Unix由来なツールをWindowsで使った時
例えばファイルが他でオープン中でロックされてる…みたいな
権限由来じゃない理由でも書き込めなければ
パーミッションって扱いでエラーになったりすることはあるね
copyfileのdstがディレクトリだったんだろうか
鯖復活の呪文
|....,,__
|_::;; ~"'ヽ
| //^''ヽ,,)
| i⌒"
| ∀`) < 誰もいない きのこるならいまのうち
|⊂
| ノ
_,,,......,,__
/_~ ,,...:::_::;; ~"'ヽ
(,, '"ヾヽ i|i //^''ヽ,,)
^ :'⌒i i⌒"
|( ´∀`) < きのこ のこーのこ げんきのこ ♪
|(ノ |つ
| |
⊂ _ ノ
""U
_,,,......,,__
/_~ ,,...:::_::;; ~"'ヽ
(,, '"ヾヽ i|i //^''ヽ,,)
^ :'⌒i i⌒"
(´∀` )| < エリンギ まいたけ ブナシメジ ♪
⊂| (ノ |
| |
ヽ _ ⊃
.U""
|
| ミ
| ミ サッ!
| ミ
|
SICPをPythonでやってるの?
>>914 自己レスだけど、Schemeは基本的な機能しかなかったから学習に向いていたのに…って意見はあるようだね
PythonでSICPって、末尾再帰どうすんのよ。
基本的な機能しかないから学習に向いているっていうなら
アセンブラかCでやればいいってなるだろ
Cは現実学習に使われてるだろ。
アセンブラは、アセンブラ自体は基本的な機能しかないとしても、
今時のCPUだと対象の命令語がムズすぎ。
>>904 Cはライブラリ、プロセッサ一切無しだと確かに基本的な機能しか無いな。
ここにいる皆さんは
たとえば大量のファイルをリネームとか
簡単なスクリプトなら数分でソラで書けてしまうのですか
はい
>>921 まさにその通り。うちの大学ではCやった後にアセンブラもやって結果として
プログラムがどういう構造で動いてるのか理解が深まったけど
初めからアセンブラをやっても学習効率悪いと思う
>>923 いちいち暗記はしてないから、リファレンス見ながら書くよ。
ただ、ファイルを列挙するイテレータがあったなぁくらいは覚えている。
>>926 そんなものですか。
プログラミング自体初めてみたいなもので
ちょっとしたスクリプトにすごい時間がかかるので
これじゃあ費用対効果が合わないなあとおもってるんですが
なれれば早くなりますかね。
フリーソフト探したほうがコスパ良いよ
>>927 > なれれば早くなりますかね。
多分。
いくつか作ってりゃ、似たようなルーチンは過去の奴を参考にしたりできるから、
効率は上がるよ。
ただ、費用対効果を言うなら、
>>928 の言うようにフリーなり、製品買った方が
いいことが多い。
今初めてのPython読んで勉強してるんだけど量多くて中々きつい
とりあえず16章までは読んだけど正直よくわかんないところとか忘れたことたくさんあると思う
一応ひと通り目を通してからなんか実際に書きつつわかんないところをまた見ながら頑張ればいいのかな
簡単なクラスを自分で書けるようになるところまで頑張って読んだら一旦本を閉じ
ライブラリ一覧を眺めたらどんどん使っていくほうがいいんじゃないか
http://docs.python.org/library/ 残りは時間が余ったときにでも
忘れたところが気になるなら本文を端から読みなおすのではなく
練習問題を解きなおすといいよ
>>930 技術本は、通して2回読むといいよ。
2回目はものすごくよく分かる。
いいかげんpythonプログミング改訂版でねーかな
Cookbookは新刊でたよ
>>933 あれは出さないのが正解
内容は10年前で止まってる
なにせTkinterに数百ページも使ってるような本だ
>>934 まだ出てないよ。もうすぐ
Safariはどうか知らないけど
初めてのPython第4版日本語版はまだ出ないのか…
今、C拡張を書いているのですが、
pure pythonで書いたFoo classをC拡張内で作成するclass Baaに
継承させれずに困っています。
C拡張で作っているPyTypeObjectの tp_base という変数に
Foo class の PyTypeObject を設定してやればいいのじゃないか?
と思っていますが、PyTypeObjectをどうやって引っ張ってくればいいのか分かりません。
python実行後にpure python側のmodule Foo classをimportした後、
C拡張内でFoo class のob_typeに触る方法があるでしょうか?
PyParser_SimpleParseString()が返すcode objectにFoo classの
PyTypeObjectが入っていますでしょうか?
それとも、Py_CompileString(), PyImport_ImportModule()側で
どうにかこうにかするんでしょうか?
>>904 ボトルネックになる部分さえ正しく把握してれば
標準のarrayモジュールのみでも、それなりに省メモリで高パフォーマンスなコード書けるよ。
pythonをconfigureするときにつける --with-threads --enable-sharedというオプションですが、
それぞれどんな意味なのでしょうか?
知ってるけど教えない。
>>939 PythonのソースツリーのREADMEに書いてあるよ
configure --help
943 :
937:2012/01/25(水) 09:54:23.24
しくしく
>>937です。しくしく。
どなたにも相手にされず、しくしく、
どなたも助けて下さいませんでした。しくしく。
孤軍奮闘して頑張ってました。しくしく。
fprintf(stderr, "&Foo_Type = %p<<<<<<<<<<<<<<<<<<<\n", &Foo_Type);
PyObject_Print(&Foo_Type, stderr, 0);
&Foo_Type = 0x823120<<<<<<<<<<<<<<<<<<<
<class '_foo._Foo'>
fprintf(stderr, "Foo_new()\n");
fprintf(stderr, "Py_TYPE(self) = %p<<<<<<<<<<<<<<<<<<<<<\n", Py_TYPE(self));
Foo_new()
Py_TYPE(self) = 0x823120<<<<<<<<<<<<<<<<<<<<<
PyModule_AddObject(m, "_Foo", (PyObject *)&Foo_Type);
import_foo = PyImport_ImportModule("foo");
Foo_abstract_str = Py_BuildValue("s", "Foo_abstract");
Foo_abstract = PyObject_GetAttr(import_foo, Foo_abstract_str);
Foo_Type.tp_base = Foo_abstract;
Py_INCREF(Foo_Type.tp_base);
fprintf(stderr, "Foo_abstract = %p\n", Foo_abstract);
PyObject_Print(Foo_abstract, stderr, 0);
Foo_abstract = 0x8bed0f4
<class 'foo.Foo_abstract'>
>>943の続き
&Foo_Type を表示するとどうなるか調べた所、
<class '_foo._Foo'>
というふうに <class ****> となりました。
また、
PyImport_ImportModule("foo");
とした後に、
Foo_abstract = PyObject_GetAttr(import_foo, Foo_abstract_str);
とした、Foo_abstractを
PyObject_Print(Foo_abstract, stderr, 0);
として表示してみると、
<class 'foo.Foo_abstract'>
という風に、<class ****>と表示されました。
ということで、
Foo_Type.tp_base = Foo_abstract;
Py_INCREF(Foo_Type.tp_base);
とすると、以下の実行結果が
print('isinstance(foo, Foo_abstract) =', isinstance(foo, Foo_abstract))
print('isinstance(foo, _Foo) =', isinstance(foo, _Foo))
以下のようでしたので、きちんと継承が行われているようでした。
isinstance(foo, Foo_abstract) = True
isinstance(foo, _Foo) = True
くっそー、たったこれだけのこと調べるのに丸々2日使ってしまった。
でもPythonの実装の勉強になったので良かったです。
>>943の実行結果は Python 3.2.2 でのものです。
typedef struct {
PyObject_HEAD
/* Type-specific fields go here. */
char ss[100];
} FooObject;
{"ss", T_STRING, offsetof(FooObject, ss), READONLY, "ss"},
としている時に、Foo_init()内で
strcpy(self->ss, "ss");
は駄目な理由ってなんなんでしょうか?
駄目と言うかcore吐いて死んじゃいます。
{"ss", T_STRING_INPLACE, offsetof(FooObject, ss), READONLY, "ss"},
とすると大丈夫なんですが。。。
って書いてる間にここ見たら分かりました。
grepしてませんでした、失礼しました。
~/src/Python-3.2.2/Python/structmember.c [59/300行]
case T_STRING:
if (*(char**)addr == NULL) {
Py_INCREF(Py_None);
v = Py_None;
}
else
v = PyUnicode_FromString(*(char**)addr);
break;
case T_STRING_INPLACE:
v = PyUnicode_FromString((char*)addr);
break;
case T_CHAR:
v = PyUnicode_FromStringAndSize((char*)addr, 1);
break;
このスレって死んだの?
オブジェクト指向の章はサッと見るだけでいいか
どうせ一人寂しくやるんだしモジュール組めれば充分だよね
PDFうp
>>950 CHMもある!ありがとう!
しかしメインで使っているのは3.2だったりする
chmはキーワードや検索結果から対応する頁に飛ばないでしょ。
俺は初心者だから、目次から見つけきれない時がよくあって
結局、英語版を使うことになったりする。
>>953 普通にキーワード検索や内容の検索もできるけど?
俺もメインは 3.2.2 だからあまり使わないけど、
会社では 2.7 使ってるから、会社で使ってみよう。
ありがとう
>>950
956 :
954:2012/01/28(土) 19:41:22.81
スマン、よく見てみるとキーワードは確かにダメだね。
957 :
952:2012/01/29(日) 15:08:11.81
>>953 それ俺だけじゃなかったんだな
俺は自分でCHMをデコンパイルして直してたわ。文字コードもCP932って指定されてて会社の環境だと文字化けするから
Shift_jisにしてた。
それでエディタにCHMを登録してキーワードを選択してF1キーで検索するのがマジ便利。
gdb 使用中に python2.7 使えることが分かって便利で助かるんだけど、
なんで使えるの?いつ、誰が設定しているの?
$PYTHON/Misc/gdbinit にも書いてなかったし、/etc/gdbinitにも書かれていない。
どうなってるのでしょうか?教えて~教えて~教えて!
(gdb) python
>import sys
>print(sys.version)
>sys.path
>end
2.7.2+ (default, Oct 4 2011, 20:29:37)
(gdb) python print("{:x}".format(0x848a & 0xaaaa))
808a
(gdb) python
>import sys
>print(sys.path)
>end
['/usr/share/gdb/python', '/usr/local/lib/python2.7/dist-packages/mercurial-1.9.
1-py2.7-linux-i686.egg', '/usr/lib/python2.7', '/usr/lib/python2.7/plat-linux2',
'/usr/lib/python2.7/lib-tk', '/usr/lib/python2.7/lib-old', '/usr/lib/python2.7/
...
s/ubuntuone-storage-protocol']
下手糞な教えて君だったかな。
猛省。
(gdb) help python
いえ、それくらいは試してましてですね。
(gdb) help python
Evaluate a Python command.
The command can be given as an argument, for instance:
python print 23
If no argument is given, the following lines are read and used
as the Python commands. Type a line containing "end" to indicate
the end of the command.
いつ、誰が設定しているのか分からなくてちょっと不気味なわけです。
更にいうと、本当はpython3.2を使いたいので、
どうやって設定しているか分かればpython2.7 -> python3.2と
変更できて嬉しいなーと思っているんです。
which python
/usr/bin/python
となっている /usr/bin 以下のpythonを python3.2と差し替えてみても
>import sys
>print(sys.version)
>end
2.7.2+ (default, Oct 4 2011, 20:29:37)
となって結局python2.7.2を使うことになってしまうので、
gdbの設定で何かやってるんだろうなーぐらいは思いますが、
どうやっているのか分からなくて気味が悪いという状態です。
>>962 組み込み(configure --with-python)
バージョンを変えられるかどうかは知らん
私の環境のpython, python2.7はどれもこれも20:03:08に作成されたようですが、
gdbのpythonは 2.7.2+ (default, Oct 4 2011, 20:29:37) となっているので、
私の環境のpythonを使っているのではなく、
別の環境でcompileされたもののようです。
gdbにbinary組み込みで入っているのかなーと思い始めました。
$ python2.7
Python 2.7.2+ (default, Oct 4 2011, 20:03:08)
'2.7.2+ (default, Oct 4 2011, 20:03:08) \n[GCC 4.6.1]'
gdb7.4をsourceから入れて --with-python を試してみます。
試してみましたが、余計分からなくなりました。
timestampが2.7.2+ (default, Oct 4 2011, 20:29:37) の理由が分からん、
全く分からん、さっぱり分からん。
地物のgdbもubuntuにいつの間にか入っていたgdbの持つ
pythonのsys.versionと一致してしまいました・・・
configureのoption --with-python 有りなしで変えて
configure && makeしてみましたが、
--with-pythonを設定しない方でもpythonを使えてしまいました。
gdbにpythonを組み込んでいるのかな?とは思いますが
なんか、よく分からないです。
http://sourceware.org/gdb/current/onlinedocs/gdb/Python.html#Python 23.2 Scripting gdb using Python
You can script gdb using the Python programming language.
This feature is available only if gdb was configured using --with-python.
Python scripts used by gdb should be installed in data-directory/python,
where data-directory is the data directory as determined at gdb startup
(see Data Files). This directory, known as the python directory, is automatically
added to the Python Search Path in order to allow the Python interpreter to
locate all scripts installed at this location.
Additionally, gdb commands and convenience functions which are written in
Python and are located in the data-directory/python/gdb/command or
data-directory/python/gdb/function directories are automatically imported
when gdb starts.
*``・*。 。*・``* *``・*。 。*・``*
もう| `*。 ` 。 *` |☆ | ` *。 `。*` |
,。∩ ∧,,∧ *` ☆ ∧,,,/∩ ☆∩ ∧,,,∧ ☆ `* ∧,,/∩。,
+ ( ´・ω・)*。+゚ + (・ω・` )*。+゚+。*( ´・ω・) + ゚+。*(・ω・` ) +
`*。ヽ つ*゚*☆・+。⊂ ノ。+ ☆ +。ヽ つ。+・☆*゚*⊂ ノ 。*` どうにでも
`・+。*・`゚⊃+∩∧,,∧・+。*+・` ゚ `・+*。+・∧,,∧∩+ ⊂゚`・*。+・`
☆ ∪~ 。*゚ . (´・ω・`)∪ ☆ ∪(´・ω・`) . ゚*。. .~∪ ☆
`・+。*・ ゚ ☆ `・+。 つ─*゚・ ☆・゚*─⊂ 。+・`☆ ゚ ・*。+・`
⊂ `・+・*+・`゚ ゚`・+*・+・ ` ⊃
~∪ なーれ♪ ∪~
投稿した後に、
5. Embedding Python in Another Application
python-3.2.2-docs-html/extending/embedding.html#very-high-level-embedding
この存在を思い出しまして、
#include <Python.h>
int
main(int argc, char *argv[])
{
Py_Initialize();
PyRun_SimpleString("from time import time,ctime\n"
"print('Today is', ctime(time()))\n");
Py_Finalize();
return 0;
}
ここに思いっきり、PyRun_SimpleString()ってのが出ていましたので、
Python/pythonrun.c を読んでいって
PyParser_ParseStringFlagsFilenameEx()
PyParser_ASTFromString()
やら、Python/ast.cの
PyAST_FromNode()
やらをふむふむすればいいのかな?と思っていますが、当たっていますか?
ironpythonはスレ違い?
その化石の名前を久しぶりに聞いた
いいろん
鉄器時代のPython
というかMSはやる気あんのか?
Visual Pythonを単体で出せよ