Pythonのお勉強 Part3 ..
792:デフォルトの名無しさん
09/09/12 13:21:38
788の方がまっとうな考えだな。
にちゃんは半可通が多数決で正しい答を出すから恐いw
793:デフォルトの名無しさん
09/09/12 13:31:19
>>790
間違いを指摘されたからといって怒るなよ。
なんで
> Pythonのプログラムが書きにくいからってOSの開発者に文句を言うつもりか?
ということになるんだ?意味わかんねー。
別に間違っててもいいじゃんか。指摘されたら修正すればいいだけ。
間違いを認めようとせず、ごまかすためにキレるほうが格好悪いぞ。
794:デフォルトの名無しさん
09/09/12 13:39:55
まぁ、かと言って、全く非の打ち所のない言語もまだないからな。
その中でPythonはかなり使いやすい部類だと思う。
795:デフォルトの名無しさん
09/09/12 13:42:47
摩訶不思議なコードを書いて俺SUGEEEしてる人が少ないのが良い
796:デフォルトの名無しさん
09/09/12 14:02:05
つか当初の質問のレベルが低すぎるだけじゃね。
797:デフォルトの名無しさん
09/09/12 14:04:38
>>795
摩訶不思議なコードを書くのは
そうでもしないと今流行りの機能が実装できない(C++の謎なテンプレートとか)か、
変なコードのほうが高速だったり(末尾再帰とか)
ミスが起こりにくかったりする(if(0==x){〜とか)
とか、そんな事情がある。
Pythonはそもそもそういうのが起こらないように設計されてるからなー
798:デフォルトの名無しさん
09/09/12 14:06:36
最初はメモリ使用量とスラッシングの話だったのに
気づかないまま別の方向に向かっているおまいらがすき
799:デフォルトの名無しさん
09/09/12 15:38:21
zope.interfaceが"要らない"ことに気付くまで1年かかった
800:デフォルトの名無しさん
09/09/12 17:07:43
Windows で IDLE を起動してただ exit() と打つと
Python IDLE "The program is still running! Do you want to kill it?
っていうダイアログボックスがでてくるんだけどこれはバグ?
Windows Vista Business 上で Python 2.5, 2.6, 3.1 で確認しました
801:デフォルトの名無しさん
09/09/12 18:30:00
ばかじゃないのおまえ
802:デフォルトの名無しさん
09/09/12 18:54:01
>>792
x 半可通が多数決で正しい答を出す
o 半可通が多数決で出した答を正しいと思い込む
803:デフォルトの名無しさん
09/09/12 18:56:27
>>792の意図するところはこっちだろう
o 半可通が多数決で「正しい」答を出す
804:デフォルトの名無しさん
09/09/12 18:56:50
何をもってしてバグとするんだ?
805:デフォルトの名無しさん
09/09/12 20:04:53
print __builtins__ の結果と
import __main__
print __main__.__builtins__ の結果が違うのはなぜでしょうか?
たとえば __builtins__.__dict__ はありますが
__main__.__builtins__.__dict__ はありません
806:デフォルトの名無しさん
09/09/12 20:20:47
>>805
処理系のソースコード調べて考えろ。
807:デフォルトの名無しさん
09/09/12 20:32:48
>>806
アドバイスありがとうございます
CPythonのコードはまだ読んでいませんがIDLEのコードを読んでいます。
lib\idlelib\AutoComple.py の中に
import __main__
中略
namespace = __main__.__dict__.copy()
namespace.update(__main__.__builtins__.__dict__)
というコードがあって、__main__.__builtins__.__dict__
の意味が分からず悩んでいます。
808:805=807
09/09/12 20:52:19
>>806
たびたびすみません,原因が分かりました.
EclipseのPyDevで開発しているのですが,
デバッグモードで動かすと __builtins__ は dict です.
通常モードで動かすと __builtins__ は module です.
デバッグモードではこのような違いが随所にあったのが原因でした.
なお,PyDev のソースを読んだところたしかに pydevd.py で
そのような違いが表れていることが分かりました.
URLリンク(eclipse-pydev.sourcearchive.com)
809:デフォルトの名無しさん
09/09/12 21:19:57
なんかあさってだな
810:805=807
09/09/12 21:50:14
>>809
スレを汚してしまってすみませんでした
811:デフォルトの名無しさん
09/09/12 22:05:33
そういう意味ではない
812:デフォルトの名無しさん
09/09/13 07:39:27
python2.6でpy2exeを使いmechanizeをimportしたスクリプトをexe化したいのですが
なにやら色んな物がないといわれます。で色んなもを入れたり、パス変更したりして
対応したのですが
dummy.Processというモジュールだけ見つかりません。
(python2.6/Lib/multipurocessingの中にprocess.pyがあったので/Lib/dummy/process.py
と置いてみましたがダメでした)
easy_installを試しましたがダメでした。
対処法もしくはdummy.Processがどこにあるかわかる方いますか?
813:デフォルトの名無しさん
09/09/13 08:09:46
/Lib/dummy/process.py
->
/Lib/dummy/Process.py
814:デフォルトの名無しさん
09/09/13 08:17:23
from multiprocessing.dummy import Process
815:812
09/09/13 09:27:34
>>813
それでやってみましたがダメでした
>>814
自作スクリプト内ではdummy.processをimportしておらず、mechanize内でもimportされていなかったので
どのスクリプトのimportをそのように書き換えるのかわかりません
で、なぜかLib/multiprocessing/dummy/processとするとdummy.processは通りました
しかし、また新たにmultiprocessingが必要(?)でて
easy_installすると
こんどはmultiprocessing._mmap25とwin32processが必要といわれ。。。
なんだかきりがないように感じられたので諦めます
すいませんでした
816:デフォルトの名無しさん
09/09/13 14:03:24
なんでPythonはRubyの文法を盗んでるのでしょうか
817:デフォルトの名無しさん
09/09/13 14:04:32
具体例を挙げてください。
818:デフォルトの名無しさん
09/09/13 15:00:45
defなんてそうだよね
819:デフォルトの名無しさん
09/09/13 15:02:40
Rubyのが先に世に出たのに後からでたPythonが元祖語ってるという皮肉
820:デフォルトの名無しさん
09/09/13 15:11:03
Wikipedia項目リンク
登場時期 1990年
Wikipedia項目リンク
登場時期 1995年
821:デフォルトの名無しさん
09/09/13 15:11:18
>>819
アホか。Pythonの初出が1991年でRubyが1993年だろ。調べてから言え。
それから、RubyとPythonがどっちが優れてるかなんてフレームの元なのでやめたほうがいい。
用途によって使いやすいほうを使えば十分。
822:デフォルトの名無しさん
09/09/13 15:14:59
>>818
いまだとBooとかScalaとかあるけど
PythonやRubyの前って関数定義にdef使ってるのってないのかな
823:デフォルトの名無しさん
09/09/13 15:32:01
Assembly
BASIC
C
...
O
Python
Q
Ruby
S
...
Z
824:デフォルトの名無しさん
09/09/13 15:36:47
スルー
825:デフォルトの名無しさん
09/09/13 18:01:43
>>822
BASIC
826:デフォルトの名無しさん
09/09/13 18:38:10
procedure hogehoge
function hogehoge
827:デフォルトの名無しさん
09/09/13 18:50:59
>>825
DEF FN……懐かしい。
828:デフォルトの名無しさん
09/09/14 11:25:01
Python2.5.2ですが、ユニコードって内部的には一律一文字2バイトで表現されていると思って良いのでしょうか?
C拡張でユニコードを扱う関数を作りたいんですが、Cでどのようにユニコード文字のバイト区切りを判断すれば良いのか分からなくて。
829:デフォルトの名無しさん
09/09/14 11:41:21
ユニコード文字のバイト区切り?
830:デフォルトの名無しさん
09/09/14 12:09:04
たぶん、Pythonでの扱い以前にUnicodeの基礎知識が不足していると思われ
831:デフォルトの名無しさん
09/09/14 12:15:39
UnicodeとUTF-8の違いは?
スレリンク(tech板)
832:デフォルトの名無しさん
09/09/14 12:22:32
欠けている部分があるので分からないわけですが、
基本知識はあると思ってるのですが...
そもそもUTF-8なんて話してません、ユニコードそのものの話です。
pythonにおいてunicode()で生成したユニコードのインスタンスをCレベルで操作したいという話です。
初期のUnicodeが16ビット固定長だった事は知っています。
しかし現在は21ビットにまで拡張されています。
ということは16ビットでは不足するケースがあるわけで、
原理的に固定長決め打ちというわけにはいかないはずです。
また、pythonのレベルからはunicode文字列の実バイト数を知るメソッドが見付けられませんでした。
833:デフォルトの名無しさん
09/09/14 12:23:50
あ、>>832は、コードポイントをそのまま二進数で表現していると推測しています。
834:デフォルトの名無しさん
09/09/14 12:28:16
また、BMPだけならば16ビット固定でも良いのでしょうが、
Pythonのunicodeobject.hやunicodectype.cには
UCS2、UCS4という文字列が両方とも含まれているので、
16ビット固定なのか32ビット固定なのか良く分かりません。
835:デフォルトの名無しさん
09/09/14 12:30:07
2バイト固定や4バイト固定と知っているならそうと、どちらかなら判別方法を教えてくれればいいのに、わざわざUTF-8を持ち出して混乱させようとするなんて、ほんとににちゃんねるってのは根性悪いですね。
さようなら。
836:デフォルトの名無しさん
09/09/14 12:34:52
さようなら
837:デフォルトの名無しさん
09/09/14 13:10:56
>>> u=u'日本語'
>>> u
u'\u65e5\u672c\u8a9e'
>>> s=u.str()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
AttributeError: 'unicode' object has no attribute 'str'
>>> s=str(u)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-2: ordinal not in range(128)
>>> l=u.split()
>>> l
[u'\u65e5\u672c\u8a9e']
>>> l=u.split(u'')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: empty separator
uを
s='\x65\xe5\x67\x2c\x8a\x9e'
または
l=[0x65,0xe5,0x67,0x2c,0x8a,0x9e]
というバイト列にしたいのですが
どのような方法があるでしょうか?
838:デフォルトの名無しさん
09/09/14 13:16:32
>>> u=u'日本語'
>>> u
u'\u65e5\u672c\u8a9e'
>>> l = []
>>> for i in u:
... n = ord(i)
... l.extend((n >> 8, n & 0xff))
...
>>> l
[101, 229, 103, 44, 138, 158]
>>> map(hex, l)
['0x65', '0xe5', '0x67', '0x2c', '0x8a', '0x9e']
839:デフォルトの名無しさん
09/09/14 13:26:59
>>834
len(u'\U00010000')
840:デフォルトの名無しさん
09/09/14 13:49:25
>>838
thx!
>>> u=u'日本語'
>>> map(hex, reduce(lambda x, y: x + [ord(y) >> 8, ord(y) & 0xff], u, []))
['0x65', '0xe5', '0x67', '0x2c', '0x8a', '0x9e']
841:デフォルトの名無しさん
09/09/14 13:51:27
おいおい。
sys.setdefaultencoding()で文字コードを再設定してやるのが先だろ?
むちゃくちゃやってやがるな……。
842:デフォルトの名無しさん
09/09/14 13:55:33
>>828
843:デフォルトの名無しさん
09/09/14 15:54:14
もう手遅れかもしれんが、Pythonとunicodeについて。
Pythonのビルドオプションで、unicodeはUTF-16とUCS4が選択できる。
デフォルトではUTF-16になっていて、これはWindowsでUnicodeファイル名を
そのまま扱えたり、.NET や JVM のUTF-16文字列と互換性があったりと、
相互運用性が求められるときに便利。
でも、一文字を1カウントで扱いたいという要求もよくあり、 .NET/JVM/WindowsAPI などとの
相互運用性が求められない分野ではUCS4が使われることもある。
たとえばFedoraやUbuntuなんかのPythonはUCS4でビルドされている。
844:デフォルトの名無しさん
09/09/14 20:02:10
import sys
sys.argv.append("-n")
from idlelib.PyShell import main
main()
スクリプトの最後にこう書けばIDLEのインターフェイスを
立ち上げることができるんだけど,その時 Tk の
メニューを隠すとかできないもんかなぁ.
PyShell のコード自体に手を入れることはしたくない.
845:デフォルトの名無しさん
09/09/14 22:22:58
しかし、ほんとユニコードってうんこ仕様だな。
まさに誰得だよ、これ。
846:デフォルトの名無しさん
09/09/14 22:32:35
>>845
まあ欠点も色々あるが、結局Unicodeほど便利な文字コードも無いからな。
特にWebアプリはUTF-8で統一してしまうのが一番簡単。
847:デフォルトの名無しさん
09/09/14 23:08:02
UTF-8はBOMをつけてはいけないという仕様にしてくれてれば殆ど困らなかったのになぁ。
848:デフォルトの名無しさん
09/09/14 23:26:21
むしろ日本人ならBOMに理解を示そうよ。
一番BOMの恩恵受けるのは日本なんだし。
849:デフォルトの名無しさん
09/09/14 23:42:04
UTF-16ならBELEあるからBOMの必要性がわかるが、
なんでUTF-8にBOMが必要なんだ?
いやとあるスレで、SJISやEUCテキストとの識別を容易にするために
BOM付きUTF-8を提案したのは俺だったりするのだが。
850:デフォルトの名無しさん
09/09/14 23:52:04
BOMはトラブルの元って認識なんだが。
851:デフォルトの名無しさん
09/09/15 00:12:02
Pythonやっぱつかえねーなー
852:デフォルトの名無しさん
09/09/15 00:20:26
BOMはPython関係ねー
853:デフォルトの名無しさん
09/09/15 00:37:51
やっぱRubyだなー
854:デフォルトの名無しさん
09/09/15 00:38:04
UTF-8でソース書くときは
いつも付けてるが。
855:デフォルトの名無しさん
09/09/15 00:45:08
>>850
BOM のせいで shebang がどうさしないとか
856:デフォルトの名無しさん
09/09/15 00:49:52
PythonやPerl、Lispはやってて面白いし使える言語だがRubyだけは使いたくないな
存在価値も無いし
857:デフォルトの名無しさん
09/09/15 02:53:36
Rubyしかありえねえだろ。日本だぞここは
858:デフォルトの名無しさん
09/09/15 03:19:11
俺にとって四国は海外なので無問題。
859:デフォルトの名無しさん
09/09/15 03:20:32
四国と何の関係があるの?
860:858
09/09/15 04:05:24
松江って四国にあると勘違いしちゃった。テヘ
861:デフォルトの名無しさん
09/09/15 05:39:33
松山と間違えたわけか
862:デフォルトの名無しさん
09/09/15 07:48:27
>>843
ありがとうございます、助かります。
ヘッダやライブラリの何かの変数でどちらか判定できそうかと思ったんですが、
そこまでは分かりませんでした。
でも、debian sid x86_64ですが、UCS2っぽいです。
UCS2だとwchar_tを使っているみたいなのでなんとかなりそうです。
ctypes.c_wchar_pも使えそう。
863:デフォルトの名無しさん
09/09/15 08:12:56
withステートメントの意義が分からない
864:デフォルトの名無しさん
09/09/15 08:36:39
スレッドの同期オブジェクトをwithで使えるクラスを書いておくと、めーっちゃ便利。
def something(self):
通常の処理
with SynqObj(self.lock):
クリティカルセクションな作業
通常の処理
865:デフォルトの名無しさん
09/09/15 09:12:14
>>862
関係ないかもしれないけど gcc で wchar_t って UCS-4 相当というか4バイトじゃなかったっけ?
866:デフォルトの名無しさん
09/09/15 10:39:39
>>862
pyconfig.hに
Py_UNICODE_SIZEってのがある
867:デフォルトの名無しさん
09/09/15 10:48:49
>>860-861
中国はパスポートが必要
868:デフォルトの名無しさん
09/09/15 10:50:14
>>864
thx!
869:デフォルトの名無しさん
09/09/15 11:40:05
あれ、with lock: ... って書けるよね。threadingでもthreadでも
870:デフォルトの名無しさん
09/09/15 12:00:28
with 構文の as は何のため?
871:デフォルトの名無しさん
09/09/15 12:33:02
reStructuredTextをはがしてPlain Textにするモジュールってありますか?
872:デフォルトの名無しさん
09/09/15 13:18:30
>>869
ああ、864は複数のスレッドの呼び分けをログで確認するためにラッパーを介しているだけだから。キニスンナ。
普通はlockオブジェクトを直にwith呼び出ししてかまわない。
>>870
Python 2.6のリリースノート読め!
873:デフォルトの名無しさん
09/09/15 13:44:36
>>871
URLリンク(stackoverflow.com)
874:デフォルトの名無しさん
09/09/15 14:08:01
>>873
サンキュー。
でもドキュメント無いからソースよめってことね…。
875:デフォルトの名無しさん
09/09/15 14:29:11
shebangのこと忘れてたよ
876:デフォルトの名無しさん
09/09/15 14:38:22
rst2xxx -> xxx2txt みたいな経路でいけないかな?
877:デフォルトの名無しさん
09/09/15 16:39:11
Pyhton3.0以降の言語仕様を日本語で解説してるサイトや書籍ってある?
3.0以降の資料が少なすぎて、勉強がさっぱり進まない
やはり英語を覚えるのが先なのか・・・
878:デフォルトの名無しさん
09/09/15 17:24:52
腐るほどあるような気が
Python3.0でググるよりPython3000のほうが多いかも
879:デフォルトの名無しさん
09/09/15 18:29:18
オライリーの第3版初めてのPythonの中でちょっとだけ触れられている
880:デフォルトの名無しさん
09/09/15 18:37:56
>>878
うーん、一部を解説したものしか見つからない
できたら3.1までの仕様変更点を全て網羅している
解説が欲しいんだけど
881:デフォルトの名無しさん
09/09/15 18:56:31
>>880
Python 3.0/3.1のリリースノートを読むのが結局一番早いよ。
Pythonはこの辺とても丁寧。
ところで、
IronPythonに向いた軽量なO/Rマッパーが見当たらなかったので
『100行ちょっとのやる気のないPython製O/Rマッパー』をベースに
実装してみたんだけど、試してみたい人います?
一応、Python/IronPython両用です。
882:デフォルトの名無しさん
09/09/15 19:25:58
>>877
読んでみたけど
URLリンク(docs.python.org)
URLリンク(docs.python.org)
これくらいのボリュームなら自動翻訳でもかなり役立つと思うが。
# この先、仕事でプログラムするなら英語は何れ必要となるだろうからガンバレ
# 最近の翻訳は中国語から順に整備される傾向があるからな・・・
883:デフォルトの名無しさん
09/09/15 19:35:40
>>866
確かにありました。
4になっていました。
>>865
sizeofで確認したところ確かに4バイトでした。
pyconfig.hの記述と一致してます。
UCS2って2バイトだと思ってましたが、
実装上はwchar_tで表現するので4バイトになってるってことなんでしょうか。
UCS4は元が4バイトですよね。
とりあえずPythonではunicode一文字は4バイトと思って良いのかな。
ほんとunicodeとその周辺のエンコーディングはよく分かりません。
884:デフォルトの名無しさん
09/09/15 19:40:43
>>881
柴田さん乙
885:デフォルトの名無しさん
09/09/15 19:47:36
pyconfig.hはautoconfなんかで出力してんじゃないの
886:デフォルトの名無しさん
09/09/15 20:37:03
>>883
ucs4を使うかutf-16を使うかはconfigureオプションで指定して、
sizeof(wchar_t) == 4 && ucs4 の場合か、 sizeof(wchar_t) == 2 && utf-16 の場合にのみ
wchar_t を使う・・・という仕様だった気がする。
Pythonの拡張モジュールを作るときには、wchar_tを直接使うんじゃなくて、
Py_UNICODE を使う。
URLリンク(docs.python.org)
887:デフォルトの名無しさん
09/09/15 22:00:25
>>886
あー、なるほど・・・
とりあえずLinux(gcc)ではi686でもamd64でもwchar_tがあり、
>>865さんの指摘どおり両方とも4バイトでした。
UCS4の場合にはどちらもwchar_tで4バイトですが、
UCS2(UTF-16)の場合にはwchar_tと不一致なので
unsigned shortが使われるようです。
これも両方共2バイトでした。
ということで、Linux(gcc)ではUCS2ならばunsigned shortで2バイト、
UCS4ならばwchar_tで4バイトということですね。
最近のLinuxディストリビューションではUCS4が多いらしいです。
Debian sidでもそうです。
Py_UNICODEを使った方が良いのだと思いますが、
Cで書く部分はできるだけPython独立にしておいて
ctypesからそれを利用したいので、
とりあえずwchar_tを使うことにします。
でもimmutableだからなのか、unicodeをそのまま渡して
中身を変更するような事はすぐにはできないっぽいです。
create_unicode_bufferを使うしかなさそうです。
888:デフォルトの名無しさん
09/09/15 22:08:01
boostPython
889:デフォルトの名無しさん
09/09/16 00:13:28
>>881
プププ、クソ本の著者乙(wwWwwwwWWWwwwWwWwww
890:デフォルトの名無しさん
09/09/16 00:15:28
>>884,889
いや、当の著者の再配布許可が出たところなんだけど。
別に信じないならいいけどさ。
891:デフォルトの名無しさん
09/09/16 00:37:33
884と889は低脳。
みんぱいの人に嫉妬するクソ本作者。
892:デフォルトの名無しさん
09/09/16 00:52:06
またruby房の嫌がらせか
893:デフォルトの名無しさん
09/09/16 09:03:24
大抵の謎の書き込みは >892 で納得できちゃうね
894:デフォルトの名無しさん
09/09/16 09:47:25
Pythonスレはスルー力が有って良いと思う
895:デフォルトの名無しさん
09/09/16 10:48:56
何か書こうと思ったんだけど忘れた
896:デフォルトの名無しさん
09/09/16 12:09:33
逃げるなよ。
897:デフォルトの名無しさん
09/09/16 12:27:59
逃げるが勝ちだな
898:デフォルトの名無しさん
09/09/16 12:41:43
逃げちゃだめだ
899:デフォルトの名無しさん
09/09/16 18:05:00
>>888
ひょっとしてctypesよりboost.pythonの方が良いっていう意味のレスですか?
そうでないとしても、それをきっかけにしてboost.pythonも検討してみました。
boost.pythonとしては、まだunicode文字列を引数としてどう受け渡すのか
方式が定まってないっぽいんですが、とりあえずPyObject* opとして受け取って
PyUnicode_AS_DATA(op)でconst char*として実際のデータバッファのアドレスを取り出して、
それをwchar_t*にキャストして自作のC++関数などに渡せば良さそうです。
C++ではwchar_t*として扱うPython独立なプログラムとして作成して、
引数を渡すところだけはこの変換をするために一枚かぶせる感じです。
unicodeの実装がwchar_tではない場合には困るんすが、C++だし、
とりあえずテンプレート使っておけば後々それほど困らないでしょうし。
これでunicode文字列をC++の中で書き換えることもできました。
boost.pythonって、ほんとに楽にC++とやりとりできますね。
900:デフォルトの名無しさん
09/09/16 18:42:02
>>897
働いたら負けだよな。
901:デフォルトの名無しさん
09/09/16 19:30:48
俺が逃げるまで逃げるなよ
902:デフォルトの名無しさん
09/09/17 06:49:55
はやくにげてえーーーー
903:デフォルトの名無しさん
09/09/17 11:18:04
boost.python前提になると他の言語からも使えるdllにならない
904:デフォルトの名無しさん
09/09/17 11:28:50
Eclipse で Java 開発環境と mingw による C言語での開発
環境をスタンドアロンで持ち歩いてるんですが,
PyDev と Python 実行環境もそんなことができればなぁ
と思ってます.Windows 環境です.
Windows の Python はレジストリに何か登録しているよう
なんで,そういうポータブルなことは難しいでしょうか?
905:デフォルトの名無しさん
09/09/17 11:54:05
URLリンク(portablepython.com)
公式からもリンクされてるからそんなに怪しいものでは無いと思う。
公式からのリンク:URLリンク(python.org)
906:デフォルトの名無しさん
09/09/17 20:32:24
>>903
まずはC++で(Pythonその他から)独立したクラスを作っておけばいいんじゃないですか?
907:デフォルトの名無しさん
09/09/17 21:24:45
unittest.TextTestRunner で複数のテストを次々と実行するトキ,
最初に発生した例外でストップしてほしいんですが,できますか?
908:デフォルトの名無しさん
09/09/18 05:57:29
emacsのpython-mode.elで、ユニコードリテラル中にエスケープせずに文字を書くのと、
エスケープコードを書くのとで、py-execute-bufferの際に別物にされてしまう。
(素のバイトストリング扱いになるらしい)
C-x C-f foo.py
#!/usr/bin/python
# -*- mode: python-mode; coding: utf-8 -*-
print u'あ' == u'\u3042'
C-c C-c => False
$ python foo.py
True
どうしたものか。
909:デフォルトの名無しさん
09/09/18 08:15:29
sys.getdefaultencoding()
910:908
09/09/19 04:44:02
sys.getdefaultencoding() は環境によらず ascii を返すので原因は違うところにあるようだ。
ちなみに locale.getdefaultlocale() はいつでも ('en_US', 'UTF8') が帰る。
C-c ! で ipython を出しておいて C-c C-cすれば普通にターミナルからやるのと同じ挙動に
なったので、それでいいことにしたわ。
911:デフォルトの名無しさん
09/09/19 09:48:33
循環参照してしまうとそのオブジェクトはプロセスの
終了まで解放されない?
class ClassA(object):
def __init__(self):
import sys
sys.stderr.write("ClassA.__init__(...) %s\n" % str(self))
def __del__(self):
import sys
sys.stderr.write("ClassA.__del__(...) %s\n" % str(self))
class ClassC(object):
def __init__(self):
import sys
sys.stderr.write("ClassC.__init__(...) %s\n" % str(self))
self.a1 = ClassA()
self.a2 = ClassA()
self.a1.a2 = self.a2
self.a2.a1 = self.a1
def __del__(self):
import sys
sys.stderr.write("ClassC.__del__(...) %s\n" % str(self))
これで ClassC のインスタンスを作ると,
ClassA.__del__ は永遠に呼び出されない.
せめてプロセスの終了時には呼び出されると思ってた.
912:デフォルトの名無しさん
09/09/19 09:57:26
ふうむ,ガベージコレクタが __del__ の
呼び出し順を決定できないからか.
そもそもデストラクタがあるのに循環参照が
起きるような設計をするなということだよな.
913:デフォルトの名無しさん
09/09/19 10:45:10
>>908
C-x C-f foo.py
#!/usr/bin/python
# -*- mode: python-mode; coding: utf-8 -*-
print u'あ' == u'\u3042', hex(ord(u'あ')), u'あ'.encode('utf8')
C-c C-c => False (どうなりますか?)
914:908
09/09/19 17:52:16
>>913
C-c C-c => False 0x20
と出ます。u'あ'.encode('utf8') はエラーも出さずに飲み込まれてしまっているみたい。ちなみに
print u'あ’ -> なにも表示されない、
print u'\u3042' -> UnicodeEncodeError: 'ascii' codec can't encode character u'\u3042'...
となる。あらかじめC-c ! でipythonのバッファを出しておけばこれらの問題は起きない。
915:デフォルトの名無しさん
09/09/19 19:40:27
>>911
そういうのって明示的に循環参照削除するメソッド作って呼び出すもんじゃないの?
と最近Pythonに興味もったPerl使いが言ってみる。
Perlだと参照を弱める(リファレンスカウント減らす)方法あるけど、
Pythonだと似たような方法有るのかな。
916:デフォルトの名無しさん
09/09/19 19:57:07
del
917:デフォルトの名無しさん
09/09/19 19:58:55
boost だと weak_ref とかの弱参照なスマートポインタがあるよな
918:デフォルトの名無しさん
09/09/19 20:00:17
Pythonにもweak_refあるけど、やっぱり明示的に参照切るほうが多いかな。
weak_refは余計なコストかかるし。
919:デフォルトの名無しさん
09/09/19 20:08:20
>>915
URLリンク(www.python.jp)
これ、絶対入ってるよね。
(文中の『デフォルトでは入っています』に対するレス)
920:デフォルトの名無しさん
09/09/19 22:27:55
infopile思ったより本格的だった
朝から使ってたけど普通に常用メーラで行けそう
921:デフォルトの名無しさん
09/09/19 22:40:02
C++は元々が自前でメモリ管理しなきゃいけないから余計にああいうの欲しくなるけど
最低限で済むPythonではやはり最低限で良いと思うやね
922:デフォルトの名無しさん
09/09/19 22:54:52
>>920
宣伝乙
923:デフォルトの名無しさん
09/09/19 23:47:44
>>920
Windowsだけなんだっけ?
924:デフォルトの名無しさん
09/09/20 23:35:03
>>> L=[]
>>> L[:]
[]
>>> L[:]=[1,2,3]
>>> L
[1, 2, 3]
リストの初期化がなんか違和感が…
納得できん
925:デフォルトの名無しさん
09/09/20 23:43:30
2つのクラス同士でクラスオブジェクト同士を相互参照したい場合、
class Topic:
child = Reply
class Reply:
parent = Topic
なんて書いてたら、当然2行目で未定義識別子の参照でエラーになる。
これって、2つの定義を相互参照なしに定義した後で、classmethodを明示的に呼び出して
動的に結びつけるしか方法がないよね?
用途としては自作の軽量ORMライブラリを作ってるところで、
オブジェクト化したテーブル同士の親子関係を表現しようとしている。
で、例えばTopicから連結されてるReplyのインスタンスが欲しいので何らかの形で事前に教えておく必要がある、と。
926:デフォルトの名無しさん
09/09/20 23:51:30
class Topic:
pass
class Reply:
pass
Topic.child = Reply
Reply.parent = Topic
927:デフォルトの名無しさん
09/09/21 00:01:17
>>924
それ、初期化じゃなくて代入だから・・・
928:デフォルトの名無しさん
09/09/21 00:38:33
?
929:デフォルトの名無しさん
09/09/21 01:38:05
>>924
の思考に違和感が
930:デフォルトの名無しさん
09/09/21 01:40:50
class Topic:
children = []
class Reply:
parent = Topic
Topic.children.append(Reply)
931:デフォルトの名無しさん
09/09/21 09:21:42
>>924
入門書嫁。
932:デフォルトの名無しさん
09/09/21 09:34:48
>>924は何に対して違和感を感じているんだろう
配列が伸び縮みすることになのか
要素の範囲を指定して代入することになのか
L[:] ってなんかきんもー、なのか
933:デフォルトの名無しさん
09/09/21 10:42:30
>>> l=[9,8,7,6]
>>> l
[9, 8, 7, 6] <- 普通
>>> l[1:]=[3,4,5]
>>> l
[9, 3, 4, 5] <- 普通
>>> l[1:]=[2,1]
>>> l
[9, 2, 1] <- きもい
>>> l[:]=0
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only assign an iterable <- 微妙
>>> l[:]=[0,0]
>>> l
[0, 0] <- きもい
934:デフォルトの名無しさん
09/09/21 10:47:29
[1:]=の結果に違和感覚えないのに[:]の結果に違和感覚える理由が解らん
935:デフォルトの名無しさん
09/09/21 11:08:09
>>933
スライスの代入で左辺と右辺のリストの要素数が
一致していなくても構わない(右辺にあわせて伸び縮みする)のが気持ち悪いってこと?
だったらリンクリストでも勉強すれば違和感なくなるんじゃないかね
936:デフォルトの名無しさん
09/09/21 13:53:54
>>934
>>> l[1:]=[2,1]
>>> l
[9, 2, 1] <- きもい
937:デフォルトの名無しさん
09/09/21 14:02:18
だから入門書読めよ低脳。
938:デフォルトの名無しさん
09/09/21 14:14:12
バカだなあ。
939:デフォルトの名無しさん
09/09/21 14:31:56
つーか、それがキモイならスライスの意味ないだろとw
940:デフォルトの名無しさん
09/09/21 17:05:35
>>> l[1:]=[3,4,5]
>>> l
[9, 3, 4, 5] <- 普通
>>> l[1:]=[2,1]
>>> l
[9, 2, 1] <- きもい
このきもいと普通の違いがわからん
要素が1個減ったらきもい?何か見落としてるんだろうか・・・
941:デフォルトの名無しさん
09/09/21 17:42:29
C言語の配列かなんかと勘違いしてるんじゃね?
抽象度の高い操作を理解できないとか
942:デフォルトの名無しさん
09/09/21 18:08:31
スライスの代入ってあんまりやんないからどうでもいいや
943:デフォルトの名無しさん
09/09/21 20:57:09
python の配列って中身はリストなんですか?
と思ったら
L=[]
で L に代入してるな orz
944:デフォルトの名無しさん
09/09/21 21:06:25
変数名がL,M,Nではじまる場合にはリストなんだよ。
945:デフォルトの名無しさん
09/09/21 21:12:52
>>941
あぁ。3要素のときはreplaceに見えるからきもくないのか
よくわかったありがとう
946:デフォルトの名無しさん
09/09/21 21:13:33
Pythonのお勉強 Part35
スレリンク(tech板)
947:デフォルトの名無しさん
09/09/21 21:30:13
>>943
質問の意味がよくわからないが、
Pythonのリストはメモリ上の連続領域を利用した配列型のリスト
(C++のstd::vectorやJavaのArrayListの類)
いわゆる連結リストではないので途中に挿入する操作には弱い。
948:デフォルトの名無しさん
09/09/21 23:45:44
>>942
直感的に思えないから、俺もあまり使わないな。
冗長でも、新しいリストを作ってしまうな
949:デフォルトの名無しさん
09/09/22 02:10:54
>>948
>>947 の言う通りなら新しく作りなおしてもそんなに速度は変わらなさそうですね
950:デフォルトの名無しさん
09/09/22 10:35:41
実装は連続メモリ型かも知れんが
表向きリストのような動作をするように設計されてんだろうな
951:デフォルトの名無しさん
09/09/23 12:59:51
from VideoCapture import Device
cam = Device()
cam.saveSnapshot('image.jpg')
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
4179日前に更新/189 KB
担当:undef