[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 2chのread.cgiへ]
Update time : 05/09 22:14 / Filesize : 131 KB / Number-of Response : 577
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

Pythonのお勉強 Part 26



1 名前:デフォルトの名無しさん [2008/04/29(火) 23:47:08 ]
Python オフィシャルサイト
ttp://www.python.org/
ttp://www.python.org/doc/
日本Pythonユーザ会
ttp://www.python.jp/Zope/
ttp://www.python.jp/doc/
FrontPage - Pythonのお勉強
ttp://python.rdy.jp/
前スレ
pc11.2ch.net/test/read.cgi/tech/1206876081/
◆関連スレッド
Microsoft IronPython 1.0
pc11.2ch.net/test/read.cgi/tech/1157686822/
Python の宿題ここで答えます Part 1
pc11.2ch.net/test/read.cgi/tech/1153585095/
Python Challengeをやろう!
pc11.2ch.net/test/read.cgi/tech/1175919288/
Pythonについて(アンチ専用)
pc11.2ch.net/test/read.cgi/tech/1203557046/
Pythonに見られるインデントによる制御構造の是非
pc11.2ch.net/test/read.cgi/tech/1169473442/
pythonがこの先生きのこるには
pc11.2ch.net/test/read.cgi/tech/1167996371/
Eclipse統合M24【Java/C/PHP/Ruby/Python/Perl】(PyDev)
pc11.2ch.net/test/read.cgi/tech/1200918324/
【Perl,PHP】LLバトルロワイヤル2【Ruby,Python】
pc11.2ch.net/test/read.cgi/tech/1209289408/
デザパタ + Python/Ruby/Smalltalk part2
pc11.2ch.net/test/read.cgi/tech/1175959706/
2ch検索: [python]
find.2ch.net/?BBS=ALL&TYPE=TITLE&STR=python

331 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 11:14:13 ]
WindowsならCtrl+ZのあとにEnter
でも最初の表示どおりhelp→help()→quit→quit()と入力していってほしいかも。

332 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 11:49:46 ]
>>328,329
PEP 7 -- Style Guide for C Code
www.python.org/dev/peps/pep-0007/

333 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 14:47:26 ]
>>321 >>327 >>331
ありがとうございます

Windows で python -m CGIHTTPServer を実行しています

Ctrl + C
Ctrl + D
Ctrl + Z

どれもダメだったのでタスクマネージャーから殺したら終了出来ました

あとでわかったのですが、
Ctrl + C
を押したあとにブラウザの更新ボタンで再度リクエスト投げると
Keyboard Interrupt
が出て終了するようです
Windows だから select で監視出来ていないということでしょうか?


334 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 15:22:22 ]
単純にaccept()がブロックしてるだけでしょ
try節で囲むかtelnet localhost 80とかやってから落とせばいい

335 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 15:44:26 ]
>>333
普通のCGIがやりたいの?
ApacheでCGIがやりたいの?
320を読む限りではGoogle App Engineとかそういうのが近いのかな?
GAEはお勧めしないけど。

336 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 19:40:24 ]
>>335
320ですが320は322しか書き込みしていません・・・
私とはしたいことが異なるのではないかと思います

あと、質問してもよろしいでしょうか
じつはまだサーバ上でファイルを実行できていないんですが、そのことについて・・・

CGIHTTPServer.pyを起動させて
htdocsフォルダを作って
まだpythonのスクリプトが書けないので既存のスクリプトファイル
python.rdy.jp/wiki.cgi?page=PythonAvailableServersのcheck.cgiとexplore.cgi)を
localhost:8000/htdocs/
に入れて表示させてみたのですが
ieだとそのまま中身のテキストが表示され
firefoxだとcgiファイルのダウンロードが始まってしまいます
拡張子をpyに変えてみたらie、firefoxともそのまま中身のテキストが表示されます

cgi-binフォルダを作って
同様に既存のスクリプトファイルを
localhost:8000/cgi-bin/
に入れて表示させてみたら
拡張子がcgiだと
ie、firefoxともに
> Error response
> Error code 403.
> Message: CGI script is not executable ('/cgi-bin/check.cgi').
> Error code explanation: 403 = Request forbidden -- authorization will not help.
と表示されます
拡張子をpyに変えてみたら
ie、firefoxともに真っ白な画面が表示されます

うまく実行させるにはどうすればいいのでしょうか・・・

337 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 20:05:18 ]
それsh辺りのスクリプトだからwinじゃ動かないよ
.pyに変えたらコマンドプロンプトにエラーメッセージが表示されてるからよく嫁
とにかくエラーメッセージはきちんと嫁

338 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 20:05:43 ]
Apacheの場合、デフォルトで
* htdocsにはHTMLおよび画像ファイル
* cgi-binにはCGIスクリプト
と分けて設置しなければいけない。
CGIHTTPServerでも似たようなものだと思う

> Message: CGI script is not executable ('/cgi-bin/check.cgi').
とりわけ使ってるのがLinuxなら
CGIスクリプトの一行目にshebang入れてchmod +xしなきゃだめ
WindowsだとWebサーバにもよるけどshebangは必要かも

339 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 20:08:17 ]
ああほんとだ。見てなかった >sh辺りのスクリプト
explore.cgiはPythonで書かれてるから動くんじゃないかな



340 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 20:13:03 ]
>>336
htdocs フォルダが My Documents みたいにスペースの入ったフォルダの配下にない?

341 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 20:16:50 ]
>>337-340
336です
親切にどうもありがとうございますm(_ _)m
ただ話の内容が難しくて理解が追いついていません・・・

windows上で使っています
いつかはレンタルサーバを借りて動かしたいと思っているのですが
windowsとlinuxでスクリプトの書き方(?)が異なるのでしょうか・・・

コマンドプロンプトにメッセージが表示されるんですね
読んでみます
テスト用に選んだスクリプトも選択ミスだったんですね
パスにスペースは入っていません
ピリオドと数字は入っています

エラーメッセージをよく読みます

342 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 20:35:42 ]
実際に試してきた

