くだすれPython(超初 ..
[2ch|▼Menu]
413:デフォルトの名無しさん
09/12/04 09:31:51
概念は分かってても
言語によって挙動が違うからなぁ

414:デフォルトの名無しさん
09/12/04 10:54:02
モジュールレベルの __author__ とか __copyright__ とかって
何がどのようなドキュメンテーションシステムで使われているのか
どこで決められているんでしょうか?

PEP で docstring その他のコードの書き方、スタイルについての
ガイドラインって有りますか?

自分としては
1)PyDev (Eclipse) の補完時に追加情報として表示して欲しい
2)あとで Sphinx でドキュメント生成するかもしれない
と思っていますが、とにかく何か取り決めがあるなら
それに従っておこうと思っています。

415:デフォルトの名無しさん
09/12/04 10:58:31
URLリンク(www.python.org)
docstring conventions というのは見つけましたが、
モジュールレベルの他の属性?(__author__とか)
についての記述はありませんでした。

416:デフォルトの名無しさん
09/12/04 11:02:40
__version__ だけは
URLリンク(www.python.org)
で見つけました。あと、同様の質問を
URLリンク(www.velocityreviews.com)
で見つけたんですが、__version__ 以外は標準的なものじゃない
ってことのようです。でもいろんなライブラリで__author__
なんかは使われていて、何らかのガイドラインがあるのかと思っているのですが・・


417:デフォルトの名無しさん
09/12/04 11:06:44
URLリンク(jaynes.colorado.edu)
こういうガイドラインもあるようですが、
特定のプロジェクトでのコード規約ではなく
Python界で広く用いられている
(そしてドキュメント生成ツールなどでも理解される)
物は何だろうと探し続けて早一時間。

418:デフォルトの名無しさん
09/12/04 11:13:17
URLリンク(stackoverflow.com)
でも同様の質問が出てましたが、結局上に書いた

How do I organize my modules (source files)?
URLリンク(jaynes.colorado.edu)

をミロってことでした。
疲れ果てて心が折れそうなので__author__くらいは書いておきます。

419:デフォルトの名無しさん
09/12/04 15:47:53
テキストの特定の文字をフィルタリングして表示したい時って正規表現使えばいいんですか?

420:デフォルトの名無しさん
09/12/04 20:12:30
フィルタリングがどういう処理を意味するのかわからない

421:デフォルトの名無しさん
09/12/04 20:27:47
伏字ってことじゃない?
password: ***** や /home/***/ みたいな

というわけで文字列メソッドの replace か
正規表現が使いたければ re.replace

422:デフォルトの名無しさん
09/12/04 20:56:16
>>420
説明不足でした。
テキスト内の特定の文字だけ表示させないで残りを表示したいという意味です。

423:デフォルトの名無しさん
09/12/04 22:09:51
エイホ・コラシックを実装

424:デフォルトの名無しさん
09/12/04 22:12:00
>>422
正規表現置換あるんだからそれでいいじゃない

425:デフォルトの名無しさん
09/12/05 00:00:44
>>424
なるほど置き換え使えば簡単に消せるんですね
ありがとうございます

426:デフォルトの名無しさん
09/12/05 22:31:52
文字列の型は<str>で数値の型は<int>ですよね
Noneの型を記述するときの上のような書き方はないのでしょうか?
今はtype(None)で代用しています

427:デフォルトの名無しさん
09/12/05 22:44:50
import types
types.NoneType

でもhoge is Noneでいいんじゃないの?

428:デフォルトの名無しさん
09/12/05 23:04:36
['aaaaa'] -> リスト
('aaaaa') -> 文字列
('aaaaa',) -> タプル

なんかきもちわるい。
書き換えしたくない場合でもリストを使ったほうが見通しがいいと思うのは俺だけ?
タプルって辞書のキーとかイミュータブルが必要なときだけ使うという考えでもおk?

429:デフォルトの名無しさん
09/12/05 23:15:52
return(foo)って書きたくなるときがあるんだ。

430:デフォルトの名無しさん
09/12/05 23:50:27
>>427
型をリストに入れて変数の型検査を行っているので、Noneの型が必要なのです。
from types import NoneType
とすることにしました。ありがとうございました。

431:デフォルトの名無しさん
09/12/06 00:09:19
{'・ω・'}ショボーン

432:デフォルトの名無しさん
09/12/06 03:53:56
デバッグ時のみモジュール名を行頭に付けたうえで出力する関数を作ろうと考えたのですが
DDEBUG = True
def debug_print(obj):
  if DDEBUG == True:
    print '[', __name__ ,']', obj
これをdebug.pyとした場合importして使っても当然ながらつねに[ debug ]としか表示されません
コピペすれば期待通りに動くんですけれどコピペするってのもどうなんだという気がしまして
なんかうまい方法ありませんか?

自分で思いつくのはdebug_printにモジュール名用の引数を取る方法ぐらいしかありません

433:デフォルトの名無しさん
09/12/06 04:40:26
logger logging

434:デフォルトの名無しさん
09/12/06 05:30:40
>>433
おぉこんなものが
期待した以上のことができそうです
ありがとうございました

435:デフォルトの名無しさん
09/12/06 08:48:48
URLリンク(newcamel.logos.ic.i.u-tokyo.ac.jp)
%(pathname)s ログ記録の呼び出しが行われたソースファイルの 全パス名 (取得できる場合)
%(filename)s パス名中のファイル名部分
%(module)s モジュール名 (ファイル名の名前部分)

436:デフォルトの名無しさん
09/12/06 10:01:16
>>428
統一したいだけなら
list('aaaaa')
tuple('aaaaa')

あと、リストとタプルはCでいう配列と構造体くらいには別物。

437:デフォルトの名無しさん
09/12/06 14:32:03
wxpythonを使い、
GUIの操作用ボタンと結果表示用のラベルがあり
データ処理を行うようなソフトを作っています

データ処理は時間がかかり、メインのプロセスでやってしまうとその間GUIのパネルが固まってしまうので、
データ処理はmultiprocessingを使ってサブプロセスで行うことにしました

