以上
まとめwikiが放置されてるな
4 :
デフォルトの名無しさん :2011/09/04(日) 17:58:18.42
ねこだいすき
3.2.2正式版来たよ ページは未更新だけどファイルはアドレス直打ちで落とせる
> release candidate
ページは未更新つってんだろが
前スレを埋めるか、DAT落ちレベルまで使ってから引っ越してくれよ
12 :
デフォルトの名無しさん :2011/09/08(木) 20:36:42.66
とりあえず川崎のあおい書店でパイそんチュートリアル買ってきたわ
DjangoとFlaskとweb2pyはいったいどれが良いんだよ
質問おねがいします。 pymediaを使いたいんですが libogg-1.1+ libvorbis-1.0.1+ liblame-3.95.1+ libfaad2 を先にインストールしないといけない様なのですがsetup.pyもないですし、 これはどうやってインストールすれば良いんでしょうか? OSはXPです。宜しくお願いします。
>>18 ありがとうございます。助かりました!
ちなみにバージョンは2.6でした。次からバージョンも記載します。
20 :
デフォルトの名無しさん :2011/09/08(木) 23:26:38.86
>>15 俺はFlaskがシンプルで好き
extensionも揃ってるしなにより分かりやすい
werkzeug
関数名をstr型で保持していて,その関数名の関数を呼び出す事にはどうすればいいのでしょうか. 例えばname = "func1"(ただし,func1は既に定義済みとする)の様な場合です. この場合,name()のように呼び出すと,TypeError: 'str' object is not callableと怒られてしまいます.
>>22 関数が定義されているのがグローバルスコープなら、まずglobals()でグローバルシンボルを
格納している辞書を得て、そこから名前に対応する関数オブジェクトを得る。
globals()[name]()
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
>>23 うまくいきました.ありがとうございました.
これ便利だなぁ.
>>15 DjangoのAdmin機能が魅力的に思えるならDjango、思わなかったならFlask
web2pyは知らない。Pythonぽくないって話はそこここで見る気がするけど。
Pythonで時間を指定して、その間に入力しないと強制終了みたいな処理が作りたいのですが 良い方法はないでしょうか? 具体的には raw_input("Input: ")の処理を5秒以上経過したら終了といった感じです。
toggle使うとか
29 :
デフォルトの名無しさん :2011/09/10(土) 23:13:14.93
opencvでフレームを一枚ずつ抜き出して 保存するにはどうすればいいでしょうか? for文でフレームずつ指定するの?
>>27 raw_inout の timeout って過去スレで見た希ガス
スレッド使えばいいじゃない
eggファイルって、バージョンごとに用意しないといけないの? バイナリファイルを含むならまだしも、pure pythonなライブラリなのに バージョンごとに用意しなきゃいけないのがすごく面倒です。
Python2.7を使ってるんだけどsignal関数って何か変更された? signal.SIGALRMもsignal.alarm()も使えないし分からん
36 :
uy :2011/09/11(日) 23:37:56.64
寒々としたぴちょんスレにまでbotの魔の手が!
uyとかまだいたんだ
djangoを勉強してみようと思っているのですが、 勉強に適している書籍はありませんか?
>>31 さんの言うとおりスレッドで実装して見ました。
アドバイスありがとうございました
import threading
from time import sleep
got_input = False
def timeout():
sleep(5)
if got_input == False:
print
print "Sorry, you didn't enter anything."
print "Have a nice day."
if __name__ == "__main__":
time_thread = threading.Thread(target=timeout)
time_thread.start()
print "Enter your name: "
name = raw_input("> ")
got_input = True
time_thread.join()
print "Welcome,", name
42 :
デフォルトの名無しさん :2011/09/12(月) 03:47:44.48
>>41 import sys
from select import select
timeout = 10
print "Enter something:",
sys.stdout.flush()
rlist, _, _ = select([sys.stdin], [], [], timeout)
if rlist:
s = sys.stdin.readline()
print s
else:
print "No input. Moving on..."
>>43 汚いけどこんな感じで
import threading
from time import sleep
got_input = False
def timeout():
global got_input
sleep(5)
if got_input == False:
got_input = True
print "Sorry, you didn't enter anything."
print "Have a nice day."
else:
got_input = False
if __name__ == "__main__":
time_thread = threading.Thread(target=timeout)
time_thread.start()
print "Enter your name: "
name = raw_input("> ")
if got_input == False:
got_input = True
print "Welcome,", name
else:
got_input = False
time_thread.join()
49 :
30 :2011/09/12(月) 15:02:45.79
50 :
デフォルトの名無しさん :2011/09/12(月) 17:51:19.65
Python2.6で組み込み済みのVer3.3.6以外のSQLite3を使いたいのですが 方法がわかりません・・・どなたかご存じないでしょうか
>>40 いや、65534とかのセルでもエラーが出るんだけど
52 :
uy :2011/09/12(月) 21:20:36.36
>>50 しらねっこっこっこっこっけっけっけっけっけ
.dllを上書き
lolipopでdjangoは使えますか?
56 :
デフォルトの名無しさん :2011/09/13(火) 02:57:35.45
㍉
>>55 出来る出来ないで言えば出きるけど面倒過ぎてお勧めできない
audiotoolsというモジュールをインストールしたいのですが pytho setup.py installを実行すると error: Unable to find vcvarsall.batとなってしまうんですがどう対処したらいいでしょうか? vcvarsall.batはvisual studio2010にありました。pathを通してみたんですが駄目でした。 宜しくお願いします。
すいません、
>>60 ですが2008をインストールしてやってみましたが
src/cdiomodule.c(2) : fatal error C1083: include ファイルを開けません。'cdio/cdd
a.h': No such file or directory
error: command '"C:\Program Files\Microsoft Visual Studio 9.0\VC\BIN\cl.exe"' fa
iled with exit status 2
となってしまいました…。色々とググッては見たんですけど解決法が見つからず、(python、今までありがとう…、なブログは見つけましたが)
程度の低い質問を何度もして申し訳ないですが宜しくお願いします。
62 :
59 :2011/09/14(水) 00:08:57.09
>>62 それです! Required Prerequisitesはまったく見ていませんでした。すいません。
で、今、pycdioのインストールを試みましたが
C:\Documents and Settings\user\デスクトップ\pycdio-0.17>easy_install
http://pypi .python.org/packages/source/p/pycdio/pycdio-0.17.tar.gz#md5=648a83280357930d4115
9ec9bed990d5
Downloading
http://pypi.python.org/packages/source/p/pycdio/pycdio-0.17.tar.gz#m d5=648a83280357930d41159ec9bed990d5
Processing pycdio-0.17.tar.gz
Running pycdio-0.17\setup.py -q bdist_egg --dist-dir c:\docume~1\user\locals~1\t
emp\easy_install-b27iqe\pycdio-0.17\egg-dist-tmp-4zszxm
** Error trying to run pkg-config. Is it installed?
** If not, see
http://pkg-config.freedesktop.org error: 指定されたファイルが見つかりません。 となってしまいました…
やりたい事は16bit以上(たいてい24bitです)のオーディオファイルを読み込んで
サンプルレート、サイズビットレートの取得など、組み込みのwave、aiffの様な動作をする
モジュールをインストールしたいので特にaudiotoolsにこだわっている訳ではないのですが
どうしたらいいでしょうか?
すいません、宜しくお願いします。
見よう見まねで2ヶ月。windowsXP:python2.7.2 です。 リストの中のリストの第2要素の出現数カウントです。嵌りました。 1・2行目がかっこ悪いです。なくしたいです。 7・8行目がかっこ悪いです。1行で済ませたいです(;ではなく)。 どなたか書き直し例をお願いします。 1 count = 0 2 cmp_dat = '' 3 for dat in dat_List: 4 if not cmp_dat == dat[1]: 5 if not dat[1] in appear: 6 appear[dat[1]] = 0 7 appear[dat[1]] += 1 8 count = appear[dat[1]] 9 cmp_dat = dat[1] …以下、countを辞書にいれて使用する処理が続く
断片だけ貼られてもな。 dict.getやdict.setdefault使えよ、としか言えん。
collections.Counter(i[1] for i in data_List)
>>67 全く解決してませんでした。ぶん投げてふて寝しました。
教えて頂いた情報から道を模索してみたいと思います。
面倒見てくれてほんとにありがとうございます。
またわからないことがあったら宜しくお願いします。
pythonのloggingモジュールについてお聞きしたいことがあります。 python 2.6.6 on Debian squeeze 環境なのですが、理解不能な現象が起きて困っています。 if __name__ == "__main__": logging.basicConfig(level=logging.DEBUG, format='%(asctime)s %(levelname)s %(message)s', filename=LOGFILE, filemode='a') # log start logging.info("logging start " + LOGFILE) 上記のようなコードを書いているのですが、このスクリプトを仮に test.py としますと、 それを、Linuxの自動ログインを組んだ環境で、 .bash_profile に python test.py とだけ書いておいて、自動ログインが走ったら速攻pythonスクリプトが動くようにしています。 そうやって自動で走らせると、なぜかログに logging start のログが6行出力されてしまいます。 しかし手動で実行すると1行だけしか出力されません。 loggingモジュールの代わりに、import os して、 os.system("echo logging start > " + LOGFILE) とOSのリダイレクトを使ってログを吐いた場合は自動ログインであっても手動実行であっても1行しか 出てきません。 また、1度OSが立ち上がった時は、ログオフ>自動ログイン とやってもlogging モジュールは1行しか ログを吐きません。 問題の現象は、Linuxを起動>自動ログインが走る>test.pyが走る この時に1度だけ6行もログを吐いてしまう事です。OSのリダイレクトでテスト、手動でスクリプト実行テスト、 一度ログアウトして自動ログインでテスト等々やってみても、1行しか吐かない事から pythonのloggingモジュールのバグ?とか思っているんですが、ご教示頂けないでしょうか?
Debianのバグじゃね?
71 :
デフォルトの名無しさん :2011/09/15(木) 02:35:05.46
Debianはバグバグだからなぁー
>>69 test.pyという名前はやめたほうが。。。
よくトラブルの原因になるし。
まあ今回は違う原因だろうけど。
>>69 起動時にいくつかのスクリプトがログインシェルとして開始していると予想。
ログにPIDを出力して調べてみたら?
74 :
デフォルトの名無しさん :2011/09/15(木) 16:52:09.24
cxFreezeを使って実行ファイルを作りたいのですが、 pygameをimportするスクリプトを実行ファイルにしようとすると エラーになります print "hello" は通りますが、 import pygame print "hello" は通りません。 ググっても分かりませんでした 原因と解決法が分かる方がおりましたらご教示ください。
75 :
デフォルトの名無しさん :2011/09/15(木) 16:56:14.92
2.6.0から2.6.6に更新すると幸せになれますか? 2.7はurllibとhttplibがちょっと変わってるのでスクリプトが動かなくなってしまいました。 レスポンスコードが200番台でも200以外でエラーを投げるのは修正されてるのかな?
78 :
デフォルトの名無しさん :2011/09/15(木) 17:35:58.95
>>77 ありがとうございます!
って事は動かなくはならなさそうですね、入れてみようと思います。
ちなみに・・・
2.6のmicroのリリースノートってどこかにありますかね?
2.6.6と2.6.7は見つかったんですが、それより古い情報が見当たらないのですが・・・
できるだけ、repr() の戻り値をeval() に渡すと元のオブジェクトに戻せるようにする、と言っている割には、 inf1 = float('infinity') inf2 = eval(repr(inf1)) これがエラーになる。'nan'や'-infinity'でも同じ結果。 これって逝けてないと思うんだが・・・
>>64 counter = dict()
def count(item):
if item in counter.keys():
counter[item] += 1
else:
counter[item] = 1
map(count,[dat[1] for dat in dat_list])
>>73 レスありがとうございます!
あなた様の仰るとおり、複数のシェル環境が立ち上がっていました!
logging.info("pid = " + str(os.getpid()))
で実行すると、5個も違うPIDが出てきました!
$ ps auxww | less
して該当のPIDを確認してみると、pts/1 ~ pts/5 でした。
そういえばコンソールを切り替え可能ですね、Alt+F2とかF3とかF4とかで・・・。
本来1つしか実行すべきではないのに、5重起動していました。
だからログも多重に出てたんですね。
調査結果は5重で、ログは6個重複で1個差があるのは、作業に使っている
ptsが1個スクリプト終了しての調査なので、その分だと思います。
疑問が解決しました。本当にありがとうございます。
# loggingモジュールのバグだなんて言って申し訳ないです。自分のスキル不足でした。
スキル不足の初心者ほど他人のせいにしたがる
ほめられて一物を加えず、けなされて一物を失わぬ
mysqlを使うのに一番いいライブラリを教えてください
90 :
デフォルトの名無しさん :2011/09/17(土) 10:04:22.73
Pythonを勉強し始めているものです。 クラスの中に、クラスを作る意味があまりわかりません。。。 メソッドの場合は、メソッドの中でしか使用しない、メソッドを書けて便利だと思うのですが、クラスの場合も同じ 理由でクラスを入れ子にできるのでしょうか?
>>90 俺なんてselfって書く意味すらわかんねーけど
PyPIに自作モジュールいっぱい登録してる
気にすんな
クラス定義や関数定義は単なるステートメントだから どこにでも置ける。ただそれだけ。
>>90 Pythonで使う例ってあまり見ないけど、
Javaではそういったインナークラスはよく使うね。
「java swing listener」でググると良いかも。
そりゃJavaにはファーストクラスの関数が無いから仕方ない
95 :
デフォルトの名無しさん :2011/09/17(土) 11:16:48.92
Pythonはtype関数さえ扱えれば神に一歩近づけるってじっちゃんが言ってた
96 :
64 :2011/09/17(土) 14:22:36.63
>>65 >>66 >>82 レスありがとうございます。試してみます。
(pythonいじりが出来ない状態でした。遅くてすいません)
dict(item.split(u'=') for item in query_string.split(u'&')) URLクエリをディクショナリ形式にするワンライナなんだけど、これって分割して書くとどうなるの?
>>97 query_string = u'sourceid=chrome&ie=UTF-8&q=python+dict'
hoge = query_string.split(u'&')
fuga = [item.split(u'=') for item in hoge]
result = dict(fuga)
リストの内包表記をやらないなら
query_string = u'sourceid=chrome&ie=UTF-8&q=python+dict'
hoge = query_string.split(u'&')
result = {}
for item in hoge:
(key, value) = item.split(u'=')
result[key] = value
>>98 ありがと。
ペアのlistを内包したlistをdictに渡すとdict化するんですね。内包表記も知らなかったので、勉強になった。
しかしPythonの「やり方は一つ」の精神ってまだ生きているんだろうかw
100 :
5 :2011/09/18(日) 21:26:25.86
ネットの文書ファイル拾うにはどうすればいいですか?
>>100 URLがわかっていれば、ブラウザの上のほうでアドレスをそのとおり入力して〝移動〟
テキストファイルなら表示されるし、ZIPファイルならダウンロードのダイアログボックスがでる。
jpgなら表示される。
>>100 小さいウェブサイトなら、たとえば、
Website Explorerというソフトウェアでしらべあげることができます
Googleと同様、Website Explorerもリンクをたどるだけだから、
どこからもリンクされてないファイルは、みつからない
おまえらはなんてやさしいんだ?
104 :
5 :2011/09/18(日) 21:56:44.65
>>101-102 優しいけど違うよ
Webサーバーにあるファイルをダウンロードするって事なんだけど。。。。
>>104 def download(url, dirpath=".", opener=None, fname = "", encoding='utf-8'):
if not fname:
fname = url.split("/")[-1]
fname = urllib.unquote(fname).decode(encoding)
outpath = os.path.join(dirpath, fname)
if opener:
fin = opener.open(url)
data = fin.read()
with open(outpath, "wb") as fout:
fout.write(data)
else:
urllib.urlretrieve(url, outpath)
こういうこと?
ftplib使え
やっぱアンチスレもくだすれもなくなると こういうやからが増えるな
アンチスレはまだまだ健在だお
みなさんはどうやってコード整形してます? 自分はPythontidy使ってますが、他の方法も気になります
必要ない
コード整形は使ったことはないな 強いて言うなら、pep8とpylintの書き方に関する警告は気にしてるけど
emacsのpythonモードonly。
python3で使える整形ツールないから、自分で作ったわ。 tokenizeを使えば簡単かなぁ、と思い改良しながら使ってたけど、 どうもスライス表記の始点or終点の省略形の厳密な判別が面倒臭い。 ( a[10:] みたいなの) Pythonの中では、比較的だけどコロンは多義に使われているんで、 コンテキストの解釈無しにトークンの種類だけで機械的なスペース挿入は 無理っぽかった。 で、parser併用でコンテキストを解釈しつつ整形することで、なんとか 最近所望の動作に近づいたが、今度はツールのソースがカオスになったw 公開してもいいけど、このカオスを解消してからかな・・・ 欲しい人がいれば、正月休みに期待してね。 まぁ、それまでにもっと高性能なのが公開されたら、永遠の俺様ツール化の方向で。
ども
>>111 です。
友人がeclipseのpydevで
>訂正
使わない派も多いのかな。
友人がeclipseのpydevでサクサク整形してるの見て使い始めたのだけれど、一旦使うと辞められなくなった。
>>114 Emacs にはpythonモードなんてあるんですね。Vimにもpython環境をお世話してくれるプラグインが欲しい...
>>115 3系はPythontidyも対応してないんですよね。
作るとなるとスライスのあたり確かに厄介そうですね。
3系使いで整形派の人は渇望してると思います。健闘祈る(`・ω・´)ゞ
コード整形って何? pep8のルールでVim設定して、上で出てたpep8とpylint辺り入れれば、不便さはないと思うけど... 閉じ括弧の補完とか?
try: hoge = a / b except ZeroDivisionError: hoge = 0 try: fuga = b * c / d except ZeroDivisionError: fuga = 0 みたいなのがいくつも並んじゃってなんとなく気持ち悪いです。 悩んだ末に思いついたのが以下のような解決法なのですが、もっといい方法がありそうな気がします。なにかありませんか? def calc(exp, **args): for v in args: exp = exp.replace(v, str(args[v])) try: return eval(exp) except ZeroDivisionError: return 0 hoge = calc('a / b', a=a, b=b) fuga = calc('b * c / d', b=b, c=c, d=d)
lambda と キーワード引数かな
整形された状態で書いちゃうよね… 煽りとかじゃなく、Pythonの整形ツールにどういう用途があるのかは気になるな
>>119 >>> def calc(exp, *args):
... try:
... return exp(*args)
... except ZeroDivisionError, e:
... return None
...
>>> calc(lambda a, b: a / b, 10, 5)
2
>>> calc(lambda a, b: a / b, 10, 0)
>>> calc(lambda b, c, d: b * c / d, 6, 5, 3)
10
>>> calc(lambda b, c, d: b * c / d, 6, 5, 0)
>>>
>>> def calc(func): ... try: ... return func() ... except ZeroDivisionError, e: ... return 0 ... >>> calc(lambda: 3/0) 0 >>>
>>117 後で整形したらpythonの場合forブロックの最後間違えたりしないか?
emacsのメジャーモードはpythonに限らずどれもそうだけど
最初から整形した状態で入力するから、後で整形とかやらない。
整形違いだったらスマソ。
Emacs-Lispでpep8.pyを組み込んでリアルタイムにチェックしている
人もいるようだ。自分はマシンがショボいので毎度shellモードで実行
している。
文法チェッカのpycheckerは最初からバンドルされてる。
(以上、Linux版のemacsの場合。Windowsだとpep8.pyもpycheckerも
pypiから持ってくる必要があった。)
eclipseとかも使ってみたいのだが
常用している1024x600のネットブックだと使い物にならん。
ああいうのはマシンパワーが有り余っていて画面が広いブルジョア用。
二次元配列をlolという変数に入れるとして、 while condfunc(lol): del lol[-1] ってループかますと、抜けた後のlol[-1]のリストが地味に壊れるんだけど何故だろう
>>125 説明不足だよ。
そもそもcondfuncて何?
配列要素の値を参照するだけ?
戻り値は?
これでは終了条件もよくわからない。
ふざけんな 死ね
128 :
デフォルトの名無しさん :2011/09/20(火) 10:49:00.36
>>125 は例え解決方法を教えてやっても
翌日は同様に頭の悪い質問してくる。
アホすぎワロタw
lolがlough out loudlyではなく list of listsの略だと半日経って気づいた とりあえず再現コードがほしい
lolがlough out loudlyではなく 「叫び」の顔文字だと半日経って気づいた とりあえずネタにレスする気はないから再現コードはいらない
>>119 みたいな場面は結構あるから、例外処理用の式がほしい。
x = a / b except ZeroDivisionError 0
とかできないのかな?
x = a / b if b != 0 else 0 こっちのほうが文字数少ないけど・・・
>>135 まぁ、その場合はそうだし、事前に例外出さないようにチェックすることが簡単な場合も多いけどさ。
138 :
デフォルトの名無しさん :2011/09/21(水) 20:02:23.66
Pythonでバナナがおやつに含まれるか判定する関数はありますか?
def oyatsukana(banana): if banana in oyatsu: return true return false
Pythonのtrue/falseは大文字だお
>>139 そもそも
banana in oyatsu
でTrue/Falseが返ってくるから
if文は不要
return banana in oyatsu
pythonで巨大な配列をつくろうとするとMemoryErrorがでるんですけど これは,pcのmemoryをいくら増やしても無駄なんでしょうか?
64bit化汁
145 :
デフォルトの名無しさん :2011/09/22(木) 21:40:16.63
pythonで生成したデータを利用してCygwinで違うプログラムを実行したいです。 そこで,pythonのプログラム(cygwin.py)を実行して,Cygwinを起動させるには コード上にどのような記述をすればよろしいでしょうか? また,開いたcygwinでコマンドを実行するにはどのような記述をすれば良いのでしょうか? webで検索したのですが,上手く見つけることができませんでした。もしご存知でした教えていただけいると 助かります。
そのプログラムを普通にsubprocessとかで実行してください
>>145 os.system() ではアカンかった?
148 :
146 :2011/09/22(木) 21:59:50.92
149 :
デフォルトの名無しさん :2011/09/22(木) 22:43:41.56
Pythonをコンパイルした pyo とかって 逆アセンブルみたいな何かで 元のPythonコードを取り出したりできちゃうの?
>Cygwinを起動 kwsk
doxygenのスレはあるのに sphinxのスレがないなあ
Sphinxは習得が簡単すぎて悩む場面が全くなかった
Linuxコマンドを実行し、標準出力のみを取得するにはどうすればいいでしょうか? Webで調べて commands.getstatusoutput(cmd) で、リターンコードと標準出力が取れる 事はわかったのですが、これだと標準エラー出力まで混ざってきてしまいます。 標準出力だけを純粋に取り出したいです。
154 :
146 :2011/09/23(金) 20:16:53.33
subprocess 使ってください。
tesuto
157 :
デフォルトの名無しさん :2011/09/23(金) 20:30:08.26
標準のreモジュールではPOSIXの文字クラスやユニコード属性は使えませんか? 制御文字を除去する目的で次のように書きたいのですが無理みたいです import re, urllib s = r'foo\0bar'#ヌルバイト文字を含む文字列 re.sub(r'[[:cntrl:]]', '', s) re.sub(r'\p{Cc}', '', s) reモジュールのマニュアルにもないようなので無理かもしれませんが代替方法があればおしえてください 勿論、通常の文字クラスで列挙するだけでも対応可能ですが・・
>>155 subprocessなんかファイルオブジェクトが返ってきたりするみたいだし
使い方難しそう・・・・・。
色々subprocessも調べてはいるんですが、どうしてもコードが長くなりそうですね・・。
>>154 パイプですか?パイプというかリダイレクトを上手く使って
cmd 2> /dev/null
とかをcommands.getstatusoutputに食わせても、エラー出力も混ざってくるっす。
bash上で実行すると標準出力だけになるんですけどね・・・・。
>>158 from subprocess import Popen, PIPE
p = Popen(cmd, stdout=PIPE, stder=PIPE, shell=True)
print p.communicate()[0]
shell=Trueは必要なかったら外してね
馬鹿には無理
161 :
158 :2011/09/24(土) 00:53:13.49
>>160 バカですみません・・・。
>>159 レスありがとうございます。
stder=PIPE を stderr=PIPE に修正しましたが、それ以外は
このソースで問題なく動きました!ありがとうございます。
shell=True は必要みたいです。無いと動かないです。
すいません、 mod_wsgiってmod_pythonみたいにコードを埋め込むような使い方って出来ないのでしょうか?
>>162 できない。WSGIはWebアプリケーション専用の仕様。
WSGIやるなら nginx + uwsgi もおすすめ。
>>159 これもっと簡単にならないのかな。
Rubyとかperlだと `ls -l` とかで済むのに、これはちょっと長い。
import subprocess
result = subprocess.exec('ls -l')
ぐらい簡単にしてほしい。
>>164 RubyとかPerlでやるんじゃ駄目なん?
>>164 import popen2
popen2.Popen3('ls -l')
間違えたので訂正 import popen2 popen2.popen3('ls -l')[0].read()
import subprocess subprocess.exec_ = lambda s: subprocess.Popen(s, stdout=subprocess.PIPE, shell=True).communicate()[0] print subprocess.exec_('ls -l')
Python3.xだとsubprocess.getoutputってのがある
>>164 結局、こうゆう短絡的な要望に「やり方は一つ
」の精神が押し潰されて行くんだな。
Pythonでは実直に書けばいいんだよ。 どっかの中二病言語みたいに無理に短くする必要はない。
>>164 Pythonはあくまで汎用のスクリプト言語であって、特定の分野に対して大きなサポートをしない言語。
PerlやRubyはテキスト処理やCUIに対して特別なサポートをしてる言語だから、そういうのが可能なだけ。
だから、CUIのお供に使うのであれば、PerlやRubyのほうが上なのは当たり前なのよ。
>>164 結局コマンドの結果に対して何らかの処理をするんだから文字列よりもパイプでもらったほうが便利だろ
>>174 そういう2択の問題じゃないんじゃないか
Perlでもパイプとして開きたければできるわけえ
>>164 は、Javaが
BufferedReader br = new BufferedReader(new InputStreamReader(System.in, charset));
とか書くのウゼーとか言われるのと同じだと思う
大クラス主義/小クラス主義の違いかもな
>>173 「バッテリー同梱」の哲学は気にいってる。便利にするためにこの哲学を崩して欲しくない。
PerlとかPHPでは何するにもアーカイブからライブラリ持ってこなきゃならん。
しかもライブラリのバージョンがどーたらこーたら。めんどくせー。
現に、1行になるか2行になるかの違いしか生じてないじゃん。
>>172 読んだ。Flaskを褒めてるね。
>>176 PerlもPHPも、とある分野に特化した言語だからな(Perlはテキスト処理やCUIのお供、PHPはWebプログラミング)
それ以外の分野に対応するのは結構面倒だったりする。
むしろ、それだけの特化言語でアーカイブから取ってくれば済むだけになってるだけ、マシと言えるぐらい。
塵も積もれば山となるんだよ低能。
180 :
デフォルトの名無しさん :2011/09/25(日) 15:06:25.80
Python勉強し始めたけど2と3で違いすぎて勉強しにくいぞこの野郎 Rubyにしとけばよかった
>>180 いやそれは君の実力不足が原因だから
2と3の違いなんて10分で理解できる
>>180 今度はrubyの1.8と1.9が違い過ぎてとかなるぞ
そんな訳でhaskellに(ry
[ "hoge", "foo", "bar"] のように配列の中にキーワードを入れていおります。 文字列の中にそのキーワードが含まれるか確認したいのですが、 大文字と小文字の違いを無視してマッチさせることは出来ませんでしょうか? "Hoge"や"FoO"にもマッチさせたいです。 また、できれば半角と全角の違いにもマッチさせたいのですが、そのようなことは出来ませんか?
>>183 そうゆうのは普通ノーマライズした配列を作って、それで比較するもんだ。
なんで?
その方が楽だから
>>177 Flask なんか出てこないぞ。何を言ってるんだ?
普通ってなんですか
ここは人工無脳のトレーニングルームじゃありませんよ
Perl忍者は偉大 Perlの知名度を上げPerl業界に大きく貢献した
大文字/小文字の区別なんて、"re.IGNORECASE"フラグでいいだろうに、 わざわざノーマライズって単語を出した理由が分からん。
配列がバカでかいとかでなければ word in map(lambda e: e.lower(), words)
説得させたきゃ根拠を出せよ。 おまえらはいつまで経っても学習しないな。
>>195 どうして私が書かなくてはならないんだ。
自分の主張は自分でしろよ。
なんという腰抜け
頭の悪い奴は口も性格も悪い そして他力本願だ
正規表現で全角スペースをマッチさせたいんですが この書き方だとダメなようで p = re.compile('[ ]+') p.match(text): マッチさせる書き方を教えて頂けないでしょうか?
>>191 がダメな理由が分からん
マジで教えてください。
/hoge/iで済まないからだろう
>>200 match()は完全一致なので部分一致させたいならsearch()
re.IGNORECASE + re.UNICODE なら hoge HoGe hOgE でも全部マッチするんだっけ?
俺は
>>193 じゃないけど……
>>201 キーワードのリストがあるとして、xがそれに含まれるかどうかというテストが
それぞれにre.match()を試みる線形な検索になるでしょ
キーワードをあらかじめ小文字化してsetに入れておけば、
if x.lower() in keywords:
だけでテストできて、ハッシュ検索だからO(1)で済むよ
207 :
200 :2011/09/25(日) 18:46:25.38
>>203 済みません、書き方が悪かったです
全角スペースのみの文字列にマッチさせたいので
完全一致でいいかと
試しにsearch()をやってみたんですがダメでした
分かる方いれば、アドバイスお願いします
条件が勝手に増えていってないか?
>>307 ふーん
ならPython2系かな?
3かもしれないと思ったのでスルーしたけど
もし2系で、全角スペースみたいな非ASCII文字のテキスト処理をするときは
unicodeでやらんとだめ
上の例だとリテラルにuプレフィックスつけて
textもunicodeにdecodeしてみて
>>207 取り合えず、やりたい事を箇条書きしてみては?
回答者も、その方が答えやすいと思う
211 :
200 :2011/09/25(日) 19:06:50.38
>>210 了解です具体的には
あるフォームからの入力で、半角or全角スペース、改行だけの投稿を検出したい
というもので、こう書いたんですが
p = re.compile('[\s|\n| ]+')
全角スペースのみの投稿が素通りしてしまう状態です
212 :
200 :2011/09/25(日) 19:17:29.25
>>209 レス見落としてました済みません。
djangoを利用する手前、ご推察の通り2系です
で、ご指摘の通りuプレフィックスつけて
みたら上手く検出できました
ありがとうございます!
どじゃんぐりころころ
どじゃんくりこ
215 :
デフォルトの名無しさん :2011/09/25(日) 19:51:58.43
性器表現は襲いからなぁ
正規表現なんて使わなくても、↓unicode.isspace()で調べられるんじゃない? all(c.isspace() for c in u" \n\t \n \t a")
>>215 くそっ!こんなくだらないレスで吹いちまった・・・
Pythonなんかやっても日本には仕事がない。 趣味ならいいけど。
JavaScriptっぽく obj.key で obj['key'] がとってこれるようにしたdictって、なんていうんだっけ? 前にこのスレかどっかで見た覚えがあるんだが。
220 :
デフォルトの名無しさん :2011/09/25(日) 20:31:19.61
__getitem__ を定義しただけじゃないの?
急に伸びたから また荒れてるのかと思った。
223 :
デフォルトの名無しさん :2011/09/25(日) 23:30:46.42
Pythonで静的変数を使うことは出来ませんか? forで呼ばれる関数があるのですが、前回呼ばれた時に計算した値を保存しておきたいです。
mysql-pythonインストール済なのにdjangoのsyncdbコマンドでimproperly configuredエラー(No module named MySQLdb)が発生します どうすりゃいいんでしょうか
複数バージョンのPythonが入ってるとか、virtualenvしてるとか、いろいろ。
>>219 リードオンリーでいいんだったらnamedtupleで
a1=[0.1,0.2,0.3] a2=[0.4,0.6,0.8] のような一次元のlistかarrayから b=[[0.1,0.2,0.3], [0.4,0.6,0.8]] や c=[[0.1,0.4], [0.2,0.6], [0.3,0.8]] といった多次元のlistかarrayを生成するコマンドはあるのでしょうか?
>>> map(list, (a1, a2)) [[0.1, 0.2, 0.3], [0.4, 0.6, 0.8]] >>> map(list, zip(a1, a2)) [[0.1, 0.4], [0.2, 0.6], [0.3, 0.8]]
>>124 Emacs の M-; で行末にコメントをつけたあとに pep8 をかけると、
しょっちゅう「E261 at least two spaces before inline comment」
って言われるんだけど、あれってカスタマイズできないの?
>>230 pep8.pyを?それともM-;の方を?
ぼかぁよう分からんからその指摘も一理あるかなと
指示どおりに全部ソースを書き換えたけど。
>>228 数値データならNumPyの使用も検討したら?
>>231 どうも。pep8 で無視するオプションをつけることも可能だけれども、それを
つけたら意味ないような気がするので、Emacs のほうでどうにかならないかと
思ったのです。せっかく pep8 を通るように直しても、もう一度 M-; を
かけると元の木阿弥になるし。
ただパッと見たかんじだと、コメントが始まる位置が
max(comment-column, コメントを除く行の長さ+1) に固定されているようで、
ちょっと難しそう。
PySideはバグがだいぶ減ったね。 自分のQtアプリは全部動くようになった。
PySideはノキアスポンサー撤退で次のスポンサー探しに難航してるとか Qtスレで読んだけど大丈夫なんだろうか
PyQtあるからいらねって人と、PySide開発自体はやぶさかではないが、なんでそれをフリーで公開してやんなきゃいけねーんだって人とに分かれそう。
PyQtの代替なんだから公開しなきゃ意味ないじゃん
PyQtがLGPLになるのを拒むから、PySideが作られたのよ。
>>229 ありがとうございました。助かりました。
クラスのメソッドの名前を exec_() みたいにしてるコードをどこかで見たんだけど、これって必要あるのかな? 普通の関数とか変数だったら標準ライブラリ内の名前との衝突を避けるべきなのはわかるんだけど
>>240 標準でありそうな関数名だから、とりあえずアンダースコア付けた関数名にしといたんじゃない?
>>240 2.xだとexecは関数ではなくexec statementで使われるキーワードだから
(printも同じ)
>>242 ああそうかキーワードだったのか
or_ とか in_ の親戚だね。サンクス
mod_wsgi関連のブログ記事とかで、たまに import cgi って書いてるソースを見るんですが、cgiモジュールを使っていてもwsgiとして動いているのでしょうか? それだとcgiとして動いてしまうのではないかと思うのですが。
えーっ、いくらなんでもドキュメントぐらい読んでから質問しようよ
複数行のテキストデータを行毎に分割しようとして、 re.split('^', text) として分割されずに悩んでいたら、リファレンスマニュアルに、 「空のパターンマッチでは、文字列を分割しないことに注意して下さい」 と書いてあり、 re.split() ではできないことがわかったので死のうと思います。 どうせなら悔いなく死にたいと思いますので、 空のパターンマッチでも分割するうまい方法があれば教えていただけると嬉しいです。
248 :
デフォルトの名無しさん :2011/09/30(金) 12:58:43.42
>>244 importしただけで挙動が変わるって、どんだけcgiモジュールは強力なんだよ
>>246 「'^'」は空じゃないだろ。そうじゃなくて、
re.compile(r'^', re.M).split(string)
としなきゃいけないんじゃないか?
まあ string.splitlines(True) でいいけど。
Pythonの環境がなくてもexe形式で実行できない?
251 :
246 :2011/09/30(金) 16:31:38.76
>>247 >>249 ありがとうございます。
とりあえずやりたいことは string.splitlines(True) でできることがわかりました。
それで、もう死ぬのでいいんですけれども、
> 「'^'」は空じゃないだろ。
「空のパターンマッチ」は「空文字列にマッチし得るパターン」と読みました。
ドキュメントに挙げられている例も 'x*', "(?m)^$" となっており、
位置にのみマッチする '^' も同様のケースではないかと考えまして、
実際の挙動とも合致しているように思います。
> re.compile(r'^', re.M).split(string)
これ、私の環境では動かないようなのですが、何かおかしいでしょうか?
>>> re.compile(r'^', re.M).split("foo\n\nbar\n")
['foo\n\nbar\n']
252 :
ゆうすけ :2011/09/30(金) 16:32:56.25
>>244 CGIは標準入出力でWebサーバと通信して動的ページを生成する仕組み。
なので、標準入出力が扱える言語なら何でも(シェルスクリプトでも)CGIプログラムは書ける。
cgiモジュールはPythonでCGIを書くのを助ける単なる便利関数の詰め合わせ。このモジュールが
なくてもCGIは書ける。このモジュールは、URIパラメータを解析する機能とかも含んでいるので、
CGIを書く以外の場面(e.g. WSGIクライアントを書くとき)でも使える。そういうこと。
>>251 In [2]: re.compile(r'^', re.M).findall("foo\n\nbar\n")
Out[2]: ['', '', '', '']
In [3]: re.compile(r'\n', re.M).split("foo\n\nbar\n")
Out[3]: ['foo\n\nbar\n']
やはり、マッチ結果が空文字列になるときは分割しないようで。
ミス In [3]: re.compile(r'^', re.M).split("foo\n\nbar\n") Out[3]: ['foo\n\nbar\n']
255 :
244 :2011/09/30(金) 20:07:59.55
>>245 すいません。英語とか片言の日本語みたいな資料ばかりでなかなか理解出来なくて。
>>248 超初心者ですいません。
>>252 という事はcgiみたいな書き方をしても以下を書いていればwsgiとして動くと言う事ですね。
def application(environ, start_response):
start_response("200 OK",[('Content-Type','text/html')])
これで安心して「みんなのPython Webアプリ偏」を勉強する事が出来ます。
サラッと見たらcgiという文字が多いし発売時期が古かったので不安でした。
みなさんありがとうございました。
256 :
デフォルトの名無しさん :2011/09/30(金) 20:26:56.35
255は素直なよい子
まあ、WSGI周りはまともな日本語の資料がないよな。
wsgiって正直よく分からない。cgiと同じ粒度の話なのかも分からない。 uwsgiとかもあってわけわかめ。あと上位互換のwsgi新規格の話とかもあるよね。
[Web Browser] <== HTTP ==> [nginx] <==uWSGI Protocol==> [uWSGI] <== WSGI ==> [Flask]
Apacheはオワコン
アッコちゃんはマヤコン
wsgiはマジで
>>255 の呼び出し可能オブジェクトからreturn 文字列かyield 文字列するだけ
正直フレームワークのノウハウ覚えるより自分で作ったほうが早い
263 :
デフォルトの名無しさん :2011/10/01(土) 12:06:33.85
俺はマジコン
pythonchallengeのlevel6で1000ちかいテキストファイルを順次開いていくって処理で 400くらいでIOErrorでtoo many open filesってエラーがでて例外処理がわからないんだけど なんかどうすりゃいいのか教えて
>>264 ファイルは使い終わったら閉じましょう。
OSは、同時に開けるファイルディスクリプタ数を制限しています。
やった!レベル0クリア!
>>265 あーお恥ずかしいかぎりですわ
どうもありがとう
おかげで今後閉じ忘れることなくなるだろうな
それってOSの種類で制限の上限がかわったり制限が無かったりするの?
OSってかファイルシステムの範疇になるような気がするけど……。 エロい人回答頼む
Linuxは1プロセスの最大がデフォルトで1024 (ulimit -nで参照・変更可能) Windowsは1プロセスの最大が2048 (stdio経由だとデフォルトで512) (間違ってるかもしれません)
現行のCPythonは参照がなくなったらクローズする けれど他のPython実装はそうするとは限らないし CPythonも将来的にはどうなるかわからない なので明示的決定的にclose()するかwithで書いたほうがいいよって話だろう
>>271 stackoverflowのほうもよく読めば分かるのに……
CPythonの「実装では」参照カウントが0になるとクローズされるが、
Pythonが「言語仕様として」それを保障しているわけでもないし、
Jythonのような他の実装では、実際クローズされないと書かれている
>>264 との違いは、単に書き方の違いだろうな
>>271 の書き方ならリファレンスカウントならすぐ参照が破棄される
想像だけど、
>>264 は
result = (dosomething(f.read()) for f in map(open, filenames))
みたいな書き方でもしてたんじゃないの
できる限りwith文を使いませう。
ファイル処理の場合はclose()よりもまずwithを学ぶべきってぐらい重要な文だよね
withって便利だけど、何にでも使えるから、何が起こってるのか分かりにくくなるよね。 あと、複数同時に使うとインデントがどんどん深くなるのも嫌な感じ。
3.1から with A() as a, B() as b: って書けるようになったよ
>>277 なんだってー!
2.7でも使えるのか。これはいい。
279 :
デフォルトの名無しさん :2011/10/02(日) 18:27:51.16
with文は信用できない 例外信者より
with文使ってても例外はハンドリングできるでしょ。 何か違う話?
withはC#のusingをパクったんだっけ。
>>265 How meny files ? 15[ENTER]
with って break できんの?
MS-DOSとか懐かしいけど、なんかいろいろ違う気がw
「meny」は酷いよ~
リスペクトってLispから引っ張ってくることだよね
手続き的と宣言的の調和
pass
角電池
僕の肛門もclose()されそうです。
cron 等のOSが持っているタスクスケジューラ機能を使わず、Pythonが持っている独自のスケジューラライブラリってありますか? 出来れば標準で、初心者に優しいライブラリであるとありがたいです。
297 :
デフォルトの名無しさん :2011/10/04(火) 12:23:19.64
daemon書いて時間が来るまで定周期でsleepかましつつ回して実行じゃだめ? 常時似非CRON用Pythonスクリプトが走っている事になるけど・・・
299 :
デフォルトの名無しさん :2011/10/04(火) 16:05:47.00
pythonの学習に適したソースコードが載っているサイトはないですか?
cookbook見とけ
MLの人ですか?
マルチスレッド対応のエロ画像自動巡回ダウンローダを作ると勉強になるよ。
でエロ画像はどうやって識別するんだ? 間違って相撲取りの写真でも持ってこられたら悲惨だぞ
ジム・オルークじゃねえか
画像巡回ダウンロードソフトは多くの人が一度は作ったことがあるはず そしてそれはお気に入りのエロサイト前にして煩悩のみで作成するから まったくストレスを感じないし集中できてPythonの習得にも役立つという優れもの
>>306 その手があったか!作りたいネタなくて困ってたんだ!ありがとう!ありがとう!
「リビドー駆動開発」ってやつか
途中で抜いちゃったら頓挫する可能性が高いな
どうせ小一時間もすればまた復活するだろ。 賢者モードではリファクタリング&デバッグするなどメリハリ付けると良い。
312 :
デフォルトの名無しさん :2011/10/05(水) 21:39:31.77
class A: def __init__(self,x): self.x = x a = A(1) と class B: b = B() b.x = 1 の違いは初期化のタイミング以外にはないと思っていいですか?
くだすれPython(超初心者用) は終了?
314 :
デフォルトの名無しさん :2011/10/05(水) 22:50:58.77
PyQtの日本語の専門書はでないのかな?
Windows環境のIDLEでマルチプロセスの結果を表示させたいのですが、 表示されません。 表示させる方法を教えていただけないでしょうか。 コードは標準ライブラリの説明に載っていた以下のものを試しました。 from multiprocessing import Process def f(name): print 'hello', name if __name__ == '__main__': p = Process(target=f, args=('bob',)) p.start() p.join() f関数のprintのところをファイルの入出力に書き直して試して、プロセスが動いてるのは確認できたのですが、 print文の結果がIDLEに表示されないです。
マルチスレッドやマルチプロセスでprintが使えると思わないこと
メインのスレッドにデータ渡してメインのスレッドがprintするようにしないと ダメなんじゃね?
コマンドプロンプトでは動くのならIDLEを捨てる
Windowsを捨てる
occu.py
>>316-320 お返事ありがとうございます。
コマンドプロント&PowerShellでプロセスからのprintが表示されることを確認しました。
IDLEだとメインに表示データ渡さないとダメなんですね。
occu.pyはちょっと何言ってるか分かりませんでした。
322 :
デフォルトの名無しさん :2011/10/06(木) 17:33:58.39
Djangoチュートリアルをやり始めたのですが、
ttp://djangoproject.jp/doc/ja/1.0/intro/tutorial01.html のページ最下部付近の
>>> p.choice_set.create(choice='Not much', votes=0)
をやろうとすると
File "<console>", line 1, in <module>
File "/usr/local/lib/python2.6/dist-packages/django/db/models/fields/related.py", line 436, in create
return super(RelatedManager, self.db_manager(db)).create(**kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/db/models/manager.py", line 138, in create
return self.get_query_set().create(**kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/db/models/query.py", line 358, in create
obj = self.model(**kwargs)
File "/usr/local/lib/python2.6/dist-packages/django/db/models/base.py", line 364, in __init__
raise TypeError("'%s' is an invalid keyword argument for this function" % kwargs.keys()[0])
TypeError: 'choice' is an invalid keyword argument for this function
と出てきます。
該当部分は英語ページでも同様の記述ですし、
ブログ等で検索してもエラーが出たという記述はありません。
どうすればエラーが解消するのでしょうか。
宜しくお願いします。
>>322 $ python manage.py sql polls
の結果はどうなってる?正しい?
(できれば貼りつけて)
$ python manage.py syncdb
はした?
models.pyにタイポはないか?
Djangoは学習コストが高杉晋作。
そうでもない
326 :
322 :2011/10/06(木) 18:52:45.52
>>323 $ python manage.py syncdbは実行しました。
models.pyのタイポはないと思います。エラーが出てから、全文コピペで書き直しましたので。。
$ python manage.py sql polls の結果は
/usr/local/lib/python2.6/dist-packages/django/db/__init__.py:60: DeprecationWarning: Short names for ENGINE in database configurations are deprecated. Prepend default.ENGINE with 'django.db.backends.'
DeprecationWarning
BEGIN;
CREATE TABLE "polls_poll" (
"id" integer NOT NULL PRIMARY KEY,
"question" varchar(200) NOT NULL,
"pub_date" datetime NOT NULL
)
;
CREATE TABLE "polls_choice" (
"id" integer NOT NULL PRIMARY KEY,
"poll_id" integer NOT NULL REFERENCES "polls_poll" ("id"),
"choice" varchar(200) NOT NULL,
"votes" integer NOT NULL
)
;
COMMIT;
こうなっています。polls_pollのpub_dateがチュートリアルと少し異なりますが、それ以外は同一のようです。。
実は書き込みしてからずっと、
エラーファイルに出てきているbase.pyとかquery.pyとか解読しようと試みていたのですが、
わけわかんなくて泣きそうだったので、レス頂けただけでも嬉しくて涙出そうです。。
vmwareにubuntu10.10を入れて練習しているのですが、
何か環境に問題があるのかもしれませんので、windowsで改めてやってみます。
教えてちゃんですみませんでした。ありがとうございました。
>>322 ページの真ん中あたりの
コラムのmax_length にまつわるエラー
の直前の記述を丸ごとmodel.pyに入れた?
直接にはここの
choice = models.CharField(max_length=200)
が無いって言っていると思われ。
>>326 作成されたDBをDB付属のツールで開いて
表示された通りのテーブルが作成されてる?
しつこいが、 DjangoとかRoRみたいな巨大なフレームワークはおすすめしない。
>>329 pythonでおすすめと言うとどれ?
python -m SimpleHTTPServer
とか?
独り言だが、 bisect モジュールの各関数に、keyオプション引数があれば超便利なのに、と思い検索したが、 散々ガイシュツな議論なのね。 要らない派は、keyがあると、不適切なコード(多数回bisectが呼ばれる状況でkey使うと、 無駄にkey関数が呼ばれて遅くなる)を書く馬鹿がいるから、という理由だが、、、、 Zen of Python に、foolproof であるべし、なんてあったっけ?
337 :
322 :2011/10/06(木) 21:38:10.77
327さんと328さんにレス頂いてから再度コピペしたりテーブルを確認したりしたのですが原因がわからず、
もう一度Djangoのインストールからやり直したら問題なくできました。
>>326 で偉そうにsyncdb実行しましたとか言ってしまったのですが、
もしかすると最初に実行したときにmodels.pyにタイプミスがあって、
そのミスを放置した状態でsyncdbを実行したまま苦しんでいたのかもしれません。
>>323 さんにご指摘頂いた後に再度syndbを実行してもうまくいかなかったので、
実は原因は全く別のところにあるのかもしれませんが・・・
Djangoは私には早いかもしれませんが、もうしばらく頑張りたいと思います。
初心者の馬鹿な質問に付き合わせてしまって申し訳ありませんでした。レスくれた皆さんに感謝しています。
DjangoはSQLAlchemyが標準なら使ったかもしれないが組み込みの奴は貧弱すぎる
339 :
323 :2011/10/06(木) 22:40:00.83
>>337 >ミスを放置した状態でsyncdbを実行したまま苦しんでいたのかもしれません
Djangoは既存モデルのフィールド変更に対して自動でマイグレート(スキーマを変更)
できないから、単純に
フィールド名のタイポ→syncdb→修正→syncdb
ではうまくいかない。
Djangoではこういう場合、Southというツールを使う。
(修正後にSouthでスキーマの変更を反映する)
とはいえ、今回はチュートリアルの序盤ということだから、
素直にプロジェクトを作りなおすのが無難か。
一般的にスキーマの変更は面倒なことが多い。
だからこそモデルとして分離することが当たり前になっている。
それで、例えばDjangoだったらmodels.pyを編集するときは特に慎重に。
(もちろん間違えてもどうにかなるけれども)
340 :
323 :2011/10/06(木) 22:50:17.63
俺はWebプログラマじゃないから、 Flaskちゃんで十分だ。めちゃ使いやすい。 永続化はMongoDBとSQLAlchemyを使い分け。
ZopeとかPloneも複雑すぎてわけわからんかったなぁ。
周りにノウハウ持ってる人いないなら軽量貧弱フレームワーク使うか作ったほうが楽だよな 勉強会とか言ってわざわざノウハウ共有するのもいっそアホくさいし
ドジャンゴころころは重厚長大な戦艦大和。 小さい駆逐艦の艦隊にやられる運命。
346 :
デフォルトの名無しさん :2011/10/07(金) 16:27:51.44
ド・ジャンゴさんは社内でノウハウを共有して自社サービス全てこれで作成するよ!みたいな環境だとたぶん最強だけど 受託開発のようにニーズが顧客によって違うようなプロジェクトでは合わないだろうなぁ
DjangoってそもそもCMS開発用だからね。あまり汎用的に見えない。
pipって、Windowsでもソースパッケージをコンパイルできますか。
python3.2.2でてるけどまだ2系列が主流なの?
標準モジュール以外をふんだんに使っている人は2系が主流じゃないかな 3系ではいまだに対応してないモジュール結構多いし
すまん、よく見たらpipか・・・ 基本的にはeasy_installと一緒なんだが 使えないオプションが多々ある。
アホな質問で申し訳ないんですが リストの最小値の添字を返す関数は組み込まれてますか ないならスマートな方法を教えて下さい
L = [1, -2, 3, -4, 5] print L.index(min(L)) 最小値が複数ある場合はしらん
ほうほう、夜遅くにありがとうございます
from operator import itemgetter def argmin(a): return min(enumerate(a), key=itemgetter(1))[0] のほうがいいぞ。
Python関係ないじゃん!
これで更にIT土方の体力勝負化が進むな
ページ内のtwitterアカウントを纏めてtwitterのlistに登録するマクロ作ろうとしています。 HTMLからのアカウント抽出はJavaScript、twitterのリストへの登録はPython使ってやりたいのですが、 PythonからJavaScript実行させることって出来ますか? ブラウザはchrome使ってます。
Javascript を含んだHTMLファイルを書き出してブラウザで開かせるとか?
なんでアカウントの抽出をPythonでやらないの? JavaScriptよりも楽だと思うが。
def argmin(a): return min(enumerate(a), key=lambda x: x[1])[0] って今まで書いてたんだけど、 itemgetterの方が効率いいの?
>>363 ビルトインなだけあってitemgetterの方が少し早い。
>>> timeit.timeit(setup='a=range(1000);from operator import itemgetter', stmt='min(enumerate(a), key=itemgetter(1))[0]', number=10000)
1.6388215130858725
>>> timeit.timeit(setup='a=range(1000);f=lambda x:x[1]', stmt='min(enumerate(a), key=f)[0]', number=10000)
2.7940041704099485
おお、だいぶ変わるのな。
>>361 ブラウザで開いたとして、その結果はどうやったら取れるでしょうか?
JSってファイルに書き出しとかは出来ないですよね??
>>362 既に作成済みのJSがあるからです。
そのまま動かす方法はない感じですかね。。
ちょっと思いついたのですが、Selenium2 のWebDriver使えば
出来そうな気がしてきました。
JavaでやったときにはJSの実行が出来たので同じ感じで
Pythonでもいけるかもですね。
ちょっと試してみます
「ページ内のtwitterアカウント」ってのが何を指しているのかが分からん。
出来るけど実際やったらすぐアク禁なるよ
APIがダメならmechanizeを使えばいいじゃない。
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘ おっぱい!おっぱい!
Django1.3をCGIで動かしたいんだけどどうすればいいでしょうか?
>>366 Java による JavaScript 処理系である Rhino を使って実行するのはどう?
JavaScript から Java のクラスを使えるからファイル書き出しも問題ない
>>373 ありがとうございます、でもこれDjango-1.1.1ですよね?
1.3でも同じなんでしょうか?
pass
鶏Django鍋のおいしい季節
Flaskをチュートリアル通りにやって勉強しているのですが、
http://flask.pocoo.org/docs/testing/#the-first-test この項目のテストを実行すると
E
======================================================================
ERROR: test_empty_db (__main__.FlaskrTestCase)
----------------------------------------------------------------------
Traceback (most recent call last):
File "flaskr_tests.py", line 13, in setUp
flaskr.init_db()
AttributeError: 'module' object has no attribute 'init_db'
----------------------------------------------------------------------
Ran 1 test in 0.022s
FAILED (errors=1)
と表示されてチュートリアル通りの結果になりません。
これは、何が原因なんでしょうか…?
あと、関係あるかわかりませんがPythonの対話シェルでも
import flaskr
flaskr.init_db()
を実行するとAttributeErrorが出ます。
379 :
377 :2011/10/12(水) 21:01:38.42
すみません、自己解決しました…。どうかしてました…
英語読めないと日本語資料の少ないPythonは厳しいと思うぞなもし
Facebookの元CTO 「PHPは問題外。クソすぎるがPHPの資産が多すぎてFacebookをPythonとかに移行するのは不可能。」
本当ははPHPを捨てたいけど、 既存のコードベースが大きすぎてもう切り替え不能ってことでしょ。
まあPHPのシステム抱えてるところはみんな思ってることだろうな
問題外なのに使いつづけるってなんか意味不明だなあ。
スクリプトを実行せずに文法チェックだけする方法ってありますか? あまり厳密なものでなくても良くて、 perl -cw とか ruby -cw みたいな感じです。
>>386 python -c'compile(...)'とかする
jython 2.1 という特殊な環境で申し訳ないのですが、教えてください。 threading.RLockのacquireやreleaseを使うと、 stderrにスレッド名や何度目の確保かなどの情報が表示されるのですが この内容を出力しないようにすることはできますか?
>>381 具体的にphpの何がダメなんだろ。俺もpythonが好きなんだが、これから仕事でphpやるんだわー。
やればわかる
>>390 良し悪しはよくわからんけど、PHPをやった経験からすると、
Javascriptと同様にhtmlと混在できるから
テンプレート機能があるフレームワークとか、
あるいは手書きでも意識してそこを分離するように書かないと
後で改修する時に泣く。
>>393 標準なら
import Tkinter
r = Tkinter.Tk()
r.bell()
r.destroy()
del r
Windows限定で良ければ
import winsound
winsound.MessageBeep(winsound.MB_ICONHAND)
>>390 やればわかるよ
C++に毛が生えた程度の能力しかないくず言語だから
PHPなんてどうみてもC++以下だろ
PHPはそもそもテンプレート言語なのにその上にテンプレートやらフレームワークやら載っけるから意味のわからない事になる
リッチーブラックモアなら知ってる
402 :
kuma :2011/10/14(金) 16:26:03.13
pythonを勉強始めようと思っています 質問があります pythonmには、perlのcpanのようなものは、ありますか?
ぱいぱい
405 :
kuma :2011/10/14(金) 17:13:59.77
>>403 親切な対応をありがとうございます。
勉強して、使えるようになりたいです。
ありがとうございました。
406 :
デフォルトの名無しさん :2011/10/14(金) 18:19:26.36
winXP、ptyhon2.7.1です。 「リストLの要素の、全ての組み合わせを列挙し、 要素の第2項目の合計値を求める」 という趣旨で書いたのが下記です。 forの中身を、reduceやsumやリスト内包表記を 使ってスマートなコードしたいのですが、 書き方が全く解かりません(思いつきません)。 どなたか、書き換え例をお願いします。 (表示のためインデントは全角空白です) # -*- coding:cp932 -*- import sys, itertools L = [['A',12050],['B',28600],['C',14530],['D',12810],['E',11020], ['F',10050],['G',18600],['H',24530],['I',21510],['J',10080]] num = 0 for i in xrange(1,len(L)+1): for j in itertools.combinations(L, i): j_total = 0 combi = [] for k in j: combi.append(k[0]) j_total += k[1] num += 1 print num, '-'.join(combi), ':', j_total sys.exit(0)
for num, lis in enumerate(j for i in xrange(1, len(L)+1) for j in itertools.combinations(L, i)): print num, '-'.join(item[0] for item in lis), ':', sum(item[1] for item in lis)
もう分かったと思いますがなんでも使えばいいってもんじゃありません
L = [['A',12050],['B',28600],['C',14530],['D',12810],['E',11020], ['F',10050],['G',18600],['H',24530],['I',21510],['J',10080]] for num in xrange(1,1<<len(L)): x = lambda k: (b[k] for a,b in enumerate(L) if num & 1<<a) print num, '-'.join(x(0)), ':', sum(x(1)) ビット演算で組み合わせを生成してみたり。
L = [['A',12050],['B',28600],['C',14530],['D',12810],['E',11020], ['F',10050],['G',18600],['H',24530],['I',21510],['J',10080]] for num in xrange(1,1<<len(L)): x,y = zip(*(b for a,b in enumerate(L) if i & 1<<a)) print i, '-'.join(x), ':', sum(y) zip使ったほうが綺麗か?
ビット演算使ったら中二病コードになっちまう。
from __future__ import print_function L = [['A',12050],['B',28600],['C',14530],['D',12810],['E',11020], ['F',10050],['G',18600],['H',24530],['I',21510],['J',10080]] for num in xrange(1,1<<len(L)): x,y = zip(*(b for a,b in enumerate(L) if i & 1<<a)) print(i, *reduce(lambda x,y: (x[0]+'-'+y[0], x[1]+y[1]), (b for a,b in enumerate(L) if i & 1<<a))) 無理やりreduce使ってみた。 Python3形式のprintじゃないと最後の書き方ができないんで、__future__使ってしまったが。
訂正です。
from __future__ import print_function
L = [['A',12050],['B',28600],['C',14530],['D',12810],['E',11020],
['F',10050],['G',18600],['H',24530],['I',21510],['J',10080]]
for num in xrange(1,1<<len(L)):
print(i, *reduce(lambda x,y: (x[0]+'-'+y[0], x[1]+y[1]), (b for a,b in enumerate(L) if i & 1<<a)))
>>411 確かに、中二病臭はするw
何をしているかコメントを残しておけば、個人的には許せる範囲だけど。
__future__が嫌ならsys.stdout.write(str())すればいいじゃない
415 :
406 :2011/10/14(金) 20:38:13.75
>>407 連番がゼロ始まり以外は同じ結果でした。
>>409 並びは違いますが、同等の結果でした。
>>410 >>412 >>413 errorでしたが、numをiにしたら動いて409と同じ結果でした。
>>408 その通りの様です。残念ながら、どれも動作の流れが掴めません。
コピペで使っても、今の私ではメンテや応用は不可能です。
自分で理解できる書き方で行きます。
例を挙げてくれた方、ありがとうございました。精進します。
>>406 import itertools
L = ...
def tomato(lst):
for i in xrange(1, len(lst)+1):
combos = itertools.combinations(lst, i)
for combo in combos:
label = '-'.join(item[0] for item in combo)
total = sum(item[1] for item in combo)
yield label, total
for i, reply in enumerate(tomato(L)):
print '{index} {label} : {value}'.format(index=i+1, label=reply[0], value=reply[1])
JythonってだけでもマイナーなのにJython2.1って10年前だよな レスつかなくても仕方ないんじゃないか
うん。仕事で突然使わされてドキュメントもなくて悲しい。
宿便は宿題スレで
422 :
デフォルトの名無しさん :2011/10/15(土) 02:05:20.33
フジテレビデモ 花王デモ 要チェック
ネトウヨは暇だなぁ
PHPって、 (new Object()).method() 的なことができないらしい。どういう構文解析してんだ。
もともとオブジェクト指向じゃないもんで。
別に C でも {1,2,3}[2] みたいなことはできないじゃん。 言語がちがうんだから構文のありかたがちがうのは当たり前。
構文のありかたじゃなくてsemantic analysisの問題だから、 Cで {1,2,3}[1]ができないのとはちょっとちがう話だと思う。 まあどうでもいいけど。
428 :
406 :2011/10/15(土) 13:57:40.02
>>416 これはなんとか読み取れて、応用ができそうです。ジェネレータがポイントでしょうか。
ありがとうございます。( 407 と同じ方の気がします)
429 :
デフォルトの名無しさん :2011/10/15(土) 16:40:41.50
>>427 出来ないことに変わりないんだから
意味のないレスでスレを汚さないで頂きたい
pass
web2pyで作ったwebアプリをアップロードして動かすには アップロード先にweb2pyをインストールしてその管理ページから パッケージインストールするしかないの?
最近PythonだったアプリがどんどんValaに移行しているような気がする。
GObjectなんてGNOMEのやつらしか使わないけどね。
しかし実際書き換えられてるとなると気になるよな どの辺がいいんだろう
awkからの乗り換え試行錯誤中の者です。 関数定義(function)は、メインに相当するコードブロックまたは ENDブロックの下に並べて纏めていましたが、pythonではNGの様です。 pythonでは、関数定義(def)はどこに書くのが良いのでしょうか? そのファイルの、先頭(import~メインとなるコードの間)? そのファイルの、初めて必要になったところ? 他のファイルに、纏めておく(importして使う)? その他? 使用頻度や再利用の可能性などケースバイケースかもしれませんが、 セオリーがあったら教えてください。
>>436 好きなところに書けばいいんじゃね?
一応確認しておくけど、ENDって論理的なファイルのおわりのことだよね?
あと、メイン処理は
if __name__=='__main__:
の中に書いてるよね?
いや、たぶんawkのENDブロックのことかと
>>437 if __name__=='__main__: の中に…書いてません…。
書くとどういう違いが出るのでしょうか?
>>438 そうです。BEGIN{} {} END{} の下にという意味です。
> if __name__=='__main__: 他のファイルからimportされてるときは実行されない
>>436 関数の呼び出しをする前に、関数定義(def~)が処理されていないと駄目。
後方参照で関数を呼ぶことはできない。
だからPythonのスクリプトは、スクリプトの一番後ろからmain()を呼ぶように書く。
import hoge
def main():
f()
def f():
hogehoge
if __name__=='__main__':
main()
def~の行も実行されるって考えるといい。
443 :
デフォルトの名無しさん :2011/10/16(日) 14:13:52.20
ぱいちんくんとちんぱいくん
>>442 関数定義def main(): f()を実行しただけでは関数fは呼びだされないよ
なので未定義エラーにはならない
pychinko
レスくれた方々、ありがとうございます。
importとif __name__=='__main__':の間で関数定義しておけば、
その関数はif __name__=='__main__':以降のコードで使用できる、
という理解でいいでしょうか?
>>442 この指摘が気になります。後方参照は出来ないのだから、
def main()の前に定義されていないf()は、def main()では使えない。
という事か思ったんですが、
if __name__=='__main__'以降で、main()を呼んだ時は、f()は定義済み
という事になって、使用可能にも思えます(前方にあるので)。
どちらが正しいのでしょうか。
447 :
446 :2011/10/16(日) 14:42:50.38
すいません。444さんが、疑問に答えてくれていました。 (更新してませんでした)
>>446 どうせなら機械的にコンバートするコンバータ書いたら?
449 :
446 :2011/10/16(日) 14:54:37.58
>>444 関数定義の記述順で、定義済み・未定義は決まらない。
実際に実行した時に、定義済み・未定義が決まる。
という風に理解しました。
>>448 AWK→PYTHONコンバータという事ですか?
無理です…こんな質問しているレベルなのに。というか永遠に無理…。
とりあえず、if __name__ ... は忘れて、main()を全部の関数宣言後に実行しとけって考える。 import云々はとりあえず、今の疑問点と関係ない。
>>449 > 関数定義の記述順で、定義済み・未定義は決まらない。
すこし勘違いしてるかも
(関数本体に含まれる変数なり名前の定義未定義という意味ならOK)
まずPythonプログラムは実行文の並びであり上から実行していく
importやdefなんかも実行文のひとつ
ただしdef文を実行して関数を定義した時点では関数本体は実行されない
あくまで関数を呼び出した時点で本体が実行される
datetime.date(2008,02,8)だと動作しますが datetime.date(2008,02,08)ではシンタクスエラーが出るんですがどういうことですか
>>453 08 の部分が8進数扱いされているのでは?
8新数に 8や9はありません。
......とは言え、使えてしまった言語があったような。昔のPerlだっけか?
なるほど ありがとうございます
ちなみに、Python3からは「0123」とかも10進数扱いなので注意ね。 Python2.7とかなら、3.0以降と同じ新しい8進表記「0o123」が使えるので、こっちで慣れておいたほうがいいかも。
0123はSyntaxErrorじゃない?
>>449 実際やってみるとよろし。
# a.py
def f():
a = undefined_variable
と
# b.py
def f():
undefined_function()
と
# c.py
def f():
syntax>>>>>>>>>>>>>>error
のうちで、定義だけでエラー出るのは構文エラーのものだけ。
a.py, b.pyの下行に f() を付け足して実行すると、関数が呼び出されて、エラーが出る。
def f1():
g1()
def f2():
g2()
def g1():
pass
f1()
f2()
def g2():
pass
だと、f1ではエラー出ないけどf2だと、g2がないのでNameErrorが出る。
それは、f1の(定義ではなく)呼び出しまでに、g1は定義されているけど
f2の呼び出しまでにg2が定義されていないからそうなる。
ヒント:動的参照
例えば、100万行くらいのタブ区切りテキストデータがあって、 特定のカラムには必ずパターン化された文字列(例えばいずれかの都道府県名とか)がくることが 分かっているようなデータがあります。 で、逐次処理できないような計算がしたいので、全体をメモリに読み込むのですが、 メモリ節約と高速化のため、同じ中身の文字列オブジェクトを同一IDとなるように、 prefectures = {} for line in open(filename): ... prefecture = prefectures.setdefault(prefecture, prefecture) ... みたいにしているんですけど、もう少しスマートに書く方法はないでしょうか? ※ Rで言うところのfactorみたいなことがしたい
intern?
おおそれだ。どうもどうも。 #でも、辞書はグローバルで共通とか、文字列しか使えない、タプルとか無理とか、制約が多いなぁと感じ無くもなかったり。 _intern_dict = {} def intern(x, idict=_intern_dict): return idict.setdefault(x,x) とすればいいのか?
intern()ってもとはLispのシンボルだろうしJavaとかにもあるし XやWindowsのATOMも同類だけど、大抵の実装はPythonと似たような感じだと思うよ 勿論組み込みのものが不満なら、そういう実装を自分で作って使ってもいいんじゃね
スクリプト言語はコンパイルしなくていいみたいなんですが 例えば2chのスレを読み込む場合、URL間違えてエラーが出た場合 間違えたところを修正してそこから始めるみたいなことできますか? それともコンパイル言語と同じようにまた1からスタートしなくちゃいけない?
>>467 デバッガの上で動かしてれば出来るよ。
マジメに組むならすべてのエラーに対してあらかじめ
対応するエラー処理ルーチンを組み込むべきだと思うけど。
>>468 すごいなースクリプト言語初めてなので感動
WEBにアクセスするのにC言語のようにゼロから同じ作業繰り返しとか大変だから
これだとぐいぐい作っていけそうですね
>>466 気合入れた統計計算をしたいのでDB上でなんて無理。
Cで書こうか迷ってる。
気合はなくてもいいから頭を使おう
DBつってもいろいろあるで もしSQL使うようなRDBを想定してるんなら、だけどな
sqliteを :memory: じゃアカンか?
ふつうに、 質的データを整数にマッピングするクラスを作ればいいんじゃないの。
今のCPython実装では、整数でも-5~256以外?だったら個別に割り当てられる オブジェクトになるんだから、 整数の等価比較よりも、(文字列でも何でも)同一オブジェクトのis比較のほうが 速い可能性はある。
>>474 気になったのでテストしてみました。
100種類の文字列をランダムに10,000,000回出力させたテキストファイルから、
先頭に出てくる文字列が、全体では何回出てくるかを数える。
但し、文字列(または文字列をマッピングした整数)は、一旦リストに読み込み、
timeitで5回平均値で計測。データセットは全10個。つまり50回の平均値。
(A) 文字列そのままリストに入れて、==比較
(B) internした文字列をリストに入れて、is比較
(C) 文字列を整数にマッピングし、==比較
(D) 文字列を1000から始まる連番の整数にマッピングし、==比較
結果は、
(A) 7.124秒
(B) 5.713秒
(C) 6.326秒
(D) 6.583秒
整数にマッピングするより、文字列intern+is比較の方が速い。
isで比較することを我慢すれば、不要な処理を挟まなくて良い分可読性も良い?
ちなみに、(D)では、整数がわざと異なるオブジェクトになるよう、 d = {} a = [d.setdefault(x, len(d))+1000 for x in open('dat.txt')] のように読み込んでいます。 当然ですが、読み込み部分は測定時間に入ってません。 ちなみに、Python3.2
>>467 C言語でもVisualC++なんかはエディットコンテニューって機能があってだな(以下略
っていうか、ゼロから同じ作業繰り返しってのがいまいちよく分からないんだけど、
デバッグするのにいちいち手動で入力する手順があるの?
そういうのはデバッグ用に適当な値を用意しとくもんだよ。
あれはただの喩えだから いろいろ実験したいときとかさ でも、インタラクティブモードやってみたけど うまくいったコードをまた書き写さないといけないんだな ちょっと思ってたのと違うみたい
480 :
デフォルトの名無しさん :2011/10/19(水) 09:12:02.47
馬鹿には無理
なんかダメな奴は何やってもダメなんだなっていう好例だな
始めたばっかでダメとかバカとか言われてもなw お前らそんなに自分に自信がないのかよw
だぶりゅーw
コンパイル言語と同じようにまた1からって意味がよくわからないんだよな。 コンパイル言語でも途中からやればいいと思うんだけどな。 CでもCutterとかあるし。
188 名前:可愛い奥様 [sage] :2011/10/19(水) 10:35:25.32 ID:N8BWsFxs0 あさイチの件だが、番組後半で「ゲルマニウム半導体検出器で計測した値から環境放射線量の分を引くから0やマイナスになる事がある」って説明してたね ゲルマニウム半導体検出器って外部からの放射線が混入しないように内部を10cm以上の鉛で遮蔽してるのに、環境放射線量を引くってどういうこっちゃ? そういうおかしな事してたら、そりゃ福島の食材の計測値が0ばっかりになるはずだわ 一日だけ数ベクレル出た他のところも、産地偽装食材をつかまされてて、実際はこの「おかしな引き算」をしない場合の値は数ベクレルどころか数十~数百ベクレル出てたんじゃないの? 計測担当した首都大学の福士はもろ御用学者なので、別の中立な検査機関で同じような実験を定期的にやるべきだと思う 環境放射線の分とか言って余計な引き算をしないところなw
クソすれ
ageるとアホがコピペ爆撃するからやめろよー
なるほど
489 :
デフォルトの名無しさん :2011/10/19(水) 18:57:30.45
馬鹿には無理
角電池
>>479 書きなおすのはいいけど、それがリビジョン管理システムと連動
してないと使い物にならんだろ。書き換えの履歴ぐらい追えるようにしないと。
常に後に試した方がマシとは限らないのだから。
windows7 64bitOSでCython使ってる人いますか? 何使ってコンパイルしてますか? MinGWでうまくいかず、Microsoft SDK のやつでもうまく行かなくて……
しっつもーん! easy_installで、インストール先を $HOME/python/2.7 にしたいのですが、できますか? ライブラリだけでなく、実行ファイル(スクリプト)もそこにインストールしたいです。 こんなかんじ: $HOME/python/2.7/lib # ライブラリ $HOME/python/2.7/bin # 実行ファイル
>>493 Pythonをインストールするときに、
./configure --prefix=$HOME/local/
とかすればいいだけじゃ。
>>494 えーなんでそんなことをいうの?
Python自体は/usr/localや/opt/localに入っているのを使いたいんです。
apt-get install pythonしたのとかMac標準ではいっているやつね。
>>496 ありがとー、でも英語なのね。
頑張って読んで見ます。分からなかったら助けて下さいね。
態度でかいなw
次のスレタイはこれにしとこうか [永久] Pythonのお勉強 -44℃ [凍土]
嫌われマカーの鏡
Pythonの掃除機
pythonいいんだけど、あの変な3項演算子もどきはどうしてああなっちゃったんですかね if文をif式にしてくれれば折れ的にはすっきりなのだが python暦の長い人にとってはあっちの方がすっきりなのですか?
Cみたいな暗号のようなコードを作らないためだろう
python ternary faqとかでぐぐればでてくるよ
a ? b : c ? d : e とかはpythonの方が圧倒的に分かりやすいのに何で分からないのかなあ
三項演算子は、うるさい人達を黙らせるために導入してやったという感じ。
わざと気持ちの悪い文法にして使わせないようにする戦略ですね
何言ってんだこいつ
あばあばっっばばばばばばばっっばばばばっっばばばっばばばば
リストの中身をintに直したいのですが効率のいい方法ありますか? [1,2,3,4,5]というリストをを12345というint型にしたいのですが
>>507 >a ? b : c ? d : e とかはpythonの方が圧倒的に分かりやすいのに何で分からないのかなあ
そうか?
b if a else d if c else e
さっぱりわからないよ。。。
>>513 それはお前が馬鹿だから
? : は : の両側が条件式なのか結果なのか分からん、どちらにでも成り得る
>>512 reduce(lambda a,b: 10*a+b, [1,2,3,4,5])
効率はどうだろう。
int('%d'*5 % (1,2,3,4,5)) とかでもいい ちょっとこれはズルをしていて、リストなら int('%d'*5 % tuple([1,2,3,4,5])) のように書かないといけない
そもそも三項演算子をネストさせるキチガイが平然とあらわれる時点で…
return looooong_condition ? foooooo_valueeeeeee : otheeeer_valueeeeee; この書き方、結構気に入ってる。理由は、値が並んでて比較しやすいから。 return foooooo_valueeeeeee ¥ if looooong_condition ¥ else otheeeer_valueeeeee これは、値と値の中に条件式が入るから、嫌。
>>514 >? : は : の両側が条件式なのか結果なのか分からん
それはお前が大馬鹿たから
>>518 return foooooo_valueeeeeee if looooong_condition ¥
else otheeeer_valueeeeee
こうだろ
>>515 それだと、[1, 20, 3, 4, 5]の場合に意図したとおりにならないのでは?
普通に書くとこうですよね。
int(''.join(str(s) for s in [1,2,3,4,5]))
>>516 とほぼ同じですね。
処理は
>>515 の3倍ぐらいかかります。
>>516 とどっこいぐらい。
文字列にキャストするとかアホか…
そもそも前提がよくわからない。 [1,2,-3,40,5] とかだとどうすんのよ。
524 :
512 :2011/10/22(土) 02:14:29.63
返信ありがとうございます。 曖昧な書き方ですみませんでした。 リストの中身はすべて0~9の一桁の数値です。 また一番初めの配列に0はこないようになっています。(下でいうa[0]に0は入っていません) いまは a = [1,2,3] num = int(a[0] + a[1] + a[2]) としているのですが、実際は10桁くらいあるので汚くなっていしまいます。
外に関数作れば見なくて済むぞ。はい解決
>>518 そこまで言うなら普通にif文で書けよ......
下のような3つの数字が並んでいるファイルから数値を一括でリストに代入する方法を教えて下さい。 hoge.txt 1.0 2.0 3.0 4.0 5.0 6.0 ... 今は x = [] y = [] z = [] for i in open("hoge.txt", "r"): (a, b, c) = i.split() x.append(float(a)) y.append(float(b)) z.append(float(c)) のように書いているのですが、もっとシンプルに記述したいです。
>>524 >>512 の1行目と2行目で言ってることが違うし怪しいなと思っていたが……
そのコードで動いているということは、
a = [1,2,3]
じゃなくて実際には
a = ['1','2','3']
なんだろ
これらは全然違うものだから、間違えないように
529 :
デフォルトの名無しさん :2011/10/22(土) 11:11:10.16
>>527 短くすることは出来るが、却って分かりにくい気がするぞ…
x,y,z = zip(*[map(float,ln.split()) for ln in open("hoge.txt","r")])
531 :
デフォルトの名無しさん :2011/10/22(土) 11:21:56.14
>>527 ある程度の大きさの数値データをいじるならNumPyの使用も検討してみて。
wxpythonで、 ボタンとかにwxEXPAND|wxGROWセットして ウィンドウサイズに追従してサイズ変更したときに、 中のフォントサイズも自動で追従して大きくしたいのですが、 そういう設定ないんですか?
Pythonで2進数演算するときのスマートな方法ってないですかね? zip使うようなやり方しか思いつかないんですが
>>533 それだけじゃ何がしたいのか分からないよ
MacOSX Lion10.7.2でPython2.5系をインストールしようとすると下記のエラーがでないでしょうか?
誰かひまな人いたら試して欲しいです。お願いします。
~/:sudo port install python25
Password:
---> Computing dependencies for python25
---> Building python25
Error: Target org.macports.build returned: shell command failed (see log for details)
Log for python25 is at: /opt/local/var/macports/logs/_opt_local_var_macports_sources_rsync.macports.org_release_ports_lang_python25/python25/main.log
Error: Status 1 encountered during processing.
To report a bug, see <
http://guide.macports.org/#project.tickets >
マルチポストは印象悪いぞ
なんで分かったw
またマカーか。
なんでマカーはこんなにレベルが低いの
>>534 一度10進数にしてから演算することにしました。ありがとう。
ボンダイブルーカコイイ!!
544 :
デフォルトの名無しさん :2011/10/22(土) 19:31:11.75
pythonのインタラクティブシェルのインデントでTABキーを使ってるんですが 1回目は4文字なんですけど2回続けると2回目が8文字挿入されてしまいます。 これは仕様ですか?バージョンは2.7です
それは端末のタブ幅がスペース8つだからじゃないか プロンプト>>>とスペース1つある状態でタブ打てば 8桁目にカーソルが移動する とりあえずは端末からtabs 4とかする ただCのソースとか見たときにインデント崩れるかも
547 :
デフォルトの名無しさん :2011/10/22(土) 20:46:41.59
>>545 端末からtabs 4にする方法がわかりません
windowsじゃ無理かも
549 :
544 :2011/10/22(土) 21:33:35.33
>>548 そうですか
みんpyを見ながらやってるんですが どうしても本と同じように表示されないので質問しました
気にせずに進めてみようと思います
レス有難う御座いました
551 :
544 :2011/10/22(土) 22:17:40.98
>>550 スペースで打ってもいいんですね
それだと本の通りになりました
有難う御座います
>>529 , 530, 531
ありがとうございます。
これ以上小さくするのは難しそうですね。
あちこちでファイルを読み込んでいるためできるだけ小さくできたらと思ったのですが。
NumPyも検討してみます。
>>552 そのあちこちの読み込みルーチンは関数化できないのか?
初歩的な質問ですみません。 hoge = [] と宣言した変数に hoge.append(list型)としてリストの値を追加したいのですがオブジェクトごと渡しているようで list型のオブジェクトの値が変更されるとhogeの中のリストの値を一緒に変わってしまいます。 list型の値だけを追加するにはどういった方法があるのでしょうか? 分かりにくい説明だと思いますがよろしくお願いします。
>>554 def test(num=10):
hoge = []
n = [i for i in range(12)]
for i in range(num):
random.shuffle(n)
hoge.append(n)
return hoge
こうするとhogeの中身は全て同一の値になってしまいました。
>>556 じぶんでもそう書くんだけど
こういうのってcopy.copy()のが明示的でpythonicなんかな?
>>556 お~簡潔な解決策ありがとうございました!
pythonicなのかは分かりませんが助かりました。
これから一生djangoかjinja2のどちらかしか使っちゃダメとなったらどっちを使いますか?
>>520 が分かりやすいな
Perlベストプラクティスに載っていたネストした三項演算子をテーブルのように見せる書き方に似てる
return a ? b
: c ? d
: e
;
Pythonも前後逆で似たような書き方ができるな
return b if a \
else d if c \
else e
いろんな音声ファイルを変換するのに便利なモジュールってなに
質問です。 ハッシュの特定のキーに配列で値を追加したい場合、 ハッシュの特定のキーに配列があれば値を追加、空ならば配列を生成して追加 ということがしたいのですが、どのように書けば実現できるのかわかりません。 result = {} index = 0 text = "hoge" for i in range(1, 10): if len(result) == 0: result[index] = [text] else: result[index].append(text) index += 1 print(result) Rubyだと、ハッシュの初期化を以下のように行えば解決できるのですが、 Pythonで同じような解決方法はありませんか? result = Hash.new{|h,k|h[k] = []}
>>563-565 result.setdefault(index, []).append(text) でもいける。
setdefaultの方が一回だけ書くならimportしなくていい分短く書ける。
ただ、毎回オブジェクトつくられるので遅いかもしれない。
calendar.weekdayは、月曜日が0で、time.strftimeは日曜日が0なのは、 何か理由があるのでしょうか? calendar、time、datetime。各モジュールの、役割分担がよく解かりません。 使いどころなどで混乱してます。 なるべく単純明快な、すっきりとする解説をお願いします。 (検索したのですが、より混乱しました)
>>568 calendar.weekdayは、ヨーロッパの慣習に合わせて月曜始まりって
ttp://www.python.jp/doc/2.5/lib/module-calendar.html に書いてあった。
time.strftimeは、C言語のstrftime関数に合わせてあると思われ。
calendar, time, datetimeだが。
大体の場合はdatetimeを使う、と思ってよい。
datetimeは、Pythonで一般的な用途で、日時を扱う場合に使いやすいように作られている。
timeは、datetimeよりもシステム寄りだ。それはつまり、プラットホームや環境に依存するものも多い。
必要ならば使えばいいが、特に理由がなければdatetimeを使うこと。
calendarは、timeとは逆に、datetimeよりも応用的だ。
カレンダー出力や、カレンダーに特化した関数を提供する。
なので、カレンダー関連のことはやりやすいが、汎用性には欠ける。
便利に使える場面では積極的に使うといいが、普段はdatetimeを使うことになるだろう。
質問です。 Pythonでは、JavaやCのように、式の中に変数への代入は書けませんよね? 例えば下記のような感じに書きたい場合、 if (jk = func1(jc)) == jd: func2(jk) やはり、jkへの代入文はifの手前に書く方法以外には何も小技は無いのでしょうか?
jsならできるよ。 なんてボケは要りませんね。はい、失礼しました。
[func2(jk) for jk in [func1(jc)] if jk == jd]
>>573 どうも、ありがとう。やればできるのか。
ただ、ちょっと頭が混乱している。宿題になりそう・・・
(lambda jk: func2(jk) if jk == jd else None)(func1(jc)) の方がよくね?
まあ、どちらにしても 素直に別で書いたほうが読みやすいだろうな
クックブックにその話題あったな。 クックブックの回答は、代入文のかわりに値を返すsetメソッドに書き換える。
黒魔術じゃん
まあクックブックにも「基本そんなことはするな」的な前置きはあった
ifの中などの代入なんて、できる言語でも読みにくいだろ
代入と同時に真偽判定が出来ると、例えば ひとつの文字列を、大量の正規表現とマッチさせて 最初に見つかったパターンによって分岐…とかがやりやすそうな気がする
代入を式にしたのは
>>571 みたいなことするアホコードをなくすためだろ
584 :
568 :2011/10/26(水) 12:05:22.76
>>570 ありがとうございます。(遅くなってすいません)
基本はdatetimeモジュールを使用。
それで出来ない場合は、timeを併用。
そのものズバリの機能があれば、calendar。
という使い方を心掛けるようにします。
・・・にしても月0・日0の違いは、いつか引っ掛かる予感…
585 :
568 :2011/10/26(水) 14:51:28.32
すいません。追加質問です。 os.path.getctime(__file__)で得た取得したエポック秒を見やすく加工したいのですが、 これは「timeモジュール抜き」ではできないのでしょうか。 「datetimeモジュール」で、直接エポック秒を扱うやり方を発見できないです。
datetime.datetime.fromtimestamp
587 :
568 :2011/10/26(水) 15:49:51.50
>>586 ありがとうございます。あるんですね…。
timeモジュール
datetimeモジュールの中にdatetime、date、time、というオブジェクト
同じかまたは似た名前の多数のメソッド
・・・迷走は続きそうです。
datetime.datetimeは日時, datetime.dateは日, datetime.timeは時。 それさえ覚えとけば、特に難しいことはない。
mod_pythonのテストページ(
http://www.python.jp/doc/contrib/modpython/inst-testing.html )は
無事に完了して「PythonHandler mptest」を「PythonHandler mod_python.publisher」に
変更しても無事に動作しました。
そこで、「/test」ディレクトリ配下だけでなく、「/」でも実行できるようにしようと思い、
<Directory "/opt/local/apache2/htdocs"> ~ </Directory>の中に
> AddHandler mod_python .py
> PythonHandler mod_python.publisher
> PythonDebug On
を追加しましたが、なぜか
> Not Found
> The requested URL /mptest.py was not found on this server.
となってしまいます。当然/htdocs直下にmptest.pyは存在しています。
なぜでしょうか??
自分の環境は下の通りです。
MacOSX Lion
mod_python26 @3.3.1_0 (active)
mod_wsgi @3.3_0+python26 (active)
python26 @2.6.7_1 (active)
python27 @2.7.2_1 (active)
DocumentRootだかServerRootの値 無事に動作したときのURLとmptest.pyの絶対パス あとブラウザがNot Foundを表示しているときのApacheのエラーログを晒してみて
591 :
589 :2011/10/29(土) 17:01:34.67
>>590 今エラーログとか収集してたんですが、、
実はmod_pythonのURLの判定の仕方が特殊という事に今気づきまして、、
もう少し自分でちょっといじってみたいと思います。
それで無理だったら助けてください。お願いします。
変数の存在確認ってどうやるの? try文しかないの?
593 :
589 :2011/10/29(土) 17:14:10.81
594 :
デフォルトの名無しさん :2011/10/29(土) 19:05:48.42
おい!おまえの書いたURL、アクセスできないぞ
>>592 dirとか
オブジェクトの属性なら、hasattrとか
さんきゅー じゃ予めval=Noneってしといてval is Noneで確認したほうが楽っぽいね
PHPみたいなもんだと思ってるなら悪い癖だからできるだけ直したほうがいい
質問なんですが、今日1日がんばってmod_pythonの使い方覚えてたんですが、 Python界の流れ的にmod_pythonは使わずに mod_wsgiを使って行こうみたいなのってあったりするんでしょうか?
>>598 そうみたいですね。すごい1日ムダに終わった気がしてガックリきました。
今mod_wsgiをコンパイルしてインストールしたので
この後はDjangoかPylons入れてみようと思います。
>この後はDjangoかPylons入れてみようと思います。 DjangoかFlaskにした方がいいと思う 理由は俺が好きだから
結局jinja2にしました 理由はGoogleAppEngineで今後公式サポートされるから たぶん来年はjinja2が盛り上がる
603 :
デフォルトの名無しさん :2011/10/30(日) 01:36:38.72
ん?jinja2ってテンプレートエンジンでは?
Flaskにしとけ
時代はPyramidだろ
Mac OS X で python -c "import getpass; print(getpass.getpass('Password: '))" としたらうまくいくのに、それを変数に代入しようとすると var1=`python -c "import getpass; print(getpass.getpass('Password: '))"` これでなんかうまくいきません。 具体的には、プロンプトとして表示されるはずの「Password:」が表示されず、 またprintの結果も変数に代入されません。 原因の分かる方いましたら教えて下さい。
>>606 pythonの問題じゃなくてシェルの使い方の問題と思われ。
var1=`python -c 'import getpass; print(getpass.getpass("Password: "))'`
FlaskってWebアプリフレームワークの中の テンプレートエンジン部分でjinja2使ってるんですね。 勉強になりました
最近「format」でも「rjust」や「zfill」と同じ事ができる事を知りました。 1.「format」、[zfill系]のどちらが、速度的に有利なのでしょうか? ちなみにfor文内で使用します(約3,500回のループ)。 2.下記は同じ結果を出しますが、「まともな書き方」はどれでしょうか? val = '21' # 文字列 ans1 = val.zfill(10) ans2 = '{0:0>10}'.format(val) ans3 = '{0:0>{1}}'.format(val, 10) ans4 = '{0}'.format(val.zfill(10))
>>608 うぎゃあ!その通りでした。
`backtick` は「'」でなく「"」相当なんですね。勘違いしてました。
>>> timeit(setup="val='21'", number=3500, stmt="val.zfill(10)") 0.0016031944198573456 >>> timeit(setup="val='21'", number=3500, stmt="'{0:0>10}'.format(val)") 0.0026360597252050866 >>> timeit(setup="val='21'", number=3500, stmt="'{0:0>{1}}'.format(val, 10)") 0.00468989345804971 >>> timeit(setup="val='21'", number=3500, stmt="'{0}'.format(val.zfill(10))") 0.0037554477786585494
なんでraw_unicode_escapeなの? string_escapeじゃだめか?
MacportsでapacheとPython2をインストールしました。 しかしapacheは/opt/local/binではなく/usr/binのPythonを実行します。 どうやらApacheの環境変数PATHみたいのがおかしいっぽいんですが この場合どうすればいいんでしょうか?
/etc/passwd の中見れば apache の PATH の場所がわかる
>>617 /usr/bin/falseとなってました
以下のような記述をhttpd.confに書き加えて、 サーバの再起動をしてみたらどうでしょうか。 SetEnv PATH /opt/local/bin
Apacheはもうオワコン。nginxに乗り換えようぜ。 速いし、設定も簡単。
オワコン? 枯れた技術って事か、いいことだ
623 :
616 :2011/10/30(日) 21:17:31.46
ちなみにmod_wsgiで実行してます
Windowsで2.7.2を使ってます ElementTreeをインポートするのに下記の2つを試したのですがImportErrorが出ます from xml.etree.ElementTree import * from xml.etree import ElementTree どこが間違ってますか?
エラーメッセージは?
下のエラーが出ます Traceback (most recent call last): File "C:\Users\abc\Desktop\test.py", line 1, in <module> from xml.etree.ElementTree import ElementTree File "C:\Users\abc\Desktop\test.py", line 1, in <module> from xml.etree.ElementTree import ElementTree ImportError: No module named etree.ElementTree
>>624 > Note: The WSGIPythonExecutable directive described here has been removed in mod_wsgi version 2.0. The WSGIPythonHome directive should be used instead.
WSGIPythonExecutableはver2.0で削除されたからWSGIPythonHome 使ってねって書いてあると思うのですが
>>627 標準のでないxml.pyがあって、それをインポートしちゃってるんじゃない?
631 :
625 :2011/10/30(日) 23:29:00.20
>>630 sys.pathの場所のどれにも同じ物が無くよくわかりませんでした
C:\Python27に置いて実行したところインポートできたのでとりあえずここで作業します
ありがとうございました
632 :
616 :2011/10/30(日) 23:51:38.95
いろいろやってみた結果諦めます。 apacheをmacportsでインスコしてmod_wsgiをソースコンパイルしたのが 原因だと思います。どうしてもPython2.7使いたかったので。。 macportsのmod_wsgiが今のPython2.6から2.7に対応するまで とりまこのまま行こうと思います。
633 :
614 :2011/10/31(月) 00:03:54.78
> 615 たまたまWebで調べていた際にraw_unicode_escapeを 使用する方法が紹介されていたので、そのまま使ってました。 string_escapeでは TypeError: must be string, not unicode となってしまいコードが流れません。
馬鹿には無理
>>631 モジュールなら、
import xml
print xml.__file__
で邪魔してるファイルがわかる。
>>633 > たまたまWebで調べていた際に
それはこれか?
http://d.hatena.ne.jp/itasuke/20080703/p1 これは、unquoteにunicodeを渡すという特殊な状況であって
あまり関係ないだろ。
とりあえずstrでファイルからURLを読み込んで、
decode('ascii')をかける。
うまくデコードできたらパターン1だから無問題。
もしUnicodeDecodeErrorが発生したら
パターン2か3だ。
decode('utf-8')をすれば大まかに区別できるが、
パターン3は処理不能やで。
637 :
625 :2011/10/31(月) 02:07:22.91
>>635 助かりました、ありがとうございました
ファイルの置いてある場所からも探すんですね、そこのが邪魔してました
繰り返す。 Apacheはクソ。
IISでも使ってろ低能
馬鹿には無理
641 :
614 :2011/10/31(月) 06:54:02.39
>> 636 そのサイトとはまた別の所に書いてありました。 とりあえず、例外処理掛けてdecode("ascii")に失敗した時は ダイレクトでwritelines()するようにしたら所望の結果が得られました。 情報ありがとうございます。
>> と 数字の間に空白が入ってるとアンカーにならない 他者に対して面倒かけるような書き方すんな!
そうそう、日本では人様に迷惑をかけることだけはしてはいけないのですよ。
迷惑と面倒は非なる物ですよ外人さん
pass
角電池
いえーい
with便利だけどなくても困らないね
650 :
デフォルトの名無しさん :2011/10/31(月) 20:52:56.40
Windowsの上でPythonを実行するとコマンドプロンプトみたいな黒い画面が 1瞬だけ出ると思うんですが、あれを長時間表示することってできますか? printとか使うときにあの画面で確認したいんですが
とても基本的なことだし、知らないと不便だから、コマンドプロンプトの使いかたを覚えなさい。
ダブルクリックで実行せずにコマンドプロンプトから実行すればいいじゃん
>>650 1. コマンドプロンプト「から」コマンドで実行する
2. コマンドプロンプトのオプションで自動的に閉じない設定あったような…
ま、コマンドプロンプトの使い方覚えるのを個人的には勧めたいかな
取り敢えず
・cdコマンド
・PATHの通し方
この二つさえ解ればコマンドプロンプトからの実行は出来るかと
ソースコードの最後にinput()と入れとけ
655 :
デフォルトの名無しさん :2011/10/31(月) 22:41:50.84
すみませ、、もう1つお伺いしたいのですが
↓の画像のようなディレクトリの中にprintCurrentDir.pyってファイルがあったとして
http://up3.viploader.net/ippan/src/vlippan242706.jpg そのソースの中に
import os
test = os.getcwd()
print test
input()
としても、C:\Users\testDir\python\printDirが出力されずに
C:\Windows\System32\pythonだったかのディレクトリ(うろ覚え)が返されてしまうのですが
これってどうしてなのでしょうか。
しね
os.path.abspath(os.path.dirname(__file__))
スクリプトのパスとカレントディレクトリの意味を勉強し直してからまた来てね坊や
>>658 >>659 なるほど・・・、カレントディレクトリってのの意味がやっとわかりました。。
プログラミングド素人ですみません。。ありがとうございます。
>>656 再現できなかった。
関連付けの設定をいじってるようなので、
それを元に戻してみたら?
c:\usersはUACの管轄内(うろ覚え)なので
そっちも関係あるかも。
ちなみにコマンドプロンプトで実行する場合は cd C:\Users\testDir\python\printDir python printCurrentDir.pyとかでいいんですかね
その通り エディタの中には現在編集中のファイルのカレントディレクトリで コマンドプロンプトを起動してくれるのがあるから探してみるといいよ
>>662 そのコマンドの意味が分かったら、バッチファイルにすると良い
バッチファイルとは何ぞや?はその時にでもググりなさい
正解: Unixを使う
具体的にはBSD
unix系のコマンドに慣れてるとコマンドプロンプトは不便だな PowerShellは独自機能は知らんが エイリアスでunixコマンドっぽくも使えるようになってるけど \>python test.py < input.txt みたいな標準入力のファイルからのリダイレクトが出来なくて パイプを使って \>cat test.txt | python test.py みたいにするらしい
\> test.py < input.txt ならいけるんじゃなかったかな 関連付けか何かの都合でそうなってた氣が
昔も今も、そこはWindowsでも同様に python test.py < test.txt って書けるよ、まあ TYPE test.txt | python test.py でも間違いとは言えないけれど…(DOS系のTYPEはUnix系のcatに相当) 不便なのは文字コードや " や ^ の解りにくい挙動とか、特殊ファイル名辺り あとターミナルにあたる機能が最低限しかないところも不便だな
>>669 コマンドプロンプトじゃなくてPowerShellの話な
ちょっと気になったんだけど。 コピーを作りたくないほど大きい、tupleや(変更する予定がない)listがあったとして、 iter(ls[a:]), iter(ls[:b]), iter(ls[a:b]), iter(ls[a:b:c])と等価で、 next()の速度がそれらと(ほぼ)同等なイテレータがほしい場合って、どうすりゃいいの? (ls[i] for i in xrange(a, b, c))が最善?
>>672 itertools.islice がそれに近いかも。
通常のスライスと挙動が少し違うけど。
Tkinter の canvas で、ある位置の色を取得したいのですが可能でしょうか? どうすれば取得できるでしょうか?
申し訳ございませんが、tkのcanvasではピクセル単位の操作はできかねます。 代わりに、画像をcanvasにセットし、その画像を操作することでピクセル描画/取得を 実現することもできますが、この方法ではcanvasの描画命令(線分、円、etc.)が 使えなくなります。 上記で希望が満せない場合は、他のGUI Toolkitの使用を検討してください。 今後ともtkを宜しくおねがい致します。
はい、こちらこそ。
sshでパス入力してrootになってテキストファイル編集してコマンド2,3叩いて反応をみるスクリプト組みたいんだけど、python標準ライブラリだけでやるのって大変かな。 対話式コマンドはsubprocessだと難しそうなんだけど。
Paramikoとか使えば
sshで対話するのはparamikoが定番かな
むしろ677が誰なのかと
@staticmethodでデコレートした関数から、もとの関数を取り出す方法を探してます。 class Foo(object): def hello(name): print "hello %s!" % name hello = staticmethod(hello) ## staticmethodを取り出す smethod = Foo.__dict__['hello'] assert type(smethod) == staticmethod この状態で、smethodからもとのhello()関数を取り出す方法はありますか。 dir(smethod) したけど、それらしいのが見つかりませんでした。
686 :
デフォルトの名無しさん :2011/11/02(水) 15:27:56.29
はじめまして。 みんなのPython第3版(日本語)の461ページの26.1相対インポートの構文 を勉強中なんですが、 モジュールサーチパスで指定してあるフォルダの中の パッケージ(__init__.pyあり)の中のモジュールで、 同じパッケージのモジュール(other)をインポートしようとして from . import other とすると エラー(ValueError: Attempted relative import in non-package) となります。なぜだか理由がわかりません。 だれかおしえてください、お願いします。 私の環境は、python(2.5)、eclipse(3.7)、pydev(2.2.1)です。
687 :
デフォルトの名無しさん :2011/11/02(水) 15:49:56.84
686です。 誤り:みんなのPython第3版 正しい:はじめてのPython第3版 でした、すみません。
>>685 単に Foo.hello とすれば元の関数が取得できます。
helloの部分を可変にしたければ、getattr(Foo, "hello") などのように取得してください。
(原理的に言えば、staticmethod の get descriptor が元の関数をそのまま返すようになって
いるからです。これについて知りたい場合は Pythonのクラスタシステムを実現している
descriptor という仕組みを調べてください。)
検証コード
class Foo(object):
def hello(name):
pass
print id(hello)
hello = staticmethod(hello)
print id(Foo.hello)
print id(getattr(Foo, "hello")
689 :
688 :2011/11/02(水) 16:49:19.72
修正: ☓ クラスタシステム ○ クラスシステム 追記: 質問の通りに答えていませんでした。 staticmethodオブジェクトが手元にあり、そこから元の関数をとりだすなら、get descripterを騙して smethod.__get__(0) とでもすれば良いでしゅ (0はダミーオブジェクト)
>>676 windowsでやってみた
from ctypes import *
import Tkinter as Tk
class MyFrame(Tk.Frame):
def __init__(self, parent):
Tk.Frame.__init__(self, parent)
self.c = Tk.Canvas(self, width=320, height=320, relief=Tk.RAISED, bd=2, bg='#99ccff')
self.c.create_rectangle(20, 20, 280, 280, fill='#9966cc', width=2)
self.c.create_line(10, 10, 290, 290)
self.c.create_arc(200, 200, 30, 120)
self.c.pack(side=Tk.LEFT, fill=Tk.BOTH, expand=True)
self.l = Tk.Label(self, text='test', font=('Helvetica', '24', ('bold', )), bg='#ccff99', fg='#6699cc')
self.l.pack(side=Tk.RIGHT, fill=Tk.BOTH, expand=True)
self.pack()
self.c.bind('<Motion>', self.mov)
def mov(self, e):
self.l['text'] = self.getcolor()
def getcolor(self):
hdc = windll.user32.GetDC(0)
c = windll.gdi32.GetPixel(hdc, self.winfo_pointerx(), self.winfo_pointery())
windll.user32.ReleaseDC(0, hdc)
return '%02x, %02x, %02x' % (c & 0x000000ff, (c & 0x0000ff00) >> 8, (c & 0x00ff0000) >> 16)
root = Tk.Tk()
f = MyFrame(root)
root.mainloop()
692 :
688 :2011/11/02(水) 20:09:00.28
クソスプラットフォーム性は失われるけどな
やばい死ぬ
Would you please translate
>>694 to Japanese?
これからPythonのテンプレートエンジンはjinja2を推していきませんか?
神社?
うん。おそらく親日の外人さんが作ってる
とするとPychinkoやもOOoPyも
>>700 どっちかと言うと、そう言うのは日本人の方が作りそう。。。
>>694 否定的ですまんが、こういうのってhidden featuresっていうの?
もっと、公式のドキュメントやリファレンスにも書かれていない内容を期待してたよ。
Cookieモジュールを使ってレスポンスヘッダーにクッキーを追加しようと思ってます。 RFCの仕様を読んでると > Set-Cookie: name1=value1; expires=Sun, 10-Jun-2001 12:00:00 GMT; path=/HTTP/ のようにname1=value1と書いてますが、yahoo.co.jpへアクセスすると > Set-Cookie: Y=v=1&n=co3av5c5h0gvk&l=hcic2tzu/o&p=m2gvvjpb53000200&ig=00cpp&r=ci&lg=ja-JP&intl=jp&np=1; path=/; domain=.yahoo.co.jp みたいにクエリー文字列っぽく「name1=value1」の部分が記述されています。 これは「name1=value1」のように1対1の書式を無視して、このような方法を使用してるんでしょうか?
name1がYで value1がv=1&n=co3av5c5h0gvk&l=hcic2tzu/o&p=m2gvvjpb53000200&ig=00cpp&r=ci&lg=ja-JP&intl=jp&np=1 じゃないだろうか
706 :
704 :2011/11/03(木) 23:25:40.75
一応Googleも調べたんですが、yahooのようなやり方はしてなかったんで、 「1ドメインにつき使用可能クッキー20個まで」の制約に対する節約のためにやってるんでしょうかね。 そういうことにしておこうと思います。 ありがとうございました
Python初心者です。 わからないところがあるので質問させていただきます。 2つのテキストファイルを読み込んでそれぞれを配列にして比較したいのですが for line in text_file: txet_list = line.strip().split() for line in text2_file: txet2_list = line.strip().split() if(txet_list[0] == txet2_list[0]) ・・・・・・ elif(txet_list[10] == txet2_list[10]) ・ ・ ・ 配列の保持ができないため、比較ができないという問題に陥っています。 2つのテキストファイルは両方とも 英単語半角スペース英単語半角スペース英単語半角スペース英単語半角スペース・・・・・ どなたか解決策を教えて頂けないでしょうか? よろしくおねがいします.
>>707 に書き間違えがありました。
正確には
英単語半角スペース英単語半角スペース英単語半角スペース英単語半角スペース・・・・・
英単語半角スペース英単語半角スペース英単語半角スペース英単語半角スペース・・・・・
・
・
・
です。
それじゃtext_listには最後の行の英単語しか入らないよ。 最後に空行があれば空のリストになるし。 txet_list = text_file.read().strip().split() とすれば全部一度に読めると思う。
質問です。 [[,,,,,,,,,,,,,][,,,,,,,,,,,,,][,,,,,,,,,,,,,][,,,,,,,,,,,,,][,,,,,,,,,,,,,]] lists[i][7] 上記のようなリストがあったとしてリストの中のリストは7で固定して,リストのiを0~250まで回すにはどのように書けばいいのでしょうか? わかる方がいらっしゃいましたらよろしくお願いします。 Vは2.7.2です。
どうしたもこうしたのも for i in lists: i[7] じゃねえの
神社はshrineな
genshi も忘れないで下さい。
そういえば tanjin っつーのも聞いたことあるが temjin だったかな
>>712 自分のやり方が悪いのかもしれませんが、できませんでした。
何がいけないのでしょうか?
質問者は酉つけろ
出来ませんでしたって何? 代わりにどういう結果になってしまうとか、どんなエラーが出るとか言ってもらわないと
>>723 ごめんなさい。
範囲外を指定した場合にでるlist index out of rangeというエラーが出ます。
>>723 上のエラーはこちらのミスでした。
申し訳ありません。
for i in lists: i[7]自体を実行してもエラーは出ませんが、そのあとに出力確認のprintをしようとすると
print
^
とでてしまいます。
どうすればよいのでしょうか?
>>723 解決しました。
ありがとうございました。
>>725 例外の型名を書いてもらわないとわからないし、
printステートメントだけでは、出力確認にならないと思うのだが?
自演うぜー
なにがなんだか
テスト
Win32APIを見ると蕁麻疹が起きる。
test/foo_test.py の中から test/helpers.py を読みたいとき、 どうするのがいいですか。 試したの: import helpers # 失敗 from . import helpers # 失敗 python test/foo_test.py でも (cd test; python foo_test.py) でも うまく動くのを希望します。 なおRubyだと require File.join(File.basename(__FILE__), 'helpers.rb') でうまくいくので、Pythonでのやり方を教えて下さい。
同じフォルダなら import helpers でうまくいくはずだけど
if(list1[1:] == list2[1:]): ・・・テキストに書き込む elif(list1[1:] != list2[1:] and ここに何を書けばいいのかわからないです): ・・・テキストに書き込む 一行目では同じ配列の値達をテキストに書き込んでます。 ここはできています。 その上でelifでlist1の配列の値達(既に書き込まれているのは書かない&list2の値達は書かない)をテキストに書き込みたいのですが、 条件は満たしているものの、同じ値達がたくさんファイルに書き込まれてしまう(ループしているため)という問題が発生しています。 この状況を打破するためにelifの()に何を追加すればいいでしょうか? 教えてください、お願いします。
>>733 >require File.join(File.basename(__FILE__), 'helpers.rb')
違った、
require File.join(File.dirname(__FILE__), 'helpers.rb')
でした。
>>734 それは
test/foo_test.py
をモジュールとして読み込んだ場合のことで、
python test/foo_test.py
とした場合にはうまくいかないんじゃないでしょうか。
うまくいくけど
クラスメソッド(@classmethod)と静的メソッド(@staticmethod)の使い道がわかりません。 この2つのメソッドは他の通常のメソッドと比べると何が良いんでしょうか?
>>737 if __name__ == '__main__'
とかあったりする?
__init__.pyの問題とか
リバースエンジニアリング借りれたからやるけどぱっと流し読んだ感じ今後役に立つのかこれ・・・てかんじ
744 :
デフォルトの名無しさん :2011/11/05(土) 21:59:40.05
pyqt4 QLineEditの文字入力を右から左にしたいんですが setAlignmentメソッドの引数に何設定したらいいすか。 self.lineEditBin = QtGui.QLineEdit(self) self.lineEditBin.setAlignment(Qt::Alignment flag)
745 :
デフォルトの名無しさん :2011/11/05(土) 22:13:32.37
自己解決しました。QtCore.Qt.AlignRightでいけました。
やばいwww mod_wsgiにwebobインストールしたらめっちゃカッコイイ感じになったwww 最強すぐるwwww
webobってwerkzeugみたいなもん?。
werkzeugがなんなのか知らん
webobのほうが軽量かな。
python2.7のunittestで提供されている、expectedFailure()の使い道がわかりません。
ttp://docs.python.org/library/unittest.html unittest.expectedFailure()
Mark the test as an expected failure. If the test fails when run, the test is not counted as a failure.
どのような時に使うのでしょうか。
Flaskでアプリケーションを作り、デバッグ用サーバを起動しました。 Firefoxでアクセスすると、ページのロードがとてつもなく遅いのですが何故でしょうか。 Chrome, IE8では瞬時にロードされます。
752 :
751 :2011/11/06(日) 07:28:28.86
FirefoxのIPv6を無効化したら、とりあえず問題は起きなくなりました... 原因は不明ですが。
今日はvirtualenvとwerkzeugインストールしてみるwwwww
ヤバイwww 本命はwebobじゃなくてwerkzeugだったっぽいwwwww Pythonでwebアプリ作る環境はmod_wsgiとwerkzeug(読み方不明)のタッグが最高っぽいwww
>>755 werkzeug(ウァークツォイグ) == ドイツ語で「道具」の意。
どうせならFlaskも試せば?
>>756 Pythonでセッション管理する簡単なツールを探るのがそもそもの目的だったんだけど
Flaskってwerkzeugとjinja2をまとめただけでしよ?ならチェックしなくていいかな
って思ってる
これからwebapp2をいじってみる
Battery Inserted
>>689 >追記:
>質問の通りに答えていませんでした。
>staticmethodオブジェクトが手元にあり、そこから元の関数をとりだすなら、get descripterを騙して
>smethod.__get__(0) とでもすれば良いでしゅ (0はダミーオブジェクト)
遅れましたが、これでいけました。ありがとうございましゅ。
やばいwww webapp2よくわかんないwww GoogleAppEngine無しでも使えるとか書いてあるのに使えないwwww webapp2どうやって使ったらいいかわかんないwww
762 :
デフォルトの名無しさん :2011/11/06(日) 15:27:31.72
PyScripterにブレークポイント貼っても止まらないや・・・
Pythonで日曜プログラミングを初めて半年になるけど、気に入ったぞこれ。 endや閉じ括弧が不要って、行がかさばらなくていいね。
まあ他言語でもLispみたいに閉じ括弧を文末に書いちゃえば行はかさ張らないけどね でも大半の言語では読みにくいと言われるだろうなw
767 :
762 :2011/11/06(日) 16:16:42.69
PyScripterってデバッグ実行しないとブレークしないのね・・・。 スクリプト実行すんのに通常実行とデバッグ実行の区別とか・・・。
馬鹿には無理
python -c "print(__debug__)" python -O -c "print(__debug__)"
ctypes気に入った これでC言語にはおさらばだぜ
最近の若いやつは6P電池の存在を知らないから困る。
6P電池とはなんすか先輩
なめると電気の味がする
6P型電池って角電池のことだろ。 端子の上にシャープペンの芯を置くと発火して楽しかったな。
006P同士向かい合わせで結合するんじゃないのか
リストにstr型の文字と数字が入ってたとして、数字に変換できるstr型がきたら 処理をしたいのですがどういう風に書けばいいでしょうか? 自分は if(中身): 処理 と書きたいのですが中身が思いつきません。 どなたかわかる方が居たらお願いします。
try: d = int(s) except ValueError: 整数に変換できないときの処理 else: 整数に変換できたときの処理
>>776 if str.isdigit(): # 10進文字列確認. strはstr型.
if str.isxdigit(): # 16進文字列確認.
ザウァークラウト
>>778 -123
とか
1.23
とかだと失敗するんですが
eval(s) なんてやるなよ! 絶対だぞ!
>>765 その通りだった!
相対importがぜんぜんうまくいかなくて困ってたんだ。
touch __init__.py したらうまくいった。超感謝。
ズコー
初心者スレもう一度作った方が良さそうな勢いだな
>>750 仕様変更とかで失敗することが分かっているが失敗しても問題無いテストにつけておくんじゃないの?
他のテストの失敗が埋れないように。
報告乙
3.xの日本語ドキュメントがなかなか出ないせいで、英語版読むのに慣れちゃったよ、 「せいで」というよりも、「おかげさまで」なんだけどね・・・
というかmatplotlibとかのライブラリのドキュメントとか全部英語だし 英語読めないと結局出来ないこと多いじゃん
日本語の方がわかりやすいとは限らない
リファレンスの[]の意味がよくわかりません。 たとえば int([x[, base]])の[]はどういう意味なのでしょうか
省略可能ってこと >>> int(), int(12.3), int("4"), int("1011", 2) (0, 12, 4, 11)
>>794 引数baseは付けても、付けなくてもいい
>>> int('10')
10
>>> int('10', 10)
10
>>> int('10', 16)
16
798 :
デフォルトの名無しさん :2011/11/09(水) 17:56:32.11
Windowsでも [] 表記するコマンドはあるよ
マニュアルに [] 書くのは unix かそれ以前からある Windows というか MSDOS とかはそれの真似
OSというよりは、コマンドラインや プログラミングに慣れてるかどうかだと思うかな Windows使いでもコマンドプロンプト使ってたらよく見る表記だし 他の言語のマニュアルでもよく見る表記
起源は BNF 記法あたりだと思うが。
3.xの日本語ドキュメントより2.7をやって欲しいわ 2.6と2.7の新機能のとこを最初にやって、 後は適当に好きなとこから翻訳してくれ
結論: 英語読め
マやっているかぎり、英語読むか、土方に甘んじるか、これしか選択肢がありませんね。 まぁ英語は、脱土方の必要条件であり、十分条件じゃないけど・・・ 職業マじゃなければ・・・日本語リソーソの範囲だけで満足できる?
pythonって、unittestで書いたテストクラスってどこに置くのが一般的ですか? base/mainにソースがある場合、base/testに置いてPYTHONPASSに両方加える? PYTHONPASSって動的に変えるべき?
>>805 趣味でやってる方が興味本位で面白そうなところに首を突っ込むので
英語の資料に当たる確率は高いかと。
google翻訳先生に頼りまくり。
>>806 ソースコードのルートが src/ だとする。
src/tests/ にテストを置いて、空の src/tests/__init__.py も置いておく。
こうすると unittest (もしくはunittest2) のディスカバリ機能が使えて、
$ python -m unittest discovery
で全てのテストスクリプトが実行される。
エラーぐらい書けゴミクズ
事故解決できました ありがとうございました
職業マってなんぞ?
職業プログラマ
え?プログラマ以外に何があんのよ
Python3の日本語出力って、どうすればいいの? # -*- coding: utf-8 -*- print("はろー") というコードを書いて $ python -V Python 3.2.1 $ python foo.py Traceback (most recent call last): File "foo.py", line 2, in <module> print("¥u306f¥u308d¥u30fc") UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128) $ LANG=ja_JP.UTF8 python foo.py # 同じエラー $ LANG=ja_JP.UTF-8 python foo.py # 同じエラー $ LANG=ja_JP.utf8 python foo.py # 同じエラー $ LANG=ja_JP.utf-8 python foo.py # 同じエラー まさか、ハローワールドで引っかかるとは思わなかった。 で、どうすればいいの? ぐぐったところでは、環境変数$LANGの設定でいけるとあるんだけど。
ズコー
817 :
デフォルトの名無しさん :2011/11/10(木) 21:29:41.35
setdefaultencoding 禁止
818 :
デフォルトの名無しさん :2011/11/10(木) 21:47:28.46
2.5 で urllib2 を使っているのですが User-Agent の変更の仕方が判りません 女子高生に教えるつもりでやさしく教えてください
# -*- coding: utf-8 -*- print(b"はろー")
事故解決できました ありがとうございました
馬鹿には無理
# -*- coding: utf-8 -*- print("はろー".encode(encoding='urf-8'))
おいプログラマー以外になにがあるんだよ
PYTHONIOENCODING=utf8
>>819 やってみたけどだめだった。
$ py foo.py
File "foo.py", line 2
print(b"¥u306f¥u308d¥u30fc")
^
SyntaxError: bytes can only contain ASCII literal characters.
>>823 >print("はろー".encode(encoding='urf-8'))
LookupError: unknown encoding: urf-8
だと思ったら、utf-8がurf-8になってたのね。utf-8に修正して実行したら
$ py foo.py
b'¥xe3¥x81¥xaf¥xe3¥x82¥x8d¥xe3¥x83¥xbc'
だめじゃん
おい、ほんとどうやったらいいんだよ。
ぐぐってもろくな情報でてこないし、Python3やめたほうがいいのか?
print(str("はろー".encode(encoding='utf-8')))
829 :
デフォルトの名無しさん :2011/11/10(木) 23:16:07.73
馬鹿には無理
830 :
デフォルトの名無しさん :2011/11/10(木) 23:17:26.54
Ruby って Windows に冷たいよね
immunity debuggerのimmlibモジュールのインポートを試みた際debuggerモジュールがねえよと怒られます debugger.pyでググったところvimのpluginどうのが引っかかったんですがよくわからんのですがどうすればいいでしゅか
事故解決できました ありがとうございました
>>827 >print(str("はろー".encode(encoding='utf-8')))
結果は>823と同じだった。
$ py foo.py
b'¥xe3¥x81¥xaf¥xe3¥x82¥x8d¥xe3¥x83¥xbc'
>>828 そうだな、おれには828を相手にするのは無理みたいだ
>>830 そこにさ、環境変数$LANGを設定すればいいってかいてあるじゃん、
だから>815でやったように、$LANGをいろいろ設定したんだけど、だめだった。
日本語を表示できない端末なんじゃね
>>815 sys.stdout.encodingが何になってるか見たいが、
面倒くさいので、これで動くや炉
import sys
import codecs
sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer)
print('日本語')
馬鹿には無理
>>818 2.5で動かしてないけど
import urllib2
print urllib2.urlopen(urllib2.Request('
http://www.example.com/ ', headers = {'User-Agent' : 'foo'})).read()
>>834 ちなみにlocale -aとlocaleは?
>>836 >sys.stdout.encodingが何になってるか見たいが、
US-ASCII
まあエラーメッセージに書いてあるわな
>import sys
>import codecs
>sys.stdout = codecs.getwriter('utf-8')(sys.stdout.buffer)
>print('日本語')
これでうまくいきました!
でもこんなこと、みんなやってますか?
日本語表示するだけなのに、ややこしい。
しかもsys.stdoutを入れ替えるなんて。
これってsys.setdefaultencodingなみにまずいような気がします。
sys.setdefaultencodingがだめでsys.stdoutの書き換えはだめじゃないなら、理由が知りたい。
やってないよ % cat foo.py print("はろー") % python foo.py はろー
Python3 を端末上で実行すると、 print(...) 関数は unicode文字列を sys.stdout.encoding にエンコードして印字するから、 sys.stdout.encoding が US-ASCII になってるのはマズイよ。 LANG とか LC_* がおかしいのか、他に原因があるのか。
localeの取得に失敗するとfallbackでUS-ASCIIになるんじゃないかなあと推測 % LANG=ja_JP.HOGE python foo.py Traceback (most recent call last): File "foo.py", line 1, in <module> print("\u306f\u308d\u30fc") UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
$ set LANG=en_US.UTF-8 $ set LANGUAGE=en_US.UTF-8 $ set LC_ALL=en_US.UTF-8 $ set LC_CTYPE=en_US.UTF-8 $ set LC_MESSAGES=en_US.UTF-8 $ set LC_TIME=en_US.UTF-8 $ set LC_MONETARY=en_US.UTF-8 $ set LC_COLLATE=en_US.UTF-8 $ set LC_NUMERIC=en_US.UTF-8 $ python foo.py
>>808 ありがとうございます。
と言うことは、srcの中にsubというフォルダを更に切る時は
src/ メインのソースを置く
src/sub/ サブ階層のソースを置く
src/test/ メインのテストを置く
src/sub/test/ サブ階層のテストを置く
でしょうか?
テスト階層を取り除いたソースだけをパッケージングする機能もあったりするんですか?
discovery機能は便利そうなので早速使ってみます。
ありがとうございます!
>>845 ディスカバリを使うならどう置いてもいいよ。ディレクトリの切り方とか名前に決まりはない。
aaa.py と test_aaa.py を同じディレクトリに入れてもいいし、importの記述さえ正しければ、無茶苦茶な配置にしても動く。
ただしディスカバリは、ディスカバリを起動した場所からパッケージとして認識されるディレクトリのみを
再帰的に読み込むので、配下のディレクトリすべてに __init__.py を入れるのをお忘れなく。
ちなみにディスカバリを使うときは、テストスクリプトのファイル名を test***.py という
形式にする必要があるので注意(設定で変更可)。
パッケージングに関しては知らないけど、distutils (setup.py) でテストを除外するようにうまく設定できるはず。
角電池
>>846 ありがとうございます。
pythonを始めたばかりで、
とりあえずテストが動いては居るんですが
テスト以外だけを取り出しやすい楊に作っておきたいというのが目的です。
setup.pyとかの使い道は全くわかっていないので、ゆっくり勉強していきたいです。
Java知らないけどこういう印象 ↓ reader = new TextReader(new BufferedIOStream(new FileStream(new File("hoge.txt", File.READ)), new UTF8Decoder()))
2.x だと stdout が file で、出力をリダイレクトしたときに ascii codec に なるという訳のわからない仕様になっているため、Unicode の出力をエラーに しないために sys.stdout への代入は必須。その点は 3.x では問題なくなったはず。
21世紀にもなって、未だにマルチバイトにいちいち気を遣わねば ならない現状を見ると、つくづくB-TRONがつぶされたのが悔やまれる
>>851 そのかわり3.xはstdioにバイナリ流そうと思うと面倒くさくなる仕様。
>>852 つぶされた?誰に?
画像処理関係で、Pythonのおすすめモジュール教えてくだしあ
俺も知りたい とりあえずopencv使ってるけど
未だにTRONに幻想を抱いてる奴がいるのか。ネトウヨだけだと思ってた。 プロジェクトXとかいうクソ番組の功罪は大きいな。
それは入門記事で、リファレンスじゃないじゃん。
すみません。 これからPythonの勉強を始める者です(今までは、C、Java、C#などを経験してきました)。 3点ほど質問させてください。 1. これからPythonを学ぶ場合、2系と3系のどちらが良いでしょうか? 2. Webで学ぶ場合お勧めのページはどれでしょうか? お金をかけたくないので、極力Webの情報だけで一通り勉強できればと思っています。 また、最終的な目標はゲーム製作です。 よろしくお願いいたします。
1) 実際に使えるプログラムを書くつもりなら 2.x しかない。 2) C# とかをやってきた人なら、言語そのものについてはいきなりリファレンスで いいんじゃない?俺は何も知らないうちにいきなり Python の仕事を回されて、 学習書なんて読む余裕なかったが何とかなった。 3点とあるのに 2つしか質問がないとはこれいかに。
これを思い出した。 >世の中には3種類の人間が居る >数を数えられる奴と数えられない奴だ
>>859 1) 自分は3.x系から勉強することを勧める。
3.xの方が、バッドノウハウが排除された、素性の良いPythonになっているので、
基礎固めには向いている。
3.xで基礎を覚えて、未対応ライブラリが必要になったら2.7に戻った方がいい。
(2.6以前は、3.x互換機能の多くが使えないので薦めない。)
それに、用途によっては、けっこう3.xだけでもできるようになった。
2)チュートリアルとリファレンスマニュアル。
Pythonの公式チュートリアルは、金払って入門本を買う奴が不思議に見えるくらい秀逸。
メインのPythonは2.7.2 python3としてサブにPython 3.2.2
>>860 >>861 >>862 >>864 情報ありがとうでござる
公式チュートリアル確認しましたが、確かに充実してるでござるね
おまけに、日本語なのが助かるでござる
とりあえず、2系から始めるでござる(自分はバッドノウハウも含めて言語学ぶのが好きなので)
論理学者J.S.ミルの『論理学大系』の「実験的調査の4つの方法」の章で、 実際は5つの方法を紹介している。 つまりこのような数え方は高度に論理的な手法といえる。
言語を学ぶな、アルゴリズムを学べ。と、ばっちゃが言ってた。
どんなアルゴリズム学べばいいの?(´・ω・`)
一歩進んで前ならえ
数学的帰納法のことなら確かにやっといたほうがいいと思う
>>『コンピュータプログラミングの概念・技法・モデル』 (コンピュータプログラミングのがいねん・ぎほう・モデル、 CTM、CTMCP、英: Concepts, Techniques, and Models of Computer Programming) は、一般的なコンピュータ プログラミングの概念について説明した教科書であり、ピーター・ヴァン・ロイとセイフ・ハリディにより著された。 日本語訳の訳者は羽永洋である。 この教科書の略称はCTMもしくはCTMCPである。
素直に専門学校か工科系大学に行って学べばいいのに
あ、教えてる専門学校あるのかは知らないけど
負の掛け算でつまずいたままの俺でも出来てるんだから問題ない。
test
>>875 二進数の負の掛け算のことですねわかります
少なくともお前の生きてる間は 2.x は残るよ COBOL のように
画像を透明度で指定して描画する関数ないでしょうか? 透過色を指定して描画する、という意味ではないです。 透明度です。
>>859 ぶっちゃけ、ゲーム製作が目標なら、PythonよりC#を続けた方がいいと思う。
>>880 transparent_draw('hoge.bmp', 0.5)
でいける。
C# + IronPython
884 :
デフォルトの名無しさん :2011/11/12(土) 18:02:24.61
>>859 ctypes で DirectShow / DirectX 使うプログラム書いた
意外と手軽にゲーム創り楽しめる
885 :
デフォルトの名無しさん :2011/11/12(土) 18:04:51.28
887 :
デフォルトの名無しさん :2011/11/12(土) 18:11:03.07
せっかくPythonのスレなんだからPythonの話しようよ
つまりゲームの話はやめろと
Python でゲームならいいんじゃまいか
ordってなんですか?
893 :
デフォルトの名無しさん :2011/11/12(土) 18:42:28.76
ゲームとかはまずpythonでなるべく疎結合な設計で作っておいて ctypesとかswigとかBoostPythonとかCythonで高速化の必要な部分だけ C/C++に置き換えるのがアリです 圧倒的生産性と上々のパフォーマンスが期待できるっす
896 :
892 :2011/11/12(土) 18:49:53.36
>>894 ord('A') => 65(文字をコード番号に変換する)
ord(u"あ") => 12354
chr(65) => 'A'(コード番号を文字に変換する)
897 :
892 :2011/11/12(土) 18:53:05.90
('o') ('A') (^ν^)
>>890 へー
Pyglet が流行ってるのか
初めてこのスレが役にたった
>>896 uchr(12354)=> u'あ'(コード番号を文字に変換する)
間違えた orz unichr(12354)=> u'あ'(コード番号を文字に変換する)
つまり、ordとunichrは同じものってこと?
あ、違うchrとunichrって何が違うの
ord(12354) ってやってみればわかる
間違えた orz chr(12354) ってやってみればわかる
投稿するまえに深呼吸しなさい。
あと type(chr(41)) type(unichr(12354))
おまいら間違い過ぎ()
ググれ、というかリファレンス読め。
ヨッシャ
連投支援
try: ( 'A `) (⊃⌒*⌒⊂).insert(u"角電池") /__ノωヽ__) except:
富士山をかかえこむダイダラボッチのAAを貼るのはやめろ
AAなんか一括あぼーんしとけ
pythonの毒にやられた
まったく参考にならないとして定評のあるPythonスレ。今日も平常運行。
モンティ・パイソン来日
_init_って何のために使うの?
__init__のこと? 初期値の設定や各種の初期化 また引数として受け取った値を保存したりにも使う
コンストラクタと言ってる人もいるしコンストラクタじゃないって言ってる人もいる
俺は後者だが、用途として他言語の自作コンストラクタとかなりの部分で被るのは間違いないと思う
昨日からはじめてのPython読んで勉強してるが他の言語と言葉がずいぶん違うから中々頭に入ってこない まだ5章…
その「他の言語」って何のこと? 色んな言語やってると、割と普通の表現が多いように思えるよ
len(str)だけは意表を突かれた単純でよく使う機能なのに全然見つけられなかった str.len()とかstr.length()とかを探してた あとstr以外にunicodeっていうクラスがあるのも暫く気付かなかったわ
初めてのPythonの索引ざっと見てみたけど タプル、スライス、辞書、リスト内包 この辺は人によってはなんぞそれって思うかもしれない
>>923 >あとstr以外にunicodeっていうクラスがあるのも暫く気付かなかったわ
勝手に相互変換するからな
毛唐のドキュメントとかソースばかり読んでると確かに気付かない
str.__len__()
>>924 う~ん、どれも他の言語で聞く表現だわw
他の言語と言葉が違うっていうと、「リスト」も微妙だと思う。
リストは割と普通じゃね? リストの内部構造だって言語によってまちまちだし
リストというより配列だよね メモリ上はどうなってんのか知らんけど
メモリ上は確か配列だったような
dequeでしょ、さすがに。。。
>>> a = [1, 2, 5] >>> a[2:2] = [3, 4] >>> a [1, 2, 3, 4, 5] こうやってみると配列というよりリストだよな
これだと >>> a = [1, 2, 5] >>> a[2] = [3, 4] >>> a [1, 2, [3, 4]] こうなるのか
listをクリアするのは lst[:] = [] でOK? dict.clear()はあるのにlist.clear()はない不思議
lst = []でいいじゃないか、と思ったけど だったらd.clearでなくd = {}でもいい気がする
>>936 意味が違う。
既存のリストを空にするか、新しい空リストに参照を付け替えるかの違い。
同じリストを参照する変数が別にあった場合、前者はそっちも空になるが、
後者は変わらない。
>>937 なるほど、他の変数に参照されてる場合にまで頭が回ってなかった
どうもありがとう
逆引きサンプル集サイトってありませんか? 「○○したい」→「こう書く」みたいな
>>940 これいいですね
ここから勉強していきたいと思います
とりあえずPython3.2.2を入れてきます
>>937 >>> a = [1,2,3]
>>> b = a
>>> a[:] = []
>>> b
[]
>>> a = [1,2,3]
>>> b = a
>>> a = []
>>> b
[1, 2, 3]
よくわかりました
del の方が少しだけ早いぞう >>> timeit(setup='a=range(1000)', number=3000000, stmt='a[:]=[]') 0.2750417562387426 >>> timeit(setup='a=range(1000)', number=3000000, stmt='del a[:]') 0.18659495853577823
timeitなんてコマンドがあるんだね 勉強になった
質問です。 関数に定義されているパラメタの数を取得する方法を教えてください
可変長のときはどうすんの
>>946 とりあえず def 文に定義されている情報が知りたいです
引き続きググってたら、inspect でできるらしいことを知った。 数を取得したいなら、下記方法でいいのかな? len(inspect.getargspec(xxx).args)
いいのかな?
使ってみた。 >>> import inspect >>> def hoge(a, b, c): ... return a + b + c ... >>> hoge(1, 2, 3) 6 >>> inspect.getargspec(hoge) ArgSpec(args=['a', 'b', 'c'], varargs=None, keywords=None, defaults=None)
def hoge(a, b, c, *d, **e): のときもやってみて
>>> def hoge(a, b=1, c=None, *d, **e): ... return 'hoge' ... >>> inspect.getargspec(hoge) (['a', 'b', 'c'], 'd', 'e', (1, None)) >>> def hoge(a=99, b=1, c=None, *d, **e): ... return 'hoge' ... >>> inspect.getargspec(hoge) (['a', 'b', 'c'], 'd', 'e', (99, 1, None)) default は右詰なんだぬ
helpでドキュメンテーション文字列見ないとどうせ使えないでしょ
ipython使ってるときは print(hoge.__doc__) で使い方調べてるわ
help(hoge)でいいじゃん
>>954 ipythonなら hoge? で help(hoge) の表示が出るよ
知らなかったよー サンクス
Python 2.7(Windows) >>> help(help) Help on _Helper in module site object: class _Helper(__builtin__.object) | Define the builtin 'help'. | This is a wrapper around pydoc.help (with a twist). | | Methods defined here: | | __call__(self, *args, **kwds) | | __repr__(self) | | ---------------------------------------------------------------------- | Data descriptors defined here: | | __dict__ | dictionary for instance variables (if defined) | | __weakref__ | list of weak references to the object (if defined)
先輩方に質問させてください RubyではなくなぜPythonを選んだのですか?
関数がオブジェクトだったから
Ruby の community が so strange だったから
006Pが気に入ったから
rubyがWindowsに冷たかったから
GoogleでRubyが使えなかったから。
元々Ruby(とRailsも少し)使ってたんだけどGAEがきっかけでPythonもやってみようと思った GAEは糞だったんでさっさと辞めたけどPythonだけは便利なのでずっと使ってる
Pythonの改行で{}って仕様ってどうなの ネットにある他人のソースコピーしてきたときとかに 全部左寄せになったりしてウザいんだけど
改行じゃないやインデント
アンチスレに親切な人が居たのでそれ以来 Python ファンになった。
971 :
デフォルトの名無しさん :2011/11/13(日) 22:08:38.67
windowsのpyscripterでの質問です。 pygameでウィンドウを表示すると、ウィンドウが応答なしになってしまい 強制終了しかできなくなります。 外部実行だと上手くいくんですが・・・。 リモートとの相性でしょうか? 解決法をご存知の方! 教えてくださいorz
馬鹿には無理
pyscripterは糞
馬鹿には無理
わかるひとだけレスしてください
>>971 うちのpyscripterだとpygameのウィンドウが出て
×で閉じるところまでは動くが閉じた直後に
pyscripterがアプリケーションエラーで落ちる
強制終了しなくても終了されてる
梅益代
>>975 うちでもこの間起動しただけで応答なしになったけど
しばらくそのまま放置してたら動き出したよ。
起動時に更新チェック入るから、その辺の不具合かなーと思っている。
pygletインストールしてみたけど ただのサンプル実行してもなぜかエラーが出る pyglet.gl.ContextException: Unable to share contexts なんで?
馬鹿には無理
>>983 set PYGLET_SHADOW_WINDOW=0
できました ありがとうございました
自分でクラス等を作ったとき、__doc__に書いておけば、 のちに、そのクラスをテキストエディタで参照するときに、 ガイド表示させることができるのか。このスレ役に立つでござるお
PyScripterは不評みたいだけど みんなエディタとかIDEとか何つかってんの?
Vim on tmux
GTKは糞
馬鹿には無理
┌─┐ │●│ └─┤ _ ∩ ( ゚∀゚)彡 ┌─┬⊂彡 │●│ おっぱい!おっぱい! └─┘
栓
1001 :
1001 :
Over 1000 Thread このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。