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


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

Pythonのお勉強 Part 24



1 名前:デフォルトの名無しさん mailto:sage [2008/02/22(金) 01:27:53 ]
Python オフィシャルサイト
www.python.org/
日本Pythonユーザ会
www.python.jp/Zope/
FrontPage - Pythonのお勉強
python.rdy.jp/
前スレ
pc11.2ch.net/test/read.cgi/tech/1201073019/l50

◆関連スレッド
Microsoft IronPython 1.0
pc11.2ch.net/test/read.cgi/tech/1157686822/
Python の宿題ここで答えます Part 1
pc11.2ch.net/test/read.cgi/tech/1153585095/
2ch検索: [python]
find.2ch.net/?BBS=ALL&TYPE=TITLE&STR=python

◆関連リンク
Python 日本語ドキュメント - Pythonistaのお友達
www.python.jp/doc/release/

Pythonのバイブル的書籍
www.amazon.co.jp/dp/4797341815

その前編
www.amazon.co.jp/dp/4797341815


623 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:48:23 ]
def func1(a='hoge', b='fuga', c='moge', d='piyo'):
 中略

とやって

func1(b='foo', c='bar', d='baz'):
 中略

と呼ぶ手もなくはないがめんどい

624 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 18:53:19 ]
>>618
# python 2.5
import functools
func1p = functools.partial(func1, "第一引数の値")
func1p("hoge","fuga","piyo")

625 名前:618 mailto:sage [2008/03/12(水) 19:01:30 ]
>>620-621
now = time.strftime("%Y/%m/%d", time.localtime(time.time()))
def res(name, mail, time=now, body):
  中略

res("デフォルトの名無しさん","sage",,"本文")

ではなくて、res(,,,"本文")
と書けたら便利そうなのですが、前から省略はできない…
でも引数の順を変えるのは嫌かも…諦めるしかない
d

626 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 19:09:54 ]
>>623
すべての引数にデフォルトの値を割り当てれば
いいのか…

>>> def res(name="デフォルトの名無し",mail="sage",time="2008/03/12",body=""):
... print name,mail,time,body
...
>>> res(body="本文")
デフォルトの名無し sage 2008/03/12 本文

とりあえず解決しますた。
dd

627 名前:デフォルトの名無しさん [2008/03/12(水) 20:11:10 ]
コピペアフィブログの臭いがプンプンだぜ

628 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 21:04:02 ]
IronPython使ってる人なんていたんか

629 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 21:14:11 ]
>>> def res(**kwargs):
...  print kwargs['hoge'] if kwargs.has_key('hoge') else None
...  print kwargs['fuga'] if kwargs.has_key('fuga') else 0
...
>>>
>>> res(fuga=100)
None
100
>>> res(hoge='abc')
abc
0
>>>

630 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 21:22:30 ]
[] if...else...よりはget
更にhas_keyよりはin演算子

631 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 21:58:37 ]
def res(**kwargs):
  print kwargs.get('hoge', None) if 'hoge' in kwargs
  print kwargs.get('fuga', 0) if 'fuga' in kwargs




632 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:30:45 ]
**kwargs 出す場面じゃあない
暗黒面への入り口

633 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:11:23 ]
肛門臭うぞ

634 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:19:05 ]
鼻エスパー?w

635 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:21:17 ]
かわいそうな能力w

636 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 00:23:13 ]
import os
print [x for x in os.listdir(u"C:/")]

このやりかたって日本語ファイル名だめなの?

637 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 00:29:17 ]
\x83等のエスケープの事なら避けられない



638 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 00:55:29 ]
Python3000でprintが関数になれば出来るのかね。
強引だけど、map(print, os.listdir('.'))みたいな

639 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 01:03:54 ]
>>636の振った話題に付いて行けない。
このコードだとなにが問題なの?



640 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 01:10:55 ]
それよりみんなさ、引数がたくさんあるメソッドをオーバーライドしたときってどう対処してる?
たとえばGUIクラスがあったとして

class Window:
 def __init__(self, parent, width, height):
  ...

これを継承するでしょ。で、そのとき独自の引数 piyo を追加したい。その時って

class ExWin(Window):
 def __init__(self, parent, width, hegiht, piyo, *args, **kwargs):
  Window.__init__(self, parent, height, *args, **kwargs)
  ...

みたいに律儀にやってる?
でもこれだと、基底クラスの受け取る引数が一つ増えたときにややこしいことになる
それとも、..., piyo=None, *args, **kwargs)
って、キーワードとして追加?
なんにしても、基底クラスの仕様が変化すると、渡すパラメータの順番が狂ってしまう