それ自体はうまくいき、multiprocessing.Queue()を使いデータのやり取りもできたんですが,
メインプロセス側がキューのget()を呼び出して待機するわけにもいかないので(パネルが固まってしまい本末転倒)
wxPythonのTimerを使ってget(False) を呼び出すメソッドを作り、一定時間ごとにそのメソッドを呼び出しデータが来ていないか確認して、
データが来たらラベルに表示するようにしました。一応完成はしたんですが、一定時間ごとに結果がないか確認、という動作が
なんだか気持ちわるいとうか

サブプロセスのデータ処理が終わったら、それを通知するというか、終わったことをきっかけにメインプロセス側の表示処理を稼働させるというか
そういうのって出来ないもんです?

438:デフォルトの名無しさん
09/12/06 20:51:51
出来るんじゃない?

439:デフォルトの名無しさん
09/12/06 21:34:58
mainloopの中身を見てみな。

440:デフォルトの名無しさん
09/12/06 22:33:18
>>439
C++で作られた関数を呼び出すだけでした
C++を理解できないとどうにもならないという意味だったのでしょうか?

441:デフォルトの名無しさん
09/12/06 22:50:33
非同期でqueueなりpipeでメッセージ飛ばしてidleで処理するしかないんじゃない?
まあタイマーでやってるのと大差ないけど

442:デフォルトの名無しさん
09/12/07 07:42:23
>>440
>>441
すいません
Demoみてたら、GUIが固まるのを防ぐ方法がありました

ご返答ありがとうございました

443:デフォルトの名無しさん
09/12/07 13:33:54
<main.py>
def proc():
非デバッグ時のコード
def run():
proc()
if __name__=='__main__':
run()

<debug.py>
from main import *
def proc():
 デバッグ用のコード
if __name__=='__main__':
run()

デバッグ時のみdebug.pyでデバッグ用のコードを実行させたい
のですが、
main.py、debug.pyどちらから起動してもmain.pyの方が実行さ
れてしまいます。
importしたモジュールの関数の上書きは出来ないのでしょうか


444:デフォルトの名無しさん
09/12/07 14:07:23
import main

if __name__=='__main__':
 main.proc = proc
 main.run()

名前空間に対する理解が不十分

445:デフォルトの名無しさん
09/12/07 14:30:05
入門書嫁

446:デフォルトの名無しさん
09/12/08 21:25:42
wxPython付属のxrcedでGUIの作成を行っているんですが
wxListCtrlを設置するとError creating test view といわれどうしても設置してプレビューできません
どなたかこうなってしまう原因に心当たりのある方はいらっしゃらないでしょうか

そして、もしよろしければwxListCtrlを配置したxrcファイルをいただけないでしょうか

447:デフォルトの名無しさん
09/12/08 22:15:25
psycoの読み方ってなに?
ピーサイコ?

448:デフォルトの名無しさん
09/12/08 22:19:47
psychologyがサイコロジーだからサイコだと思う

449:デフォルトの名無しさん
09/12/08 22:22:46
pは発音しないでサイコでいんじゃね?

450:デフォルトの名無しさん
09/12/08 23:02:10
なるほど、ありがとう

451:デフォルトの名無しさん
09/12/09 00:24:49
>>446
ListCtrlのStyleの設定でLC_REPORT, LC_ICONとかにチェック?

452:デフォルトの名無しさん
09/12/09 01:01:16
ぷさいこ

453:デフォルトの名無しさん
09/12/09 09:10:00
パイチンコだろ

454:デフォルトの名無しさん
09/12/09 13:02:54
サイコガンダムで読み方を覚えた

455:デフォルトの名無しさん
09/12/09 23:10:09
>>451
やってみたのですがやっぱりエラーが出ます
これはもうxrecd投げ捨てるしかないのか・・・・・・・

456:デフォルトの名無しさん
09/12/10 00:06:08
pythonのことをブログに書くと
ツネヤマとかいうトラックバックスパムが酷くて悩んでいます
どうすればいいでしょうか?

457:デフォルトの名無しさん
09/12/10 00:28:07
Rubyについて書けばいいと思います

458:デフォルトの名無しさん
09/12/10 00:30:30
ヤツはスパムって程でもあるまい
俺の備忘録ブログにも来るくらいだしw
嫌ならトラックバック閉じるかブログやめればおk

459:デフォルトの名無しさん
09/12/10 04:31:46
そもそもブログって媒体は辞めておけ

460:デフォルトの名無しさん
09/12/10 07:49:32
ツネヤマなのか?
トコヤマだと思ってたぜw

461:デフォルトの名無しさん
09/12/10 09:47:12
確実に捕捉されるよね

462:デフォルトの名無しさん
09/12/10 10:06:59
トコヤマは情弱の情報源

463:デフォルトの名無しさん
09/12/11 23:32:13
ジョウザンじゃないのか。
あとMoinMoin 1.9.0 Finalも取り上げておいてくれ。>中の人

464:デフォルトの名無しさん
09/12/13 00:11:21
けつまんこぼるんたす

465:デフォルトの名無しさん
09/12/15 06:13:46
結局どう読むんだよw

466:デフォルトの名無しさん
09/12/15 06:18:14
プロフィール

johzan

収集する男
Error : RSSが取得できませんでした。
カレンダー
<< 2009/12 >>
日 月 火 水 木 金 土
1 2 3 4 5
6 7 8 9 10 11 12
13 14 15 16 17 18 19
20 21 22 23 24 25 26
27 28 29 30 31
最新タイトル



467:デフォルトの名無しさん
09/12/15 06:24:10
アルェー トコヤマだと思ってたYO

468: ◆R9u5o717Q6
09/12/15 21:51:18
2.6をしようしています
python標準のsqlite3を使っているのですが
データの整合性のためselect使用時にはテーブルをロックさせるためにBEGINしたいのですが
select時に自動的にさせる、もしくは自分でbeginするにはどうしたらいいのでしょうか?
commitメソッドはあってもbeginはないのでよくわかりません

isolation_level=・・・・
というのかと最初思ったんですがこれはロックがかかるときにどういうロックがかかるかの話で
自動的にトランザクションが始まるのはあいかわらずINSERT/UPDATE/DELETE/REPLACEだけみたいで
どうしたらいいのかわかりません