1. c:\cgi-bin\ に env.py を置く
import os
print 'Content-type: text/plain\n\n'
for key in os.environ:
  print '%s: %s' % (key, os.environ[key])
2. cd c:\ して python -m CGIHTTPServer する
3. ブラウザで localhost:8000/cgi-bin/env.py にアクセス
 環境変数がずらっと表示されたら成功

Windowsの場合、shebang も chmod +x も必要ないが
拡張子は .py にしないと動かないみたい

あと My Documents みたいなフォルダの配下だとこけるのは
>>340が指摘してくれている通り

343 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 21:01:56 ]
>>342
336です
env.pyはうまく動きました!と思います
45行ほどの文字列が表示されました

explore.pyもうまく表示されました
表データが表示されました

cgi-binに拡張子をpyにして入れるんですね

初歩的なことに付き合っていただき
みなさん
ありがとうございますm(_ _)m

344 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 21:10:10 ]
めずらしくpythonのお勉強なんかやってるやつがいるな


345 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 21:34:07 ]
まだpythonにたどり着いてない気が…


346 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 21:44:28 ]
c:\ に置かせようとするセンスが理解出来ん

347 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 21:50:30 ]
センスっつーより悪意を感じる

348 名前:デフォルトの名無しさん mailto:sage [2008/05/17(土) 22:13:52 ]
拡張子がcgiでも関連付けでpythonを起動してやるようにすれば動くかもしれない。
実行可能ならbatなんかでもCGIとして動作するみたいだから。

349 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 16:39:43 ]
こんにちは。いつも参考にさせていただいております。
さて、早速なのですがPythonでテキストファイルへの書き込みは出来るのですが追加の書き込みの方法がわかりません。
一度内容を読み込んで結合してから書き込んでもよいのですがあまりスマートとは思えませんでしたのでここに投稿した次第です。
方法をご教授いただければ幸いです。




350 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 16:42:06 ]
open(path, 'a')

351 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 16:48:57 ]
レスありがとうございます。解決いたしました。

352 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 20:59:01 ]
下記をCGIとして動かしてみたところ、何も表示されません。
# -*- coding: utf-8 -*-
import os
import cgi
import cgitb; cgitb.enable()

print "Content-Type: text/plain\n\n"

form = cgi.FieldStorage()
if not (form.has_key("name") and form.has_key("addr")):
print "<H1>Error</H1>"
print "Please fill in the name and addr fields."
return
print "<p>name:", form["name"].value
print "<p>addr:", form["addr"].value


以下は動作するのでバーミッションの設定ではないと思います。
# -*- coding: utf-8 -*-
import os
import cgi
import cgitb; cgitb.enable()

print "Content-Type: text/plain\n\n"
print "hoge"


解決策など示していただければ幸いです。

353 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:06:40 ]
returnが関数外じゃない?

354 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:18:28 ]
すいません。インデントが外れていたので
codepad.org/r6g67n1j
codepad.org/vUcQXO9g

355 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:30:37 ]
return→sys.exit()に

356 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:33:21 ]
いや、だから>>353
が言っているように、関数内じゃないのに
returnがあるのがおかしいんじゃないの

# -*- coding: utf-8 -*-
import os
import cgi
import cgitb; cgitb.enable()

def main():
print "Content-Type: text/html; charset=UTF-8\n\n"
form = cgi.FieldStorage()
if not (form.has_key("name") and form.has_key("addr")):
print "<H1>Error</H1>"
print "Please fill in the name and addr fields."
return
print "<p>name:", form["name"].value
print "<p>addr:", form["addr"].value

if __name__ == '__main__':
main()

357 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:34:44 ]
apacheならerror_log(error.log)に出なかったっけ

358 名前:デフォルトの名無しさん mailto:sage [2008/05/19(月) 21:38:05 ]
pychecker, pylintあたりで文法チェックしといた方がいいかもね

359 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 06:24:41 ]
>>355でFAもいいところなわけだが



360 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 13:59:12 ]
codepad.org/AkQK38ei

関数の引数って参照渡しなの?
Traclight/plugins/themaengine/api.py

あとTracってAPacheがないと動かせないですか?
PythonをUSBメモリに入れて持ち運びたい(できればtracも持ち運びたひ…)


361 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 14:50:11 ]
>>360
>関数の引数って参照渡しなの?

そうだよ。入門書嫁。

362 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 14:54:54 ]
どんな入門書だよ

363 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 14:55:42 ]
>>360
いっちゃうと代入も何もかもぜんぶ参照渡しです。
だから逆に参照渡しという概念がでてこない。

TracはFastCGIやWSGIでも動作するからApacheじゃなくてもいい。
lightyなんかいいとおもう。
あとWindows版Pythonならパスが変わっても動作するはず。

364 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:08:52 ]
>>362
まともな入門書にはたいてい書いてあるよ

365 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:09:35 ]
Pythonって参照渡しって言うのかな

>>> def foo(x): x = 2
...
>>> a = 1
>>> foo(a)
>>> a
1

いわゆる参照渡しだと、aの値が書き換えられるんじゃないの

366 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:10:56 ]
>>365
def foo(&x): x = 2

これでOK
まともな入門書にはかいてあるよ

367 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:15:57 ]
>>366
つまり、「何もかもぜんぶ参照渡し」というわけでなく、
特に指定しなければ値渡し、ということじゃない?

368 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:16:42 ]
参照をリファレンスという意味で使ったなら
ある意味正しいと思う

369 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:21:18 ]
>>> def foo(&x): x = 2
SyntaxError: invalid syntax
ついに嘘書く奴が出てきたよ



370 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:30:59 ]
>>365
def foo(x):
↑ここのxには確かにa = 1と同一の1が渡る。
 x = 2
↑でもこれはその1を2に置き換えるのではなく
xの参照先を2に変更することになるのでaは1のまま。

371 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:31:48 ]
>>365
Pythonで数字はイデア界にあるから
書き換え不能なんですよ。