641 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 02:54:37 ]
日本語コーデックの自動判別モジュール探してたんだけど、よく考えたら
この判定コードで十分じゃね?

jp_codecs = ("euc-jp", "sjis", "utf-8")
jp_patterns = "あいうえお…わをん"

def get_jp_codec(s):
 def tryenc(s):
  for i in jp_codecs:
   try:
    u = s.decode(i)
    yield i, u
   except UnicodeDecodeError:
    pass

 for enc, u in tryenc(s):
  if len(set(jp_patterns) & set(u)) > 0:
   return enc
 return None





642 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 05:01:39 ]
>>641
厳密に言うと、完全ではない。
たとえばEUC-JPとShift_JISは完全に区別することはできなくて、
Shift_JIS なのに s.decode('euc-jp') でエラーにならない場合もある。


643 名前:デフォルトの名無しさん [2008/03/13(木) 13:08:28 ]
全部試してみてエラーが起きないやつを可能性として
全部候補に挙げて,あとはカン,とかどうよ?
nkf なんかはもっとなんか別の統計的手法をつかってるんだっけ?

644 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 13:12:57 ]
シフトJISの半角カタカナ2文字か、EUC-Jの漢字1文字か、が
全く同じバイト列になるから判別不可能。

645 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 19:51:59 ]
Welcome to NISHIO Hirokazu's homepage!

646 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 23:52:55 ]
[i for i in globals().keys()]
と打ち込むと "_[2]" ていう変な識別子が定義されてるんだが、なんだこれは。

647 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 00:11:31 ]
ぐぐったらこんなのがみつかった
aspn.activestate.com/ASPN/Cookbook/Python/Recipe/204297
内包表現で使われる一時変数みたいね

>>> def p(x): print x
...
>>> [x for x in range(5) for _ in [p(locals()['_[1]'])]]
[]
[0]
[0, 1]
[0, 1, 2]
[0, 1, 2, 3]
[0, 1, 2, 3, 4]

# トップレベルのlocals()とglobals()は同じだよね・・・

648 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 00:21:47 ]
>>> dis.dis(compile("[x for x in range(5)]","","eval"))
  1           0 BUILD_LIST               0
              3 DUP_TOP            
              4 STORE_NAME               0 (_[1])
              7 LOAD_NAME                1 (range)
             10 LOAD_CONST               0 (5)
             13 CALL_FUNCTION            1
             16 GET_ITER           
        >>   17 FOR_ITER                13 (to 33)
             20 STORE_NAME               2 (x)
             23 LOAD_NAME                0 (_[1])
             26 LOAD_NAME                2 (x)
             29 LIST_APPEND        
             30 JUMP_ABSOLUTE           17
        >>   33 DELETE_NAME              0 (_[1])
             36 RETURN_VALUE       

さっぱりわからんが_[1]が使われてるみたいだ

649 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 02:21:21 ]
IronPythonだと出ない

650 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 09:14:55 ]
3.0α3でも出なかった

651 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 10:35:10 ]
>codecs.open()を扱っていない入門書など論外である。

>おミンパイはどうなの?

書いてあるよ。
工作員お勧めのはじパイには書いてないけど。



652 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 12:39:53 ]
速pyはどうなの?すごいマイナー臭がするけど。

653 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 13:19:15 ]
初めてのPythonって、オライリーから出てるのが本物?

654 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 14:20:31 ]
黄色い方が偽者

655 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 15:30:10 ]
wanthac.blogspot.com/2007/10/python_27.html

656 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 15:40:40 ]
d.hatena.ne.jp/Cassiopeia/20070602/1180805345

657 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 15:42:33 ]
osksn2.hep.sci.osaka-u.ac.jp/~taku/osx/python/encoding.html
># 日本語の入った文字は、u'....' のように、頭に"u"をつけて、 この文字列がUTF-8で書かれている事を明言します。

大嘘だ罠



658 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 15:45:03 ]
d.hatena.ne.jp/Cassiopeia/20070604/1180900747

659 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 16:08:04 ]
>>636
import os
print repr([x for x in os.listdir(u'c:/')]).decode('unicode-escape')

660 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 18:59:09 ]
工作員お勧めのクソ本のせいで「Pythonは日本語が苦手」という印象が広まってしまっている件。

661 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 19:48:06 ]
初めて日本語処理を書く人は大抵つまずく、という点では正しい。