469:デフォルトの名無しさん
09/12/15 23:06:04
あるよ

470:デフォルトの名無しさん
09/12/15 23:06:51
BEGINはロックのための機構じゃないぞ
トランジャクソンのためだぞ

471:デフォルトの名無しさん
09/12/15 23:52:10
トランザクション

472:デフォルトの名無しさん
09/12/16 00:04:44
Pythonのコメントでメソッドの引数とか戻り値について決まった書き方ってあるんですか?
探しても無さそうなんですが。

473:デフォルトの名無しさん
09/12/16 00:04:51
ここが本スレだったら延々脱線するとこだ

>>468
Cursorオブジェクトに execute メソッドがあるから
それで begin transaction すればいけるかも
使ってるマニュアルに載ってなかったら最新版見て

あとSQLiteはスレが別にあるからここで解決しなければそっちで

474:デフォルトの名無しさん
09/12/16 00:16:22
>>472
PEP 8

475:472
09/12/16 00:32:42
>>474
ありがとうございます。
メソッドの各引数や戻り値の型を、Javadocの @param や @return
のように、決まった書き方で書けといったことは無いみたいですね。
人のソースを見た時など、理解するのが面倒な気はしますが。

476:デフォルトの名無しさん
09/12/16 00:48:20
あるよ

477:472
09/12/16 01:05:39
>>476
えっ!?

478:デフォルトの名無しさん
09/12/16 05:37:59
Python3だと関数アノテーションってのがあるな

479:472
09/12/16 07:18:48
>>478
URLリンク(www.python.org)
これですね。よさそうですね。
やっぱり、型が何かって記述はそれ程重要視されてない感じですね。

480:468 ◆R9u5o717Q6
09/12/16 20:51:09
>>473
executeにbegin transactionの文を送っていいのか調べてたらそもそも勘違いをしていたようです

実のところ
URLリンク(www.python.jp)
sqlite モジュールがトランザクション状態を把握する必要があるので、
SQL の中で OR ROLLBACK や ON CONFLICT ROLLBACK を使ってはなりません。

というのを馬鹿な勘違い起こして、BEGINもダメみたいに解釈してました。
そのためbeginの代替方法ありませんかという質問に至っていました
executeにbegin transaction投げてみます
ご迷惑おかけしました

481:デフォルトの名無しさん
09/12/16 21:28:23
誰も必要とはしないけど一応結果を
Connection オブジェクトで
execute(u'begin exclusive')
すればいいだけでした

482:デフォルトの名無しさん
09/12/18 04:04:03
みんなのPythonを半分以上(7割くらいかな)読んだが
これってソフトを作成できるスキルが身に付いたとは思えない…
最後まで読め?

483:デフォルトの名無しさん
09/12/18 04:38:03
no

484:デフォルトの名無しさん
09/12/18 04:38:15
>>482
最後まで読まなくてもいいよ
ただページをパラパラめくって何が書いてあったか程度には把握しておくこと
あとで必要になったら読み返せばいい

で、実際に何か役に立つものを作ろうと思ったら周辺知識が必要
どんな周辺知識が必要かは作りたいソフトによる

どういうソフトを作りたいか具体的に言えば
あれを勉強しろだのこれを読めだのこのライブラリ使えだの答えが返ってくると思うよ

485:デフォルトの名無しさん
09/12/18 10:39:28
だったら読まない

486:デフォルトの名無しさん
09/12/18 11:25:04
そもそも、あの本は初歩的なことしか書いてない

487:デフォルトの名無しさん
09/12/18 13:41:41
基礎は大切ですよ

488:482
09/12/18 20:57:03
>>484
ありがとうございます。
為替のメールソフト(設定のレートになったらメールを送信する)
を作りたいと思っております。

メールを送るのは調べれば大丈夫だと思います。
わからないのは為替レートを別ページなどから参照?するような工程です。
なにかアドバイスがあればお願い致します。


489:デフォルトの名無しさん
09/12/19 00:55:33
ログイン付きページから参照サンプル。
ドメイン名称ってのはログインダイアログのタイトルとかに出てくる

import urllib2
auth_handler = urllib2.HTTPBasicAuthHandler()
auth_handler.add_password('ドメイン名称', 'ホスト名', 'ユーザ', 'パス')
opener = urllib2.build_opener(auth_handler)
urllib2.install_opener(opener)
data = opener.open('http://ホスト/ページ').read(100000)

あとはがんばってHTMLを解析するがよろし。

490:デフォルトの名無しさん
09/12/19 02:01:01
>>488
> わからないのは為替レートを別ページなどから参照?するような工程です。
例えば自分のWebページやBlogなんかに為替レートを埋め込んで
表示したい、とかそういうこと?

そういうパーツならたくさん配布されてるからそれを使う
自前で作るのならまずは為替レートを取得するところまでやってみては
為替レート API でぐぐるといい

491:デフォルトの名無しさん
09/12/19 02:44:19
本気なら
URLリンク(www.xignite.com)
軽くなら、自分の使ってるFX業者のページを解析していればいいんじゃね?

492:デフォルトの名無しさん
09/12/20 17:58:47
cursesが詳しく紹介されている日本語のサイトありませんか?

493:デフォルトの名無しさん
09/12/21 00:44:47
unicode(s, 'shift-jis')
のsに丸囲み数字 -> @ が入ってるとエラーになるみたいなのですが、変換させる方法はないのでしょうか?
unicodeにも丸囲み数字はあるらしいのですが・・・・・・

sが「あいうえお@」のときのエラー内容
UnicodeDecodeError: 'shift_jis' codec can't decode bytes in position 10-11: ille
gal multibyte sequence

494:デフォルトの名無しさん
09/12/21 00:47:08
何度も出てる話題だけど、 shift_jis には@なんて文字は無いからエラーになってるだけ。

お前が使っているのは Shift-JISに Microsoft の拡張が入ったもので、
cp932 とか Windows-31J とかいう名前の文字コード。

495:デフォルトの名無しさん
09/12/21 00:58:42
URLリンク(www.nicovideo.jp)

