Pythonのお勉強 Part50
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2014/10/17(金) 00:41:32.40ID:Db3yDsQbhttp://www.python.org/
日本Pythonユーザ会 (※英語わかる人は上記のオフィシャルの方を見ることをお薦めします)
http://www.python.jp/
まとめWiki
http://python.rdy.jp/
関連スレ
http://find.2ch.net/?BBS=ALL&TYPE=TITLE&STR=python
Pythonのお勉強 Part49
http://peace.2ch.net/test/read.cgi/tech/1387528488/
日本語の扱いで戸惑ったらこちらをどうぞ(バッドノウハウ集で笑える)
ttp://speirs.blog17.fc2.com/blog-entry-4.html
ttp://atomic.jpn.ph/prog/etc/encode.html
ttp://d.hatena.ne.jp/kakurasan/20100330/p1
ttp://pc11.2ch.net/test/read.cgi/tech/1217836194/339
339 :デフォルトの名無しさん:2008/08/23(土) 08:36:00
PythonのUnicodeEncodeErrorを知る
ttp://lab.hde.co.jp/2008/08/pythonunicodeencodeerror.html
よくまとまってた。あとで読む
0152デフォルトの名無しさん
2014/11/30(日) 02:14:37.61ID:U56t6wGeすみません。typo があったので訂正します。
s/cord/code/;
↑ perl ですみません。
re.sub('cord','code', item)
↑ python だとこんな感じでしょうか?
Python チュートリアル と Perl 言語リファレンスの目次に「正規表現」の記載がなくて、
挫折しそうになりました。 Python 標準ライブラリの目次に正規表現 をみつけて一安心。
うーむ、ライブラリなのですね。。。
おやすみなさい。
0153デフォルトの名無しさん
2014/11/30(日) 05:17:22.58ID:b4nmdqGs0154デフォルトの名無しさん
2014/11/30(日) 05:30:46.36ID:c9Q+Jt/4pythonにはtimeitという計測ツールもある。
ipythonなら%timeit
0155デフォルトの名無しさん
2014/12/02(火) 23:50:02.60ID:mXPAePsxみたいなことをよくやるんだけど
if (!$done{$item}) {
同じことをpythonでやろうとすると、どうしてもtryしないといけなくなる
try:
if(done[item]):
pass
except KeyError:
そういうもの?
0156デフォルトの名無しさん
2014/12/02(火) 23:54:44.97ID:1eIJ1xCz0157デフォルトの名無しさん
2014/12/03(水) 00:20:47.52ID:klto8A+Oそもそも、EAFPでないし
0158デフォルトの名無しさん
2014/12/03(水) 03:34:45.76ID:fPpGIPtv0159デフォルトの名無しさん
2014/12/03(水) 03:35:36.42ID:fPpGIPtv0160デフォルトの名無しさん
2014/12/06(土) 09:06:25.05ID:oKYXPopG>perlで、処理したものは
perl歴10年以上で、2年前にpythonに移行
しました。このような質問とその回答は、
とても参考になります。感謝、感謝!
0161デフォルトの名無しさん
2014/12/06(土) 09:25:07.43ID:e/+1yPS4item.getも、なければデフォルト返す。けっこう人のコードでも見かける。perlの例はこっちに近い気がする。
0162デフォルトの名無しさん
2014/12/06(土) 10:06:25.40ID:BVXRqyRl0163デフォルトの名無しさん
2014/12/06(土) 10:17:49.65ID:e/+1yPS4ただjavaとか例外処理のコストが気になる言語の場合はやらないな。pythonはサンプルコードでよく見かけるから使ってるけど、コストはどうなんだろうか。
0164デフォルトの名無しさん
2014/12/06(土) 12:05:45.84ID:3xNo8KzCただ内部的にexceptとかfinally,with使うのは当たり前だから気にしても仕方ない
0165デフォルトの名無しさん
2014/12/06(土) 12:22:20.08ID:1MG24EwXdict.set_defaultがvalueしか取らないのが俺は気になる
funcも取って欲しい
0166デフォルトの名無しさん
2014/12/06(土) 15:37:39.38ID:bwgl3tYQ全ての文にif付けながら実行してるようなもんでしょあれ
0167デフォルトの名無しさん
2014/12/06(土) 15:42:45.20ID:7IWME+c90168デフォルトの名無しさん
2014/12/06(土) 15:52:30.13ID:BM1MQEaEんなわけない
あんたが言ってるのは途中でreturnするかもしれない関数で全ての文にif付けて実行してるようなもんでしょって言ってるのと同じだよ。
0169デフォルトの名無しさん
2014/12/06(土) 16:18:14.87ID:LlEDCa5Qfor x in (1, 2, 3, "hoge"):
s += x
return s
例えばこのfor文の中の s += x で、例外を補足するには毎回xが加算できるかをチェックする必要がある
ということを言いたいのではなかろうかと。
0170デフォルトの名無しさん
2014/12/06(土) 16:18:22.30ID:BVXRqyRlそれで止まってしまうか例外として救えるかが違うだけで
どんな言語でもってことはないか
何も考えずにリソース破壊して終わりな言語はそれまでだけど、
それを軽くていいとは思えない
0171デフォルトの名無しさん
2014/12/06(土) 16:20:34.40ID:1MG24EwX例外ブロックを作ったことによる効率低下は大したことない
一部の最適化ができなくなるくらいだから
一方、実際に例外を投げたなら、どの言語でもそれなりのコストを生じる
0172デフォルトの名無しさん
2014/12/06(土) 16:29:48.62ID:7IWME+c9いちいちif文なんか実行してないから
0173デフォルトの名無しさん
2014/12/07(日) 02:49:25.06ID:QqVGX2+B0174デフォルトの名無しさん
2014/12/07(日) 05:08:55.57ID:8OMeK6oQ0175デフォルトの名無しさん
2014/12/07(日) 10:45:35.98ID:5CT1OZvc0176デフォルトの名無しさん
2014/12/07(日) 10:49:56.50ID:s/qw7ugR0177デフォルトの名無しさん
2014/12/07(日) 12:51:19.52ID:8OMeK6oQ最適化できるという誤解は誰もが通る道だわな
0178デフォルトの名無しさん
2014/12/07(日) 12:54:25.49ID:GOj11zUj0179デフォルトの名無しさん
2014/12/07(日) 13:12:03.36ID:8OMeK6oQ可読性もデバックのやりやすさも捨ててやることじゃない
10年以上前には話題に登ってて覚えてたんだが
pythonのvmは2001年時点のjvmより
おバカなのか?
0180デフォルトの名無しさん
2014/12/07(日) 13:15:52.02ID:GOj11zUjかなり馬鹿正直、というか原始的なものだよ
0181デフォルトの名無しさん
2014/12/07(日) 13:17:41.90ID:8OMeK6oQpythonだとひょっとすると例外の方がはやいかもね
0182デフォルトの名無しさん
2014/12/07(日) 13:30:04.59ID:om9D8KOg0183デフォルトの名無しさん
2014/12/07(日) 13:32:59.51ID:GOj11zUj> It has been questioned whether an exception to signal
> the end of the iteration isn't too expensive.
と述べられてる。
あまりコストが高くはなかったとはいえ、低いわけではない。
しかし続きを読むと分かるように、実装をシンプルに行えるメリットを彼らは選んだ。
0184デフォルトの名無しさん
2014/12/07(日) 13:53:30.07ID:Mj+nApTsでも、コストを重視した設計やコードのツケはずっと残る
0185デフォルトの名無しさん
2014/12/07(日) 14:11:22.03ID:GOj11zUj一概に容認されうるものじゃないと思うね
0186デフォルトの名無しさん
2014/12/07(日) 14:15:51.13ID:8OMeK6oQ数値配列末尾に文字列入れて
意図的に例外で落とすようにしたらふつうのループの2倍程度遅い
でもif+型チェックよりは例外のほうが早かった
なんとも微妙な・・・
0187デフォルトの名無しさん
2014/12/07(日) 17:17:03.41ID:E9NmwB+a0188デフォルトの名無しさん
2014/12/07(日) 18:17:38.73ID:XqgZFImA例外が発生しなければ try/except のコストは極めて低いので、めったに発生しない例外ならば
例外を扱ったほうが良いというのFAQのどっかにあったね。
0189デフォルトの名無しさん
2014/12/07(日) 19:32:02.09ID:8OMeK6oQ0190デフォルトの名無しさん
2014/12/07(日) 22:39:07.66ID:gI6V648O0191デフォルトの名無しさん
2014/12/08(月) 07:36:33.23ID:fTOrgTlaC# だけど、まさにそのコード書いたばかりだ w
0192デフォルトの名無しさん
2014/12/08(月) 09:59:10.61ID:eZuxZoZphttp://atomic.jpn.ph/prog/etc/encode.html
http://speirs.blog17.fc2.com/blog-entry-4.html
http://d.hatena.ne.jp/kakurasan/20100330/p1
0193デフォルトの名無しさん
2014/12/08(月) 10:14:48.98ID:moCEkmgWエンコードが不明な文字列を片っ端からデコード試して
上手くいった奴が正解なんだよな
モヤモヤするけどね
0194デフォルトの名無しさん
2014/12/08(月) 10:57:48.21ID:NGUYkyOW人間だったら文字化けしてるの見て違うって判断できるけど
0195デフォルトの名無しさん
2014/12/08(月) 11:17:03.49ID:UW8Yzuuqあと例外出させるのにも判定の順番が微妙に影響する
どのコードで先にエンコードしてみるかっていうのが結構重要
0196デフォルトの名無しさん
2014/12/08(月) 11:20:00.98ID:UW8Yzuuq「ーソЫ\噂浬欺圭構蚕十申曾箪貼能表暴予・・・」
っていう文字列を発見して
「文字化けしてるっ!」て騒ぐひともいるし
「ああテストしてんだな」って暗黙の了解するひともいる
0197デフォルトの名無しさん
2014/12/08(月) 11:21:52.23ID:UW8Yzuuqエンコードじゃなくてデコードと言うべきか
0198デフォルトの名無しさん
2014/12/08(月) 12:22:31.05ID:B5d35WIQ対応するコードがエンコード先の領域外、未定義だったら失敗でいいんじゃないか。
nkfみたいにマッピングしてるとこもあるかもだけど。
0199デフォルトの名無しさん
2014/12/08(月) 21:25:30.06ID:NGUYkyOW> 対応するコードがエンコード先の領域外、未定義だったら失敗
これだったらたしかに失敗ははっきりするね
それにあてはまらない場合もあってそのときは
けっこう微妙な判定をしてるってことかな
0200デフォルトの名無しさん
2014/12/09(火) 08:02:03.59ID:8lyIelV0decode('utf8')を行ってきましたが、正規表現の処理
をしない場合には必要ありませんよね?
0201デフォルトの名無しさん
2014/12/09(火) 08:05:14.29ID:Uc1Az9NL0202デフォルトの名無しさん
2014/12/09(火) 08:22:35.48ID:Uc1Az9NL0203デフォルトの名無しさん
2014/12/09(火) 14:11:10.31ID:R/kYtbklそう思って数年、未だに2系…。
0204デフォルトの名無しさん
2014/12/09(火) 19:17:54.02ID:6Ly9A1WVPyhonも基本この考え方でいい?(ソースコードは文字コードさえちゃんと指定しとけば何でもいいという理解だけど)
・原則1:外部から入力された文字列はデコードして内部文字列に変換する
・原則2:外部へ出力する文字列はエンコードしてバイト文字列に変換する
・原則3:ソースコードはUTF-8で保存し、utfプラグマを有効にする
0205デフォルトの名無しさん
2014/12/09(火) 19:37:38.16ID:ufM684Cvバイト文字列って何だろ?
バイナリファイルのこと?
0206デフォルトの名無しさん
2014/12/09(火) 19:51:55.53ID:6Ly9A1WV当該本には
「バイト文字列」は、「バイナリ表現」「オクテット文字列」
「バイトストリーム」「バイト列」などと呼ばれることがあります。
バイト文字列はPerlから見た場合は単なるバイト列のように見えます。
知っているのはプログラマだけで、Perlはそれが文字列であるかどうかを知りません。
と書いてあります。
0207デフォルトの名無しさん
2014/12/09(火) 20:03:39.61ID:0tFp5ltl0208デフォルトの名無しさん
2014/12/09(火) 21:35:24.14ID:ufM684Cvやっぱりテキストをバイナリデータに変換して外とやりとりすべし、という風に読めるな
だとしたら、その原則は言語に関係ないよ
メインフレームなど異質なアーキテクチャのコンピュータまで視野に入れれば、バイナリで
データをやりとりした方が無難という一般論に近い話だ
PC同士、ましてWindows同士ならば、cp932のテキストのままで何の問題もない
むしろutf-8などという後から出てきたコードに変換する方が恐い
0209デフォルトの名無しさん
2014/12/09(火) 22:18:44.43ID:Z26sHvLQ0210デフォルトの名無しさん
2014/12/09(火) 22:24:28.18ID:ufM684Cv今やっちゃいけない話なのか?
0211デフォルトの名無しさん
2014/12/09(火) 22:54:18.19ID:kgT7s1o1Python2ならそれと同じ
# coding: utf8
buf = open(...).read() # bufはstr(バイト文字列)
ustr = buf.decode("cp932") # CP932なバイト文字列をUNICODE文字列に変換
print ustr.encode("utf8") # UNICODE文字列をバイト文字列にして出力
0212デフォルトの名無しさん
2014/12/09(火) 22:56:16.84ID:Z26sHvLQやってもいいけど、はたから見たら老害でしかないぞ
0213デフォルトの名無しさん
2014/12/09(火) 23:44:44.11ID:ufM684Cvそうか。>>208の回答を老害と言ってのける君は、さぞ素晴らしい回答をお持ちなのだろう
ぜひとも>>204に答えてあげてほしい
まさか批判だけして質問には答えないってことはないよね?
0214デフォルトの名無しさん
2014/12/09(火) 23:51:43.65ID:wjaKv5Op0215デフォルトの名無しさん
2014/12/10(水) 00:01:59.64ID:OIninACF>>211 に十分な答えが書いてある。
入力でデコード出力でエンコード
老害さん以外誰も「Windowsだったら中でCP932使ってるから外に出すときもそのままで問題ないUTF-8に変換なんて恐ろしい」なんて事は書いてない
0216デフォルトの名無しさん
2014/12/10(水) 00:05:37.30ID:qqk3Jq5w>>204 で問題ないだろ
何を言ってるんだよ w
0217デフォルトの名無しさん
2014/12/10(水) 02:01:12.95ID:ZinxyrVVcp932に全部代えてくれとか要望でたりする
0218デフォルトの名無しさん
2014/12/10(水) 02:08:07.23ID:pKsr4IMo0219デフォルトの名無しさん
2014/12/10(水) 02:30:51.47ID:ZinxyrVV0220デフォルトの名無しさん
2014/12/10(水) 02:37:11.79ID:aZsooZTQこれがwin-win。
0221デフォルトの名無しさん
2014/12/10(水) 03:21:24.95ID:jg27CPmW0222デフォルトの名無しさん
2014/12/10(水) 03:42:57.87ID:ZinxyrVV0223デフォルトの名無しさん
2014/12/10(水) 05:05:58.97ID:apQ/RdY4Python 2.7 or 3以降で処理したいのですが、
丁度いいパッケージはありませんか?
.pcap形式で一旦溜めずに、逐次処理できる方法を
探してます。
当方Win7 64bit、センサはたとえば
北陽UTM-30LX-EWを想定しています。
0224デフォルトの名無しさん
2014/12/10(水) 07:20:42.27ID:qqk3Jq5wいつの時代のメモ帳だよ w
0225デフォルトの名無しさん
2014/12/10(水) 07:42:08.52ID:OLff/u5a0226デフォルトの名無しさん
2014/12/10(水) 08:04:12.84ID:8ny1pSA3TCP か UDP か分かんないけど、
こんなもんでどう?
Lib/http/server.py
Lib/socket.py
Lib/socketserver.py
標準でどうでしょう?
最初は中を覗いてみるのをお勧めする。
0227デフォルトの名無しさん
2014/12/10(水) 08:22:01.95ID:6oxelApi0228デフォルトの名無しさん
2014/12/10(水) 08:33:52.77ID:KOm0EyPs意味不明なのはいいけど、頑なに BOM を目の敵にするのはやめてくれ
流通しちゃってるんだから、書けなくていいから読み取りは対応しろよ...
0229デフォルトの名無しさん
2014/12/10(水) 08:52:47.05ID:OLff/u5a有象無象の雑魚なら発狂しとけ
0230デフォルトの名無しさん
2014/12/10(水) 09:16:51.66ID:/qu2VRYBPython2なら同じ考え方でいいんだね
Python3だとどうなるのかな
書き方が違うだけで同じことはできるみたいだけど
文字コードにある程度ルーズでもなんとかなる、よりも
多少面倒でもこれさえしとけばOK、ていう原則がはっきりしてるほうが
書く方は楽だと思うんだけど…でも3のほうが文字コードの扱いについては進歩してるんだよね?
#coding: utf8
ustr = open(encoding="cp932").read()
print(ustr.encode("cp932"))
0231デフォルトの名無しさん
2014/12/10(水) 09:59:22.81ID:kUP0yqqm>208 のは
前半はそれで合ってるが最後の一文で台無しだな
SJISで出力すると内部コードの中にSJISに変換できない文字列が含まれてると死ぬ
UTF-8なら少なくともその問題はない
0232デフォルトの名無しさん
2014/12/10(水) 10:06:29.84ID:kUP0yqqmBOM付UTF-8がイミフなのは同意だが
MSが推奨してるっぽいな
メモ帳とかVisualStudioとか
もうMSを見捨てる時期に来てる
0233デフォルトの名無しさん
2014/12/10(水) 10:09:51.61ID:kUP0yqqmprintの中でencodeは好ましくないと思う
せめて
print(ustr)
か
sys.stdout.write(ustr.encode("cp932"))
のどちらかだけ(両方でも良いけどこの2つのどちらかって意味)を使うべき
0234デフォルトの名無しさん
2014/12/10(水) 12:34:20.48ID:KOm0EyPs> 前半はそれで合ってるが
ここにも老害かよ
早く引退しろよ
0235デフォルトの名無しさん
2014/12/10(水) 16:41:38.28ID:aygPX+UOエンコード相違の問題の発生しようがない
0236デフォルトの名無しさん
2014/12/10(水) 17:29:42.68ID:OLff/u5a生きてる価値なし
0237デフォルトの名無しさん
2014/12/11(木) 01:28:31.04ID:Q85UFlEhbstr = ustr.encode("cp932")
print(bstr)
ならいいですか?
0238デフォルトの名無しさん
2014/12/11(木) 05:24:02.53ID:f28H8ZNoだめ
0239デフォルトの名無しさん
2014/12/11(木) 05:48:35.51ID:CWkc829Wここの人たち、レスがごくわずかなうえに不親切だよな
0240デフォルトの名無しさん
2014/12/11(木) 07:07:17.75ID:WfGYiqMSpython3のprintはbytesをそのまま出力しないなんて実行すりゃ一発でわかるだろ
0241デフォルトの名無しさん
2014/12/11(木) 07:12:44.33ID:x9iRcYd3立っている奴は親でも使えって言うでしょ
あんた親ですらないし
生きている限りは俺の役に立てよ
分かったか?スットボケ野郎
0242デフォルトの名無しさん
2014/12/11(木) 07:27:33.17ID:KO4xnUY2乗り換えて2年だが、日本語エンコ
ード関連のエラーが全体の6割程度
という感じ。ただ、perlに比べて
pythonは圧倒的に分かりやすいの
で、そのエラーも直ぐに解決できる。
0243デフォルトの名無しさん
2014/12/11(木) 07:31:45.14ID:0qa2R5YZ0244デフォルトの名無しさん
2014/12/11(木) 07:49:25.24ID:5CTFfTWk0245デフォルトの名無しさん
2014/12/11(木) 07:52:45.08ID:2LyM0kV6http://stackoverflow.com/questions/3654830/why-are-there-no-and-operators-in-python
0246デフォルトの名無しさん
2014/12/11(木) 07:57:54.58ID:2LyM0kV6完全にオリジナルの理由については古いメーリングリストを参照するか、グイドに聞いてください
我々は国語の先生じゃありませんから、作者の心情など知りません
0247デフォルトの名無しさん
2014/12/11(木) 08:30:20.10ID:qKHRQsDrRubyも同じこと言ってた
0248デフォルトの名無しさん
2014/12/11(木) 09:55:41.16ID:CWkc829W試してみたけどちゃんとバイト列を出力するよ
>>> print('感動巨編'.encode('utf-8'))
b'\xe6\x84\x9f\xe5\x8b\x95\xe5\xb7\xa8\xe7\xb7\xa8'
0249デフォルトの名無しさん
2014/12/11(木) 10:27:19.77ID:HAPX7Bnj> =+1と変わらないし
バグ作り込んでるんじゃねーよ w
0250デフォルトの名無しさん
2014/12/11(木) 14:45:55.70ID:qKHRQsDrそれがどうかしましたか?
0251デフォルトの名無しさん
2014/12/11(木) 15:16:27.95ID:9Ff5guLW■ このスレッドは過去ログ倉庫に格納されています