372 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:33:56 ]
>>369
嘘を嘘と見抜く練習をしような(w

373 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:49:35 ]
つまり = は代入ではなく束縛ってことか

ところで
>>> lst = [0]
>>> lst[0] = lst
>>> lst
[[..]]
>>> def p(x): print x
>>> [p(x) for x in lst]
[[..]]
[None]

なんぞこれ

374 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 15:55:14 ]
循環参照は[...]になるのか。賢いな。

375 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 18:42:18 ]
>>370-371
えーと、本当に参照渡しの意味わかってんの?

fooの仮引数がxと宣言されているが、aを渡したときにそのxがaのエイリアスとして
機能する(つまりxがaと同等である)ようなものが参照渡しなんだが。
FORTRANはデフォで参照渡しだし、C++やC#は参照渡しもサポートする。

Pythonの場合、a, xは同一のオブジェクトを指している*別変数*だから、
xへの代入はaに影響を与えない。
そういうのは参照渡しとはいえないでしょ。

376 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 19:00:23 ]
>>365
引数そのものはimmutable(不変)なので、関数内で書き換え不可。
この場合の引数とは、変数のアドレスのこと。
変数が指しているデータを書き換えたい場合は、例えば以下のように出来る。

def bar(x):x[0] = 2
a = [1,2,3]
bar(a)
print a # --> [2, 2, 3]


377 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 19:14:55 ]
ミュータブルorイミュータブルというのはオブジェクトの特性であって
変数の特性ではない

378 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 20:15:06 ]
そもそもPythonのオブジェクトには代入演算子ないし

379 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 20:36:17 ]
Mr.NishioのJython本を読むと、変数はオブジェクトへのリファレンス貼る
ってことが書いてある。
買って読んでみなよ。



380 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:01:56 ]

> 変数はオブジェクトへのリファレンス貼る

俺の頭が弱いのか? 何が言いたいのかわからん



381 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:05:15 ]
C風に言えば、Pythonの変数はオブジェクトへのポインタ
代入はポインタのコピー
関数呼び出しは全部値渡し
Javaも値型(基本データ型)以外は一緒

382 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:12:01 ]
>>360
> 関数の引数って参照渡しなの? 

違います。

www.python.org/doc/faq/programming/#how-do-i-write-a-function-with-output-parameters-call-by-reference
> Remember that arguments are passed by assignment in Python. Since assignment just creates references to objects,
> there's no alias between an argument name in the caller and callee, and so no call-by-reference per se.
(引数は Python でいうところの代入によって渡されることを思い出して下さい。代入は単にオブジェクトへの参照を作るものなので、
呼び出す側の引数名と呼び出された側の引数名のあいだにはエイリアスはなく、「参照による呼び出し」も本質的に存在しません。)

383 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:44:09 ]
渡す物がlistになると挙動が変わるはず

384 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:47:37 ]
>>383
リストだろうが何だろうが、何も変わらない。

>>> def f(x): x = [1,2,3]
...
>>> a = []
>>> f(a)
>>> a
[]
>>>


385 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:58:26 ]
>>> m = []
>>> def a(x): x.append(3)
>>> a(m)
>>> a(m)
>>> m
[3, 3]

これは何が起きているんだ?


俺の頭が弱いのか? 何が言いたいのかわからん

386 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 21:59:18 ]
>>385
リストだろうが何だろうが、何も変わらない。

>>> def f(&x): x = [1,2,3]
...
>>> a = []
>>> f(a)
>>> a
[1,2,3]
>>>

387 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:04:59 ]
Pythonを学ぼうと思うのですが
python.rdy.jp/wiki.cgi?page=%B4%D8%CF%A2%BF%DE%BD%F1
で何を選べばいいのかわかりません。

388 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:06:34 ]
他言語経験は?

389 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:09:35 ]
>>385
頭が弱いんじゃなくて、基本が理解できてない。
一体どんな教材でPython覚えたんだよ?



390 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:14:55 ]
>>385
>>384の例は、代入によって「変数自体」を変更している
変数の変更とは、変数が持っていたオブジェクトへの参照を破棄し、
別のオブジェクトを指すようにする、ということだ

>>385の例は、破壊的メソッドによって、変数によって指されている
「オブジェクトの中身」を変更している。変数自体は何も書き換わっていない

391 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:25:40 ]
>>388
初めてのC#を読みました。
作ったソフトウェアは2つほどでオブジェクト指向はある程度理解しているつもりです。

392 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:26:09 ]
>>387
名著だ
www.amazon.co.jp/dp/4839922829/

393 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:26:37 ]
>>392
ありがとうございます。

394 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:28:18 ]
>>392
表紙でtypoが名著とはこれ如何に

395 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:31:19 ]
ほんとだ噴いた

396 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:34:29 ]
>>392
家宝にさせていただきます

397 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:45:04 ]
>>391
プログラミング経験有りなら書籍ではないけれど
本家のチュートリアルの邦訳をまず読んでみれば
www.python.jp/doc/release/tut/


398 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:45:52 ]
x = 23
はxのポインタの値が書き換わる。
x.append(3)
はポインタの先の値が書き換わる。


399 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:51:39 ]
>>376>>384の挙動の違いがよくわからない



400 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 22:54:11 ]
>>399
>>376もポインタが指しているオブジェクトの中身を書き換えているだけだ

xとaは別の変数だが同じオブジェクト(リスト)を指しているから、
x経由で変更したオブジェクトをaから参照しても
同じように見えるのは当たり前だ

401 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 23:02:28 ]
>>400
>>384の場合はx=[1,2,3]で新たにリストのオブジェクトを生成して、
変数xはそれを指すから、結果的に変数aの指すオブジェクトの中身は
書き換えられなかったってことでいいのかな?

402 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 23:04:21 ]
>>401
うん

403 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 23:15:12 ]
なるほど、スッとした。さんくす。

404 名前:デフォルトの名無しさん mailto:sage [2008/05/20(火) 23:29:50 ]
やっぱりスッとしない。

405 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 00:02:10 ]
>>392
Amazonって、ランキングが出るじゃん。見たんだけどさ。
 
 
 
