ナンクル力学系

学んだ事を書き連ねていこう。

Archive for September 2008

Pythonで文字列が数字か確認する方法

leave a comment »

Pythonで文字列を数字に変換するのはint(“01”)で出来る。でも、数字以外をint(“hoge”)とかしてしまうとエラーが出るので文字列が数字か確認しなきゃいけない。

正規表現かー。面倒だな、と思ってたら普通に関数があった。str.isdigit()でいける。

In [1]: int("hoge")
---------------------------------------------------------------------------
<type 'exceptions.ValueError'>            Traceback (most recent call last)

/home/takafumi/test/pickle_vs_fromfile/<ipython console> in <module>()

<type 'exceptions.ValueError'>: invalid literal for int() with base 10: 'hoge'

In [2]: "hoge".isdigit()
Out[2]: False

In [3]: "001".isdigit()
Out[3]: True

In [4]: "101".isdigit()
Out[4]: True

In [5]: "hoge".isdigit()
Out[5]: False

In [6]: "0hoge".isdigit()
Out[6]: False

In [7]: "023 ".isdigit()
Out[7]: False

参考:2.3.6.1 文字列メソッド

Written by tkf

September 27, 2008 at 12:49 pm

Posted in programming

Tagged with

PythonのC拡張でAPIを公開する例

leave a comment »

PythonのC拡張を普通に書くと、その関数などは他のC拡張モジュールから使えない。という訳で他のC拡張から読み込めるようにAPIを公開する必要がある訳だけど、その作り方が少しトリッキーだったので公開してみる。

参考:拡張モジュールに C API を提供すると、NumPyのソース。

(追記。そういえばPython/C拡張の練習で書いたコードがあったので晒す:http://snipplr.com/view/8215/example-of-numpyc-api/ C APIは使ってないけど。)

あんまりPythonのC拡張どころか、C言語もそんなに触って無いのでおかしい所があるかも。ツッコミ大歓迎です!

準備するのは以下のファイル。son.Sonとfather.Fatherというモジュールを作ってFatherのメンバにSonをもってきてみた。

Read the rest of this entry »

Written by tkf

September 18, 2008 at 10:42 pm

Posted in programming

Tagged with , ,

PythonのC拡張をその場でコンパイルする方法とicc使う方法

leave a comment »

setup.pyを書いて、次のコマンドを実行するだけ。

python setup.py config --compiler=intel build build_ext --inplace

「config –compiler=intel」でコンパイラ指定。 「build build_ext –inplace」でソースファイルがある場所にモジュール(modulename.soとか)作成。

追記:

「python setup.py build –help-compiler」で使えるコンパイラオプションの一覧が見れる。ググるよりも–helpで色々調べるのがいいかも。

Written by tkf

September 18, 2008 at 10:41 am

Posted in programming

Tagged with ,

WordPress.comでもソースコードのハイライト出来るんだ

leave a comment »

wordpress.comだとソースコード上手く貼れないと思ってた.何でググって見つけられなかったのが不思議.

[sourcecode language=’言語の名前’]..[/sourcecode]で囲むだけらしい.

How do I post source code?

良いね!

class LineColor:
    def __init__(self):
        self.colors = ["b","g","r","c","m","y"]
        self.i = -1
    def get(self):
        self.i += 1
        return self.colors[ self.i % len(self.colors) ]

line_color = LineColor()

Written by tkf

September 11, 2008 at 8:54 pm

Posted in PC

Tagged with