496:493
09/12/21 01:00:49
>>494
cp932にしたところ上手くいきました。
ありがとうございました。

497:デフォルトの名無しさん
09/12/21 07:35:23
Windows上でPythonで書いたスクリプトを、PythonがインストールされていないWindows PCでも動くように実行ファイル.exeにすることは可能ですか?


498:デフォルトの名無しさん
09/12/21 07:41:27
py2exeとか有るよ。

499:デフォルトの名無しさん
09/12/21 07:44:07
P言語
【プログラミング】
・本格的な汎用プログラミング言語には馴染めない連中が好んで使うPerl、Python、PHPあたりのあたまに「P」がつくスクリプト言語のこと。

500:デフォルトの名無しさん
09/12/21 08:37:41
本スレでどうぞ

501:デフォルトの名無しさん
09/12/21 09:36:52
「本物のプログラマーはパスカルを使わない」ってことだな

502:デフォルトの名無しさん
09/12/21 14:23:59
ウィンドウ内外でマウスのクリックが押されている状態かどうかを取得する方法はありますか?
押された時と離された時に実行されるものでもいいです。

pyautoというものを見つけたのですがキーボードのタイピングはフック出来たのですが
マウスのクリックは出来なさそうなので(僕が理解してないだけかもしれないですが)。

よろしくお願いします。






503:497
09/12/21 18:47:45
>>498
ありがとうございます。
そちらを勉強してきます。

504:502
09/12/21 19:40:05
すいません、自己解決しました。
pyHookってモジュールで出来ました。

505:デフォルトの名無しさん
09/12/22 06:56:24
C/C++の知識はあるのですが、今までインタプリタ言語を使ったことがありません。
この度新しくインタプリタ言語としてPythonを(日々の作業のお供としても役立ちそうなので)学ぼうとしているのですが、何で勉強するのがいいでしょうか。
書籍やウェブなどありそうですが、最近Pythonのメジャーバージョンアップがあったとも聞いています。
オススメを教えてください。お願いします。

506:デフォルトの名無しさん
09/12/22 07:17:46
>>505
公式チュートリアルをどうぞ
URLリンク(www.python.jp)
わかんなかったらここで聞けば誰かが優しく教えてくれます

Pythonには2.x系列と最近出た3.x系列があるけれど、
3.xはまだ殆どの人が使ってないので安心して2.x系列を勉強してください
バージョンは2.5以上(最新版は2.6.4)なら多分間違いないです

507:505
09/12/22 11:43:01
>>506
ありがとうございます。
現状につきまして
Pythonには便利なモジュールが多くあるが、まだPython 3.x系列には対応しているものが少ない
という認識でよろしいでしょうか?

508:デフォルトの名無しさん
09/12/22 14:31:56
URLリンク(www.gizmodo.jp)

509:デフォルトの名無しさん
09/12/22 14:46:57
新手のナンパだな

510:デフォルトの名無しさん
09/12/22 23:23:29
c言語を軽くさわった程度の者です。

x = 'abcde'

x[1] → 'b' (インデクシング)
x[1:3] → 'bc' (スライス)
x[1:-1] → 'bcd' (スライス)

これの法則性がわかりません。


511:510
09/12/22 23:25:23
のでどなたか教えていただけませんでしょうか。
よろしくお願い申し上げます。

512:デフォルトの名無しさん
09/12/22 23:37:16
>510 の質問の意図がわかりません。
のでどなたか教えていただけませんでしょうか。
よろしくお願い申し上げます。

513:デフォルトの名無しさん
09/12/22 23:39:08
>>508
URLリンク(www.youtube.com)
すげーな

514:デフォルトの名無しさん
09/12/22 23:49:27
>>512
…死ねばいいのに


515:デフォルトの名無しさん
09/12/23 00:01:08
x[1:-1]=x[1:len(x)-1]
こんな感じでいいか?

516:デフォルトの名無しさん
09/12/23 00:20:58
>>510
x[1]はCとあんまり変わらない。これはわかるとおもう。
x[1:3]みたいにコロンで区切られてた場合はスライスといって、
文字列の(正確にはシーケンスの)一部を取得できる。
x[1:3]だと、x[1]からx[3]の手前までだから"bc"。
あと、マイナスを使えば反対から数えられるから、x[1]から最後の一つ手前までで"bcd"。
リスト関係の処理はほんとに便利にできてるので勉強して損はない。

あとインデクシングって、「インデックスをつけること」だから意味がぜんぜん違うぞ。

517:デフォルトの名無しさん
09/12/23 00:23:34
x[:]

518:デフォルトの名無しさん
09/12/23 00:26:26
ちなみに
x[:] → 'abcde'
x[-1] → 'e'
x[:-1] → 'abcd'
x[-1:] → 'e'

519:デフォルトの名無しさん
09/12/23 00:30:15
要するに、x[a:b]のときはx[a]からx[b]の一つ手前(x[b-1])までになる。
ついでに、x[a:]はx[a]から最後までで、x[:b]は最初からx[b-1]まで。

520:デフォルトの名無しさん
09/12/23 01:06:53
>>110
分かりにくいだろうから、説明画像をぱぱっと作った。
URLリンク(up.mugitya.com)

というか、こういう画像はどっかにもあった気がするが…。

521:デフォルトの名無しさん
09/12/23 01:10:33
x[n] はcとか同様n+1番目の要素
x[a:b] は要素の区切り位置でa〜bの範囲の要素集合
と考えるとラク
"qwerty"なら
| q | w | e | r | t | y |
0  1  2  3  4  5  6

522:デフォルトの名無しさん
09/12/23 03:57:06
x[]

523:512
09/12/23 08:24:17
>>515-522
大変分かりやすい解説をいただき、
皆様ありがとうございます。

インデクシングという用語につきましては
> Python入門第2回 Pythonの文法
> URLリンク(www.f7.ems.okayama-u.ac.jp)
ここからのコピペでした。。。


524:デフォルトの名無しさん
09/12/23 09:33:21
インデクシング indexing で別に間違ってないよ
印を付けるのと添え字で参照する、どちらの意味かは文脈から明らかだし

