Pythonのお勉強 Part6
レス数が900を超えています。1000を超えると表示できなくなるよ。
0001デフォルトの名無しさん
NGNGhttp://www.python.jp/Zope/
Python オフィシャルサイト
http://www.python.org/
前スレ
http://pc5.2ch.net/test/read.cgi/tech/1095684242/
0809デフォルトの名無しさん
2005/07/05(火) 21:07:06package == モジュール名という事なら、Pythonではモジュール名 == ファイル名なので、
通常、lowercaseでアンダースコアなしでなるべく短い名前が推奨されてる。
ライブラリやフレームワークを使う場合は、既存のものに併せて内部で一貫性を保つのが推奨されているので、
例えば、wxPythonでの開発なら、wxWidegtsの命名規則を適用する事等もある。
アプリの名前は自由に付けてもいいと思う。
0810デフォルトの名無しさん
2005/07/05(火) 21:10:35よーするに、俺の決まりが絶対、他の世界は知らないってことですか?w
0811デフォルトの名無しさん
2005/07/05(火) 21:35:000812807
2005/07/05(火) 22:51:27なるほど。〆(.. ) 基本的には1単語になるのかな。
複数単語をくっつけたいときはディレクトリを掘れということなんでしょうか。
でもディレクトリを掘ると__init__.pyを用意しないといけないようなんですが、ディレクトリが他のパッケージと衝突したらどーするんでしょー?
そもそも何か勘違いしてるような気もしないではないですが……。
0813デフォルトの名無しさん
2005/07/06(水) 06:23:35標準モジュールでも名前の区切りに"_"使ってるのもあるので、駄目って訳ではない。
でも、package名でアャ塔_ースコア使bチてるのは見た試魔ェないなぁ。�皷栫A推奨されbトいるという根給窒ヘPEP8 style guideより。
privateなモジュールを現す為に、例えば、拡張モジュール等でアンダースコアを名前の先頭に使う場合はある。
>>812
top levelのパッケージ(ディレクトリ)名さえ気を付ければ、大丈夫だとは思うけど?
Perlみたいに Net:: とかの名前空間を共有する事はないので、ユニークな名前を付ける。
パッケージ名よりはむしろ、モジュール(ファイル)名が標準モジュールと名前が衝突した場合に、
困った事になるんだけど。
CPythonではあまりみかけないが、JythonなんかだとJAVAの様に、
org.python.core ってURIをパッケージ名として使ってるところもある。
0814デフォルトの名無しさん
2005/07/06(水) 19:56:36cx_Oracleは?
0815デフォルトの名無しさん
2005/07/06(水) 20:45:31なんで参照なのに引数の値を変えられないんだよわけわからん!!
0816デフォルトの名無しさん
2005/07/06(水) 21:00:50その変数はプリミティブな型?
0817デフォルトの名無しさん
2005/07/06(水) 21:32:57Because of immutability.
0818デフォルトの名無しさん
2005/07/06(水) 22:10:17・ しかしポインタの指す先に代入する方法 *p = 123 がPythonにはない
ということで勘弁してくれないか。
0819デフォルトの名無しさん
2005/07/06(水) 23:54:41いいよね?
0820デフォルトの名無しさん
2005/07/07(木) 00:01:20文字列も変更できないから"値渡し"扱い。
0821デフォルトの名無しさん
2005/07/07(木) 00:04:160822デフォルトの名無しさん
2005/07/07(木) 00:50:37言ってる意味がわかんね。
0823デフォルトの名無しさん
2005/07/07(木) 01:30:15ふつーわかるぞ
0824デフォルトの名無しさん
2005/07/07(木) 02:38:020825デフォルトの名無しさん
2005/07/07(木) 03:11:39一般的な定義は知らんが。
python では単に参照を値渡ししてるだけだと桃割れ
0826デフォルトの名無しさん
2005/07/07(木) 06:33:15参照と言ってるのがC++の参照渡しだとすると、オブジェクトの内部状態は変える事が出来ても、
その変数が示していたオブジェクト自体を別のオブジェクトに変える事は出来ない。
ポインタによる参照の事を言ってるのだとしたら、数値も他のオブジェクトもPyObject型へのポインタなので。
Cレベルでの解釈では >>818が正しいと思う。
呼出先のスコープで呼出元のスコープの変数に影響を与えられるかどうかで判断してる様だけど、
これは引数の渡され方は関係なく、オブジェクトがmutableかimmutableかどうかの問題。
呼出元のスコープの変数を変更する等は、出来ないわけではないけど、
普通は(pythonでは)、オブジェクトのメンバにするとか、関数は値を返して呼出元で代入するようなスタイルで関数を設計する。
0827デフォルトの名無しさん
2005/07/07(木) 13:53:260828デフォルトの名無しさん
2005/07/07(木) 14:05:080829デフォルトの名無しさん
2005/07/07(木) 16:33:31こういう名前の付け方しちゃいかんと先輩にいわれました・・・
0830デフォルトの名無しさん
2005/07/07(木) 17:00:28# いや,俺もその名前の付け方はどうかと思うけどな...
0831デフォルトの名無しさん
2005/07/07(木) 17:28:30# 女の先輩いないけどな...
0832デフォルトの名無しさん
2005/07/07(木) 17:30:44本来ならclosure使いたいところなんだけど、
Pythonでは、syntaxの制限の為 f(lambda x:m = x) って書けない。
0833デフォルトの名無しさん
2005/07/07(木) 17:32:460834デフォルトの名無しさん
2005/07/07(木) 17:35:33x,y,z = f(x,y,z)
0835デフォルトの名無しさん
2005/07/07(木) 18:22:48そういうわけなので、2.4以降は subprocess.Popen を使おう。
# あと、どうして駄目なのか根拠も聞いておいた方がいいよ。
0836デフォルトの名無しさん
2005/07/07(木) 22:28:590837デフォルトの名無しさん
2005/07/07(木) 22:59:43よくわかんないけど、これのことかも
http://www.konami.co.jp/am/popn/image/popn14.gif
0838デフォルトの名無しさん
2005/07/07(木) 23:16:34あ、そういうモジュールもあるん?まだそこまで進んでないから気がつかなかった
0839デフォルトの名無しさん
2005/07/08(金) 00:36:32print t
ってすると変なんだけど・・・。
print t[0]とかするとちゃんとなるので、壊れたのかと思い
再インストールしたんですが直りませんでした。助けてください
0840デフォルトの名無しさん
2005/07/08(金) 00:54:420841デフォルトの名無しさん
2005/07/08(金) 00:55:070842デフォルトの名無しさん
2005/07/08(金) 02:13:31「場所はわかりませんが遭難しました。助けて下さい」
と言ってる様なもんだ
0843デフォルトの名無しさん
2005/07/08(金) 02:30:350844デフォルトの名無しさん
2005/07/08(金) 02:33:12>>> t = ["トマト"]
>>> t
['\xe3\x83\x88\xe3\x83\x9e\xe3\x83\x88']
>>> repr("トマト")
"'\\xe3\\x83\\x88\\xe3\\x83\\x9e\\xe3\\x83\\x88'"
>>>
というわけだ。
0845デフォルトの名無しさん
2005/07/08(金) 04:45:210846デフォルトの名無しさん
2005/07/08(金) 10:57:410847デフォルトの名無しさん
2005/07/08(金) 13:23:20マルチバイト文字等はそういう風に表示される。
>>> t = ["トマト", "メロン", "バナナ"]
>>> print r
["トマト", "メロン", "バナナ"]
>>> print repr(t)
['\xa5\xc8\xa5\xde\xa5\xc8', '\xa5\xe1\xa5\xed\xa5\xf3', '\xa5\xd0\xa5\xca\xa5\xca']
>>> class MyString(str):
... def __repr__(self): return self
>>> t = ["トマト", "メロン", "バナナ"]
>>> map(MyString, t)
["トマト", "メロン", "バナナ"]
0848デフォルトの名無しさん
2005/07/08(金) 21:30:160849デフォルトの名無しさん
2005/07/08(金) 23:32:500850デフォルトの名無しさん
2005/07/09(土) 00:54:050851デフォルトの名無しさん
2005/07/09(土) 01:02:090852デフォルトの名無しさん
2005/07/10(日) 00:22:58typeだと組み込みの型はわかるのですが、自分でクラスを定義した
ものは全部'instance'というのになってしまいます。
0853デフォルトの名無しさん
2005/07/10(日) 01:00:000854デフォルトの名無しさん
2005/07/10(日) 01:45:06... pass
...
>>> type(OldStyle())
<type 'instance'>
>>> class NewStyle(object):
... pass
...
>>> type(NewStyle())
<class '__main__.NewStyle'>
0855デフォルトの名無しさん
2005/07/10(日) 01:49:470856デフォルトの名無しさん
2005/07/10(日) 01:50:460857デフォルトの名無しさん
2005/07/10(日) 05:18:26ありがとうございます。できました。なるほどです
0858デフォルトの名無しさん
2005/07/10(日) 12:35:540859デフォルトの名無しさん
2005/07/10(日) 13:52:05共通の処理でクラス名を取り出すとかなら...
>>> class OldStyle: pass
...
>>> class NewStyle: pass
...
>>> OldStyle().__class__.__name__
'OldStyle'
>>> NewStyle().__class__.__name__
'NewStyle'
0860デフォルトの名無しさん
2005/07/10(日) 14:12:13(C++みたいな言語もありますが)
……ところで、objectクラス(?)の説明って、これだけ?
http://www.python.jp/doc/release/lib/built-in-funcs.html#l2h-49
0861デフォルトの名無しさん
2005/07/10(日) 15:04:43最初は全クラス共通の基底クラスというものは中田。
0862デフォルトの名無しさん
2005/07/10(日) 16:51:51確かに、PyObjectは実態が無い内部的なものだけど。すべてのオブジェクトに共通する、
マジックメソッドやプロパティに関する規約の部分がないわけではないです。
実際>>859の方法ですべてのオブジェクトのクラス名がわかるわけだし。
階層構造のクラス図を想定してるなら、'type'がその基底と言えるかな。
ここでのtypeは、組み込み関数のオブジェクトの型を知る為のtypeではなく、
3つの引数を取る'型'のコンストラクタとしてのtypeです.
# クラシックな古い方のクラスでは、classobjがクラスの型
>>> class Foo: pass
...
>>> type(Foo)
<type 'classobj'>
>>> import new
>>> type(new.classobj) # or type(type(Foo))
<type 'type'>
# 組み込み型の型もtype
>>> type(str), type(object), type(type)
type 'type'>, <type 'type'>, <type 'type'>]
0863デフォルトの名無しさん
2005/07/10(日) 16:52:13type
+-- classobj
+-- ユーザー定義クラス(classic style)
+-- instance (classic style classのインスタンス)
+-- object
+-- ユーザー定義クラス(new style)
+-- new style classのインスタンス
+-- その他の組み込み型(str, int, list, dict ...)
> Pythonでは暗黙の共通の祖先て無い
2つのクラスシステムが混在してる為の誤解かと。
"クラス"自体が"型"のインスタンスの一種なので、typeを継承したクラスを作る事で、
独自のスタイルのクラスシステム(>>869の文脈での基底クラス)を作る事も出来る。
> ……ところで、objectクラス(?)の説明って、これだけ?
それは、組み込み関数のobjectなので別物。詳しい説明は、
http://www.cafepy.com/article/python_types_and_objects/index.html
http://www.python.jp/doc/release/ref/types.html (ここで言うクラスインスタンスがobject)
0864デフォルトの名無しさん
2005/07/10(日) 18:27:340865デフォルトの名無しさん
2005/07/10(日) 18:56:07hash = md5.new()
target = file(name, 'r')
hash.update(target.read())
target.close()
print hash.hexdigest()
こんな感じでバイナリファイルのMD5ハッシュを出力しようと思ったのですが、
Windows上では間違った値になってしまいます(Mac OSX上では正しく動いた)。
どの辺がいけないのか、教えてください。。
0866デフォルトの名無しさん
2005/07/10(日) 18:58:14'r'だとテキストファイルとみなされて改行コード変換が入るので、'rb'で。
0867デフォルトの名無しさん
2005/07/10(日) 19:07:31ありがとうございました。
'rb'にしたら正しい値を吐くようになりましたサンクス
0868デフォルトの名無しさん
2005/07/14(木) 22:25:38公に配布されると思うのですが、このGPL版のQTを利用した場合、
pythonのスクリプトもGPLに従わないといけないのでしょうか。
そうしたくないのですが、プログラムとして一体として動作するのなら
GPLにしないといけないのではないかと思っています。
0869デフォルトの名無しさん
2005/07/15(金) 07:27:04判断が分れる所なのでは?
Emacs Lispで作成されたアプリなんかにはBSDLとかあるので問題ないのかも
ただしGPLと互換性のあるライセンスでないとだめだなのは確か
ttp://www.gnu.org/licenses/license-list.ja.html
0870デフォルトの名無しさん
2005/07/15(金) 20:29:17簡単にいいますと。
m=10
word="I am"
word+=m
word+="years old."
でwriteでwordの中身をファイルに書きたいのですが3行目で違う型同士は連結できないと言われます。
ということはmをstr型にキャストする必要があると思うのですがどうやってキャストするのかが
分かりません・。キャストの仕方を教えてください。よろしくお願いします。
0871デフォルトの名無しさん
2005/07/15(金) 20:35:49ただしそういうとき、普通はフォーマット演算子を使う。
>>> "I am %d yeard old" % (m)
'I am 10 yeard old'
引数が一つなら()は省略できる。
"I am %d yeard old" % m
0872デフォルトの名無しさん
2005/07/15(金) 21:04:530873デフォルトの名無しさん
2005/07/17(日) 19:52:49Python使ってます
0874デフォルトの名無しさん
2005/07/17(日) 19:55:14俺が思ってるほどPerlっぽく無いのかも
0875デフォルトの名無しさん
2005/07/17(日) 20:22:30意味不明なRubyのコードはPerlっぽい
シンタックスシュガーを使いまくっている
だけ,という場合が多いな
0876デフォルトの名無しさん
2005/07/17(日) 20:46:200877デフォルトの名無しさん
2005/07/17(日) 21:44:120878デフォルトの名無しさん
2005/07/17(日) 21:52:480879デフォルトの名無しさん
2005/07/19(火) 17:09:09オライリ−のPythonクイックリファレンスには、
「sys.stderrをファイル形式のオブジェクトに再結合すれば・・・」
とありますが具体的にはどうするのでしょうか。
ErrFile = file("Err.txt", "w")
sys.stderr = ErrFile
これではダメみたいですし。
0880デフォルトの名無しさん
2005/07/19(火) 17:21:450881879
2005/07/19(火) 17:50:39実は、Mac OS X で、Pythonw2.4でwxPython2.6を使ってて、
エラー表示ウィンドウらしきものが一瞬現れて消えてしまうので困ってます。
試したところ、単純な「変数名が定義されてない」みたいなエラーは書き出せたのですが、
ウィジェットオブジェクトの実行時エラーみたいなのは出力されないようです。
0882デフォルトの名無しさん
2005/07/19(火) 17:56:41スクリプトそのもののライセンスは別になんでもよい。
ただしセットにして配ったり単独実行できる形式にしたりする場合は
GPLに支配されることになる。
0883デフォルトの名無しさん
2005/07/19(火) 18:20:52class Application(wxApp):
def OnInit(self):
#適当に
if __name__ == '__main__':
app = Application(redirect=False)
app.MainLoop()
たしかwxAppのコンストラクタにredirect=Falseを渡せばエラーは普通にコンソールに出力されたような気がする
うちの環境はWindowsだしwxPythonはちょっと前に少しさわっただけなので間違ってたらスマソ。
0884デフォルトの名無しさん
2005/07/19(火) 19:13:57redirect=Trueにすると filenameに直接出力出来たはず。
0885デフォルトの名無しさん
2005/07/19(火) 21:27:54ttp://www.wxpython.org/docs/api/wx.App-class.html
0886879
2005/07/19(火) 22:51:32app = Application(redirect=True, filename=ErrorFilePath)
try:
app.MainLoop()
except:
app.RedirectStdio(ErrorFilePath)
として書き出されました。ファイルパスは2カ所とも設定しないとダメみたいです。
0887879
2005/07/19(火) 22:52:150888デフォルトの名無しさん
2005/07/20(水) 00:39:10別段改めてお礼を言う必要もないんじゃないかな.
と思った.
あんたいいひとだねー.
0889デフォルトの名無しさん
2005/07/20(水) 09:52:140890デフォルトの名無しさん
2005/07/20(水) 14:41:300891デフォルトの名無しさん
2005/07/20(水) 20:40:090892デフォルトの名無しさん
2005/07/21(木) 13:08:04>レッドスネイクカモン
Ruby + Pyhton ?
0893デフォルトの名無しさん
2005/07/21(木) 18:57:480894デフォルトの名無しさん
2005/07/21(木) 21:58:580895デフォルトの名無しさん
2005/07/22(金) 04:09:15クラス作って内部変数に配列型を使うとCでいうとStatic変数になってしまう・・
どうしたらいいんだorz
調べても分からん;;
0896デフォルトの名無しさん
2005/07/22(金) 04:37:44漏れみたいな馬鹿には向いてないな。
パールのほうがいいやw
0897デフォルトの名無しさん
2005/07/22(金) 05:09:20インスタンスに対してメソッドを呼ぶと、メソッドの第一引数にインスタンス自身が渡されるので(仕様)、
そいつに対してオブジェクトを結びつけるとインスタンスオブジェクトとして利用することができる。
Pythonのシンプルなオブジェクトと名前空間の構造にきづけば、理解は進むと思う。
というか、Perl(<=5)のクラス構造の方が絶対アクロバティックで難解。
0898デフォルトの名無しさん
2005/07/22(金) 21:28:210899デフォルトの名無しさん
2005/07/22(金) 21:51:03クラスメソッドとインスタントメソッドってどう区別して書けばいいの?
0900デフォルトの名無しさん
2005/07/22(金) 22:20:29どっちかだけのサポートにしとけば言語仕様で吸収できて
こんなけったいな事にはならなかったのに。
0901デフォルトの名無しさん
2005/07/22(金) 22:26:270902デフォルトの名無しさん
2005/07/23(土) 02:10:33ハッシュでコリジョンエラー返してくれるの?
0903デフォルトの名無しさん
2005/07/23(土) 10:49:020904デフォルトの名無しさん
2005/07/24(日) 02:50:50あれってpythonの思想だとモジュールとかクラスとかも
名前空間の階層って思想なのかな?
普通のファイルシステムと同じように扱おうってかんじだよな。
クラスのメソッドのリストをdir()で取ってくるってなんか妙なかんじするよね。
0905デフォルトの名無しさん
2005/07/24(日) 07:38:23Pythonはこの3つの組み合わせで構成されている・・・らしい
0906デフォルトの名無しさん
2005/07/24(日) 12:47:15今使われてる普通の言語は
そのみっつの仕組み持ってるでしょ?
0907デフォルトの名無しさん
2005/07/25(月) 14:00:571回目で正解したら驚異の集中力だといえよう。
www.concentrationtest.com/ver2.html
18歳未満の男の子と婦女子はやらなくてよろしい。
0908デフォルトの名無しさん
2005/07/25(月) 21:17:29レス数が900を超えています。1000を超えると表示できなくなるよ。