メイン

Python アーカイブ

2010年01月26日

なにげに

Pythonにはまってます.
すごく簡単.すごくCoolです.
まだ、使い始めたばかりですが、使いやすい、わかりやすい.

Rのサイトなのに、Python関連の記事が増えてます(汗

2010年02月09日

PythonでPostgreSQLにアクセスする

PythonでPostgreSQLにアクセスする
本当は、ODBCを使ったほうがいいのだろうけど.

mxODBCとかいうのが標準らしい?

2010年02月19日

PythonでSYBASEにアクセスする

PythonでSYBASEにアクセスしなければならなくなったので【pyodbc】を使ってみた.
まあまあ使えそう.

参考:【RODBCでいろんなデータベースと通信する(SYBASE編)

2010年03月11日

RPCなサーバーを立てる - Pyro

PyroでRPCなサーバーが立てられる.
いやこれ、すばらしい.

2010年06月15日

集合知プログラミング

「集合知プログラミング」をAmazonでゲット.

O'reillyのページにあるPythonのソース(Examplesから取得可能)を見てみたんだけど、なんかちょっとバグいっぱいありそうな・・・

本館の方で、報告予定.

2010年06月18日

SimpleXMLRPCServer

SimpleXMLRPCServerではまったので、そのメモの記事を追加.

BugTrack- その他のメモ/32

2012年04月02日

[python] 名前のついたアイテム群を集めておく

「4.18 名前のついたアイテム群を集めておく」より抜粋.こんな使い方ができるんですね.辞書なのに、辞書のキー(文字列)をプロパティのようにして変数にアクセスできます.

class d(dict):
    __getattr__ = dict.__getitem__
    __setattr__ = dict.__setitem__
    __delattr__ = dict.__delitem__
>>> d

>>> ddd = d()
>>> ddd
{}
>>> ddd['a'] = [1,2,3]
>>> ddd
{'a': [1, 2, 3]}
>>> ddd.a
[1, 2, 3]
>>> dir(ddd)
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__dict__', '__doc__', '__eq__', ...]
>>> ddd.keys()
['a']
>>> ddd.b = {}
>>> ddd
{'a': [1, 2, 3], 'b': {}}
>>> ddd.b
{}
>>> ddd['b']
{}
>>> ddd.__class__

>>> ddd.__class__.d
Traceback (most recent call last):
  File "", line 1, in 
AttributeError: type object 'd' has no attribute 'd'
>>> ddd.values()
[[1, 2, 3], {}]
>>> ddd.items()
[('a', [1, 2, 3]), ('b', {})]
>>> dict(ddd.items())
{'a': [1, 2, 3], 'b': {}}
>>>

2012年09月24日

Non-valid Unicode/XML with Python SimpleXMLRPCServer?

うーん・・・
下のエラーと同じようなエラーが出たときに見つけたページ.
ちょっとどういう状況で出たのか覚えていないし最近でないので放置.
再現したときに詳細を記述します.
Non-valid Unicode/XML with Python SimpleXMLRPCServer?

2012年09月26日

Djangoでソーシャルアカウントを扱うためのリンク

2012年09月27日

Djangoで静的ファイルを配信する場合のセッティング

本番運用では静的ファイルはapache等で配信するべきだが、開発段階で静的ファイルを配信したい場合はこうします.

if settings.DEBUG:
    urlpatterns += patterns('',
        url(r'media/(?P.*)$', 'django.views.static.serve',
            {'document_root': settings.MEDIA_ROOT}),
    )

2012年09月29日

pythonのブール演算子 and や or

ブール演算子の引数にはブール値だけが使えるわけではない.

>>> string1, string2, string3 = '', 'Trondheim', 'Hammer Dance'
>>> non_null = string1 or string2 or string3
>>> non_null
'Trondheim'

このような性質を利用するといわゆる「?:」オペレータに近いものが実装できる.(あくまで同値ではない)
result = オブジェクトA and オブジェクトB or オブジェクトC

のように記述する.ただしオブジェクトBはTrueと評価されるオブジェクトであること.

  • オブジェクトAがTrueの場合、オブジェクトA and オブジェクトBがTrueと評価されるので、オブジェクトCの評価を行わず、オブジェクトBを返す.

  • オブジェクトAがFalseの場合、オブジェクトA and オブジェクトBはFalseと評価される.次のブール演算子が「or」であるためオブジェクトCまで評価され、オブジェクトCを返す.

  • 「None」や「''」はFalseと評価されるオブジェクトである

  • 「?:」オペレータと同じ実装になるのはオブジェクトBがTrueと評価されるオブジェクトの場合のみ


参照 >>> python チュートリアル:5.7. 条件についてもう少し

2012年10月01日

[django] 期限切れのセッションにアクセスすると

saveした時点でセッションが増えます.
期限切れのセッションは、定期的に削除するようにしましょう.

2012年10月03日

[django] Paginator

Paginatorの確認

def test001(request):
    '''ページネーターの動作確認'''
    objects = ['john', 'paul', 'george', 'ringo']
    p = Paginator(objects, 2)
    try:
        page1 = p.page(3)
    except EmptyPage, e:
        print e
        page1 = p.page(1)
    c = dict(
        has_next=page1.has_next(),
        has_previous=page1.has_previous(),
        has_other_pages=page1.has_other_pages(),
        next_page_number=page1.next_page_number(),
        previous_page_number=page1.previous_page_number(),
        start_index=page1.start_index(),
        end_index=page1.end_index(),
        object_list=page1.object_list,
        number=page1.number,
        test=None,
    )
    c = simplejson.dumps(c, sort_keys=True, indent=2 * ' ')
    return HttpResponse(c, mimetype='application/json')

すべてのページをjsonにする

def test002(request):
    '''ページネーターの動作確認'''
    objects = ['john', 'paul', 'george', 'ringo', 'yyy']
    p = Paginator(objects, 2)
    pageRange = p.page_range
    cc = {}
    for ipage in pageRange:
        page1 = p.page(ipage)
        c = dict(
            has_next=page1.has_next(),
            has_previous=page1.has_previous(),
            has_other_pages=page1.has_other_pages(),
            next_page_number=page1.next_page_number(),
            previous_page_number=page1.previous_page_number(),
            start_index=page1.start_index(),
            end_index=page1.end_index(),
            object_list=page1.object_list,
            number=page1.number,
            test=None,
        )
        cc[ipage] = c
    ccJson = simplejson.dumps(cc, sort_keys=True, indent=2 * ' ')
    return HttpResponse(ccJson, mimetype='application/json')

2013年09月15日

見せてもらおうか。PyPyの性能とやらを!

64ビットLINUXにバイナリでインストールした.「libsslやらlibcryptoやらがない」と言われたので、インストールされていたlibssl.soとかをlibssl.so.0.98とかにシンボリックリンクを張ったらpypyの起動はするようになった.

ところが、いろいろ実行しようとしたら、ダンプを吐いてアボートする.

あきらめていたのだが、openssl0.98を入れてみたところ、アボートせず、正常に動いているようだ.cPythonの結果と比較したところ正常ぽい.

パフォーマンスはというと(ちなみにpypy-1.8)、python2.6より早い.

どのような処理を行うかでパフォーマンスの改善度合いは異なるようだが、管理人が行おうとしていた処理は


  • XMLRPCでサーバーを立てる

  • 1プロセス数ギガ~10ギガのメモリを消費.中味はほとんど辞書dictまたはdictの派生クラス.

  • cPythonだと2~3秒かかっていた一回のリクエストが10ミリ秒のオーダーで返ってくるようになった.

  • また、cPythonだと3回くらいのリクエストに一回くらいの割合で、3秒程度詰まっていたのが(khugepagedの影響?)詰まらなくなって、非常に快適


いや、pypy非常に良いです.日本語での呼び方が恥ずかしいのを除けば.

これが連邦の新型か?!

2013年09月22日

twisted リンク

これから増やしていきます

2013年10月02日

[python] eval

pythonでは、文字列で与えられた式を評価する場合

eval

を、使うようです.

>>> eval('a')
Traceback (most recent call last):
File "", line 1, in
File "", line 1, in
NameError: name 'a' is not defined
>>> a = 3.5
>>> eval('a')
3.5


式の中で、代入を行う場合はcompileを使うと良いようです.

eval(compile("c = a+b", "(^.^)", "single"))

hogehogeという変数に値を代入する例

>>> eval(compile("c = 1.111", "(^.^)", "single"))
>>> c
1.111
>>> eval(compile("hogehoge = 1.111", "(^.^)", "single"))
>>> hogehoge
1.111
>>> s = "hogehoge = 'xyzzy'"
>>> s
"hogehoge = 'xyzzy'"
>>> eval(compile(s, "(^.^)", "single"))
>>> hogehoge
'xyzzy'

2013年10月14日

[Python] pythonで10進数からn進数に基数変換

pythonで10進数から36進数に基数変換しなければならなかったのでGoogle先生に

「python base36」

で、教えてもらいました.

Python base 36 encoding

いちばん最後のでよいのかな

import string, math

int2base = lambda a, b: ''.join(
    [(string.digits + string.lowercase + string.uppercase)[(a/b**i)%b]
     for i in xrange(int(math.log(a, b)), -1, -1)]
    )

num = 1412823931503067241
test = int2base(num, 36)
test2 = int(test, 36)
print test2 == num

int2baseという関数がそれです.
int2base(x, base)というインターフェースになっています.

確認

>>> int2base(36, 36)
'10'
>>> int2base(1, 36)
'1'
>>> int2base(2, 36)
'2'
>>> int2base(36*36, 36)
'100'

2014年11月01日

[python2] wsgiでpostのパラメータを取得する

こちらのページ(外部サイトです)にwsgiでPOSTのパラメータの取得方法が書いてあったのですが、pythonのcgiモジュールを利用したほうが良いと思ったのでちょっと調べてみました.

「PEP 333 -- Python Web Server Gateway Interface v1.0」のenviron Variablesの項目の下のほうにあるテーブルをみると、

wsgi.inputはAn input stream (file-like object)

と書いてあったので、

form = cgi.FieldStorage(fp=environ['wsgi.input'], environ=environ, keep_blank_values=True)

と、cgi.FieldStorageのfpパラメータにenviron['wsgi.input']を指定すれば、POSTのパラメータをcgiモジュールで利用することができます(wsgiのアプリケーション内で).

こういうすでにあるインターフェースを利用したほうが開発も効率的ですし、バグも混入しにくくなりますね.

About Python

ブログ「[R言語] Rのお部屋::あーるのおへや[別館]」のカテゴリ「Python」に投稿されたすべてのエントリーのアーカイブのページです。過去のものから新しいものへ順番に並んでいます。

前のカテゴリはMeCabです。

次のカテゴリはRからCを呼ぶです。

他にも多くのエントリーがあります。メインページアーカイブページも見てください。

広告

Powered by
Movable Type 3.37