662 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 20:16:36 ]
そこらへんはJAVAやC#に遅れをとっている所だよね
PerlやRubyよりはマシなんだけども

663 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 20:18:53 ]
>>659
出来ました
激しくありがとうございました

664 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 20:20:25 ]
PPPの中ではunicode化に関しては一番進んでるよな


665 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 20:22:09 ]
Java/C#はそんなに優れてるの?

666 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 20:42:40 ]
特にjavaは秀逸

667 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 20:46:13 ]
Javaってクラス名や変数名日本語可能?

668 名前:デフォルトの名無しさん mailto:sage [2008/03/14(金) 21:10:48 ]
動物が表紙のウンチ本が全部悪いんだぜ

669 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 00:49:12 ]
フローズンバイナリがよくわかりません。チュートリアルにも
フローズンバイナリに付いて全くといっていいほど情報がないし。。。
なんなの?これ

670 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 01:00:52 ]
>>669
何が分からんのか分からん。

671 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 01:19:15 ]
書いたスクリプトの実行時間(0.5秒)のボトルネックがimport文(9割を占める)でした。
importのオーバーヘッドを小さくするtipsなどないでしょうか?(2.4使用)

スクリプトはCGIにしたいと思っているもので、
色々な種類の小さめの処理(各1ファイル)をサクサク実行したいという状況なのです。



672 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 01:24:55 ]
>>669
サードパーティーモジュールが必要だから
チュートリアルに書いてあるわけがない。

673 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 01:31:32 ]
>671
まさか関数内で import なんてことないよね?
import はモジュールのトップレベルですべし。



674 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 02:05:00 ]
ディスクの空き容量が知りたい時は df を popen() して re.search()?
Windowsではどうするの?

675 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 02:17:29 ]
ctypesでGetDiskFreeSpaceEx呼び出す

676 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 09:12:45 ]
>>674じゃないけどヒントもらったしせっかくなので

from ctypes import *

dirname = ur'c:\\'
GetDiskFreeSpaceExW = windll.kernel32.GetDiskFreeSpaceExW
freeBytesAvailable = c_ulonglong()
totalNumberOfBytes = c_ulonglong()
totalNumberOfFreeBytes = c_ulonglong()
GetDiskFreeSpaceExW(
  dirname,
  byref(freeBytesAvailable),
  byref(totalNumberOfBytes),
  byref(totalNumberOfFreeBytes))
print "free space of %s: %d bytes" % (dirname, freeBytesAvailable.value)

こういうのちょこちょこ書き溜めたら結構なライブラリになるだろうなあ

677 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 09:40:42 ]
ttp://starship.python.net/crew/mhammond/win32/

678 名前:676 mailto:sage [2008/03/15(土) 10:02:11 ]
>>677
d
さっそく書き直したよ

>>> import win32file
>>> win32file.GetDiskFreeSpaceEx(u'c:/')

679 名前:デフォルトの名無しさん mailto:sage [2008/03/15(土) 11:11:46 ]
おれもやってみたけど
>>676 で帰ってくる値と >>678 で帰ってくる値が微妙に違うw

もちろんその間にdiskは使ってないし
totalNumberOfBytes
の値だけは一緒だから

freeBytesAvailable と totalNumberOfFreeBytes
の値だけが変化してるw

こういうときでも
freeBytesAvailable == totalNumberOfFreeBytes
は常に真なんだな

680 名前:674 mailto:sage [2008/03/15(土) 14:17:33 ]
みなさんありがとう!
Mac OS X と Windows をターゲットにした客先なので
os.name 見て切り替えるしかないですね。

pywin32 でも ctypes でもいいから標準インストールに含まれるようにならないかなーと思ったら
2.5 から ctypes 入ってたのねorz 知らなんだ...

681 名前:636 mailto:sage [2008/03/15(土) 22:24:47 ]
>>659
超ありがとう



682 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:01:51 ]
win32com.clientを使いたいんだけど、
'\x83N\x83\x89\x83X\x95\xb6\x8e\x9a\x97\xf1\x82\xaa\x96\xb3\x8c\xf8\x82\xc5\x82\xb7'
なんてエラーメッセージが帰ってきたんです。
これ、何て読むんですか?

683 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:03:52 ]
>>> print '\x83N\x83\x89\x83X\x95\xb6\x8e\x9a\x97\xf1\x82\xaa\x96\xb3\x8c\xf8\x8
2\xc5\x82\xb7'
クラス文字列が無効です

確かに見づらい罠。