この時期でこのランキングはないわ。
名著なのに売れないなんておかしいな。
芸術作品ですか。

406 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 00:12:37 ]
>>70のリンクの人から見ると名著なんだよ

407 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 00:20:13 ]
>>70のリンクの人のせいで売れないんじゃね?
まるで逆宣伝だし。

408 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 00:27:14 ]
そもそも対象となる層が少なすぎる感じがする

409 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 00:28:39 ]
日本人限定だしね



410 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 00:39:27 ]
そのうえ変な人に気に入られてるようじゃ相当マイナスだね。

411 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 01:00:29 ]
Jython使うとPOIも使えると思うのですが
CPythonからPOIを使えるようにはできませんか?

412 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 01:08:00 ]
Java使え

413 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 01:10:44 ]
替わりにwin32comかpyExceleratorを使うとか

414 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 02:00:14 ]
win32comもpyExceleratorは使ったことがあるのですが
どっちもいまいちなのでPOIを使いたいんですけど
Javaは使いたくないんです

415 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 02:30:37 ]
GroovyとJRubyやるからどっかいけ



416 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 02:33:37 ]
>414
ならばCPythonでJava classファイルを使えるようにする仕掛けをこさえるしかなかろ
それって結局JavaVMの特殊な独自実装になるような気もするが。
となると「Javaを使わない」という目的からは厳密には外れるな。

あるいはPure PythonでPOIを書き直すとか

417 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 02:50:31 ]
そうですね
そうします

418 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 03:46:21 ]
死ねばいいよ

419 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 04:20:22 ]
死ねって・・・
Pythonの信者の人が反社会的っていうのはほんとなんですね



420 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 08:00:56 ]
Jython本を読むと心が洗われます

421 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 09:01:36 ]
>>406
これはむしろ愛と呼べる代物だ。
温泉ではアッー!な光景が繰り広げられるに違いない。

422 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 11:30:56 ]
>>421
結論から言うと、今回のRuby Kaigiのテーマは"愛"。
:
Ruby愛以外に何か付け加えるものがあるとするならば、あとは、覚悟。

423 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 11:44:02 ]
イケメンハッカーはJRubyの本を出せばよかったんじゃね?

424 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 13:12:48 ]
Pythonソースコード完全解説とかなら普通に読みたいな

425 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 13:14:46 ]
自分でコードも読めない奴は、技術者としては失格だと思うがな。

426 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 14:17:31 ]
neet山

427 名前:デフォルトの名無しさん mailto:sage [2008/05/21(水) 14:32:01 ]
RubyConsortium
Rubycon
不良品乱発

428 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 03:50:04 ]
会社で作るソフトに組み込むスクリプトとしてぜひ Python を押したいんだけど、
「(スクリプトの)逆アセンブルがすげー簡単ぽいけど、どうなのよ」みたいなこと言われたんだ。
そういうわけで、会社を納得させるべく、「思いつきでちょっと解析したぐらいでは分からない程度」
に Python スクリプトの難読化について考えてみたい。

429 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 04:01:50 ]
(自分がパッと思いつく程度の)スクリプトの解析方法に付いて考えてみる。

A. python スクリプトファイルが丸見えの場合
.py ソースは問題外。
.pyc は dis モジュールに食わせてダンプして終了。しかもドキュメンテーション文字列付き。
.pyo も dis モジュールに食わせて終了。

B. スクリプトファイルが見えない場合
Python##.dll を改造してアプリケーション付属のDLLと差し替えて、
インポートしたモジュールのコードオブジェクトをダンプするなり別ファイルに書き出すなりする

C.コンパイル済みモジュールファイルが丸見えだが、dis に食わせても解析失敗する場合
カスタム Python を使用している事を疑う.
アプリケーション付属の Python##.dll を参照するようにして python.exe を実行し、
自作のスクリプトを pyc に変換させ、純正の pyc と比べてみる。






430 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 04:17:33 ]
そう考えると、
•独自のインポータを sys.path_hooks に組み込んで自作アーカイブからスクリプトファイルを読み出すようにする
•独自アーカイブに含まれているスクリプトは、カスタム Python を使って読み書きするための特殊 pyc
•カスタムといっても、ようは pyc の読み書き部分だけつじつまを合わせれば良い
•従って、改造するのは marshal.c あたり?



431 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 05:37:37 ]
>>428
「解析されて何か問題でも?」と答えておけ。
本当に解析されて困るプログラムなんて、この世にそれほど存在しないだろ。

432 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 11:39:00 ]
GPL

433 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 11:49:46 ]
JavaだってC#(IL)だって逆コンパイラは存在してるし
難読化とかもあるけど、最終的には>>431のような気がする

434 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 12:15:57 ]
事情をよく知らない割には権限だけ持っていて、
変化を嫌いたがるダメ官吏みたいな上司を説得するのが一番大変なんだよね〜。

435 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 12:16:05 ]
pyc や pyo はバイナリエディタで開いただけでも識別子名と関数名がまるわかりだからねえ
簡単な難読化ぐらいならやる価値あると思う

436 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 13:34:43 ]
難読化とかwww馬鹿だろwww
死ねばいいのに

437 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:17:07 ]
簡単な難読化をしてみせるだけで>428の仕事が楽になるならいいじゃないか。
それ自体に意味があるかどうかはどうでもいいのだ。


438 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:19:55 ]
マってたまに、子供騙しで騙してしまえばいい相手の要求に対して、
妙に本気になって対処してしまうことがあるよね。自戒も含めてw

439 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 16:46:15 ]
全て eval を使って文として
他のプログラムに仕込むとか



440 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 18:07:12 ]
子供騙しで手を抜く奴はプログラマだ!
バレないように手を抜く奴は訓練されたプログラマだ!

こうですか? わかりません (>_<)


441 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 19:29:23 ]
>>434
そういうときはその上司の上司を説得するべき

442 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 21:44:24 ]
適当にxorして「暗号化しました!」
とか言っとけば大丈夫

