こんにちは、Python界のヘンリー塚本ことmopemopeです。 なんかpythonのpycファイルをいじってアタックするとかセキュリティの話が出てきてますね。 せっかくなので別の方法でこーいうこともできますよというのを紹介しておきます。 もちろん普通の人は書かないであろう、あらびきな方法です。 今回は関数などの実行結果をすりかえるという話です。 ではコード。 steal.h #ifndef STEAL_H #define STEAL_H #include <Python.h> #ifdef DEVELOP #define DEBUG(...) \ do { \ /*printf("%-22s%4u: ", __FILE__, __LINE__);*/ \ printf("%-22s %-32s%4u: ", __FILE__, __func__, __LINE__); \ printf
前回までにオブジェクトにメソッドを追加する以外のことはやったので、ここではメソッドを追加してあげましょう。テストはtestStringに書いてありました。コメントアウトされてる部分を元に戻します。 def testString(self): s = String.new('abc') self.assertEqual(3, s.length) self.assertEqual('abc', s.c_str()) self.assertEqual('returns string', s.c_str.__doc__)#追加 c_str()なんてメソッドは追加してませんから、string_getattrがエラーを出します。Cの方を変更しましょう。 struct String { PyObject_VAR_HEAD int length; //文字列の要素を入れます。メモリを確保するときに、siz
前回はコンストラクタを定義しました。次はgetattrを定義して、フィールドにアクセスするところまで進めます。テストの方は、testStringを復活させます。 def testString(self): s = String.new('abc') self.assertEqual(3, s.length) # self.assertEqual('abc', s.c_str()) Stringのコンストラクタは引数を取るように変更して、lengthフィールドを追加するということになります。Cの方は次のように変更を加えます。 // 構造体にlengthを追加 struct String { PyObject_VAR_HEAD int length; }; ... //Stringオブジェクトのgetattr関数として登録されます。メソッド及び、フィールドの //アクセスもこの関数を元に処理さ
まわりではやりはじめてるというのもあるんですが、 バイリンガルになるためにイチから、Pythonを勉強していきます。 なにやら、いろいろできそうな雰囲気はあります。 無謀にも参考書なしでやろうとしています。 うんちく関連は他のサイトにまかせて、 とにかくコードを書いてためしていくという方針です。 一日2個くらいずつ、気分転換にプログラムを書いていってみようかと思います。 この文書が初心者の方の参考になれば嬉しく思います。 ただいまの技術力:★★☆☆☆ もっと関数 引数をとらず、返り値を持たない関数だけでなく、 その他のタイプについてもやってみます。 PyArg_ParseTupleAndKeywordsとかいうのも、あるんですけど 当面、利用価値がなさそうなので、無視します。 結果として、以下のような課題が残りました。 今の知識では解決不能なので、とりあえず、放置して先に進みます。 やり
C拡張モジュールの例として、helloworldをstringオブジェクトとして返すような簡単な例は見ますが、ユーザー定義オブジェクトをC言語で実装するような例は見つかりませんでした。Makefileはhelloworldモジュールを作るときと変わらないので省略します。最低限のオブジェクトを定義するためには、コンストラクタの追加、メソッドが追加、フィールドの追加ができたら良いと思います。これらの作業をするために、自作文字列モジュールStringを書くことにします。テストケースとしては次のようなものをパスすれば良いでしょう。 #!/usr/bin/python import String import unittest class StringTest(unittest.TestCase): def testString(self): s = String.new('abc') self.a
いくつかの落とし穴をよければ意外と簡単だったので、 この文章を必要としている誰かのために整理してみることにします。 追記: おびなたのはてな日記 - distutils with boost.pythonで詳しく説明されているように、C++とBoostを使うともっと楽になるようです。近いうちに試してみます。 また、 Cybozu Developer Network: Python調査報告 (2006/10) によれば 「PEAKの setuptools は distutils の拡張で(中略)distutils の上位互換であるため、setuptools を使用しない理由はありません。積極的に使用しましょう。」とのことなのでこちらも試してみたいと思います。 Cのコードを用意する 書き換えるべき所を明確にするために、 [[MODULE_NAME]]というように表記しました。 同じ名前の括弧に
これは Python3 Advent Calendarの記事です。 こんにちわ、高校生です。 先日、子供(遼くん)が無事生まれましたが、毎日お世話で忙しいです。 Python3 Advent Calendar ということでPython3に関して書いてみたいと思います。 Python3対応というのはまあいろいろあるんですが、Pure Pythonで両方動くコード書こうとなると文法とかいろいろ面倒ですね。 ですがC/APIで書くとマクロで大きく処理を2系、3系と切り替えができるのでので容易に両バージョンをサポートするコードが書けます。 ということで2/3両方をサポートするコードをC/APIを中心に幾つか書いてみたいと思います。 (3系といっても3.2以降と思ってください) Python3の判別 Python3であるかどうかは元々用意されているPythonのバージョンを確認できるマクロで容易に判
はじめまして、gumiの津村です。 現在は解析系の仕事をしたり、ツールを作ったりしています。 今回の話は高速化についてです。 結構長めの文章です。 目次 実行速度の高速化 Python/C API ctypes Pyrex Cython SWIG その他 纏め 実行速度の高速化 高速化といっても色々ありますが、今回は実行速度の高速化についてです。 弊社ではPythonを全面的に採用していますが、そもそもLLは実行速度が遅い言語です。特にC言語のようなコンパイラ系の言語と比べると非常に遅いです。 それでもLL系の言語がここまで使われるようになったのは、開発効率が良いからです。 もはや常識ですね。 しかし、それでも特定の領域ではどうしてもPythonのようなLL系言語では厳しい部分も出てきます。 アルゴリズムを変更しても、ハードウエアを変えても、無理な物は無理です。 速度に問題がある場合の最適
lxmlのソースを読もうとしたらcythonというPythonの拡張を書くためのPythonとCの間の子みたいな言語で書かれているという事で、全く知らないままだとlxmlのソースに挑む気が起こらなかったので少し調べてみました。まぁ調べてみたといってもcythonのドキュメントの最初に書かれているGetting Startedを舐めただけなんですけども。 まずcythonをインストールします。 $ easy_install cython そして恒例のhello worldは以下になります。拡張子は.pyxを使うようです。 # hello.pyx def say_hello_to(name): print 'Hello %s' % name どう見てもPythonのコードなので楽勝なのですが、これを使えるようにsetup.pyを書かねばなりません。少しだけ面倒ですね。以下のように基本は通常のs
このドキュメントでは、Python インタプリタを拡張するために C/C++ でモジュールを書く方法について述べます。拡張モジュールでは、新たな関数を定義できるだけでなく、新たなオブジェクト型とそのメソッドも定義できます。このドキュメントではまた、Python インタプリタを別のアプリケーションに埋め込み (embedding)、拡張言語として使う方法についても述べます。また、動的に(実行時に)拡張モジュールをロードする機能をOSがサポートしている場合に、動的ロード可能な拡張モジュールをコンパイルしてリンクする方法を示します。 このドキュメントでは、読者は Python について基礎的な知識を持ち合わせているものと仮定しています。形式ばらない Python 言語の入門には、 Python チュートリアル を読んでください。 Python 言語リファレンス を読めば、 Python 言語につ
2008-07-20 - subversion 2008-07-08 - Kubuntu 2008-07-04 - scipy 2008-05-25 - apache 2008-05-09 - ctypes 2008-04-26 - ファイルシステム - Linux - ループバックデバイス 2008-04-21 - コマンド 2008-04-03 - emacs 2008-03-17 - itertools 2008-03-14 - python - RecentDeleted - cvs 2008-03-10 - .bashrc 2008-02-06 - PIL 2008-01-21 - cron 2008-01-17 - popen2 2008-01-12 - sip 2008-01-10 - 初級編 C言語によるPython拡張 Pythonは書き
はじめに こんにちは、Python界のSIGTERMです。先日CPython 3.2ソースコードリーディングに参加して「そもそもソース読む前にC/APIの書き方わかってないとだめだな」と痛感したので手習い的に書き始めてみました。題材は今や絶賛サンプルパッケージとしておなじみの bucho をC/APIで書きなおした cbucho です。 書き散らかしたもの cbucho 0.0.3 : Python Package Index PyPIへのリンク ymotongpoo/cbucho · GitHub GitHubのレポジトリ 参考 とりあえず公式ドキュメントと既存のソースを読めばいいと思います。 Python インタプリタの拡張と埋め込み — Python 2.7ja1 documentation Python/C API リファレンスマニュアル — Python 2.7ja1 docum
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く