URLリンク(docs.python.org)
> 5.3. Tuples and Sequences
> We saw that lists and strings have many common properties,
> such as indexing and slicing operations.

あと推薦図書スレからコピペ

Python 3 プログラミング徹底入門
著:マーク・サマーフィールド(Mark Summerfield

525:デフォルトの名無しさん
09/12/23 13:01:23
>>524
ありがとうございます。


526:デフォルトの名無しさん
09/12/23 14:20:09
>>> x='abcd'
>>> x.split()
['abcd']
>>> x[:]
'abcd'
>>> x.split('')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: empty separator
>>>

['a', 'b', 'c', 'd']
というリストにしたいときはどうすればいいでしょうか?

527:デフォルトの名無しさん
09/12/23 14:24:46
>>526
list(x)

528:デフォルトの名無しさん
09/12/23 14:32:46
>>527
ありがとうございます
なんかオブジェクト指向っぽくないですね

529:デフォルトの名無しさん
09/12/23 14:42:07
perl に毒されすぎワロス wwww

530:デフォルトの名無しさん
09/12/23 14:43:15
listオブジェクトのコンストラクタにイテレータブルなオブジェクト入れたらlistに変換できる、
って話だから思いっきりオブジェクト指向だぜ。

なんでもメソッド主義ってわけじゃないのは確かだが。

531:デフォルトの名無しさん
09/12/23 14:48:16
>>> x[:]='abcd'
>>> x
['a', 'b', 'c', 'd']

532:デフォルトの名無しさん
09/12/23 14:49:57
そんな黒魔術いらんがな

533:デフォルトの名無しさん
09/12/23 14:50:12
>>530
len(x)
4
これはlenオブジェクトのコンストラクタにカウンタブルなオブジェクトを入れたんですね
わかります

534:デフォルトの名無しさん
09/12/23 14:50:38
ていうか動きすらしないよなw
引っかかった漏れ乙

535:デフォルトの名無しさん
09/12/23 14:53:38
>>534
>>> x=[]
>>> x[:]='abcd'
>>> x
['a', 'b', 'c', 'd']
スマソ


536:デフォルトの名無しさん
09/12/23 14:55:34
>>533
lenはオブジェクトじゃねえよw

537:デフォルトの名無しさん
09/12/23 14:58:02
>>536
オブジェクト指向に毒されてる人を皮肉ったんだろう

というか>>535が動いて悔しい
リファレンス読んでくる

538:デフォルトの名無しさん
09/12/23 14:58:48
wxWizardで次のページに進ませるにはどうしたらよいのでしょうか?

def Process(self):
  e = wx.wizard.WizardEvent(wx.wizard.EVT_WIZARD_PAGE_CHANGING)
  self.wizard.ProcessEvent(e)  #

wxWizardEventオブジェクトを生成してwxWizardオブジェクトのProcessEventメソッドに
渡していますが上手くいきません。

Traceback (most recent call last):
  File "C:\Documents and Settings\user\My Documents\python\testwizard.py", line 169, in Process
    self.wizard.ProcessEvent( wx.wizard.EVT_WIZARD_PAGE_CHANGING )
  File "C:\Program Files\python\lib\site-packages\wx-2.8-msw-unicode\wx\_core.py", line 3863, in ProcessEvent
    return _core_.EvtHandler_ProcessEvent(*args, **kwargs)
TypeError: in method 'EvtHandler_ProcessEvent', expected argument 2 of type 'wxEvent &'

539:538
09/12/23 15:04:17
ごめんなさい。エラーメッセージが別のものでした。

Traceback (most recent call last):
  File "C:\Documents and Settings\user\My Documents\python\testwizard.py", line 167, in Process
    e = wx.wizard.WizardEvent(wx.wizard.EVT_WIZARD_PAGE_CHANGING)
  File "C:\Program Files\python\lib\site-packages\wx-2.8-msw-unicode\wx\wizard.py", line 84, in __init__
    _wizard.WizardEvent_swiginit(self,_wizard.new_WizardEvent(*args, **kwargs))
TypeError: in method 'new_WizardEvent', expected argument 1 of type 'wxEventType'


540:デフォルトの名無しさん
09/12/23 15:04:56
>>537
>>536 は結局 x[:]=list('abcd') ってことでは?
perl っぽいが

541:デフォルトの名無しさん
09/12/23 15:18:30
なにがperlっぽいのかよく分からない

542:デフォルトの名無しさん
09/12/23 15:19:11
lenが嫌ならいちいち__len__呼んでろよ。

543:デフォルトの名無しさん
09/12/23 15:52:50
>>540
URLリンク(www.python.org)
"If the target is a slicing:" での説明からすると、>>540 の文や

>>> x = ['a']
>>> x[:] = ['a', 'b', 'c']
>>> x
['a', 'b', 'c']

はまだ理解できるんだけど、>>535

>>> x=[]
>>> x[:]='abcd'
>>> x
['a', 'b', 'c', 'd']

は左辺と右辺の型が list と str で異なってるから
> The assigned object should be a sequence object of the same type.
に違反してエラーになりそうな気がするんだけど、そうはならない
気味悪いから誰か説明してくださいお願いします

544:デフォルトの名無しさん
09/12/23 16:08:09
スライシングの右側はイテレータならなんでも良かったはず。

545:544
09/12/23 16:16:02
日本語がおかしかった。
リストのスライシングの代入文では、右辺にイテレータブルなオブジェクトをとる。

>>> x = []
>>> x[:] = {1: 'a', 2: 'b'}
>>> x
[1, 2]


546:デフォルトの名無しさん
09/12/23 16:16:38
>>544
>>> L = []
>>> L[:] = open('c:/python26/license.txt')
>>> L[:5]
['A. HISTORY OF THE SOFTWARE\n', '==========================\n', '\n', 'Python w
as created in the early 1990s by Guido van Rossum at Stichting\n', 'Mathematisch
Centrum (CWI, see URLリンク(www.cwi.nl)) in the Netherlands\n']

本当だ。見なかったことにしよう

547:544
09/12/23 16:25:02
なぜ見なかったことにするんだw

ストリングを一文字ずつリストに入れるには list('abcd') が一番いいと思うよ。

548:デフォルトの名無しさん
09/12/23 16:30:52
可読性を最大にするなら
[x for x in 'abcd']
どうみたって1文字ずつ分解してる

549:デフォルトの名無しさん
09/12/23 18:00:29
TOOWTDIはどこいった...

550:デフォルトの名無しさん
09/12/23 18:06:20
      >>544を信じますか?

   信じる         → 信じない


よしこれで俺のPythonは清いままだ

551:デフォルトの名無しさん
09/12/23 18:42:50
>>> x=(1,2,3)
>>> y=[0,2,4,6,8]
>>> y[1:4] = x
>>> y
[0, 1, 2, 3, 8]

これでエラーが出て欲しいと申すか

552:デフォルトの名無しさん
09/12/23 18:44:32
そんなこというなら*argsだってそうだ
from __future__ import print_function
print(*open('C:\\Python26\\LICENSE.txt'))

**kwargsだってdictっぽければいい
class Kwargs(object):
def __init__(self, **kwargs): self.kw = dict(kwargs)
def __getitem__(self, name): return self.kw[name]
def keys(self): return self.kw.keys()

def dump(**kwargs): print kwargs
dump(**Kwargs(a=1))

553:デフォルトの名無しさん
09/12/23 23:14:04
Windows XP上で、
標準入力から入力されたパスを調べて、
1.実在するディレクトリだったらそのディレクトリとサブディレクトリの中のファイルのフルパスの一覧を標準出力に出力する。
2.実在するファイルだったらそのフルパスを標準出力に出力する。
3.実在しないパスだったらエラーを標準出力に出力する。

こんなPythonスクリプトをどなたか書いて下さいませんか?


554:デフォルトの名無しさん
09/12/23 23:44:25
Python の宿題ここで答えます Part 2
スレリンク(tech板)

555:デフォルトの名無しさん
09/12/23 23:56:58
>>554
ありがとうございます。
行ってきます。


556:デフォルトの名無しさん
09/12/24 06:44:33
>>551
めっそうもございません
お許しください

メモ
>>> a = [0, 1, 2]
>>> a[1:2] = 'abcde'
>>> a
[0, 'a', 'b', 'c', 'd', 'e', 2]

557:デフォルトの名無しさん
09/12/24 12:05:17
空飛ぶモンティパイソンを見ようと思うんだが
40thアニバーサリーBOX買っとけばいいのか?

558:デフォルトの名無しさん
09/12/24 14:28:39
>>538-539 おながいします

559:デフォルトの名無しさん
09/12/24 16:55:54
>>538-539 おなにいします

560:デフォルトの名無しさん
09/12/25 20:24:26
test

561:デフォルトの名無しさん
09/12/26 14:54:36
リストaに対して
a[len(a)]

a[len(a):]
を参照したり、代入したらエラーになりますか?
それともC系みたいに未定義の動作になりますか?


562:デフォルトの名無しさん
09/12/26 14:57:37
>>561
全く問題ない

Cで未定義だというのも引っかかるものがあるんだが・・・・
未定義になる例を書いてCスレで一度質問した方がいいぞ

563:デフォルトの名無しさん
09/12/26 14:58:41
んなわけないだろ俺死ね
忘れて下さい

564:デフォルトの名無しさん
09/12/26 15:09:24
>>561

>>> a = [1, 2, 3]
>>> a[len(a)]
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
IndexError: list index out of range

>>> a[len(a):] = ['a', 'b', 'c']
>>> a
[1, 2, 3, 'a', 'b', 'c']

>>> a[100:] = [1]
>>> a
[1, 2, 3, 'a', 'b', 'c', 1]

スライスへの代入はちと特殊
>>544あたりでやってるからそっち読んでね

565:561
09/12/26 17:11:26
>>562-564
ありがとうございます。
> >>> a = [1, 2, 3]
> >>> a[len(a)]

> >>> a[len(a):] = ['a', 'b', 'c']
> >>> a
> [1, 2, 3, 'a', 'b', 'c']
はわりとすんなり納得しましたが
> >>> a[100:] = [1]
> >>> a
> [1, 2, 3, 'a', 'b', 'c', 1]
はびっくりしました。
こういう仕様なんですね。


566:デフォルトの名無しさん
09/12/27 13:53:10
ここでいいのかどうか分かりませんが教えてください
python で imap でメールを読んだものを html に出力すると
ヘッダ中のメールアドレスなどが <hoge@fuga.hage> になっている部分だけが
表示されません
たぶん <〜> で囲まれた部分が html のタグだとブラウザが解釈してしまうからだと思うのですが
python でこれを escape するにはどうするのが一般的でしょうか?

567:デフォルトの名無しさん
09/12/27 13:58:45
>>566
str.replace
str.translate
cgi.escape
xml.sax.saxutils.escape

568:デフォルトの名無しさん
09/12/27 16:42:24
>>> 2**10**4
19950631168807583848837421626835850838234968318861924548520089498529438830221946
63191996168403619459789933112942320912427155649134941378111759378593209632395785
とても長いので中略
70029097668650568557157505516727518899194129711337690149916181315171544007728650
57318955745092033018530484711381831540732405331903846208403642176370391155063978
90007428536721962809034779745333204683687958685802379522186291200807428195513179
48157624448298518461509704888027274721574688131594750409732115080498190455803416
826949787141316063210686391511681774304792596709376L

と表示されました。
2も10も4も普通の整数型だと思うのですが、
演算結果が自動的にlongな整数になっています。
これはどうしてでしょうか?
オーバーフローしそうになったら自動的にこうしてくれるのでしょうか?



569:デフォルトの名無しさん
09/12/27 16:47:23
そうです

570:デフォルトの名無しさん
09/12/27 16:48:01
>>569
ありがとうございます。
あと、
# coding: shift-jis
って書いてあるプログラムを見かけるのですが、
これはShift-JISで書いている場合は常に付けた方がよいものでしょうか?


571:デフォルトの名無しさん
09/12/27 16:55:11
>>570
u'そうですね'
をつねに使ってるなら無意味
'そうですね'
とかやってるなら書いといた方がいい

572:デフォルトの名無しさん
09/12/27 16:57:43
>>570

2.x系はデフォルトエンコーディングがASCIIなので、ソースコードに非ASCIIな文字を使ってるなら付ける必要あり。
>>571はダウト

573:デフォルトの名無しさん
09/12/27 16:57:48
>>571
なるほど。
お世話になり、ありがとうございました。

574:デフォルトの名無しさん
09/12/27 16:58:47
>>572
# coding: shift-jis
の記述じゃデフォルトエンコーディングはかわんねーだろ

575:デフォルトの名無しさん
09/12/27 16:59:01
>>572
自分が常にこれからもShift-JISで書き続けるとして、
# coding: shift-jis
と付けている分には悪いことはありませんか?

576:デフォルトの名無しさん
09/12/27 17:04:47
>>574
ソースコードのデフォルトエンコーディング。という意味でした。



577:デフォルトの名無しさん
09/12/27 17:19:29
print文の後ろに,が付くか付かないかで改行されるかどうかが決まるのでしょうか?

付けると改行されず、付けないと改行される、でよろしいですか?


578:デフォルトの名無しさん
09/12/27 17:21:19
>>577
はい。リファレンスマニュアルのprint文の箇所も参照してね。

579:デフォルトの名無しさん
09/12/27 17:27:25
>>578
ありがとうございます。
print 文がカンマで終了していない限り、末尾には文字 "\n" が書き出されます。この仕様は、文に予約語 print がある場合のみの動作です。


580:デフォルトの名無しさん
09/12/27 17:33:07
このようにprint文は特殊なので
3.0からは関数になります。

581:デフォルトの名無しさん
09/12/27 17:34:08
import math

from math import *
とでは、
伝統や文化的な理由で
どちらが推奨されるとかありますか?


582:デフォルトの名無しさん
09/12/27 17:55:00
>>581
一般的には前者推奨。
後者は小規模スクリプトかインタラクティブシェルで使うぐらい。

583:デフォルトの名無しさん
09/12/27 18:09:16
>>582
ありがとうございます。


584:デフォルトの名無しさん
09/12/27 21:26:49
Windowsで
〜.py(URLリンク(codepad.org))をダブルクリックした場合
これを実行すると、コマンドプロンプトが一瞬で閉じてしまいます。
(コマンドラインからpython 〜.pyとする文には大丈夫ですが。)

最後に何かキー入力を受けるまで画面を閉じないようにする
1文などありませんでしょうか?


585:デフォルトの名無しさん
09/12/27 21:28:32
import os
os.system('pause')

586:デフォルトの名無しさん
09/12/27 21:44:31
>>585
ありがとうございます!
まさにこれがしたかったです。


587:デフォルトの名無しさん
09/12/27 21:48:30
codepadでは通るこのコード
URLリンク(codepad.org)

Python 2.6.4で、エラーになります。
エラーメッセージは
URLリンク(codepad.org)
です。
どうしてでしょうか。。。

588:デフォルトの名無しさん
09/12/27 22:20:43
>>587
同じディレクトリに random.py があるんじゃね?

589:デフォルトの名無しさん
09/12/27 22:48:06
>>588
それでした。
どうもありがとうございます。

590:デフォルトの名無しさん
09/12/27 23:21:37
 a=[3,7]
 b=a
 a=a+[2]
を実行すると
 b は [3,7]
 a は [3,7,2]
となる。他方
 a=[3,7]
 b=a
 a.append(2)
を実行した場合には
 a も b も [3,7,2]
である。

この違いにびっくりしました。
Pythonは基本的には参照を渡すのか、コピーを渡すのか、
どっちが多いですか?


591:デフォルトの名無しさん
09/12/27 23:34:32
>>590
まず、Pythonの変数は全部参照だから、「渡す」のは全部参照。
コピーを作ってそのコピーの参照を渡すのか、元の参照を渡すのかの違いでしかない。
a = [3,7] # [3,7] というリスト (A) を作って、その参照を a に入れる
b = a # a に入っている (A) への参照を b に入れる
a = a + [2] # a + [2] で、 (A) と [2] を連結した新しいリスト (B) を作る。そしてそれを a に代入する。
a.append(2) # a が参照しているリスト (A) に、 2 という値のオブジェクトへの参照を追加する。

+ という演算子が「新しいオブジェクトを作る」という動作をしている。
# immutable な型なら、+ 演算子で新しいオブジェクトを作らずに既存のオブジェクトを使いまわすのもアリ

592:>590 >505
09/12/27 23:39:21
>>591
あー、なるほど!
非常に分かりやすい解説ありがとうございます。
どうにもC++で型宣言を意識していたため、よく分かっておりませんでした、
ありがとうございました。


593:デフォルトの名無しさん
09/12/28 08:08:06
ばっさばっさとさばいておりますな。初心者スレにふさわしい。

594:デフォルトの名無しさん
09/12/28 10:17:58
URLリンク(codepad.org)
この挙動も
> この不自然な結果は、Pythonが a=[[0]*3]*3 を処理するのに (内部で)
>  t=[0]*3
>  a=[t]*3
> とやった為に発生したと考えられる。
> この問題は次のようにすれば回避できる。
>  a=[0]*3
>  a[0]=[0]*3
>  a[1]=[0]*3
>  a[2]=[0]*3
こう説明がありました。
うーん。
つまり[0]*3は新しく別のリストを作っており、一方
a=[t]*3は[t, t, t]だから その場に存在しているリストは
a==[t, t, t]とt==[0, 0, 0]の2つだということですか?


595:デフォルトの名無しさん
09/12/28 10:22:35
[0] * 3 は [0, 0, 0] という新しいリストを作る
[t] * 3 は [t, t, t] という新しいリストを作る

0 は immutable だから、同じオブジェクトの参照がたくさんあっても問題にならないけど、
リストは mutable だから、同じオブジェクトの参照がたくさんあると、一つを書き換えると他からの
参照にも影響を与える。

596:デフォルトの名無しさん
09/12/28 10:44:34
>>595
ありがとうございます。
URLリンク(codepad.org)
これでxの値を7から-5に変更したら、
tは[x, x, x]で
aは[t, t, t]なので
t, aが共に変更されるのではないかと思うのですが、
実際は変更されません。
これは何故でしょうか。


597:デフォルトの名無しさん
09/12/28 11:15:04
>>596
これで納得してくれるかは怪しいけど

a = 1 # 名前 a は 1 を指す
a # 名前 a を評価する。評価して得られた値は 1
b = [a, a] # 名前 b は [a, a] を評価して得たリスト [1, 1] を指す
a = 2 # 名前 a は 2 を指す
b # 名前 b は相変わらず [1, 1] を指したまま

あと a = 1 は「名前は a を指す」って代入文であって数学の等式じゃないから気をつけて
a = 1; a = 2 なんてのも Python では成立する

598:デフォルトの名無しさん
09/12/28 11:29:24
>>596
リストはオブジェクトへの参照のリスト。
他の言語で参照というと変数への参照の場合があるけど、Pythonの場合は変数への参照は無い。

x = 7 # 7 という値のオブジェクト (A) を用意して、x が (A) を参照するようにする。
[x] # x が参照している (A) というオブジェクト一つを要素にしたリスト [ (A) ] を作る。このオブジェクトを(B) とする。
t = [x] * 3 # (B) を3回繰り返したリストのオブジェクトを作る。これを (C) とする。 (C) は [(A), (A), (A)] になる。 t に (C) への参照を代入する。
[t] # t が参照している (C) というオブジェクト一つを要素にしたリスト [ (C) ] つまり [ [ (A), (A), (A)] ] を作る。このオブジェクトを (D) とする。
a = [t] * 3 # (D) を3回繰り返したリストのオブジェクト [ (C), (C), (C) ] をつくる。このオブジェクトを (E) とする。

x = -5 # -5 という値のオブジェクト (F) を用意して、 x が (F) を参照するようにする。 (A) の値は変更されない。

結果として、 a が参照しているオブジェクト (E) の値は [(C), (C), (C)], t が参照しているオブジェクトは (C),
(C) の値は [(A), (A), (A)]. (A) の値は 7 のまま。

599:591=595=598
09/12/28 11:46:52
ちなみに、>>590はどの言語の経験があるの?
ベースとなる言語があれば、その言語で言えばどういう意味か説明に使える。

>>596 を Javaで書き換えると、

Integer x = Integer.fromInt(7); // x = 7

ArrayList<Object> t = new ArrayList<Object>();
for (int i = 0; i < 3; i++) t.add(x); // t = [x] * 3

ArrayList<Object> a = new ArrayList<Object>()
for (int i = 0; i < 3; ++i) a.add(t); // a = [t] * 3

x = Integer.fromInt(-5); // x = -5

Javaが判れば、xを書き換えてもaやtに影響ないのが判ると思う。

600:599
09/12/28 11:52:55
ごめん、 Integer.fromInt は Integer.valueOf の間違い。

JavaはPythonのオブジェクトを説明するのには向いているけど、
ここ5年以上マトモに使えてないので、文法エラーやメソッドのミスには目をつぶってくれ。

ちなみに、Pythonのオブジェクトを説明するのにJavaが向いている理由は、
整数と文字列がimmutableだから。
x = 7
y = 7
で x is y の結果が言語で規定されていない理由は、
Integer x = Integer.valueOf(7);
Integer y = Integer.valueOf(7);
x == y の結果が言語で規定されていない理由と同じ。

601:590
09/12/28 11:54:47
みなさまありがとうございます。
私はC++プログラマです。
そのため変数の型宣言がないPythonを学び、
ところどころで困惑してお世話になっております。

とても長くなったため私の現在の認識を自分でながめるために書き出してみました。
URLリンク(codepad.org)

Javaの経験はありませんが、ご教示いただいたJavaコードはC++な見方で
推測して拝見しました。
そことのアナロジーで解釈しても
この1.〜3.の解釈は正しいと思うのですが、
そうだとしますと
4.でt, aが変更される理由がまた分からなくなります。

どうして4.だけ変更されるのでしょうか?


602:600=methane
09/12/28 12:12:25
>>601
C++にはJavaのObject型みたいなのがないから、void*で代用するけど、こんな感じになる。 (キャストは省略)
x = 7
t = [x]*3
a = [t]*3

void *x = new int(7);

vector<void*> *t = new vector<void*>;
for (int i = 0; i < 3; ++i) t->push_back(x);

vector<void*> *a = new vector<void*>;
for (int i = 0; i < 3; ++i) a->push_back(t);

ここまでで初期状態。
じゃぁ、初期状態から t = 3.14 を C++ でいうと、
t = new double(3.14);
t が新しく別のオブジェクトをポイントするようになるだけで、 a[0]は、もともとtが指していた [7,7,7] を差し続ける。

つぎに、初期状態から a[0][0] = -5 を C++ でいうと、
(*((*a)[0]))[0] = -5;
t というポインタが指している vector オブジェクトの先頭要素を -5 に書き換えている。
で、tもaもポイントしている先は変わらないまま、tがポイントしているvectorオブジェクトの先頭要素だけを書き換えているので、
t と a の両方が影響を受ける。

603:methane
09/12/28 12:21:08
C++プログラマなら、Pythonの変数は全部C++でいうポインタ変数で、オブジェクトは全部
new やその他の手段でヒープ上に取られるという理解をすると良いと思う。

「参照」と呼んでいるのは全部ポインタのことで、

int a = 3;
int &x = a;
int *y = &a;

でいうところの a のような、変数と値が完全に束縛された存在が無い。
あとは、
a[0][0] = -5 がリスト「オブジェクトに対する変更」なのにたいして、
t = -5 がオブジェクトは全く変更されず、「ポインタ変数が別のアドレスを指すようになる」
という違いを把握できれば、一気に壁を突破できるはず。


次ページ
最新レス表示
スレッドの検索
類似スレ一覧
話題のニュース
おまかせリスト
▼オプションを表示
暇つぶし2ch

5296日前に更新/249 KB
担当:undef