443 名前:デフォルトの名無しさん mailto:sage [2008/05/22(木) 22:47:10 ]
ソースコード自身とxorしたから大丈夫です!

444 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 01:11:01 ]
>>443
0x00とXORしないとダメだよ!!

445 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 02:15:01 ]
ネタならネタで良いんですが
もう少し楽しめるのをおながいします

446 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 02:44:30 ]
pygameで英語分からなくて暴れてる厨房だろ
放っとけよ

447 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 08:11:47 ]
pygameの和訳さっさと進めろよハゲども

448 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 08:45:46 ]
自己解決しました。

449 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 09:17:04 ]
やめてください



450 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 10:14:11 ]
イケメンハッカーが自決しました。

451 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 10:33:08 ]
やめてください。

452 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 10:33:59 ]
自己解決禁止

453 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 10:34:36 ]
>>441
お花畑にお住まいの妖精さんですか?
現実は厳しいですよ。

454 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 10:35:08 ]
neet山が自己休刊やめてください。

455 名前:360 mailto:sage [2008/05/23(金) 10:59:40 ]
>>360
>>> def call(): info=[]; f(info); return info
...
>>> def f(x): x=[1,2,3] # list渡したい時は.append使え矢
...
>>> call()
[]
>>>
>>> def call(): info={}; f(info); return info
...
>>> def f(x): x[0]=1; x[1]=2; x[2]=3
...
>>> call()
{0: 1, 1: 2, 2: 3}

渡すものが、辞書かリストか、で字面的に違うということですね
事故解決しました。(&なんて使わねー)(*はリスト**は辞書ですが無くても動くのです無害です)

456 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 11:07:57 ]
>455

ぜんぜん解決してない ...

>>> def f(x): x=[1,2,3]

に文法的に対応する辞書の記述は

>>> def f(x): x = {0:1, 1:2, 2:3}

だよ(これだと結果は callで代入された info → {} のまま)。

リストのappendが字面的に気に喰わないのなら、

x+=[1];x+=[2];x+=[3];

と書いてもいいかもね(ちょっとoverheadありそうな気もするけど)




457 名前:360 mailto:sage [2008/05/23(金) 11:30:33 ]
>>456
d

1. def call(*各種設定リスト): info={}; f(info); return
2. 初期化関数もどき(空リスト、空辞書を破壊的操作で初期化)
def f(x): x[0]=1; x[1]=1; x[2]=2 #辞書
def f(x): x+=[1]; x+=[2]; x+=[3] #リスト

設定ファイルちっくに扱うなら、辞書使うし余り気にならないのかも > リストの破壊的操作
JSonとか、いい感じなものだと最近わかり始めてきますた

458 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 12:07:53 ]
自己解決禁止しちゃいかんだろww

459 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:11:33 ]
D:\TracLight\python>python
Python 2.5.1 (r251:54863, Apr 18 2007, 08:51:08) [MSC v.1310 32 bit (Intel)] on
win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> fn = os.path.join('./', 'test-file.txt')
>>> open(fn).read()

Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: './test-file.txt'

同じディレクトリ下にあるファイルを読むにはどう書けば良いですか?



460 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 16:19:24 ]
>>> fn = os.path.join(os.getcwd(), 'test-file.txt')
>>> fn = os.path.join('./', 'test-file.txt')
>>> open(fn).read()

.txt 拡張子が余計に付いてだけでした orz
事故レスすまそ

461 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 17:41:49 ]
>>459
なんでバグだらけの旧バージョン使ってるんだ?

462 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:29:52 ]
うるさいだまれ

463 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 19:36:57 ]
自己憤慨しました。

464 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 21:15:47 ]
自己発電しました。

465 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:41:04 ]
助けて
java.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.0)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkExit(Unknown Source)
at javax.swing.JFrame.setDefaultCloseOperation(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.python.core.PyReflectedFunction.__call__(Unknown Source)
at org.python.core.PyMethod.__call__(Unknown Source)
at org.python.core.PyObject.__call__(Unknown Source)
at org.python.core.PyInstance.invoke(Unknown Source)
at applet$_PyInner.init$1(applet.java:61)
at applet$_PyInner.call_function(applet.java:47)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyFunction.__call__(Unknown Source)
at org.python.core.PyMethod.__call__(Unknown Source)
at org.python.core.PyObject.__call__(Unknown Source)
at org.python.core.PyObject._jcallexc(Unknown Source)
at org.python.core.PyObject._jcall(Unknown Source)
at applet$MyApplet.init(applet.java:139)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)


466 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 22:43:40 ]
pc11.2ch.net/test/read.cgi/tech/1207878910/385

467 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:13:26 ]
マルチしちゃったか
死ね

468 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:38:32 ]
ちょっと教えて欲しいんだけど、pythonの正規表現で先読みって使えないの?
下みたいに書いても全然文字列を分割してくれないんだけど

line = '123,456,79'
regexp = re.compile('(?=5)')
print regexp.split(line)

469 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:56:48 ]
>>468
www.python.jp/doc/nightly/lib/re-syntax.html
> (?=...) 
> もし ...が次に続くものとマッチすればマッチしますが、文字列をまったく消費しません。
> これは先読みアサーション(lookahead assertion)と呼ばれます。
> 例えば、Isaac (?=Asimov) は、'Isaac 'に 'Asimov'が続く場合だけ、'Isaac 'とマッチします。 

'(?=5)' だと空文字列に 5 が続くなら空文字列にマッチ(ただし 5 は消費しない)という意味になるのかな?
空文字列にマッチしたら分割の目的には使えないような・・・。

>>> a = re.compile(",(?=4)")
>>> a.split("123,456,789")
['123', '456,789']



470 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:57:19 ]
>>468
先読みが使えないっていうより
re.split() に長さ 0 のパターンを渡しても何もしてくれないとかじゃない?
他の言語とかは挙動が違った気がする

471 名前:デフォルトの名無しさん mailto:sage [2008/05/23(金) 23:57:58 ]
>>468
ライブラリリファレンスを見れば分かるけど、先読みは使えるよ。

