タグ

ブックマーク / morchin.hatenadiary.org (13)

  • exe化 - プログラミング日記

    1. 以下のサイトからlua-5.1.4のソースをダウンロードして展開 http://www.lua.org/download.html ・lua-5.1.4\srcフォルダに以下のファイルを作成 // main.c #include "lua.h" #include "lualib.h" #include "lauxlib.h" int main() { lua_State *L = lua_open(); luaL_openlibs(L); int top = lua_gettop(L); int ret = luaL_dofile(L, "main.lua"); if (ret != 0) { printf("error: %s\n", lua_tostring(L, -1)); return 1; } lua_settop(L, top); lua_close(L); return

    exe化 - プログラミング日記
    zetamatta
    zetamatta 2011/05/11
    Luaスクリプトを、exeファイル化する手法
  • Decompiler - プログラミング日記

    DePython (http://depython.net/) decompile.py (http://users.cs.cf.ac.uk/J.P.Giddy/python/decompiler/decompiler.html) pycファイルをpyファイルに変換してくれる。

    Decompiler - プログラミング日記
    zetamatta
    zetamatta 2009/06/20
    『pycファイルをpyファイルに変換してくれる』デコンパイラー DePython と decompile.py へのリンク
  • 2008-10-02

    6.5.2 Exampla (http://docs.python.org/lib/itertools-example.html) Pythonのマニュアルにめちゃくちゃうまいやり方が載っていた。 >>> data = [ 1, 4,5,6, 10, 15,16,17,18, 22, 25,26,27,28] >>> for k, g in groupby(enumerate(data), lambda (i,x):i-x): ... print map(operator.itemgetter(1), g) ... [1] [4, 5, 6] [10] [15, 16, 17, 18] [22] [25, 26, 27, 28] 以下は、上記のやり方を利用したバージョン。 from operator import itemgetter from itertools import group

    2008-10-02
    zetamatta
    zetamatta 2008/10/04
    整数の数列で、連続している部分を同一のグループにする手法。enumerate で生成した数列(0,1,2,3…)の各要素を引き算した値をキーにしてグルーピングしてやればよいというナイスアイデア
  • 2008-09-23 - プログラミング日記 [一般] 〜使い

    最近『初めてのRuby』を読んでいる。Pythonのメソッドの第一引数にselfを書かなくてはいけないが、Rubyと対比して理由がなんとなく分かったので検討してみる。 まずPythonではRubyと同様、インスタンスメソッドとトップレベル関数の区別がない。Pythonではメソッドと関数という呼び方をする。関数およびメソッドは単なるオブジェクトの属性である。つまりメソッドはクラスオブジェクトのcallableな属性、関数はモジュールオブジェクトのcallableな属性である。Pythonでも全てがオブジェクトなので、この区別をしないということが重要となる。 ここで、以下のクラス定義を考えてみる。 >>> class Foo: ... a = 1 ... def foo(self): ... a # エラー (1) ... Foo.a # OK (2) ... self.a # OK (3)

    2008-09-23 - プログラミング日記 [一般] 〜使い
    zetamatta
    zetamatta 2008/09/24
    Pythonista/Rubyist/Perl Monger/PHPer(ぺちぱー)/Schemer/Lisper は知られているが、Java/C/C++/C# は使い手の一般的な呼称がないねというお話
  • 2008-07-07

    以前の自分の日記(2008/2/21、2008/2/22)でimportによるmixinの方法を書いたが、『まるごとRuby!』のartonさんの記事を見て、execにより実現できることに気がついた。文字列を動的に作っても良いので結構応用範囲は広いと思う。k.inabaさんの『わなD』に似たような記事があったような気がする。 In [1]: s=''' ...: def foo(self): ...: print 'foo' ...: ...: def bar(self, o): ...: print o ...: ''' In [2]: class Foo(object): ...: exec(s) ...: In [3]: Foo.foo Out[3]: <unbound method Foo.foo> In [4]: f = Foo() In [5]: f.foo() foo In

    2008-07-07
    zetamatta
    zetamatta 2008/07/12
    mixin する内容を文字列化して、exec するという荒技。リンク先には属性をインスタンスに追加する方法なども紹介されている
  • 呼び出し元の名前の取得 - プログラミング日記

    常山日記経由でメモ。これはすばらしい。 Chris's Wiki: Finding the name of your caller in Python (http://utcc.utoronto.ca/~cks/space/blog/python/FindingCallersName) import inspect def getcallerinfo(): fr = inspect.currentframe() try: fr = fr.f_back if fr is None: return '<no caller>' fi = inspect.getframeinfo(fr, 0) if fi[2] == '<module>': return '(%s:%d)' % (fi[0], fi[1]) else: return '%s() (%s:%d)' % (fi[2], fi[0],

    呼び出し元の名前の取得 - プログラミング日記
    zetamatta
    zetamatta 2008/04/23
    呼び出し元をゲトする inspect モジュールの使用例
  • 『Pythonクックブック』のメモ - 2007-11-28 - プログラミング日記

    リストを辞書にするイディオム 過去の日記で書いたネタで、自分が発見して大発見だと思っていたら、リスト L を辞書 d にするイディオムが"4.4 シーケンスのアイテムとそのインデックスをループ処理"に載っていた。イディオムは以下の通り。インデックスが非負の有効範囲に限られるという制限と、富豪的(処理が重い)という制限があるが、手軽さの点では一番だと思う。 d=dict(enumerate(L)) isinstance isinstanceはタプルを引数に取れる。 isinstance(x, (list, tuple)) オブジェクトの反復可能をチェックする方法 iter(obj) で TypeError を起こさなければ obj は反復可能。 シーケンスの複数のインデックスの値を取り出す Pythonではmapよりリスト内包表記の方が推奨されているが、mapと特殊メソッドの組み合わせは面白

    『Pythonクックブック』のメモ - 2007-11-28 - プログラミング日記
  • Pythonのハッキング - プログラミング日記

    かなり面白そうな記事を見つけた。後でじっくり読むつもり。 dis/inspectモジュールとceval.cを使ったPythonのハッキング http://www.nasuinfo.or.jp/FreeSpace/kenji/sf/python/virtualMachine/PyVM.htm Visual モジュール VPython http://www.nasuinfo.or.jp/FreeSpace/kenji/sf/visualj/index.html pythonのデコレータ構文 @decorate http://www.nasuinfo.or.jp/FreeSpace/kenji/sf/python/virtualMachine/decorator.htm python, vpythonsfによる偏微分方程式の数値解法 http://www.nasuinfo.or.jp/Free

    Pythonのハッキング - プログラミング日記
    zetamatta
    zetamatta 2007/12/01
    Python に関する興味深い記事のリンク集(デコレータ構文など)
  • 簡易的なデータベース - プログラミング日記

    仕事で簡易的なDBを利用したくてPythonでできないか検討していた。MS AccessやSQLiteなどの外部のDBを利用しないでやる方法として直列化(serialize)で検討している。直列化の標準モジュールとして、marshal、pickle/cPickle、shelveがある。どれが良いのか検討しているが、Pythonライブラリリファレンスに以下のようにあったのでmarchalは脱落。 Python には marshal と呼ばれるより原始的な直列化モジュールがありますが、一般的に Python オブジェクトを直列化する方法としては pickle を選ぶべきです。marshal は基的に .pyc ファイルをサポートするために存在しています。 以下にそれぞれの特徴を挙げる。 marchal cPickleより動作が速い 保存、復元されるデータはOSに依存しないが、Pythonのバ

    簡易的なデータベース - プログラミング日記
    zetamatta
    zetamatta 2007/11/20
    記事のとおり、確かに cPickle がお薦め。shelve は open 時間が長い & OS の dbm に依存するので、破損率が高い(某環境で2回壊れた)
  • ディスクリプタ - プログラミング日記

    ディスクリプタとは 代入、参照、削除を扱う属性を持ったオブジェクトをディスクリプタという。具体的には、__get__、__set__、__delete__のいずれかを定義したオブジェクトをディスクリプタという。 ディスクリプタにより属性のデフォルトlookupの挙動を変更することができる。property、bound method、unbound method、static method、class method、superもディスクリプタの考え方でC言語で実装されている。 シグネチャ __get__(self, obj, type=None) ⇒ value __set__(self, obj, value) ⇒ None __delete__(self, obj) ⇒ None __get__、__set__両方定義されているオブジェクトをdata descriptorという。 __g

    ディスクリプタ - プログラミング日記
    zetamatta
    zetamatta 2007/11/18
    「ディスクリプタ」について。オブジェクト/クラスの属性などに対するアクセスのフックなどに使える。
  • 文字列結合 - プログラミング日記

    Perl使いのPythonちゃん: Perlで言う、join関数が使い難い (http://python.blog-slime.com/2007/07/perljoin.html) str.joinとフォーマット指定の時間をPython 2.5で比較してみた。2.5.1ではテストしていないが恐らく変わらないと思う。 >>> from timeit import Timer >>> >>> setup=''' ... a = ['a', 2, 3, "b"] ... ''' >>> stmt1 = "'%s'*len(a) % tuple(a)" >>> stmt2 = "''.join([str(x) for x in a])" >>> >>> Timer(stmt1, setup).timeit() # フォーマット指定版 2.8873306523594482 >>> Timer(stm

    文字列結合 - プログラミング日記
    zetamatta
    zetamatta 2007/10/27
    数値と文字列が混在しているシーケンスの場合、"".join([str(x)for x in A]) より "%s"*len(A)%tuple(A) の方が速いという話。(文字列だけなら変換コストが無い分当然ながら join が速いみたいだけど)
  • 3.0a1の新機能 (1) - プログラミング日記

    以下を基にしたまとめ。 Python Documentation: What's New in Python 3.0 (http://docs.python.org/dev/3.0/whatsnew/3.0.html) print関数 printが文から関数になった。()を付けないとSyntaxErrorが発生。詳細は、PEP 3105を参照。 print(value, ..., file=None, sep=' ', end='\n') # シグネチャ print('a', 'b') # "a b"を出力して改行する print('a', end=' ') # "a "を出力。改行しない print() # 改行を出力 print("a", file=sys.stderr) # sys.stderrに出力 print((x, y)) # repr(x, y)を表示。 print('1',

    3.0a1の新機能 (1) - プログラミング日記
    zetamatta
    zetamatta 2007/10/06
    Python 3000 の新機能。formatメソッドより、% 演算子の方がよかったな。。
  • 2006-10-30

    まだ自己解決していないが、問題提起だけ再度まとめておく。リストや文字列などのシーケンスの一部をビルトイン関数(やビルトインクラスのメソッド)、例えば、reversed()やcmp()などの引数やオブジェクトとして使用する場合、新たなインスタンスを作らないといけない。 L = [0, 1, 2, 3, 4, 5] L[:3] = reversed(L[:3]) # reversed()の引数でL[:3]とした時にインスタンスが発生。これが不満。そこで、以下のように同じシーケンスのコピーを作らずにシーケンスの一部を取り出したいが、 L = [0, 1, 2, 3, 4, 5] L2 = (L[k] for k in xrange(0, 3)) # インデックス3より小さいシーケンスをジェネレータで取り出すここでの、L2をreversed()やcmp()に直接渡せない。通常、シーケンスの一部をビ

    2006-10-30
    zetamatta
    zetamatta 2007/05/07
    勉強になる
  • 1