GAEでPythonのお勉強

Google App EngineでPythonを触りながら、行き当たりばったりで学んだことをメモ。



pythonはnotを使用する
TrueならFalse、FalseならTrueに反転させる

>>> a = True
>>> a = !a
SyntaxError: invalid syntax
>>> a = not a
>>> a
False


typeで型を取得
>>> type({})
<type 'dict'>

typesを使用して型を比較
>>> import types
>>> type({}) is types.DictType
True

こんな書き方じゃダメなのか?
>>> foo = {}
>>> type(foo) is type({})
True

import typesするの面倒とか言っちゃダメですか?。。。ρ(-ω- ) イジイジ


指定したkeyがないとKeyErrorが返ってしまう
>>> feed = {}
>>> feed['entry']

Traceback (most recent call last):
  File "<pyshell#4>", line 1, in <module>
    feed['entry']
KeyError: 'entry'

上のようにKeyErrorが返るのでそれを回避するには
>>> feed.get('entry')
または
>>> 'entry' in feed
False

どうしてもそう書きたいならNoneを入れておく。
feed = {'entry':None}

ついでにsetdefaultも理解しておく
>>> v = {}
>>> v.setdefault('foo','bar')
'bar'
>>> v['foo'] = 'hoge'
>>> v['foo']
'hoge'
>>> v.setdefault('foo','fuga')
'hoge'



dictのupdateは便利、でもどちらがイイのか?
entry = {'title':'entry title'}

#1.
entry.update({
  'content':'entry content',
  'url':'entry URL'
  })

#2.
entry['content'] = 'entry content',
entry['url'] = 'entry URL'

2.の方もfor文で回せばコードもスッキリするし、速度的にはどうだろう?とか思いながら調べる気にはなれない。(-_-)zzz
updateの処理速度次第ってことで。


jsonを扱うにはsimplejsonを使えばイイようだ
dumpsとloadsの使い方を知っとけばとりあえず何とかなる(はず)(-_-;)
from django.utils import simplejson

#JSON形式の文字列 → Python dectデータ
dect = simplejson.loads(str)

#Python dectデータ → JSON形式の文字列
str = simplejson.dumps(dect)

#loadはファイルからJSONデータをロードする。
f = open("foo.json")
foo = simplejson.load(f)



文字列の入/出力
文字コードの問題でつまずくのは云わば"皆が通る道"のようで、ググるとザクザク出てくる。
こういうのを見ると「既知で何が悪い!!」見たいな開き直りも結構まかり通るんじゃない?という手応えを感じたりして。ー ̄) ニヤッ

文字コードの扱いは多分こんな流れがイイんじゃない?

ファイルの文字コードをUTF-8に指定
#!-*- coding: utf-8 -*-
文字コードを指定する理由はファイル内で日本語を書くとローカルでは問題ないが、デプロイするとエラーになるため。

UTF-8にエンコードして取得
value = self.request.get('value').encode('UTF-8')
    ↓
ごにょごにょする。
    ↓
unicodeに変換して出力
self.response.out.write(cgi.escape(unicode(value, 'UTF-8')))
みたいな流れがよさげ。


s.decode('utf8') よりも unicode(s, 'utf-8') の方が速い - methaneの日記
見たいなことも参考にしたりして。

1 Comments:

aodag さんのコメント...

dictのupdateはキーワード引数も使えます
>>> a = {}
>>> a.update(x=1, y=2)
>>> a
{'y': 2, 'x': 1}

isinstance関数で、クラスチェックができます。
>>> isinstance({}, dict)
True

Sony Style(ソニースタイル)
デル株式会社

Recent Posts