684 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 00:36:41 ]
>>683
シフトJIS?
utf-8な環境だと????だらけで見れない。

685 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 01:14:11 ]
だな。sjisにdecodeでおk。

686 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:10:23 ]
教えてください!
PyDEVでプログラムを書いています。
書いたプログラムを実行するのに「次を実行ボタン」「ダイアログが開く」
「Python実行を選択する」「OKボタン」の順に操作するのが面倒です。
また、「左のツリーからファイルを右クリック」「右クリックメニュー」「実行→」「Python実行」
とメニューを辿っていくのも面倒です。
なんかボタン一発で今開いているファイルを実行する方法はありませんか?

687 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:13:01 ]
書いたpyファイルダブルクリックが最速かもな
端末から打つより早いだろうし

688 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:44:35 ]
左側のツリー(Pydevパッケージエクスプローラ)で、
開いているファイルをダブるクリックすると、一瞬マウスが砂時計になって、その後何も起こりません。
開いていないファイルをダブるクリックすると、エディタで開きます。
どこでダブルクリック?

689 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 08:16:44 ]
困ったことがあったら、
>>1にリンクされている
聖書を読むべき

690 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 08:29:47 ]
聖書ってお民パイのことか?w

691 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 11:48:19 ]
ITproにPythonの連載がのってた。
itpro.nikkeibp.co.jp/article/COLUMN/20080207/293301/

2回目がSQLObjectだった。



692 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 11:50:43 ]
気軽といいつつLinuxを例にしてるアレか

693 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 11:54:01 ]
SQLAlchemyだったら読みに行くんだが・・・

694 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:04:59 ]
datetime.strptime に UnicodeString 渡したらエラーになった…。
str のまま渡すとうまくいく模様。これって変じゃないか?

----
# -*- coding: cp932 -*-
from pprint import pprint
from datetime import datetime

# 成功
pprint( datetime.strptime("2008年3月16日 2:03", "%Y年%M月%d日 %H:%m") )

# 失敗
pprint( datetime.strptime("2008年3月16日 2:03".decode("cp932"), "%Y年%M月%d日 %H:%m".decode("cp932")) )

----

695 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:37:00 ]
datetime.datetime.strptimeがunicodeならsys.getdefaultencoding()でstrに変換、という処理を行ってるからのようだ。
time.strptimeはそんなことをしていないので、バグかな?

$ python -S
Python 2.5.2 (r252:60911, Mar 12 2008, 13:36:25)
[GCC 4.2.3 (Ubuntu 4.2.3-2ubuntu4)] on linux2
>>> import sys, time, datetime
>>> sys.getdefaultencoding()
'ascii'
>>> time.strptime(u"2008年3月16日 2:03", u"%Y年%M月%d日 %H:%m")
(2008, 3, 16, 2, 3, 0, 6, 76, -1)
>>> datetime.datetime.strptime(u"2008年3月16日 2:03", u"%Y年%M月%d日 %H:%m")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode character u'\u5e74' in position 4: ordinal not in range(128)
>>> sys.setdefaultencoding('utf-8')
>>> sys.getdefaultencoding()
'utf-8'
>>> time.strptime(u"2008年3月16日 2:03", u"%Y年%M月%d日 %H:%m")
(2008, 3, 16, 2, 3, 0, 6, 76, -1)
>>> datetime.datetime.strptime(u"2008年3月16日 2:03", u"%Y年%M月%d日 %H:%m")
datetime.datetime(2008, 3, 16, 2, 3)

696 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:10:24 ]
strptimeのメインの処理は_strptime.strptimeなんだけど、
これを呼ぶPyObject_CallMethodの第三引数formatが違うんだな。
datetime.datetime.strptimeは"ss"になってる(strへの変換)。
time.strptimeは"O"でタプルのまま渡してる。

697 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 16:38:50 ]
>>691
SQLObjectのことをフレームワークと言ってて「ふーん」と思った。

698 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 22:48:46 ]
>>686
Eclipse + Pydev?
F11やCtrl + F11はどうよ

699 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:11:59 ]
>>698
レスありがとう。
F11すると「次を実行ボタン」を押したときと同じでダイアログがでてきました。
>>686で書いたのと同じです。Ctrl+F11は何も起こりません。
ソースをちょこちょこ変更して実行して、、、ていうことを繰り返してると、
実行するまでの動作がだんだん煩わしくなってきます。

