gae アプリ 開発メモ

Google App Engine アプリの開発メモ / 言語: python, javascript / ビギナー

python

codecsはいろいろ変換してくれる

標準エンコーディングを見ると、各種文字コードの他に quopri_codec (MIME quoted printable 形式) base64_codec (MIME base64) zlib_codec (gzip, zip 圧縮) bz2_codec (bz2 圧縮) hex_codec (バイトあたり 2 桁の 16 進数の表現) なんかも対応してる。超お…

絵文字ありのテキストファイルを処理する

ケータイメールのデータを処理するのに便利かな。ポイントは codecs の encoding に 'shift_jis' ではなく 'mbcs' を指定する点。 #!/usr/bin/env python # -*- coding: utf-8 -*- import codecs def main(): # fin = codecs.open('sample.txt', 'r', 'shift…

python 2.7の日本語ヘルプを構築する

ウチの環境(Windows 7 SP1 x64)では、Pythonドキュメント日本語翻訳プロジェクトで配布されている htmlhelp(.chm) はエラーが表示されて正常に動作しない。 なので、ドキュメントソースから構築してみた。 以下、手順。 準備 sphinxが必要。 Mercurialが必要…

ダイアモンド継承とsuper()の続きの続き

ずっと、どこかで super() は継承元への型変換みたいな仕組みを提供してる と思い込んでた。 これが大きな間違いのはじまり。道理で、super()の文章を何度読んでも釈然としないわけだ。 動的な実行環境下での複数の継承の共同をサポートすることです。 この…

ダイアモンド継承とsuper()の続き

ダイアモンド継承とsuper()の続き super()の理解がまだ足りない 先程、【super()で C.talk() が呼び出されるように指定してみる】で class D(B, C): def talk(self): super(C, self).talk() # C を明示する def main(): d = D() d.talk() の結果は This is A…

ダイアモンド継承とsuper()

python 2.7 の話。 まずはダイアモンド継承を書く class A(object): def talk(self): print 'This is A.' class B(A): def talk(self): print 'This is B' class C(A): pass class D(B, C): pass def main(): d = D() d.talk() if __name__ == '__main__': m…

printでstderrに出力する

今までしらなかったので。 import sys print >> sys.stderr, 'abc'

プロパティの作り方

下の書き方、どちらでもOK。 #!/usr/bin/env python # -*- coding: utf-8 -*- class A(object): def __init__(self): self._x = 0 def get_val(self): return self._x def set_val(self, value): self._x = value value = property(get_val, set_val) class …

デコレータ

なんの気なしに @classmethod とか @staticmethod とか使っていたけど、なかなかの仕組みらしい。 デコレータとは Pythonの用語集(decorator)より。 (デコレータ) 関数を返す関数。 通常、 @wrapper という文法によって関数を変換するのに利用されます。 デ…

ファイルの読み込みと for~in

当たり前といえば、当たり前なんだけど。ファイルの読み込みで for~in を途中で break して、また同じファイルに for~in すると続きを読むことができる。 with open(filename, 'r') as source: for line in source: out.write(line) # 1 行目を出力 break;…

Pythonで継承元のメソッドを呼び出すには

伝統的な書き方 どんなメソッドを読んでいるのかが明示的。 class C(B): def method(self, arg): B.method(self, arg) super() を使用する なんか便利らしい。 要勉強。 class C(B): def method(self, arg): super(C, self).method(arg) 一時的なクラスオブ…

Python の日本語ドキュメントをchromeで検索

pythonしたりjavascriptしたりで、どうにも言語を覚えきれない。http://code.google.com/p/python-doc-ja/downloads/list から日本語のヘルプ(.chm)はダウンロードできるけど、javascriptが無効になってるみたいでスクリプトエラーが出てまともに機能しない…

sordted()は安定ソート

安定ソートか確認 import random import operator def test_list_sort(): class Person(object): def __init__(self, name, age): self.name = name self.age = age def __repr__(self): return repr((self.name, self.age)) persons = [] for n in range(10…

HTML用に文字をescapeする

ネット上には こんな感じで載ってる。 from xml.sax import saxutils # 文字列をHTML(XML)用にエスケープする escaped_string = saxutils.escape(string) # HTML(XML)用にエスケープされた文字列を元に戻す string = saxutils.unescape(escaped_string) '&',…

モジュールのコードはいつ実行される?

正規表現のコードを書いていて、正規表現のコンパイルっていつすべき?と思ったのでエントリー。テストコード こんなモジュールを書いてみる。 #!/usr/bin/env python # -*- coding: utf-8 -*- # file: mylib print 'global.' class A(object): print 'in cl…

map()

map(function, list, ...)の説明は以下の通り。 function を list の全ての要素に適用し、返された 値からなるリストを返します。 追加の list 引数を与えた場合、 function はそれらを引数として取らなければならず、関数は そのリストの全ての要素について…

isinstanceのtype一覧

isinstance() が True になる条件を列挙する。 value = 1 isinstance(value, int) value = 1L isinstance(value, long) value = 1.0 isinstance(value, float) value = True isinstance(value, bool) isinstance(value, int) value = 'abc' isinstance(value…

sortedとDataStoreのorder()の速度を比べてみた

sorted()とDataStoreのorder()にどれくらい速度の違いがあるのか、ふと気になった。 で、計測。ソース #!/usr/bin/env python # -*- coding: utf-8 -*- from google.appengine.ext import webapp from google.appengine.ext import db from google.appengine…

リスト表記 その2

辞書から条件にあう要素のみリストに抽出 dict = { 'abc': 'item1', 'def': 'item2', } list = [{key: value} for key, value in dict.iteritems() if value == 'item2'] print list # 結果 [{'def': 'item2'}]

リスト表記

どれもリストを生成する方法。 集合を1つ1つ処理するだけなら for 文が適切。 結果としてリストが欲しいときは便利。すべての値を加工したものをリストで返す result = [func(x) for x in list] 条件にあった値を部分リストとして取得する result = [x for…

リスト

基本 list = [0, 1, 2, 3] n番目の要素の参照 value = list[n] 部分リストの取得 # [first, last)の部分リストを取得する values = list[first:last] 追加 list = [] list.append(0) list1 += list2 更新 # n 番目の要素を更新する list[n] = value 削除 # n…

ジェネレータ式

ジェネレータとは for 文を使って1つ1つ値を返すもの。 for value in generator: foo(value) よく使う range() はジェネレータの一つ。 マジメにジェネレータを書くのはまた後述。 # 関係ないけど、「後述」って「こうじゅつ」って読むんだ。初めて知った……

辞書の使い方

備忘録。 ココが元ネタ。辞書オブジェクト dict = {key: value} 辞書オブジェクトから値を取得する # この書き方は key がないと KeyError 例外を送出する value = dict[key] # こっちは key がなければ default を返す value = dict.get(key, default = Non…