よくわからんが、split()がzero-width assertionでは機能しないのかもな。
split()に与えた正規表現にマッチした文字列をデリミタとみなして分割するから、
「位置」じゃなくて「文字(列)」にマッチする正規表現じゃないとダメ、とかさ。

ただの想像だけど。

472 名前:471 mailto:sage [2008/05/23(金) 23:58:39 ]
ぐは。レスかぶりまくりじゃん。

473 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:15:30 ]
先読みの使い方を間違えてる

474 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:38:16 ]
お前は次に「自己解決しました」と言う。

475 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 00:46:50 ]
自己解決しました

476 名前:468 mailto:sage [2008/05/24(土) 01:09:50 ]
レスサンクス
やっぱり場所指定の正規表現じゃ分割しないみたいだね
perlとrubyでもsplit関数を動かしてみたんだけど、
perlはpythonと同様で場所指定の正規表現じゃ分割してくれなかったよ
一方rubyは意図したとおりに場所指定で分割できた
言語毎に結構挙動が違うもんなんだね




477 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:31:05 ]
>>472
ぐは禁止。きもい。

478 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:32:10 ]
ruby最強!

479 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:33:37 ]
regexp = re.compile('.(?=5)')



480 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 01:50:44 ]
>479
それだと一文字消えちゃうだろう常識で考えて

481 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 03:40:04 ]
pyunoでOpenOfficeの制御したかったのだけど
ubuntu7.10で動かないみたい
udk.openoffice.org/python/python-bridge.html
Hellow Worldのサンプル動かすと
line 5, in <module>
localContext = uno.getComponentContext()
AttributeError: 'module' object has no attribute 'getComponentContext'


482 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 03:49:34 ]
>>468

Perlのバージョンは?
試したらできたよ。

my @f = split /(?=5)/, $str;
print join(':', @f), "\n";



483 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 05:24:45 ]
>>> import re
>>> line = '123,456,79'
>>> regexp = re.compile('')
>>> regexp.split(line)
['123,456,79']

そもそもこうなるんだもんなぁ


484 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 08:28:25 ]
>>477
ぐはははははははははははhahahahahahahahaha!!!!!

485 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 10:14:48 ]
ぐは。自己解決しました。

486 名前:デフォルトの名無しさん [2008/05/24(土) 12:39:52 ]
>482
perlでもsplitできるね

pythonで位置指定の分割ってどうやんだろ

487 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 13:03:35 ]
こんな感じの関数を自分で作って使えばいいんじゃね

def split(pattern, string):
    result = []
    start = 0
    for m in re.finditer(pattern, string):
        result.append(string[start:m.start()])
        start = m.span()[1]
    result.append(string[start:])
    return result


488 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 13:14:27 ]
リスト返すようにしちゃったけど、ジェネレータにすべきだったか
ま、その辺は好きに汁

489 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 14:06:35 ]
>487
re.findall()



490 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 14:18:04 ]
re.findall()がどうしたの?

491 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 15:33:29 ]
Perl で split('', $str); に相当するのは
Python ではどう書けばよいですか?

492 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 15:37:47 ]
>>491
list(str)

493 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:16:39 ]
オブジェクトのメソッドを一覧で取得するにはどうすればええの?


494 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:24:33 ]
filter(callable, dir(hoge))

495 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 19:25:54 ]
[x for x in dir(obj) if callable(getattr(obj, x))]

496 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 21:30:26 ]
>>494
動きません。
自己確認してください。

497 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:48:52 ]
自己完結しました

498 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:51:21 ]
>>494
オッサン臭いコードだな。その上動かないってどんだけ(www

499 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 22:58:55 ]
itertools は使えそうで使えない



500 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:03:49 ]
>>498
まさに労害(WWW

501 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:17:21 ]
おれさまがなおしてやった
filter(lambda x : callable(getattr(obj, x)), dir(obj))

502 名前:デフォルトの名無しさん mailto:sage [2008/05/24(土) 23:28:11 ]
ここまで来ると、わざわざfilterを使う意味なくね?

503 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:07:56 ]
pythonのlambdaって読みづらいだけじゃね?
pythonの基本的な文法と比べると汚い

504 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 00:14:14 ]
Guidoもlambdaは嫌いだったと思う。
lambdaを使うのは変態か、自称イケメンハッカーのワンライナー芸人だけだろ。

505 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 01:19:41 ]
どうせ残すなら
いろいろできるようにすればいいのに

506 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 01:32:31 ]
cshといっしょでコード互換のために残してるだけなんだから
もう新規につかうようなもんじゃないだろ。

507 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 02:44:32 ]
Pythonプログラミング入門はクソだとよ。

508 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 03:45:36 ]
自分の言葉で語りなさい

509 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 05:36:58 ]
ということにしたいのですね



510 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 09:50:46 ]
懐かしいフレーズだ

511 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 10:51:46 ]
皆さん lambda と聞くと昔の傷がうずくのですね

512 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 10:52:28 ]
Twisted本、クソ本フラグがたった感が。

513 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 11:37:37 ]
うはは、わかりません。

514 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 12:29:07 ]
関数をファーストオブジェクトとして扱えないのはしょうがないが
だからってpython の lambda はちょっと無しだろ
C++みたいに演算子()をオーバーロードできればいいのに

515 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 12:33:36 ]
>>514
関数内で関数が定義できるんだから、lambdaはあれで良い。
演算子オーバーロードも、__call__でできるじゃないか。

516 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 12:40:01 ]
うはは、わかりません。

517 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 13:11:22 ]
>>514
Pythonの関数はファーストクラスオブジェクトだが

518 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 13:23:23 ]
ファーストオブジェクトってどういう意味?

519 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 13:32:38 ]
ja.wikipedia.org/wiki/%E7%AC%AC%E4%B8%80%E7%B4%9A%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88
>>514は、匿名リテラルで宣言できる関数が制限されていると言いたいんだと思う。
でも、def foo() して、 bar = foo; del foo; したら、foo()できなくなる。Pythonのdefは関数定義と
変数への代入を同時にしているというだけなので、関数がファーストクラスオブジェクトと言っても良い。