700 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:48:22 ]
どなたか教えてください
t=urllib.urlopen("http://〜〜").read()
print type(t)
とするとstrとなるんですが。
utf-8のサイトの場合 tの型がunicodeになってほしいんです
どうしたらよいでしょうか。
python2.5の場合はstrのままテキストに落としたらutf-8として文字化けせずに表示されるのですが
ironpythonの場合テキストエディタで開いたらASCIIとして認識され文字化けされています。
utf-8としてそのファイルを保存し直しても文字化けしたままです。
解決策ご存じの方いましたらお願いします

701 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:52:27 ]
t=urllib.urlopen("http://〜〜").read().decode("utf-8")



702 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:58:58 ]
>>700
入門書嫁。

703 名前:700 mailto:sage [2008/03/17(月) 00:39:43 ]
文字化けしない方法自己解決しました。すいません;
ファイルの側をバイナリモードで開いて突っ込むだけでした。
open("hoge","wb")


704 名前:700 mailto:sage [2008/03/17(月) 02:02:00 ]
>>701
ちゃんとレスが表示されてなくて見てませんでした。

それだとAsciiキャラクタじゃないから変換できませんよーってエラーがでます。
ironpythonではutf-8なんて定義されてないって出ました
僕の環境だけでしょうか・・・・?

705 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 10:23:43 ]
>704
ところで Python のバージョンは?

706 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 11:14:09 ]
また文字コードか

707 名前:デフォルトの名無しさん [2008/03/17(月) 11:45:17 ]
文字コードの諸問題もテンプラに入れて初心者が醤油と大根おろしで美味しく食せるようにするべき

708 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 12:33:53 ]
pythonce mobileとpythonce smartphoneってどうちがうんですか?

709 名前:デフォルトの名無しさん [2008/03/17(月) 15:04:11 ]
正直文字コードをうまく扱えないやつはPython使うなといいたい。
Rubyのがはるかに先を行っている

710 名前:デフォルトの名無しさん [2008/03/17(月) 16:00:43 ]
どう先を行っているの?
煽りじゃなくてマジで知りたい。
しかしRubyを学ぶのは断る!

711 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 16:11:21 ]
ほんとどの言語使っても文字コード絡みはネックだなー
Pythonに限った話しじゃないけど、文字コードの仕組みというか原理というかを完全に理解してる方たちは、
悩まずプログラミング出来てますか?

なんかいっつも日本人可哀想だなーって思ってしまう俺がアホなだけ??
一回とことん文字コードについて勉強したほうがいいんかなー



712 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 16:17:39 ]
文字列は基本unicode、strは単なるバイト列(≒I/O用)
なんもややこしいことはない。

713 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 17:54:59 ]
>>711
unicodeへのエンコードモジュールを自分で作ってみ。

714 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 18:14:19 ]
u'ほげほげ' を勝手に UTF-8 だと思い込んでいるひとが意外と多い
それがすべての間違いの元

715 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 19:07:39 ]
>>> a="タ"
>>> if a in "[ぁ-んァ-ン]": print "true"
... else: print "false"

文字列が、ひらがな、もしくはカタカナだと
判定するにはどうしたら良いですか?
上記のだとうまくいかない…

716 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 19:47:50 ]
if a in [c for c in u'ぁ-んァ-ン']: print "true"
 else: print "false"

717 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:02:05 ]
>>716
>>> for e in u"ぁ-ん":
... print e,
...
ぁ - ん
>>> for e in [c for c in u"ぁ-ん"]:
... print e
ぁ - ん

できないジャン

718 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:07:45 ]
print re.match(ur"[ぁ-んァ-ン]", u"タ") is not None

719 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:09:33 ]
>>> for i in unicode('あア亜', 'mbcs'):
print unicodedata.name(i)


HIRAGANA LETTER A
KATAKANA LETTER A
CJK UNIFIED IDEOGRAPH-4E9C


720 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:39:32 ]
c = u'タ'
if u'ぁ' <= c <= u'ん' or u'ァ' <= c <= u'ン': print "true"
else: print "false"

721 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:20:48 ]
見た感じ、unicodedata使うのが綺麗っぽいかな。



722 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:24:56 ]
>>707
おっと、いい天ぷらは塩だけでいけるぜ

723 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:06:51 ]
手元のベンチマークだと一文字だと比較 : 正規表現 : unicodedata = 1 : 2 : 2.5くらい
複数文字の文字列だと長ければ長いほど正規表現が抜群に速い
(PythonのループはCと比べてかなり遅い)






[ 続きを読む ] / [ 携帯版 ]

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

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