Hatena::Groupdann

dann's blog このページをアンテナに追加 RSSフィード

Fork me on GitHub

2009-11-23

python雑感

python雑感 - dann's blog を含むブックマーク はてなブックマーク - python雑感 - dann's blog python雑感 - dann's blog のブックマークコメント

GAEはじめてみようかなということで、pythonをここ1週間ほど触ってみてます。pythonの言語仕様で面白いのは以下かなぁと。

  • callables, iteratables
    • これが組み込みなのは、
  • decorator
    • AOP的なもの。perlだとMouseのaroundみたいなもので、Javaだとannotationで似た

ような事をやる。

  • generator
  • metaclass
    • rubyのほうが綺麗だけど、perlよりはわかりやすい
  • keyword arguments
    • declarativeでかなりいい
  • docstring
    • 文書化を重んじる文化は、こういうところにも現れているのかも。
    • 関連してdoctestもcool. 動くSYNOPSYS的な。

全体的には、言語仕様はかなり綺麗で、perlよりはかなり宣言的にかけるのと、文書化を促進するための幾つかの仕様があって、readableなコードを書きやすいかなという印象です。rubyなどと比較すると、一部のメソッドが関数コールだったりとOO厨的少し違和感はあるのですが。

モジュールについては、モジュールの粒度がperlより荒いので、perlほど細かくは再利用が進んでない印象です。状況はjavaのライブラリの状況に近いかなと。

noseでテスト

| noseでテスト - dann's blog を含むブックマーク はてなブックマーク - noseでテスト - dann's blog noseでテスト - dann's blog のブックマークコメント

nosetestsは、proveみたいなものです。plugin機構があって拡張できるようになっているので、prove以上に色んな事ができます。

使い方は、いかのとおり。

インストール

pip install nose
pip install rednose

テストの色づけ

.noserc

[nosetests]
verbosity=3
nocapture=1
rednose=1

ref: http://d.hatena.ne.jp/yaotti/20091007/1254926457

Makefile

Makefileに以下を定義

TESTS = \
        simple_package_template \
        tests

TEST_OPTIONS = \
        -v \
        --with-doctest

default: all 

all:
        @echo "Nothing to do"

test:
        @(nosetests $(TEST_OPTIONS) $(TESTS))

testxml:
        @(nosetests $(TEST_OPTIONS) --with-xunit $(TESTS) )

profile:
        @(nosetests --with-profile --profile-stats-file=nose.prof $(TESTS)) 
        @(python -c "import hotshot.stats ; stats = hotshot.stats.load('nose.prof') ; stats.sort_stats('time', 'calls') ; stats.print_stats(20)")

coverage:
        @(nosetests --with-coverage $(TESTS)) 

テスト

make test

などなど。

CI: Hudsonとの連携

Hudsonに、nosetests --with-xunitの結果をくわせてる

http://www.rhonabwy.com/wp/2009/11/04/setting-up-a-python-ci-server-with-hudson/

TODO

# doctestのoptionは、後で調べる。

[nosetests]
with-doctest=1
doctest-extension=.rst
doctest-fixtures=_fixtures

Pasterのtemplateを作ってみた

| Pasterのtemplateを作ってみた - dann's blog を含むブックマーク はてなブックマーク - Pasterのtemplateを作ってみた - dann's blog Pasterのtemplateを作ってみた - dann's blog のブックマークコメント

Pasterのtemplateを作ってみた。

http://github.com/dann/python-simple_package_template

pasterのtemplateの作り方は、以下のページに。

http://pythonpaste.org/script/developer.html#id6

templateを作るときのポイントは、以下の通り。

  • entry_pointsに、[paste.paster_create_template] を設定すること
    • framework = framework.templates:FrameworkTemplate
  • FrameworkTemplateは、paste.script.templates.Templateを継承する事。
  • templateの置換ルール
    • fileやディレクトリ名は、+var_name+と書く事で変数名で置換される
    • ファイル内の変数は、${repr(project)}と書く事で置換される
    • <filename>_tmplというファイル名のファイルは、templateの中身の変数が置換され、paster createで生成したときに<filename>としてコピーされる

vkgtarovkgtaro2009/11/24 01:33> rubyなどと比較すると、一部のメソッドが関数コールだったりとOO厨的少し違和感はあるのですが。
どっかで python の OO も後付けだと読んだ気がする。