520 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:00:35 ]
>>519
ありがとう。ファーストクラスオブジェクトでググればよかったのか。

俺もPythonのlambdaは気持ち悪いと思う。
あと、exceptで例外が複数のときだけ括弧つけるのも気持ち悪い。

521 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:11:16 ]
(UNIX環境の)Pythonってソースプログラム実行中にソースの書き換えってできるの?
インタプリタだから、できそうなイメージなんだけど

522 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:13:28 ]
pythonって関数内で関数作って関数を返す関数作れたっけ?


523 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 14:26:28 ]
tupleが (a,) ってなるのがきもい





524 名前:デフォルトの名無しさん [2008/05/25(日) 14:50:03 ]
python の快活環境どれがおすすめですか?

525 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 15:54:31 ]
>>522
いろんなデコレータのソース読んでみたら?そういうのばっかりだから。
Pythonのデコレータは、関数を引数にして関数を返す関数。
@foo(a,b)
def bar():
の場合、fooは、"関数を引数にして関数を返す関数"を作成して返す関数になる。

526 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 15:58:09 ]
間違えた
快活環境じゃなくて開発環境

527 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 16:27:51 ]
>>522
名前なしでそれができない、ってだけ。

あと定義された時の環境に対して書き換えが効かない。

528 名前:デフォルトの名無しさん [2008/05/25(日) 17:03:38 ]
385 名前:デフォルトの名無しさん[] 投稿日:2008/05/23(金) 22:18:26
助けて
java.security.AccessControlException: access denied (java.lang.RuntimePermission exitVM.0)
at java.security.AccessControlContext.checkPermission(Unknown Source)
at java.security.AccessController.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkPermission(Unknown Source)
at java.lang.SecurityManager.checkExit(Unknown Source)
at javax.swing.JFrame.setDefaultCloseOperation(Unknown Source)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.python.core.PyReflectedFunction.__call__(Unknown Source)
at org.python.core.PyMethod.__call__(Unknown Source)
at org.python.core.PyObject.__call__(Unknown Source)
at org.python.core.PyInstance.invoke(Unknown Source)
at applet$_PyInner.init$1(applet.java:61)
at applet$_PyInner.call_function(applet.java:47)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyTableCode.call(Unknown Source)
at org.python.core.PyFunction.__call__(Unknown Source)
at org.python.core.PyMethod.__call__(Unknown Source)
at org.python.core.PyObject.__call__(Unknown Source)
at org.python.core.PyObject._jcallexc(Unknown Source)
at org.python.core.PyObject._jcall(Unknown Source)
at applet$MyApplet.init(applet.java:139)
at sun.applet.AppletPanel.run(Unknown Source)
at java.lang.Thread.run(Unknown Source)

529 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 17:56:17 ]
御臨終です



530 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 17:59:29 ]
org が orz の相似に見えた

531 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 19:11:41 ]
そういやIronPythonのスレはあるのにJPythonのスレはないんですね

532 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 20:08:15 ]
Jythonのスレならあるでしょ。
専用じゃないけど

533 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 20:17:07 ]
>>523
これならきもくない?
tup = (
a,
)

534 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 20:48:17 ]
>>525,527

ありがとう
やってみたら出来たよ
これで使いやすいschemeの代わりが出来た


535 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 21:57:03 ]
そんな見た目だけの問題じゃないよ! >533

誰かが「カンマがtupleを作るんだ、カッコじゃない」と言ってたが、

>>> x=()
>>> type(x)
<type 'tuple'>

キモイヨー


536 名前:デフォルトの名無しさん mailto:sage [2008/05/25(日) 22:22:42 ]
>>535
男なら、空のタプルを作りたいときがあるってもんだ。

537 名前:デフォルトの名無しさん mailto:sage [2008/05/26(月) 00:00:59 ]
python for S60のスレはないよなぁ

538 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:06:35 ]
パックリ(i)

キモイヨー

539 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:15:23 ]
RDBで言うテーブルに対するビュー
Cで言う配列に対するポインタ
みたいなノリで使える、オリジナルデータを更新可能なスライスみたいなの無いかな

スライスみたいにコピーするんじゃなくて参照を握っていて、
更新も出来るやつ
自分で作るしかない?



540 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:44:42 ]
うはは、キモイヨー。

541 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 00:49:16 ]
>>537
需要があるのか?

542 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 01:48:06 ]
>>539
ありますよ

543 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 09:27:23 ]
>539

10行ぐらいで書けそうだから、必要な人は手元で書いちゃうんでは。


544 名前:デフォルトの名無しさん [2008/05/27(火) 09:57:14 ]
ちょちょっっと書いてみていただけませんか?

545 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 11:27:27 ]
>>544
書きました。
見せないけど。

546 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 16:41:49 ]
さては11行になったな?

547 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 17:55:58 ]
>>539
arrayじゃ駄目なの?

548 名前:539 mailto:sage [2008/05/27(火) 18:28:38 ]
レスくれた人どうもです

>>542 モジュール名を教えていただけませんか

>>543 書いてみましたが、自分は10行では無理でした
__getitem()__に負のインデクスやsliceオブジェクトが渡された時の
処理とかをいちいち書くのがウザいです

>>547 arrayは全く用途が違うのではないでしょうか
シークエンスの部分列を「参照」するだけならただのスライスで良いし
itertools.islice()ならコピーを避けられますが、
元のシークエンスを「更新」もしたいわけです

549 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 18:51:41 ]
pygameの和訳完成してもいいころなんじゃねーの



550 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 19:40:47 ]
547は配列を作りたいのかと勘違いした。
ようするに、ポインタに相当するものを作りたいのか。

551 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 19:53:15 ]
うはは、すみません

552 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 20:10:20 ]
>>548
要するにスライスをスライスして新しいスライスを作れればいい(そこを自前で実装するのは面倒)ということだな。
スライスをスライスしてスライスを作るというのはありがちな気がするので既にありそうだが。俺は残念ながら知らん。
自前で実装するのは確かに面倒そうだ。

553 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 22:02:45 ]
>>539
www.rh.to/python/WDB.html

こんなのとか? リンク先のViewの説明がそれっぽいとかおもた。
というか牛刀をもって鶏を割くみたいになってる気もする…

>>457
def call(inil=[1,2,3,4,5]): srcl=inil; m(srcl,1,3); return srcl
def m(x,i,j): _m(x[i:j])
def _m(x): x[0]=1; x[1]=1; x[2]=1 とか思いついて、書いてみる

>>> def call(ini): src=ini; dst=m(src,1,4); dst.insert(0,src[0]); dst.append(src[4]); return dst
>>> def m(x,i,j): print x[i:j]; return _m(x[i:j])
>>> def _m(x): x[0]=1; x[1]=1; x[2]=1; return x

>>> call([1,2,3,4,5])
[2, 3, 4]
[1, 1, 1, 1, 5]

むぅ。糞コード。可読性悪すぐる…orz
call()でintかlistで場合分け必要だし

554 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 22:15:15 ]
numarray

555 名前:デフォルトの名無しさん mailto:sage [2008/05/27(火) 22:36:17 ]
coding.derkeiler.com/Archive/Python/comp.lang.python/2006-10/msg02680.html

これとかヒントになるかも
一部を掬って変化を加えたら、全体が書き換わる…

556 名前:539 mailto:sage [2008/05/27(火) 22:52:01 ]
ありがとうございます
NumPyですか
数値計算が目的という訳ではなかったので完全に盲点でしたが、使えそうですね

ちょっと試してみます

557 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 09:09:02 ]
これからはRuby一色の時代。
PerlもPythonも廃れ、Rubyだけが生き残る新時代

558 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 09:42:45 ]
その「新時代」になってから勉強しても全然遅くない。

559 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 12:02:30 ]
for e in dir():
  print e

とかで出力されるデータをA-Z, a-z, __??__で
頭文字ごとに改行して出力するにはどうしたら良いですか?



560 名前:559 mailto:sage [2008/05/28(水) 14:23:42 ]
>>> def print_elem_n(elem):
...  print '\n', elem,
...
>>> def print_elem(elem):
...  print elem,
...
>>> q=''
>>>
>>> a2z="abcdefghijklmnopqrstuvwxyz"
>>> for e in dir(cssutils):
...  if q == '' and q in set(a2z): q = e[0]
...  if e[0] in set(a2z):
...   if q != e[0]:
...    print_elem_n(e)
...    q=e[0]
...   else:
...    print_elem(e)

書けた…添削きぼん
print文の、改行の取り扱いに嵌る orz

561 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 14:35:40 ]
>>> a2z="abcdefghijklmnopqrstuvwxyz"

>>> a2z=range(ord('a'), ord('z')+1)

562 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 14:35:53 ]
groupby使ってみるといいんじゃない?

from itertools import groupby
from operator import itemgetter
for k, g in groupby(sorted(dir(str)), itemgetter(0)):
 print ", ".join(g)

563 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 14:36:51 ]
>>560
printだけ書けば改行できるのに。

lastchar = dir()[0][0]
for e in dir():
if e[0] != lastchar:
print
lastchar = e[0]
print e,

これじゃダメ?

564 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 14:37:50 ]
インデント消えちゃったけど、まぁ分かるよね?w

565 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 14:54:57 ]
>>562
便利なもんがあるんだなー
こんな普通な奴しか思いつかなかった

def f(seq):
    d = {}
    for s in seq:
        d.setdefault(s[0], []).append(s)
    for k in sorted(d.iterkeys()):
        print ','.join(d[k])

566 名前:563 mailto:sage [2008/05/28(水) 15:07:07 ]
Python始めて1週間の俺には", ".join(g) の部分がよく分からなかったが、
gのシーケンスを", "で区切った文字列が得られるのか。

567 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 15:18:09 ]
むしろ g は glue の g かもしれないぜ

568 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 17:07:40 ]
>>563
for e in dir():
 1. if 違う要素かどうか判定: 改行\n + フラグを更新する
 2. 要素を出力する

d。ノートにでもまとめて整理しとく乙

569 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 17:19:04 ]
>>566
個人的には
リスト.join(区切り文字)
の方がわかりやすいと思ってる。



570 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 17:27:24 ]
1. FAQ嫁
2. Ruby使え
3. 俺もそう思う

571 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 17:43:04 ]
引数にジェネレータを与えられるのはstr.joinの一つの利点だと思う

572 名前:563 mailto:sage [2008/05/28(水) 17:51:18 ]
>>569
俺も文脈的に直感的でないと思うけど、文字列クラスにjoinメソッドがあるという
形だからしょうがないね。
静的関数として提供した方がいい気がするが、元々静的関数だったのが廃止されて
メソッドになったのね。

573 名前:デフォルトの名無しさん [2008/05/28(水) 19:13:53 ]
djangoを使ってみようと思っています。

それでまずはmodelを定義してデータを入れるところまではできま
した(sqlite3とかで直接DBの中身見て入ったのを確認した)。

だけど、manage.py shellでデータを確認しようとしても見れません。

具体的にはhoge.objects.all()とかってやっても[]が表示されるだ
けです。

これはなぜなんでしょうか?

あと、adminのhogeの画面でも
5 hoges
のように表示されるだけで、DBに格納したデータをいじれたり、見
る事ができない状態です。

何かアドバイスがいただければ助かります。よろしくお願いします。

574 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 20:13:19 ]
うちではみれてる

575 名前:デフォルトの名無しさん [2008/05/28(水) 23:51:30 ]
ディショナリをそのキー名の変数にするってどうすればいいんですか?
つまり
a{hoge:1,foo:2,bar:3}
を↓のようにしたいです。
hoge = 1
foo = 2
bar = 3

576 名前:デフォルトの名無しさん mailto:sage [2008/05/28(水) 23:56:27 ]
>>575
入門書嫁。






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<131KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef