<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:georss='http://www.georss.org/georss' xmlns:gd='http://schemas.google.com/g/2005' xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-6658540373074530849</id><updated>2011-11-28T08:25:56.168+09:00</updated><category term='デフォルト引数　関数'/><category term='リスト　タプル　ディクショナリ'/><title type='text'>Python練習帳</title><subtitle type='html'>Pythonを使って、単行のスクリプトから、GoogleAppEngineで動作するアプリケーションまで作成していきます。</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://python25.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default?max-results=100'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>35</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>100</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-8607488485488041239</id><published>2011-01-21T23:41:00.001+09:00</published><updated>2011-01-21T23:41:00.072+09:00</updated><title type='text'>python-blog-system</title><content type='html'>Pythonでブログシステムを作成中&lt;br /&gt;&lt;a href="http://python-blog-system.appspot.com/"&gt;http://python-blog-system.appspot.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-8607488485488041239?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/8607488485488041239/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2011/01/python-blog-system.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/8607488485488041239'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/8607488485488041239'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2011/01/python-blog-system.html' title='python-blog-system'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-2379753090961060134</id><published>2010-12-12T22:20:00.001+09:00</published><updated>2010-12-12T22:22:24.892+09:00</updated><title type='text'>移転のお知らせ</title><content type='html'>移転しました。&lt;br /&gt;&lt;a href="http://php6.jp/python"&gt;http://php6.jp/python&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-2379753090961060134?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/2379753090961060134/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2010/12/blog-post_4499.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/2379753090961060134'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/2379753090961060134'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2010/12/blog-post_4499.html' title='移転のお知らせ'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-3020220948119794087</id><published>2010-12-12T20:14:00.003+09:00</published><updated>2010-12-12T20:14:00.032+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='デフォルト引数　関数'/><title type='text'>デフォルト引数</title><content type='html'>関数の引数にはデフォルト値を指定できる。デフォルト値が指定されていれば、引数は指定しなくてもよい。&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; def multiple(a, b=2):&lt;br /&gt;...   return a*b&lt;br /&gt;...&lt;br /&gt;&gt;&gt;&gt; multiple(1)&lt;br /&gt;2&lt;br /&gt;&gt;&gt;&gt; multiple(2)&lt;br /&gt;4&lt;br /&gt;&gt;&gt;&gt; multiple(4)&lt;br /&gt;8&lt;br /&gt;&gt;&gt;&gt; multiple(4,2)&lt;br /&gt;8&lt;br /&gt;&gt;&gt;&gt; multiple(4,4)&lt;br /&gt;16&lt;br /&gt;&lt;br /&gt;引数のデフォルト値に可変（Mutable）オブジェクトを指定した場合は毎回同じ値が参照されるので注意。ListやDictionaryを使う場合は要注意&lt;br /&gt;&gt;&gt;&gt; def f(a, L=[]):&lt;br /&gt;...     L.append(a)&lt;br /&gt;...     return L&lt;br /&gt;...&lt;br /&gt;&gt;&gt;&gt; f(1)&lt;br /&gt;[1]&lt;br /&gt;&gt;&gt;&gt; f(2)&lt;br /&gt;[1, 2]&lt;br /&gt;&gt;&gt;&gt; f(3)&lt;br /&gt;[1, 2, 3]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-3020220948119794087?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/3020220948119794087/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2010/12/blog-post_12.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/3020220948119794087'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/3020220948119794087'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2010/12/blog-post_12.html' title='デフォルト引数'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-9185456920589902252</id><published>2010-12-11T22:52:00.000+09:00</published><updated>2010-12-11T22:52:00.656+09:00</updated><title type='text'>pass / 何もしない</title><content type='html'>何も操作をしたくないが構文上の都合で文(statement)が必要なときにはpassを使えばよい。&lt;br /&gt;&gt;&gt;&gt; def func():&lt;br /&gt;...&lt;br /&gt;...&lt;br /&gt;  File "&lt;stdin&gt;", line 3&lt;br /&gt;&lt;br /&gt;    ^&lt;br /&gt;IndentationError: expected an indented block&lt;br /&gt;&gt;&gt;&gt; def func():&lt;br /&gt;...   pass&lt;br /&gt;...&lt;br /&gt;&gt;&gt;&gt; func()&lt;br /&gt;&gt;&gt;&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-9185456920589902252?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/9185456920589902252/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2010/12/pass.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/9185456920589902252'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/9185456920589902252'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2010/12/pass.html' title='pass / 何もしない'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-2495948435090071214</id><published>2010-12-11T14:27:00.005+09:00</published><updated>2010-12-11T14:59:42.376+09:00</updated><category scheme='http://www.blogger.com/atom/ns#' term='リスト　タプル　ディクショナリ'/><title type='text'>リスト、タプル、ディクショナリ内の値の存在確認</title><content type='html'>リスト(list)内に要素が含まれているか確認&lt;br /&gt;&gt;&gt;&gt; colors = ("red", "green", "blue")&lt;br /&gt;&gt;&gt;&gt; print "red" in colors&lt;br /&gt;True&lt;br /&gt;&gt;&gt;&gt; print "yellow" in colors&lt;br /&gt;False&lt;br /&gt;&lt;br /&gt;タプル(tuple)内に要素が含まれているか確認&lt;br /&gt;&gt;&gt;&gt; numbers = ["zero", "one", "two"]&lt;br /&gt;&gt;&gt;&gt; print "zero" in numbers&lt;br /&gt;True&lt;br /&gt;&gt;&gt;&gt; print "three" in numbers&lt;br /&gt;False&lt;br /&gt;&lt;br /&gt;ディクショナリ(Dictionary)のキーに要素が含まれているか確認&lt;br /&gt;&gt;&gt;&gt; monthNames = {1:"Jan", 2:"Feb", 3: "Mar"}&lt;br /&gt;&gt;&gt;&gt; 1 in monthNames&lt;br /&gt;True&lt;br /&gt;&gt;&gt;&gt; 4 in monthNames&lt;br /&gt;False&lt;br /&gt;&gt;&gt;&gt; "Jan" in monthNames&lt;br /&gt;False&lt;br /&gt;&lt;br /&gt;ディクショナリ(Dictionary)の値に要素が含まれているか確認&lt;br /&gt;&gt;&gt;&gt; monthNames = {1:"Jan", 2:"Feb", 3: "Mar"}&lt;br /&gt;&gt;&gt;&gt; "Jan" in monthNames.values()&lt;br /&gt;True&lt;br /&gt;&gt;&gt;&gt; "Dec" in monthNames.values()&lt;br /&gt;False&lt;br /&gt;&gt;&gt;&gt; 1 in monthNames.values()&lt;br /&gt;False&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-2495948435090071214?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/2495948435090071214/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2010/12/blog-post_11.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/2495948435090071214'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/2495948435090071214'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2010/12/blog-post_11.html' title='リスト、タプル、ディクショナリ内の値の存在確認'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-4102101176697925573</id><published>2010-12-11T00:34:00.002+09:00</published><updated>2010-12-11T00:34:48.537+09:00</updated><title type='text'>GETまたはPOSTで受け取った変数を一覧表示</title><content type='html'>class MainPage(webapp.RequestHandler):&lt;br /&gt; def get(self):&lt;br /&gt;  for key in self.request.arguments():&lt;br /&gt;   self.response.out.write(key + "=" + self.request.get(key) + "&lt;br&gt;")&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-4102101176697925573?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/4102101176697925573/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2010/12/getpost.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/4102101176697925573'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/4102101176697925573'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2010/12/getpost.html' title='GETまたはPOSTで受け取った変数を一覧表示'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-5830042518951904971</id><published>2010-12-11T00:07:00.006+09:00</published><updated>2010-12-12T11:33:57.549+09:00</updated><title type='text'>GQLの実行結果を2個ずつまとめる</title><content type='html'>#データを取得&lt;br /&gt;sites = db.GqlQuery("SELECT * FROM Site ORDER BY date DESC")&lt;br /&gt;&lt;br /&gt;#シンプルな記述／通常はこの記法推奨&lt;br /&gt;for site in sites:&lt;br /&gt;  self.response.out.write(site.url+"&lt;br /&gt;")&lt;br /&gt;&lt;br /&gt;#インデックスを使ったループ／非推奨&lt;br /&gt;for i in range(0, sites.count()):&lt;br /&gt;  self.response.out.write(sites[i].url+"&lt;br /&gt;")&lt;br /&gt;&lt;br /&gt;#インデックスを使い2要素ずつ処理／段組などの実装に使う可能性あり&lt;br /&gt;for i in range(0, sites.count(), 2):&lt;br /&gt;  for j in range(0, 2):&lt;br /&gt;    if i + j &amp;gt;= sites.count():&lt;br /&gt;      break&lt;br /&gt;    self.response.out.write(sites[i+j].url+" ")&lt;br /&gt;  self.response.out.write("&lt;br /&gt;")&lt;br /&gt;&lt;br /&gt;#データ構造&lt;br /&gt;class Site(db.Model):&lt;br /&gt;  url  = db.URLProperty()&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-5830042518951904971?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/5830042518951904971/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2010/12/gql2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/5830042518951904971'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/5830042518951904971'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2010/12/gql2.html' title='GQLの実行結果を2個ずつまとめる'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-592855913517939529</id><published>2010-12-10T23:47:00.004+09:00</published><updated>2010-12-10T23:50:15.374+09:00</updated><title type='text'>self.response.out.writeで数値を出力時の罠</title><content type='html'>self.response.out.writeの引数に数値の0を指定すると、何も出力されないので注意しましょう。はまりました。&lt;br /&gt;&lt;br /&gt;for i in range(0,6):&lt;br /&gt; self.response.out.write(i)&lt;br /&gt;&gt;&gt; 12345&lt;br /&gt;&lt;br /&gt;for i in range(0,6):&lt;br /&gt; self.response.out.write(str(i))&lt;br /&gt;&gt;&gt; 012345&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-592855913517939529?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/592855913517939529/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2010/12/selfresponseoutwrite.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/592855913517939529'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/592855913517939529'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2010/12/selfresponseoutwrite.html' title='self.response.out.writeで数値を出力時の罠'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-1877985592511491854</id><published>2010-12-10T14:20:00.002+09:00</published><updated>2010-12-10T14:22:27.884+09:00</updated><title type='text'>セッション処理でエラー発生中</title><content type='html'>ブラウザによっては問題なく動作しています。あとで原因調査します。&lt;br /&gt;&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/webapp/__init__.py", line 515, in __call__&lt;br /&gt;    handler.get(*groups)&lt;br /&gt;  File "/base/data/home/apps/rapidproxy/1.346766960722169101/main.py", line 34, in get&lt;br /&gt;    session = appengine_utilities.sessions.Session()&lt;br /&gt;  File "/base/data/home/apps/rapidproxy/1.346766960722169101/appengine_utilities/sessions.py", line 562, in __init__&lt;br /&gt;    self.session = _AppEngineUtilities_Session.get_session(self)&lt;br /&gt;  File "/base/data/home/apps/rapidproxy/1.346766960722169101/appengine_utilities/sessions.py", line 142, in get_session&lt;br /&gt;    ds_session = db.get(str(session_key))&lt;br /&gt;  File "/base/python_runtime/python_lib/versions/1/google/appengine/ext/db/__init__.py", line 1318, in get&lt;br /&gt;    keys, multiple = datastore.NormalizeAndTypeCheckKeys(keys)&lt;br /&gt;  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/datastore.py", line 144, in NormalizeAndTypeCheckKeys&lt;br /&gt;    keys = [_GetCompleteKeyOrError(key) for key in keys]&lt;br /&gt;  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/datastore.py", line 2150, in _GetCompleteKeyOrError&lt;br /&gt;    key = Key(arg)&lt;br /&gt;  File "/base/python_runtime/python_lib/versions/1/google/appengine/api/datastore_types.py", line 304, in __init__&lt;br /&gt;    raise datastore_errors.BadKeyError('Invalid string key %s.' % encoded)&lt;br /&gt;BadKeyError: Invalid string key agpyYXBpZHByb3h5ciQLEhtfQXBwRW5naW5lVXRpbGl0aWVzX1Nl********.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-1877985592511491854?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/1877985592511491854/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2010/12/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/1877985592511491854'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/1877985592511491854'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2010/12/blog-post.html' title='セッション処理でエラー発生中'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-1192597572346669152</id><published>2010-12-10T09:13:00.001+09:00</published><updated>2010-12-10T09:13:47.715+09:00</updated><title type='text'>Pythonのバージョンを調べる</title><content type='html'>C:\Python25&gt;python -V&lt;br /&gt;Python 2.5.4&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-1192597572346669152?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/1192597572346669152/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2010/12/python.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/1192597572346669152'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/1192597572346669152'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2010/12/python.html' title='Pythonのバージョンを調べる'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-8583958731757711327</id><published>2010-12-09T16:02:00.002+09:00</published><updated>2010-12-09T16:04:15.824+09:00</updated><title type='text'>dir / オブジェクトが持っている要素を調べる</title><content type='html'>オブジェクトにどのようなメソッド（関数）があるのか調べる。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; dir("hoge")&lt;br /&gt;['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__str__', 'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']&lt;br /&gt;&gt;&gt;&gt; dir(123)&lt;br /&gt;['__abs__', '__add__', '__and__', '__class__', '__cmp__', '__coerce__', '__delattr__', '__div__', '__divmod__', '__doc__', '__float__', '__floordiv__', '__getattribute__', '__getnewargs__', '__hash__', '__hex__', '__index__', '__init__', '__int__', '__invert__', '__long__', '__lshift__', '__mod__', '__mul__', '__neg__', '__new__', '__nonzero__', '__oct__', '__or__', '__pos__', '__pow__', '__radd__', '__rand__', '__rdiv__', '__rdivmod__', '__reduce__', '__reduce_ex__', '__repr__', '__rfloordiv__', '__rlshift__', '__rmod__', '__rmul__', '__ror__', '__rpow__', '__rrshift__', '__rshift__', '__rsub__', '__rtruediv__', '__rxor__', '__setattr__', '__str__', '__sub__', '__truediv__', '__xor__']&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-8583958731757711327?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/8583958731757711327/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2010/12/dir.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/8583958731757711327'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/8583958731757711327'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2010/12/dir.html' title='dir / オブジェクトが持っている要素を調べる'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-4155096751406451401</id><published>2010-12-09T11:00:00.002+09:00</published><updated>2010-12-09T11:03:04.122+09:00</updated><title type='text'>コマンドラインからGAEにデプロイ</title><content type='html'>GUIのインターフェースからだとメールアドレスとパスワードを毎回入力する必要があり面倒。コマンドラインからなら、アカウント情報の入力は一度でよい。&lt;br /&gt;&lt;br /&gt;appcfg.py update myapp&lt;br /&gt;&lt;br /&gt;GAEに頻繁にデプロイする必要がある場合はコマンドライン推奨。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-4155096751406451401?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/4155096751406451401/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2010/12/gae.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/4155096751406451401'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/4155096751406451401'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2010/12/gae.html' title='コマンドラインからGAEにデプロイ'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-4380597141009457704</id><published>2010-12-09T09:49:00.002+09:00</published><updated>2010-12-09T10:57:17.731+09:00</updated><title type='text'>len / tuple, list, 文字列などの長さを取得</title><content type='html'>&gt;&gt;&gt; len("hoge")&lt;br /&gt;4&lt;br /&gt;&gt;&gt;&gt; len([1,2,3,4,5])&lt;br /&gt;5&lt;br /&gt;&gt;&gt;&gt; len((1,2,3,4,5,6))&lt;br /&gt;6&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-4380597141009457704?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/4380597141009457704/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2010/12/len-tuple-list.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/4380597141009457704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/4380597141009457704'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2010/12/len-tuple-list.html' title='len / tuple, list, 文字列などの長さを取得'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-1080839227246291098</id><published>2010-10-16T21:49:00.002+09:00</published><updated>2010-10-16T21:51:16.859+09:00</updated><title type='text'>更新再開します。</title><content type='html'>しばらくPython勉強してなかったが、自宅のPCも整備できたので、勉強再開します。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-1080839227246291098?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/1080839227246291098/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2010/10/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/1080839227246291098'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/1080839227246291098'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2010/10/blog-post.html' title='更新再開します。'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-3671895121553410538</id><published>2009-12-11T01:09:00.002+09:00</published><updated>2009-12-11T01:09:57.939+09:00</updated><title type='text'>SmartBrainリリース</title><content type='html'>&lt;a href="http://smartbrain.info"&gt;SmartBrain&lt;/a&gt;をリリースしました。SmartBrainはPHPで実装されていますが、次期バージョンではPythonに以降するかもしれません。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-3671895121553410538?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/3671895121553410538/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/12/smartbrain.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/3671895121553410538'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/3671895121553410538'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/12/smartbrain.html' title='SmartBrainリリース'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-7944668276623130465</id><published>2009-10-30T06:00:00.004+09:00</published><updated>2009-10-31T15:42:51.893+09:00</updated><title type='text'>Google App Engine (GAE)</title><content type='html'>私が、Pythonの勉強を始めた理由は、GoogleAppEngineを使いたかったからだ。&lt;br /&gt;&lt;br /&gt;最近では、Javaのサポートも加わっているが、Googleが初期段階からPythonに対応しているということには、それなりの理由があると考え、Pythonの勉強を始めた。&lt;br /&gt;&lt;br /&gt;GoogleAppEngineを実際に使えるようになるまでに、1点はまったので、その点を含めて利用開始までの手順を解説する。&lt;br /&gt;&lt;br /&gt;&lt;h4&gt;1. アカウントを取得する&lt;/h4&gt;&lt;br /&gt;&lt;a href="http://code.google.com/intl/ja/appengine/"&gt;http://code.google.com/intl/ja/appengine/&lt;/a&gt;にサインインする。G-mailのアカウントでよい。&lt;br /&gt;&lt;br /&gt;「AppEngineのアカウントにログインする」をクリック。&lt;br /&gt;&lt;br /&gt;もう一度ログイン認証画面がでる。&lt;br /&gt;&lt;br /&gt;すると、&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Welcome to Google App Engine&lt;br /&gt;&lt;br /&gt;Before getting started, you want to learn more about developing and deploying applications.&lt;br /&gt;Learn more about Google App Engine by reading the Getting Started Guide, the FAQ, or the Developer's Guide. &lt;br /&gt;&lt;br /&gt;[Create Application]&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;と表示される。&lt;br /&gt;&lt;br /&gt;[Create Application]ボタンをクリックすると、&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;Verify Your Account by SMS&lt;br /&gt;&lt;br /&gt;To create applications with Google App Engine, you need a verification code. Select the country and carrier for your mobile phone and enter your mobile phone number. The verification code will be sent to it via SMS. Note you will only need to verify your account once. &lt;/blockquote&gt;&lt;br /&gt;と表示される。&lt;br /&gt;&lt;br /&gt;ここの、Country and Carrier:　（国とキャリアの選択）で、日本を選んでハマりました。&lt;br /&gt;&lt;br /&gt;iPhoneしか持っておらず、メールアドレスの設定もしてなかったので、日本を選ぶとこの先に勧めません。&lt;br /&gt;&lt;br /&gt;日本の携帯電話のE-mailアドレスを持っていない場合は、Otherを選び、下に表示されるフィールドに携帯電話の番号を入れましょう。&lt;br /&gt;&lt;br /&gt;こうすれば、SMSでパスワードが送信されてきます。&lt;br /&gt;&lt;br /&gt;受け取ったパスワードで認証を通せば、アプリケーションを作れるようになります。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;2. ツールをインストールする&lt;br /&gt;&lt;br /&gt;&lt;a href="http://googleappengine.googlecode.com/files/GoogleAppEngine_1.2.7.msi"&gt;GoogleAppEngine_1.2.7.msi&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;インストールし、Google App Engine Launcherを起動。&lt;br /&gt;&lt;br /&gt;新しいアプリケーションを作成。&lt;br /&gt;File ⇒　Create New Application&lt;br /&gt;&lt;br /&gt;これだけで、ひな形が一式生成されます。&lt;br /&gt;&lt;br /&gt;yamlファイル（デプロイに関する記述）&lt;br /&gt;&lt;blockquote&gt;application: study-python&lt;br /&gt;version: 1&lt;br /&gt;runtime: python&lt;br /&gt;api_version: 1&lt;br /&gt;&lt;br /&gt;handlers:&lt;br /&gt;- url: .*&lt;br /&gt;  script: main.py&lt;/blockquote&gt;&lt;br /&gt;以下のアドレスから、私が試しに作成・デプロイしたアプリケーションを確認できます。&lt;br /&gt;&lt;br /&gt;&lt;a href="http://study-python.appspot.com/"&gt;http://study-python.appspot.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;シンプルな数当てゲームです。&lt;br /&gt;O'REILLY著 の Using Google App Engineに出ているサンプルを日本語化し、毎回数字が変わるように改良しています。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-7944668276623130465?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/7944668276623130465/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/google-app-engine-gae.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/7944668276623130465'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/7944668276623130465'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/google-app-engine-gae.html' title='Google App Engine (GAE)'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-6570189114975721342</id><published>2009-10-28T06:00:00.001+09:00</published><updated>2009-10-28T06:00:02.384+09:00</updated><title type='text'>HTTPRequest</title><content type='html'>HTTPRequestを送信してみた。&lt;br /&gt;&lt;br /&gt;Googleのトップページを取得&lt;br /&gt;&lt;br /&gt;&lt;blockquote&gt;&amp;gt;&amp;gt;&amp;gt;&amp;nbsp;import&amp;nbsp;urllib2&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&amp;nbsp;url&amp;nbsp;=&amp;nbsp;&amp;quot;http://www.google.co.jp&amp;quot;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&amp;nbsp;result&amp;nbsp;=&amp;nbsp;urllib2.urlopen(url)&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&amp;nbsp;lines&amp;nbsp;=&amp;nbsp;result.readlines()&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&amp;nbsp;lines[0]&lt;br /&gt;'&amp;lt;html&amp;gt;&amp;lt;head&amp;gt;&amp;lt;meta&amp;nbsp;http-equiv=&amp;quot;content-type&amp;quot;&amp;nbsp;content=&amp;quot;text/html;&amp;nbsp;charset=Shift_JIS&amp;quot;&amp;gt;&amp;lt;title&amp;gt;Google&amp;lt;/title&amp;gt;&amp;lt;script&amp;gt;window.google={kEI:&amp;quot;tirjSpiUK4egwgPJttycDQ&amp;quot;,kEXPI:&amp;quot;17259,21766,22107,22217&amp;quot;,kCSIE:&amp;quot;17259,21766,22107,22217&amp;quot;,kCSI:{e:&amp;quot;17259,21766,22107,22217&amp;quot;,ei:&amp;quot;tirjSpiUK4egwgPJttycDQ&amp;quot;},kHL:&amp;quot;ja&amp;quot;};\n'&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&amp;nbsp;lines[1]&lt;br /&gt;'\n'&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&amp;nbsp;lines[2]&lt;br /&gt;'window.google.sn=&amp;quot;webhp&amp;quot;;window.google.timers={load:{t:{start:(new&amp;nbsp;Date).getTim&lt;br /&gt;e()}}};try{}catch(b){}window.google.jsrt_kill=1;\n'&lt;/blockquote&gt;&lt;br /&gt;&lt;br /&gt;このブログからURLを抽出してみた。&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;data&amp;nbsp;=&amp;nbsp;urllib.urlopen('http://python25.blogspot.com').read()&lt;br /&gt;for&amp;nbsp;url&amp;nbsp;in&amp;nbsp;re.findall(r&amp;quot;https?://[-_.!~*()a-zA-Z0-9/?:@&amp;amp;=+$,%#]+&amp;quot;,&amp;nbsp;data):&lt;br /&gt;&amp;nbsp;&amp;nbsp;print&amp;nbsp;url&lt;br /&gt;&lt;br /&gt;&amp;gt;&amp;gt;&amp;gt;&amp;nbsp;for&amp;nbsp;url&amp;nbsp;in&amp;nbsp;re.findall(r&amp;quot;https?://[-_.!~*'()a-zA-Z0-9/?:@&amp;amp;=+$,%#]+&amp;quot;,&amp;nbsp;data):&lt;br /&gt;...&amp;nbsp;&amp;nbsp;&amp;nbsp;print&amp;nbsp;url&lt;br /&gt;...&lt;br /&gt;http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd&lt;br /&gt;http://www.w3.org/1999/xhtml&lt;br /&gt;http://www.google.com/2005/gml/b&lt;br /&gt;http://www.google.com/2005/gml/data&lt;br /&gt;http://www.google.com/2005/gml/expr&lt;br /&gt;http://www.blogger.com/favicon.ico&lt;br /&gt;http://python25.blogspot.com/&lt;br /&gt;http://python25.blogspot.com/feeds/posts/default&lt;br /&gt;http://python25.blogspot.com/feeds/posts/default?alt=rss&lt;br /&gt;http://www.blogger.com/feeds/6658540373074530849/posts/default&lt;br /&gt;http://www.blogger.com/rsd.g?blogID=6658540373074530849&lt;br /&gt;http://www.blogger.com/profile/17765477399828427893&lt;br /&gt;http://www.blogger.com/openid-server.g&lt;br /&gt;http://www.blogger.com/static/v1/widgets/1550194411-widget_css_bundle.css&lt;br /&gt;http://www.blogger.com/static/v1/v-css/3727950723-blog_controls.css&lt;br /&gt;http://www.blogger.com/dyn-css/authorization.css?targetBlogID=6658540373074530849&amp;amp;zx=885dfb85-549b-4231-a3a3-178f9be1dbeb&lt;br /&gt;http://www1.blogblog.com/dots/bg_dots.gif&lt;br /&gt;http://www.blogblog.com/dots/bg_3dots.gif&lt;br /&gt;http://www1.blogblog.com/dots/bg_dots2.gif&lt;br /&gt;http://www1.blogblog.com/dots/bg_dots2.gif&lt;br /&gt;http://www1.blogblog.com/dots/bg_post_title_left.gif&lt;br /&gt;http://www.blogblog.com/dots/icon_comment_left.gif&lt;br /&gt;http://www.blogblog.com/dots/icon_comment_left.gif&lt;br /&gt;http://www.blogblog.com/dots/icon_comment_left.gif&lt;br /&gt;http://www1.blogblog.com/dots/bullet.gif&lt;br /&gt;http://www.blogger.com/navbar.g?targetBlogID=6658540373074530849&amp;amp;amp&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_23.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_23.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_23.html#comments&lt;br /&gt;http://www.blogger.com/post-edit.g?blogID=6658540373074530849&amp;amp;postID=8238006605508980249&lt;br /&gt;http://www.blogger.com/img/icon18_edit_allbkg.gif&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_22.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_22.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_22.html#comments&lt;br /&gt;http://www.blogger.com/post-edit.g?blogID=6658540373074530849&amp;amp;postID=5311009012827742139&lt;br /&gt;http://www.blogger.com/img/icon18_edit_allbkg.gif&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_21.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_21.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_21.html#comments&lt;br /&gt;http://www.blogger.com/post-edit.g?blogID=6658540373074530849&amp;amp;postID=9007033006594304086&lt;br /&gt;http://www.blogger.com/img/icon18_edit_allbkg.gif&lt;br /&gt;http://python25.blogspot.com/2009/10/2.html&lt;br /&gt;http://python25.blogspot.com/2009/10/2.html&lt;br /&gt;http://python25.blogspot.com/2009/10/2.html#comments&lt;br /&gt;http://www.blogger.com/post-edit.g?blogID=6658540373074530849&amp;amp;postID=2181106016910876218&lt;br /&gt;http://www.blogger.com/img/icon18_edit_allbkg.gif&lt;br /&gt;http://python25.blogspot.com/2009/10/mapfilter.html&lt;br /&gt;http://python25.blogspot.com/2009/10/mapfilter.html&lt;br /&gt;http://python25.blogspot.com/2009/10/mapfilter.html#comments&lt;br /&gt;http://www.blogger.com/post-edit.g?blogID=6658540373074530849&amp;amp;postID=2507538441610339075&lt;br /&gt;http://www.blogger.com/img/icon18_edit_allbkg.gif&lt;br /&gt;http://python25.blogspot.com/2009/10/importreload.html&lt;br /&gt;http://www.python.org/dev/peps/pep-0263/&lt;br /&gt;http://python25.blogspot.com/2009/10/importreload.html&lt;br /&gt;http://python25.blogspot.com/2009/10/importreload.html#comments&lt;br /&gt;http://www.blogger.com/post-edit.g?blogID=6658540373074530849&amp;amp;postID=8577865623867738151&lt;br /&gt;http://www.blogger.com/img/icon18_edit_allbkg.gif&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_15.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_15.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_15.html#comments&lt;br /&gt;http://www.blogger.com/post-edit.g?blogID=6658540373074530849&amp;amp;postID=1242385033646658704&lt;br /&gt;http://www.blogger.com/img/icon18_edit_allbkg.gif&lt;br /&gt;http://python25.blogspot.com/search?updated-max=2009-10-15T06%3A00%3A00%2B09%3A00&amp;amp;max-results=7&lt;br /&gt;http://python25.blogspot.com/feeds/posts/default&lt;br /&gt;http://dame.livedoor.biz&lt;br /&gt;http://www.blogger.com/rearrange?blogID=6658540373074530849&amp;amp;widgetType=LinkList&amp;amp;widgetId=LinkList1&amp;amp;action=editWidget&lt;br /&gt;http://img1.blogblog.com/img/icon18_wrench_allbkg.png&lt;br /&gt;http://python25.blogspot.com/search?updated-min=2009-01-01T00%3A00%3A00%2B09%3A00&amp;amp;updated-max=2010-01-01T00%3A00%3A00%2B09%3A00&amp;amp;max-results=17&lt;br /&gt;http://python25.blogspot.com/2009_10_01_archive.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_23.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_22.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_21.html&lt;br /&gt;http://python25.blogspot.com/2009/10/2.html&lt;br /&gt;http://python25.blogspot.com/2009/10/mapfilter.html&lt;br /&gt;http://python25.blogspot.com/2009/10/importreload.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_15.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_14.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_13.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_12.html&lt;br /&gt;http://python25.blogspot.com/2009/10/1.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_08.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_07.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post_06.html&lt;br /&gt;http://python25.blogspot.com/2009/10/blog-post.html&lt;br /&gt;http://python25.blogspot.com/2009/10/python-1010-10000000000l-101032python.html&lt;br /&gt;http://python25.blogspot.com/2009/10/python.html&lt;br /&gt;http://www.blogger.com/rearrange?blogID=6658540373074530849&amp;amp;widgetType=BlogArchive&amp;amp;widgetId=BlogArchive1&amp;amp;action=editWidget&lt;br /&gt;http://img1.blogblog.com/img/icon18_wrench_allbkg.png&lt;br /&gt;http://www.blogger.com/profile/17765477399828427893&lt;br /&gt;http://4.bp.blogspot.com/_Ar2DPwRuU98/SsijSnhfeUI/AAAAAAAAMhc/BBYQf-3gGrw/S220/yoichiro_pic1.jpg&lt;br /&gt;http://www.blogger.com/profile/17765477399828427893&lt;br /&gt;http://www.blogger.com/rearrange?blogID=6658540373074530849&amp;amp;widgetType=Profile&amp;amp;widgetId=Profile1&amp;amp;action=editWidget&lt;br /&gt;http://img1.blogblog.com/img/icon18_wrench_allbkg.png&lt;br /&gt;https://ssl.&lt;br /&gt;http://www.&lt;br /&gt;http://www.blogger.com/static/v1/widgets/4222249892-widgets.js&lt;br /&gt;http://www.blogger.com/rearrange?blogID=6658540373074530849&lt;br /&gt;http://python25.blogspot.com/,6658540373074530849)&lt;br /&gt;http://www.blogger.com/display?blogID=6658540373074530849&lt;br /&gt;http://python25.blogspot.com/&lt;br /&gt;http://python25.blogspot.com/&lt;br /&gt;http://python25.blogspot.com/feeds/posts/default&lt;br /&gt;http://python25.blogspot.com/feeds/posts/default?alt&lt;br /&gt;http://www.blogger.com/feeds/6658540373074530849/posts/default&lt;br /&gt;http://www.blogger.com/rsd.g?blogID&lt;br /&gt;http://www.blogger.com/profile/17765477399828427893&lt;br /&gt;http://www.blogger.com/openid-server.g&lt;br /&gt;http://img1.blogblog.com/img/icon18_wrench_allbkg.png&lt;br /&gt;http://www.blogger.com/favicon.ico&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;100%正確な結果が得られたわけではないが、90%以上の精度でURLを抽出できた。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-6570189114975721342?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/6570189114975721342/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/httprequest.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/6570189114975721342'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/6570189114975721342'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/httprequest.html' title='HTTPRequest'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-4890445593538313885</id><published>2009-10-26T06:00:00.001+09:00</published><updated>2009-10-31T15:40:05.142+09:00</updated><title type='text'>py2exeでEXE化してみた</title><content type='html'>PythonのスクリプトをEXEファイルに変換してみた。&lt;br /&gt;&lt;br /&gt;・&lt;a href="http://www.py2exe.org/"&gt;py2exe&lt;/a&gt;から、&lt;a href="http://sourceforge.net/projects/py2exe/files/"&gt;py2exe-0.6.9.win32-py2.5.exe&lt;/a&gt;をダウンロードし、インストール。&lt;br /&gt;&lt;br /&gt;・setup.pyを作成&lt;br /&gt;&lt;blockquote&gt;&lt;br /&gt;from distutils.core import setup&lt;br /&gt;import py2exe&lt;br /&gt;&lt;br /&gt;py2exe_options = {&lt;br /&gt;  "compressed": 1,&lt;br /&gt;  "optimize": 2,&lt;br /&gt;  "bundle_files": 1}&lt;br /&gt;&lt;br /&gt;setup(&lt;br /&gt;  options = {"py2exe": py2exe_options},&lt;br /&gt;  console = [&lt;br /&gt;    {"script" : "example.py"}],&lt;br /&gt;  zipfile = None)&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;・コマンドラインから setup.py py2exe&lt;br /&gt;&lt;br /&gt;以上の操作で、distフォルダ内にexample.exeが生成されました。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;まだ、Pythonを勉強しはじめたばかりで、わからないことだらけですが、あっという間にexeファイルを作成できました。コンソール上で動く簡単なアプリケーションですが、ちゃんと動作しました。単一ファイル書き出しにしたところ2.6MBほどと、大きめのファイルサイズになってしまいましたが、簡単に起動できるのは便利ですね。&lt;br /&gt;&lt;br /&gt;参考&lt;br /&gt;&lt;a href="http://python.matrix.jp/modules/py2exe.html"&gt;Pythonで単体で動くバイナリを作ろう！&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-4890445593538313885?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/4890445593538313885/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/py2exeexe.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/4890445593538313885'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/4890445593538313885'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/py2exeexe.html' title='py2exeでEXE化してみた'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-8238006605508980249</id><published>2009-10-23T06:00:00.000+09:00</published><updated>2009-10-23T06:00:02.657+09:00</updated><title type='text'>アイコンクリックによる起動</title><content type='html'>&lt;strong&gt;すぐに閉じてしまう&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;Pythonのスクリプトが記述されたファイル(.pyファイル)をダブルクリックすると、Pythonのプログラムを実行できます。しかし、この方法でプログラムを実行すると多くの場合、一瞬で処理が終わりウィンドウが閉じてしまいます。実行結果をファイルなどに保存している場合はそれでもよいですが、実行結果を確認したい場合も多いはずです。&lt;br /&gt;&lt;br /&gt;このようなとき、&lt;br /&gt;raw_input()&lt;br /&gt;と書くことでウィンドウが閉じることを防げます。&lt;br /&gt;&lt;br /&gt;raw_input関数は、標準入力から1行を読み取る関数ですが、その際にプログラムの実行が止まります。そのため、プログラムの末尾にraw_input()と書いておけば、ウィンドウが自動的に閉じないようになります。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ウィンドウを開かないようにする&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;拡張子をpywにすると、Windows上で実行した場合も、ウィンドウを開かないようになります。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-8238006605508980249?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/8238006605508980249/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_23.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/8238006605508980249'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/8238006605508980249'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_23.html' title='アイコンクリックによる起動'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-5311009012827742139</id><published>2009-10-22T06:00:00.005+09:00</published><updated>2009-10-31T15:31:22.403+09:00</updated><title type='text'>ディクショナリ型</title><content type='html'>&lt;strong&gt;ディクショナリ型&lt;/strong&gt;&lt;br /&gt;連想配列みたいなもの。JavaでいうとHashMap型。PHPでいうとarrayでインデックスに文字列を使った状態。&lt;br /&gt;&lt;br /&gt;{}で要素が入っていないディクショナリ型のオブジェクトを作成。要素はあとから自由に追加できる。&lt;br /&gt;&lt;blockquote&gt;&gt;&gt;&gt; data = {}&lt;br /&gt;&gt;&gt;&gt; data["a"] = "abc"&lt;br /&gt;&gt;&gt;&gt; data&lt;br /&gt;{'a': 'abc'}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;オブジェクトを作らずにいきなり追加はできない。(PHPだとこれでもOK）&lt;br /&gt;&lt;blockquote&gt;&gt;&gt;&gt; data2["a"] = "abc"&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt; File "&lt;stdin&gt;", line 1, in &lt;module&gt;&lt;br /&gt;NameError: name 'data2' is not defined&lt;/module&gt;&lt;/stdin&gt;&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;最初から要素を入れておくことも可能&lt;br /&gt;&lt;blockquote&gt;&gt;&gt;&gt; data = {"a": "abc", "b": "bcd"}&lt;br /&gt;&gt;&gt;&gt; data&lt;br /&gt;{'a': 'abc', 'b': 'bcd'}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;中の要素へのアクセスは以下のようにする。&lt;br /&gt;&lt;blockquote&gt;&gt;&gt;&gt; data['a']&lt;br /&gt;'abc'&lt;br /&gt;&gt;&gt;&gt; data['b']&lt;br /&gt;'bcd'&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;ディクショナリの入れ子構造も可能&lt;br /&gt;&lt;blockquote&gt;&gt;&gt;&gt; data = {"a":{"b":"c"}}&lt;br /&gt;&gt;&gt;&gt; data["a"]["b"]&lt;br /&gt;'c'&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;ディクショナリ内にリストを入れることも可能&lt;br /&gt;&lt;blockquote&gt;&gt;&gt;&gt; data = {"a":[1,2,3]}&lt;br /&gt;&gt;&gt;&gt; data["a"][1]&lt;br /&gt;2&lt;br /&gt;&gt;&gt;&gt; data["a"][2]&lt;br /&gt;3&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;ディクショナリ内に自らを入れることも可能（非推奨）&lt;br /&gt;&lt;blockquote&gt;&gt;&gt;&gt; data = {"a":"b"}&lt;br /&gt;&gt;&gt;&gt; data["b"] = data&lt;br /&gt;&gt;&gt;&gt; data&lt;br /&gt;{'a': 'b', 'b': {...}}&lt;br /&gt;&lt;/blockquote&gt;&lt;br /&gt;再起構造になっているため特殊な表示形式になっている。こういうデータ構造を作る場合は、無限ループや無限再帰呼び出しが発生しないように十分注意する必要がある。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-5311009012827742139?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/5311009012827742139/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_22.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/5311009012827742139'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/5311009012827742139'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_22.html' title='ディクショナリ型'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-9007033006594304086</id><published>2009-10-21T06:00:00.000+09:00</published><updated>2009-10-21T06:00:00.361+09:00</updated><title type='text'>共有リファレンス</title><content type='html'>Pythonでは、すべての値はオブジェクトである。変数はオブジェクトに対するリファレンス(C言語のポインタ、Javaの参照のようなもの)を持つ。&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; a = 1&lt;br /&gt;上記の代入が実行されると、1というオブジェクトが生成され（※）変数aはそのオブジェクトに対するリファレンスを持つ。&lt;br /&gt;&gt;&gt;&gt; b = a&lt;br /&gt;変数bに変数aのリファレンスを代入する。（オブジェクト1を代入するという表現は不適切）&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; a = a + 1　--- (1)&lt;br /&gt;上記の代入を行うと、aは2になる。&lt;br /&gt;&gt;&gt;&gt; print a&lt;br /&gt;2&lt;br /&gt;だが、bの値は変わらない。&lt;br /&gt;&gt;&gt;&gt; print b&lt;br /&gt;1&lt;br /&gt;&lt;br /&gt;(1)では、まずa+1が計算される。その結果として2というオブジェクトが生成され、そのオブジェクトに対するリファレンスが変数bに代入される。(1)が実行されるまでは、aとbは同じオブジェクトに対するリファレンスを持っているが、(1)が実行された瞬間にリファレンスの共有状態が解除されるので注意する必要がある。&lt;br /&gt;この動作は、CやC++になれたプログラマであれば違和感を感じるかもしれないが、一般的には理解しやすいと思う。&lt;br /&gt;&lt;br /&gt;実は先ほど取り上げた整数オブジェクトは&lt;strong&gt;不変オブジェクト&lt;/strong&gt;であり、生成された後で値を変更することができないため、共有リファレンスに起因する問題が生じることはない。しかし、すべてのオブジェクトが上記のようにわかりやすい動作をするわけではない。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;共有リファレンスが問題になる例&lt;/strong&gt;&lt;br /&gt;&gt;&gt;&gt; x = [1,2,3]&lt;br /&gt;&gt;&gt;&gt; y = x&lt;br /&gt;&gt;&gt;&gt; x&lt;br /&gt;[1, 2, 3]&lt;br /&gt;&gt;&gt;&gt; y&lt;br /&gt;[1, 2, 3]&lt;br /&gt;&gt;&gt;&gt; x.append(4)&lt;br /&gt;&gt;&gt;&gt; x&lt;br /&gt;[1, 2, 3, 4]&lt;br /&gt;&gt;&gt;&gt; y&lt;br /&gt;[1, 2, 3, 4]&lt;br /&gt;&lt;br /&gt;この例では、xに対して行った操作（ x.append(4) )がyに影響を与えている。これは、リストが可変型のオブジェクトだからだ。リストの内容は大きくなる場合が多く、不変オブジェクトとして実装した場合、動作速度に問題がでるためこのようになっているそうだが、少し注意して使えば便利な仕様である。Javaでも、Stringクラスは不変、ArrayListなどは可変のオブジェクトとなっているので、あまり違和感はないと思う。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;もちろん、この仕様を回避する方法はある。&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;個別に定義する&lt;br /&gt;&gt;&gt;&gt; a = [1,2,3]&lt;br /&gt;&gt;&gt;&gt; b = [1,2,3]&lt;br /&gt;&gt;&gt;&gt; a.append(4)&lt;br /&gt;&gt;&gt;&gt; a&lt;br /&gt;[1, 2, 3, 4]&lt;br /&gt;&gt;&gt;&gt; b&lt;br /&gt;[1, 2, 3]&lt;br /&gt;&lt;br /&gt;スライシングを使ってオブジェクトを複製&lt;br /&gt;&gt;&gt;&gt; a = [1,2,3]&lt;br /&gt;&gt;&gt;&gt; b = a[:]&lt;br /&gt;&gt;&gt;&gt; a.append(4)&lt;br /&gt;&gt;&gt;&gt; a&lt;br /&gt;[1, 2, 3, 4]&lt;br /&gt;&gt;&gt;&gt; b&lt;br /&gt;[1, 2, 3]&lt;br /&gt;&lt;br /&gt;※整数値1は、すでに実行環境に存在するはずなので、実際には新しいオブジェクトは生成されない。実行速度を向上させるために、同じ値のオブジェクトがあれば再利用するようになっている。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-9007033006594304086?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/9007033006594304086/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_21.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/9007033006594304086'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/9007033006594304086'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_21.html' title='共有リファレンス'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-2181106016910876218</id><published>2009-10-20T06:00:00.001+09:00</published><updated>2009-10-20T06:00:00.571+09:00</updated><title type='text'>リスト内包表記/2重ループ</title><content type='html'>&lt;strong&gt;リスト内包表記を使うと2重ループ（のようなもの）も作れます。&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; [i + j for i in ["1","2","3"] for j in ["a","b","c"]]&lt;br /&gt;['1a', '1b', '1c', '2a', '2b', '2c', '3a', '3b', '3c']&lt;br /&gt;&lt;br /&gt;まずi:1に対して、j側のループが回り、その後i:2、i:3に対してループが回っています。左側に置いたループ対象の方が外側のループとして機能します。&lt;br /&gt;&lt;br /&gt;九九を計算してみました。でも1つのリストにすべての結果が入っているので、表っぽくないですね。&lt;br /&gt;&gt;&gt;&gt; [i * j for i in range(1,10) for j in range(1,10)]&lt;br /&gt;[1, 2, 3, 4, 5, 6, 7, 8, 9, 2, 4, 6, 8, 10, 12, 14, 16, 18, 3, 6, 9, 12, 15, 18,&lt;br /&gt; 21, 24, 27, 4, 8, 12, 16, 20, 24, 28, 32, 36, 5, 10, 15, 20, 25, 30, 35, 40, 45&lt;br /&gt;, 6, 12, 18, 24, 30, 36, 42, 48, 54, 7, 14, 21, 28, 35, 42, 49, 56, 63, 8, 16, 2&lt;br /&gt;4, 32, 40, 48, 56, 64, 72, 9, 18, 27, 36, 45, 54, 63, 72, 81]&lt;br /&gt;&lt;br /&gt;こうするとリストのリストになります。&lt;br /&gt;&gt;&gt;&gt; [[i * j for i in range(1,10)] for j in range(1,10)]&lt;br /&gt;[[1, 2, 3, 4, 5, 6, 7, 8, 9], [2, 4, 6, 8, 10, 12, 14, 16, 18], [3, 6, 9, 12, 15&lt;br /&gt;, 18, 21, 24, 27], [4, 8, 12, 16, 20, 24, 28, 32, 36], [5, 10, 15, 20, 25, 30, 3&lt;br /&gt;5, 40, 45], [6, 12, 18, 24, 30, 36, 42, 48, 54], [7, 14, 21, 28, 35, 42, 49, 56,&lt;br /&gt; 63], [8, 16, 24, 32, 40, 48, 56, 64, 72], [9, 18, 27, 36, 45, 54, 63, 72, 81]]&lt;br /&gt; &lt;br /&gt;適当に整形してあげると、表にみえますよね。&lt;br /&gt;[[1, 2, 3, 4, 5, 6, 7, 8, 9], &lt;br /&gt; [2, 4, 6, 8, 10, 12, 14, 16, 18], &lt;br /&gt; [3, 6, 9, 12, 15, 18, 21, 24, 27], &lt;br /&gt; [4, 8, 12, 16, 20, 24, 28, 32, 36], &lt;br /&gt; [5, 10, 15, 20, 25, 30, 35, 40, 45], &lt;br /&gt; [6, 12, 18, 24, 30, 36, 42, 48, 54], &lt;br /&gt; [7, 14, 21, 28, 35, 42, 49, 56, 63], &lt;br /&gt; [8, 16, 24, 32, 40, 48, 56, 64, 72], &lt;br /&gt; [9, 18, 27, 36, 45, 54, 63, 72, 81]]&lt;br /&gt; &lt;br /&gt;&lt;strong&gt;もちろん、二重ループの場合も、ifによる抽出条件は使えます。&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;九九の表から8の倍数だけを抽出。&lt;br /&gt; &gt;&gt;&gt; [i * j for i in range(1,10) for j in range(1,10) if i * j % 8 == 0]&lt;br /&gt;[8, 8, 16, 24, 8, 16, 24, 32, 40, 24, 48, 56, 8, 16, 24, 32, 40, 48, 56, 64, 72,&lt;br /&gt; 72]&lt;br /&gt;&lt;br /&gt;重複を取り除くにはset型に変更した後、sortedでリストに戻すとよい。&lt;br /&gt;&gt;&gt;&gt; sorted(set([i * j for i in range(1,10) for j in range(1,10) if i * j % 8 ==&lt;br /&gt;0]))&lt;br /&gt;[8, 16, 24, 32, 40, 48, 56, 64, 72]&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-2181106016910876218?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/2181106016910876218/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/2.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/2181106016910876218'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/2181106016910876218'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/2.html' title='リスト内包表記/2重ループ'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-2507538441610339075</id><published>2009-10-19T06:00:00.000+09:00</published><updated>2009-10-19T06:00:01.393+09:00</updated><title type='text'>リスト内包表記/mapとfilterの代替機能</title><content type='html'>リスト内包表記とは、リストを加工するための表記方法&lt;br /&gt;&lt;br /&gt;一番簡単な例。そのまま出力。&lt;br /&gt;&gt;&gt;&gt; [i for i in [1,2,3]]&lt;br /&gt;[1, 2, 3]&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;リスト内の要素に対して演算を行う例&lt;/strong&gt;&lt;br /&gt;各要素の2乗からなるリストを返します。&lt;br /&gt;&gt;&gt;&gt; [i**2 for i in [1,2,3]]&lt;br /&gt;[1, 4, 9]&lt;br /&gt;&lt;br /&gt;mapを使えば同じことを実現できます。引数の二乗を返す関数をつくって・・・&lt;br /&gt;&gt;&gt;&gt; def square(x): return x ** 2&lt;br /&gt;...&lt;br /&gt;&gt;&gt;&gt; map(square, [1,2,3])&lt;br /&gt;[1, 4, 9]&lt;br /&gt;&lt;br /&gt;lambda式を使えば名前空間に関数を作らずに同じことを実現できます。&lt;br /&gt;&gt;&gt;&gt; map((lambda x: x ** 2), [1,2,3])&lt;br /&gt;[1, 4, 9]&lt;br /&gt;&lt;br /&gt;中の値を計算して新しいリストを作る場合は、上記の2例のようにmap関数で同様の処理を行えます。ですが、実行速度も、表記の簡潔さもリスト内包表記の方が優れています。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;特定の条件を満たす値だけを取り出す例&lt;/strong&gt;&lt;br /&gt;&lt;br /&gt;奇数の要素だけを取り出します。&lt;br /&gt;&gt;&gt;&gt; [i for i in [1,2,3] if i % 2 == 1]&lt;br /&gt;[1, 3]&lt;br /&gt;&lt;br /&gt;これと同様の処理はfilter関数でも実現できます。&lt;br /&gt;&gt;&gt;&gt; def isodd(x): return x % 2 == 1&lt;br /&gt;...&lt;br /&gt;&gt;&gt;&gt; filter(isodd, [1,2,3])&lt;br /&gt;[1, 3]&lt;br /&gt;&lt;br /&gt;もちろん、lambda式（ラムダ式）を使うこともできます。&lt;br /&gt;&gt;&gt;&gt; filter((lambda x: x % 2 == 1), [1,2,3])&lt;br /&gt;[1, 3]&lt;br /&gt;&lt;br /&gt;このように、filterを使うことで、リスト内包表記と同様の処理を行えますが、実行速度も表記の簡潔さもリスト内包表記の方が優れています。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-2507538441610339075?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/2507538441610339075/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/mapfilter.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/2507538441610339075'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/2507538441610339075'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/mapfilter.html' title='リスト内包表記/mapとfilterの代替機能'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-8577865623867738151</id><published>2009-10-16T09:00:00.002+09:00</published><updated>2009-10-16T09:00:00.275+09:00</updated><title type='text'>モジュールのimportとreload</title><content type='html'>Pythonでは、コマンドラインから入力したコマンドだけでなく、テキストファイルに書いたソースファイルを&lt;strong style="color:red"&gt;モジュール&lt;/strong&gt;として&lt;strong style="color:red"&gt;import&lt;/strong&gt;することもできます。1つのソースファイルを複数回&lt;strong style="color:red"&gt;import&lt;/strong&gt;することはできないので、モジュールを変更した場合や、モジュールを再実行したい場合は&lt;strong style="color:red"&gt;reload&lt;/strong&gt;する必要があります。ソjavascript:void(0)ースファイルの拡張子は&lt;strong style="color:red"&gt;必ずpyにする&lt;/strong&gt;必要があります。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;モジュールの使用例&lt;/strong&gt;&lt;br /&gt;以下のスクリプトをhelloworld.pyをカレントディレクトリに保存します。&lt;br /&gt;print "Hello World!!!"&lt;br /&gt;&lt;br /&gt;カレントディレクトリはosモジュールのgetcwdメソッドで取得できます。&lt;br /&gt;&gt;&gt;&gt; import os&lt;br /&gt;&gt;&gt;&gt; os.getcwd()&lt;br /&gt;'C:\\Python25'&lt;br /&gt;&lt;br /&gt;さっそく、作成したモジュールを使ってみましょう。&lt;br /&gt;&gt;&gt;&gt; import helloworld #定義したモジュールをインポートします&lt;br /&gt;Hello World!!!&lt;br /&gt;&gt;&gt;&gt; import helloworld #すでにインポート済みなので何も起こりません。&lt;br /&gt;&gt;&gt;&gt; reload(helloworld) #リロードすると、再インポートされます。&lt;br /&gt;Hello World!!!&lt;br /&gt;&lt;module 'helloworld' from 'helloworld.pyc'&gt; #変更がなかったのでキャッシュからインポート&lt;br /&gt;&lt;br /&gt;このように、一連のスクリプトを外部ファイルに保存することで、スクリプトを毎回入力する必要がなくなります。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;外部ファイルによる関数の定義&lt;/strong&gt;&lt;br /&gt;外部ファイルで関数を定義することもできます。外部ファイルで定義した関数はモジュール内にインポートされます。などと、言葉で説明しても伝わらないのでサンプルプログラムで説明します。&lt;br /&gt;&lt;br /&gt;dog.pyというモジュールに以下のソースコードを保存します。&lt;br /&gt;# coding=SJIS&lt;br /&gt;def drink():&lt;br /&gt;&amp;nbsp;&amp;nbsp;print "ごくごく"&lt;br /&gt;※1行目のコメントで、テキストファイルの&lt;a href="http://www.python.org/dev/peps/pep-0263/"&gt;文字コードを指定&lt;/a&gt;します。&lt;br /&gt;&lt;br /&gt;使用例&lt;br /&gt;&gt;&gt;&gt; import dog&lt;br /&gt;&gt;&gt;&gt; dog.drink()&lt;br /&gt;ごくごく&lt;br /&gt;&gt;&gt;&gt;&lt;br /&gt;インポートしたすると、drinkというメソッドをもったdogというモジュールが生成されます。dog.drink()で、drinkメソッドを実行することができます。&lt;br /&gt;&lt;br /&gt;以下のように、dog.drinkメソッドを変数に代入することもできます。&lt;br /&gt;&gt;&gt;&gt; drink = dog.drink&lt;br /&gt;&gt;&gt;&gt; drink()&lt;br /&gt;ごくごく&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-8577865623867738151?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/8577865623867738151/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/importreload.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/8577865623867738151'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/8577865623867738151'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/importreload.html' title='モジュールのimportとreload'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-1242385033646658704</id><published>2009-10-15T06:00:00.002+09:00</published><updated>2009-10-15T06:00:00.486+09:00</updated><title type='text'>関数</title><content type='html'>Pythonでは関数はdefを使って定義します。&lt;br /&gt;&lt;br /&gt;形式 : def [関数名] ([引数]):&lt;br /&gt;&lt;br /&gt;関数内では、インデント(行の左端)を右にずらします。&lt;br /&gt;インデントの幅が一定になるように注意しましょう。&lt;br /&gt;※タブでも半角スペースでもかまいませんが、混ぜてはいけません。&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; def double (number):&lt;br /&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return number*2&lt;br /&gt;...&lt;br /&gt;&gt;&gt;&gt; double(2)&lt;br /&gt;4&lt;br /&gt;&gt;&gt;&gt; double(4)&lt;br /&gt;8&lt;br /&gt;&gt;&gt;&gt; double(0.5)&lt;br /&gt;1.0&lt;br /&gt;&gt;&gt;&gt; double("hoge")&lt;br /&gt;'hogehoge'&lt;br /&gt;&lt;br /&gt;関数も単なるオブジェクトなので、他の変数に代入できます。&lt;br /&gt;&gt;&gt;&gt; twice = double&lt;br /&gt;&gt;&gt;&gt; twice(2)&lt;br /&gt;4&lt;br /&gt;&gt;&gt;&gt; twice(4)&lt;br /&gt;8&lt;br /&gt;&lt;br /&gt;昨日作成したHTMLエンコードの例を関数すると、&lt;br /&gt;def encode(str):&lt;br /&gt;&amp;nbsp;&amp;nbsp;str = str.replace('&amp;','&amp;amp;')&lt;br /&gt;&amp;nbsp;&amp;nbsp;str = str.replace('&lt;','&amp;lt;')&lt;br /&gt;&amp;nbsp;&amp;nbsp;str = str.replace('&gt;','&amp;gt;')&lt;br /&gt;&amp;nbsp;&amp;nbsp;str = str.replace('"','&amp;quot;')&lt;br /&gt;&amp;nbsp;&amp;nbsp;return str;&lt;br /&gt;となります。&lt;br /&gt;&lt;br /&gt;使用例&lt;br /&gt;&gt;&gt;&gt; encode("&lt;html&gt;")&lt;br /&gt;'&amp;lt;html&amp;gt;'&lt;br /&gt;&lt;br /&gt;関数を使うようになると、コマンドラインからの入力では厳しいですね。&lt;br /&gt;次回は、importとreloadについて紹介する予定です。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-1242385033646658704?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/1242385033646658704/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_15.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/1242385033646658704'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/1242385033646658704'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_15.html' title='関数'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-2848394436550856576</id><published>2009-10-14T06:00:00.010+09:00</published><updated>2009-10-14T06:00:00.554+09:00</updated><title type='text'>ファイル入出力</title><content type='html'>&lt;strong&gt;改行をbrタグに置換&lt;/strong&gt;&lt;br /&gt;open("index.html", "w").write(open("index.txt").read().replace("\n","&amp;lt;br&amp;gt;\n"))&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;HTMLエンコード&lt;/strong&gt;&lt;br /&gt;html = open("index.txt").read()&lt;br /&gt;html = html.replace('&amp;amp;','&amp;amp;amp;')&lt;br /&gt;html = html.replace('&amp;lt;','&amp;amp;lt;') &lt;br /&gt;html = html.replace('&amp;gt;','&amp;amp;gt;')&lt;br /&gt;html = html.replace('"','&amp;amp;quot;')&lt;br /&gt;open("index.html","w").write(html)&lt;br /&gt;※&amp;amp;のエンコードを最初にしないとうまくいきません。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;HTML一括生成&lt;/strong&gt;&lt;br /&gt;HTMLテンプレートと設定CSVから一括でHTMLを生成&lt;br /&gt;&lt;b&gt;HTMLテンプレート例&lt;/b&gt;&lt;br /&gt;&amp;lt;html&gt;&lt;br /&gt;&amp;lt;head&gt;&amp;lt;title&gt;[[title]]&amp;lt;/title&gt;&amp;lt;/head&gt;&lt;br /&gt;&amp;lt;body&gt;&lt;br /&gt;&amp;lt;h1&gt;[[title]]&amp;lt;/h1&gt;&lt;br /&gt;&amp;lt;p&gt;[[contents]]&amp;lt;/p&gt;&lt;br /&gt;&amp;lt;/body&gt;&lt;br /&gt;&amp;lt;/html&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;CSV例&lt;/span&gt;&lt;br /&gt;page1.html,page1,This is page one!&lt;br /&gt;page2.html,page2,This is page two!&lt;br /&gt;page3.html,page3,This is page three!&lt;br /&gt;page4.html,page4,This is page four!&lt;br /&gt;&lt;strong&gt;ソースコード&lt;/strong&gt;&lt;br /&gt;&gt;&gt;&gt; for line in open("contents.csv"):&lt;br /&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;filename,title,contents = line.split(",")&lt;br /&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;open(filename,"w").write(open("template").read().replace("[[title]]",title&lt;br /&gt;).replace("[[contents]]",contents))&lt;br /&gt;&lt;br /&gt;1行目で、CSVを読み込み1行ずつループを実行&lt;br /&gt;2行目で、CSVをカンマで分割し変数に代入&lt;br /&gt;3行目で、テンプレートを開き、該当箇所を置換した後、保存&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-2848394436550856576?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/2848394436550856576/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_14.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/2848394436550856576'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/2848394436550856576'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_14.html' title='ファイル入出力'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-7420209500458721727</id><published>2009-10-13T06:00:00.003+09:00</published><updated>2009-10-13T06:00:00.224+09:00</updated><title type='text'>ファイル出力</title><content type='html'>&lt;strong&gt;ファイルへの出力&lt;/strong&gt;&lt;br /&gt;&gt;&gt;&gt; f = open("helloworld.txt", "w")&lt;br /&gt;&gt;&gt;&gt; f.write("Hello World!!")&lt;br /&gt;&gt;&gt;&gt; f.close()&lt;br /&gt;open関数の第2引数に"w"を指定すると書き込みモードでファイルを開きます。&lt;br /&gt;書き込みが確実に実行されるように、必ず最後にcloseを実行しましょう。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ファイルの複製&lt;/strong&gt;&lt;br /&gt;&gt;&gt;&gt; fr = open("helloworld.txt") # 第2引数のデフォルト値は"r"&lt;br /&gt;&gt;&gt;&gt; fw = open("helloworld_copy.txt", "w")&lt;br /&gt;&gt;&gt;&gt; fw.write(fr.read())&lt;br /&gt;&gt;&gt;&gt; fr.close()&lt;br /&gt;&gt;&gt;&gt; fw.close()&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;closeしないとどうなるのか？&lt;/strong&gt;&lt;br /&gt;&gt;&gt;&gt; f = open("helloworld.txt", "w")&lt;br /&gt;&gt;&gt;&gt; f.write("12345")&lt;br /&gt;この段階では、まだファイルは空の状態だった。&lt;br /&gt;&gt;&gt;&gt; f.close()&lt;br /&gt;Closeを実行した瞬間、writeの内容がファイルに書き込まれた。&lt;br /&gt;&lt;br /&gt;この結果から判断するとcloseするまで書き込まれないように思われるが、必ずしもそうではない。&lt;br /&gt;&lt;br /&gt;以下の例では、すぐに書き込みが実行される。&lt;br /&gt;&gt;&gt;&gt; open("helloworld.txt", "w").write("54321")&lt;br /&gt;&lt;br /&gt;また、最初の例を以下のように変更しても書き込みは実行される。&lt;br /&gt;&gt;&gt;&gt; f = open("helloworld.txt", "w")&lt;br /&gt;&gt;&gt;&gt; f.write("12345")&lt;br /&gt;&gt;&gt;&gt; f = ""&lt;br /&gt;&lt;br /&gt;Pythonの実装を確認したわけではないが、ファイルオブジェクトへの「参照」がなくなった時点でcloseが自動的に呼び出されているようだ。このことを利用すると、最初にあげた2つの例は以下のように省略できる。&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ファイルへの出力&lt;/strong&gt;&lt;br /&gt;&gt;&gt;&gt; open("helloworld.txt", "w").write("Hello World!!")&lt;br /&gt;&lt;br /&gt;&lt;strong&gt;ファイルの複製&lt;/strong&gt;&lt;br /&gt;&gt;&gt;&gt; open("helloworld_copy.txt", "w").write(open("helloworld.txt").read())&lt;br /&gt;&lt;br /&gt;明日の記事では、ファイルの入出力を使った実用的な例を紹介しようと思う。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-7420209500458721727?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/7420209500458721727/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_13.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/7420209500458721727'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/7420209500458721727'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_13.html' title='ファイル出力'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-2641526037352900088</id><published>2009-10-12T06:00:00.003+09:00</published><updated>2009-10-12T08:28:49.667+09:00</updated><title type='text'>ファイル入力</title><content type='html'>list.txtに以下のような内容を保存。&lt;br /&gt;10&lt;br /&gt;20&lt;br /&gt;30&lt;br /&gt;40&lt;br /&gt;50&lt;br /&gt;&lt;br /&gt;テキストファイルを開き、１行ずつ表示する例。&lt;br /&gt;&gt;&gt;&gt; for line in open("list.txt").readlines():&lt;br /&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print line&lt;br /&gt;...&lt;br /&gt;10&lt;br /&gt;&lt;br /&gt;20&lt;br /&gt;&lt;br /&gt;30&lt;br /&gt;&lt;br /&gt;40&lt;br /&gt;&lt;br /&gt;50&lt;br /&gt;&lt;br /&gt;上記の例ではlineの末尾に改行コードが入っているため、printの改行と合わせて２重に改行されてしまう。&lt;br /&gt;&lt;br /&gt;Stripメソッドを使うと、無駄な改行を除去できる。&lt;br /&gt;&gt;&gt;&gt; for line in open("list.txt").readlines():&lt;br /&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print line.strip()&lt;br /&gt;...&lt;br /&gt;10&lt;br /&gt;20&lt;br /&gt;30&lt;br /&gt;40&lt;br /&gt;50&lt;br /&gt;&lt;br /&gt;入力値の二乗を表示する例&lt;br /&gt;&gt;&gt;&gt; for line in open("list.txt").readlines():&lt;br /&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;int(line) ** 2&lt;br /&gt;...&lt;br /&gt;100&lt;br /&gt;400&lt;br /&gt;900&lt;br /&gt;1600&lt;br /&gt;2500&lt;br /&gt;※読み込んだ値は"文字列"なので、int関数を使い整数に変換する必要があります。&lt;br /&gt;&lt;br /&gt;棒グラフを表示する例&lt;br /&gt;&gt;&gt;&gt; for line in open("list.txt").readlines():&lt;br /&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print("*" * int(line))&lt;br /&gt;...&lt;br /&gt;**********&lt;br /&gt;********************&lt;br /&gt;******************************&lt;br /&gt;****************************************&lt;br /&gt;**************************************************&lt;br /&gt;&lt;br /&gt;数値の合計を求める例&lt;br /&gt;&gt;&gt;&gt; sum = 0&lt;br /&gt;&gt;&gt;&gt; for line in open("list.txt").readlines():&lt;br /&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;sum += int(line)&lt;br /&gt;...&lt;br /&gt;&gt;&gt;&gt; sum&lt;br /&gt;150&lt;br /&gt;&lt;br /&gt;最大値を求める例 (入力値に必ず0以上の数値が含まれているものとする）&lt;br /&gt;&gt;&gt;&gt; max = 0&lt;br /&gt;&gt;&gt;&gt; for line in open("list.txt").readlines():&lt;br /&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if int(line) &gt; max:&lt;br /&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;max = int(line)&lt;br /&gt;...&lt;br /&gt;&gt;&gt;&gt; max&lt;br /&gt;50&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-2641526037352900088?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/2641526037352900088/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_12.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/2641526037352900088'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/2641526037352900088'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_12.html' title='ファイル入力'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-4425273849198657718</id><published>2009-10-09T23:30:00.002+09:00</published><updated>2009-10-12T02:22:20.088+09:00</updated><title type='text'>ループ（第1回）</title><content type='html'>ループを説明するまえに、Pythonのプログラムのブロック構造について簡単に紹介しておきます。&lt;br /&gt;&lt;br /&gt;C,C++,Java,JavaScript,PHPなどの言語では、プログラムのブロック構造は{}で表します。&lt;br /&gt;1: for(i=0;i&lt;10;i++){&lt;br /&gt;2: &amp;nbsp;&amp;nbsp;printf("%d", i);&lt;br /&gt;3: }&lt;br /&gt;このC風のプログラムでは、1行目の{と3行目の}の間がループの範囲になります。&lt;br /&gt;&lt;br /&gt;同じプログラムをPythonで書くと、&lt;br /&gt;1: for i in range(10):&lt;br /&gt;2: &amp;nbsp;&amp;nbsp;print i&lt;br /&gt;となります。Pythonでは、インデント(文字の左端の場所のずれ）以外に何も必要ありません。逆にいうと、インデントが文法上大きな意味を持っています。&lt;br /&gt;&lt;br /&gt;インデントにはスペース（もちろん半角でお願いします）とタブを使えますが、混ぜると大変なことになるので、どちらか片方を使うようにしましょう。&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;for in を使うと、リスト内の各要素に対して処理を実行できる。&lt;br /&gt;&gt;&gt;&gt; for x in [1,2,3,4,5]:&lt;br /&gt;... &amp;nbsp;&amp;nbsp;x&lt;br /&gt;...&lt;br /&gt;1&lt;br /&gt;2&lt;br /&gt;3&lt;br /&gt;4&lt;br /&gt;5&lt;br /&gt;&lt;br /&gt;リスト内の値は数字でなくてもよい。&lt;br /&gt;&gt;&gt;&gt; for c in ["a","b","c","d","e"]:&lt;br /&gt;... &amp;nbsp;&amp;nbsp;c*5&lt;br /&gt;...&lt;br /&gt;'aaaaa'&lt;br /&gt;'bbbbb'&lt;br /&gt;'ccccc'&lt;br /&gt;'ddddd'&lt;br /&gt;'eeeee'&lt;br /&gt;&lt;br /&gt;10回ループなどの場合はrange()関数を使うとよい。&lt;br /&gt;&gt;&gt;&gt; for i in range(10):&lt;br /&gt;... &amp;nbsp;&amp;nbsp;i,i*i&lt;br /&gt;...&lt;br /&gt;(0, 0)&lt;br /&gt;(1, 1)&lt;br /&gt;(2, 4)&lt;br /&gt;(3, 9)&lt;br /&gt;(4, 16)&lt;br /&gt;(5, 25)&lt;br /&gt;(6, 36)&lt;br /&gt;(7, 49)&lt;br /&gt;(8, 64)&lt;br /&gt;(9, 81)&lt;br /&gt;&lt;br /&gt;range関数は、実際にはリストを返している。&lt;br /&gt;&gt;&gt;&gt; range(10)&lt;br /&gt;[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]&lt;br /&gt;&lt;br /&gt;変則的なループ範囲の指定はrange関数の第2引数、第3引数を使えばよい。&lt;br /&gt;&gt;&gt;&gt; range(5,10) #5からスタート&lt;br /&gt;[5, 6, 7, 8, 9]&lt;br /&gt;&gt;&gt;&gt; range(0,10,2) #step 2&lt;br /&gt;[0, 2, 4, 6, 8]&lt;br /&gt;&gt;&gt;&gt; range(9,-1,-1) #step -1&lt;br /&gt;[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]&lt;br /&gt;&lt;br /&gt;2重ループ&lt;br /&gt;&gt;&gt;&gt; for i in range(1,10):&lt;br /&gt;... &amp;nbsp;&amp;nbsp;for j in range(1,10):&lt;br /&gt;... &amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;print i*j, #最後に,を入れると改行しない&lt;br /&gt;... &amp;nbsp;&amp;nbsp;print #改行だけする&lt;br /&gt;...&lt;br /&gt;1 2 3 4 5 6 7 8 9&lt;br /&gt;2 4 6 8 10 12 14 16 18&lt;br /&gt;3 6 9 12 15 18 21 24 27&lt;br /&gt;4 8 12 16 20 24 28 32 36&lt;br /&gt;5 10 15 20 25 30 35 40 45&lt;br /&gt;6 12 18 24 30 36 42 48 54&lt;br /&gt;7 14 21 28 35 42 49 56 63&lt;br /&gt;8 16 24 32 40 48 56 64 72&lt;br /&gt;9 18 27 36 45 54 63 72 81&lt;br /&gt;&lt;br /&gt;以上でループ(第1回)は終わりです。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-4425273849198657718?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/4425273849198657718/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/1.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/4425273849198657718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/4425273849198657718'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/1.html' title='ループ（第1回）'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-8889062120641998209</id><published>2009-10-08T23:09:00.001+09:00</published><updated>2009-10-08T23:09:00.915+09:00</updated><title type='text'>文字列（実用編）</title><content type='html'>前回は、文字列の結合や部分文字列の抽出を行ったが、実際にプログラムを作成するとなると、もっと高機能な文字列操作が必要になる。今回は文字列オブジェクト固有の「便利」なメソッドを紹介する。&lt;br /&gt;&lt;br /&gt;find: 特定の文字が最初に出現する位置を返す&lt;br /&gt;&gt;&gt;&gt; "abcde".find("a") ##1文字目は0に&lt;br /&gt;0&lt;br /&gt;&gt;&gt;&gt; "abcde".find("c")&lt;br /&gt;2&lt;br /&gt;&gt;&gt;&gt; "abcde".find("e")&lt;br /&gt;4&lt;br /&gt;&gt;&gt;&gt; "abcde".find("f") ##見つからなければ-1に&lt;br /&gt;-1&lt;br /&gt;&lt;br /&gt;upper 大文字に&lt;br /&gt;lower 小文字に&lt;br /&gt;&gt;&gt;&gt; "abcde".upper()&lt;br /&gt;'ABCDE'&lt;br /&gt;&gt;&gt;&gt; "ABCDE".lower()&lt;br /&gt;'abcde'&lt;br /&gt;&lt;br /&gt;大文字にして小文字にしたら元通り。（メソッドチェーン）&lt;br /&gt;&gt;&gt;&gt; "abcde".upper().lower()&lt;br /&gt;'abcde'&lt;br /&gt;&lt;br /&gt;rstrip: 行末の空白文字の除去&lt;br /&gt;&gt;&gt;&gt; "ABCDE\n"&lt;br /&gt;'ABCDE\n'&lt;br /&gt;&gt;&gt;&gt; "ABCDE\n".rstrip()&lt;br /&gt;'ABCDE'&lt;br /&gt;&gt;&gt;&gt; "ABCDE\n\t".rstrip()&lt;br /&gt;'ABCDE'&lt;br /&gt;&gt;&gt;&gt; "ABCDE    ".rstrip()&lt;br /&gt;'ABCDE'&lt;br /&gt;ユーザ入力の処理や、CSVインポート時に、行末のゴミを取り除けます。&lt;br /&gt;&lt;br /&gt;split: 文字列を分割しリスト化&lt;br /&gt;&gt;&gt;&gt; "a,b,c".split(",")&lt;br /&gt;['a', 'b', 'c']&lt;br /&gt;&lt;br /&gt;startswith: 特定の文字列で始まるか確認&lt;br /&gt;&gt;&gt;&gt; "hello".startswith("H") &lt;br /&gt;False&lt;br /&gt;&gt;&gt;&gt; "hello".startswith("h")&lt;br /&gt;True&lt;br /&gt;&lt;br /&gt;文字列オブジェクトの属性は以下のとおり。&lt;br /&gt;&gt;&gt;&gt; dir("hoge")&lt;br /&gt;['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__&lt;br /&gt;ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__getslice__', '__g&lt;br /&gt;t__', '__hash__', '__init__', '__le__', '__len__', '__lt__', '__mod__', '__mul__&lt;br /&gt;', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '&lt;br /&gt;__rmul__', '__setattr__', '__str__', 'capitalize', 'center', 'count', 'decode',&lt;br /&gt;'encode', 'endswith', 'expandtabs', 'find', 'index', 'isalnum', 'isalpha', 'isdi&lt;br /&gt;git', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lst&lt;br /&gt;rip', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit'&lt;br /&gt;, 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', '&lt;br /&gt;translate', 'upper', 'zfill']&lt;br /&gt;&lt;br /&gt;文字列は非常によく使うオブジェクトです。__で囲まれているのは特殊な属性なので無視するとして、それ以外のメソッドは一通り機能を確認しておくとよいでしょう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-8889062120641998209?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/8889062120641998209/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_08.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/8889062120641998209'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/8889062120641998209'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_08.html' title='文字列（実用編）'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-9091615667894763969</id><published>2009-10-07T22:47:00.001+09:00</published><updated>2009-10-07T22:47:00.515+09:00</updated><title type='text'>文字列(基礎編)</title><content type='html'>文字列は文字の列（シーケンス）のこと。&lt;br /&gt;&lt;br /&gt;1行の文字列はダブルクオーテーションもしくはクオーテーションで囲む。&lt;br /&gt;&gt;&gt;&gt; print "Hello World!"&lt;br /&gt;Hello World!&lt;br /&gt;&gt;&gt;&gt; print 'Hello World!'&lt;br /&gt;Hello World!&lt;br /&gt;&gt;&gt;&gt; print '"'&lt;br /&gt;"&lt;br /&gt;&gt;&gt;&gt; print "'"&lt;br /&gt;'&lt;br /&gt;&lt;br /&gt;複数行の文字列はダブルクオーテーション3個もしくは、シングルクオーテーション3個で囲む。&lt;br /&gt;&gt;&gt;&gt; print """&lt;br /&gt;... Hello World!&lt;br /&gt;... Hello World!&lt;br /&gt;... """&lt;br /&gt;&gt;&gt;&gt; print '''&lt;br /&gt;... Hello World!&lt;br /&gt;... Hello World!&lt;br /&gt;... '''&lt;br /&gt;&lt;br /&gt;インデックス指定で文字を抽出できる。&lt;br /&gt;&gt;&gt;&gt; "Hello"[0]&lt;br /&gt;'H'&lt;br /&gt;&gt;&gt;&gt; "Hello"[1]&lt;br /&gt;'e'&lt;br /&gt;&gt;&gt;&gt; "Hello"[2]&lt;br /&gt;'l'&lt;br /&gt;&gt;&gt;&gt; "Hello"[3]&lt;br /&gt;'l'&lt;br /&gt;&gt;&gt;&gt; "Hello"[4]&lt;br /&gt;'o'&lt;br /&gt;変数に代入したほうが分かりやすいかもしれない。&lt;br /&gt;&gt;&gt;&gt; h = "Hello"&lt;br /&gt;&gt;&gt;&gt; h[0]&lt;br /&gt;'H'&lt;br /&gt;&gt;&gt;&gt; h[1]&lt;br /&gt;'e'&lt;br /&gt;&gt;&gt;&gt; h[2]&lt;br /&gt;'l'&lt;br /&gt;&gt;&gt;&gt; h[3]&lt;br /&gt;'l'&lt;br /&gt;&gt;&gt;&gt; h[4]&lt;br /&gt;'o'&lt;br /&gt;&lt;br /&gt;文字列の連結は+で行う。&lt;br /&gt;&gt;&gt;&gt; "Hello"+" "+"World!"&lt;br /&gt;'Hello World!'&lt;br /&gt;&lt;br /&gt;文字列に整数をかけると文字列の繰り返しになる。&lt;br /&gt;&gt;&gt;&gt; "*"*30&lt;br /&gt;'******************************'&lt;br /&gt;&lt;br /&gt;部分文字列の取り出し&lt;br /&gt;&gt;&gt;&gt; "abcde"[0:3]&lt;br /&gt;'abc'&lt;br /&gt;&gt;&gt;&gt; "abcde"[1:3]&lt;br /&gt;'bc'&lt;br /&gt;&gt;&gt;&gt; "abcde"[2:3]&lt;br /&gt;'c'&lt;br /&gt;&lt;br /&gt;引数は省略できる&lt;br /&gt;&gt;&gt;&gt; "abcde"[:3] ##最初から3文字&lt;br /&gt;'abc' &lt;br /&gt;&gt;&gt;&gt; "abcde"[:] ##全体を取り出し&lt;br /&gt;'abcde'&lt;br /&gt;&gt;&gt;&gt; "abcde"[2:] ##3文字目から後ろ&lt;br /&gt;'cde'&lt;br /&gt;&lt;br /&gt;引数には負の値を指定できる&lt;br /&gt;&gt;&gt;&gt; "abcde"[-3:] ##後ろから3文字&lt;br /&gt;'cde'&lt;br /&gt;&gt;&gt;&gt; "abcde"[-2:] ##後ろから2文字&lt;br /&gt;'de'&lt;br /&gt;&gt;&gt;&gt; "abcde"[-1:]&lt;br /&gt;'e'&lt;br /&gt;&gt;&gt;&gt; "abcde"[-1] ##最後の1文字&lt;br /&gt;'e'&lt;br /&gt;&lt;br /&gt;以上の方法は文字列だけでなく、シーケンス型のすべてのオブジェクトに適用できますが、現実的な文字列操作には適していません。（文字列置換をするだけでも大変）次回は、文字列操作専用のメソッドを使ってみます。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-9091615667894763969?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/9091615667894763969/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_07.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/9091615667894763969'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/9091615667894763969'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_07.html' title='文字列(基礎編)'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-1381780643006503718</id><published>2009-10-06T22:01:00.000+09:00</published><updated>2009-10-06T22:01:00.344+09:00</updated><title type='text'>乱数モジュール</title><content type='html'>randomモジュールをインポートすると、乱数関連の機能を使えるようになります。&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; import random&lt;br /&gt;&gt;&gt;&gt; random.random()&lt;br /&gt;0.40109116074255802&lt;br /&gt;&gt;&gt;&gt; random.random()&lt;br /&gt;0.19860637981500229&lt;br /&gt;&gt;&gt;&gt; random.random()&lt;br /&gt;0.095362165518568798&lt;br /&gt;&lt;br /&gt;Pythonを使って、ゲームやシミュレータを開発する場合はお世話になりそうなモジュールですね。randomモジュールには以下のような属性があるようですが、ほとんど意味がわかりません。&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; dir(random)&lt;br /&gt;['BPF', 'LOG4', 'NV_MAGICCONST', 'RECIP_BPF', 'Random', 'SG_MAGICCONST', 'System&lt;br /&gt;Random', 'TWOPI', 'WichmannHill', '_BuiltinMethodType', '_MethodType', '__all__'&lt;br /&gt;, '__builtins__', '__doc__', '__file__', '__name__', '_acos', '_ceil', '_cos', '&lt;br /&gt;_e', '_exp', '_hexlify', '_inst', '_log', '_pi', '_random', '_sin', '_sqrt', '_t&lt;br /&gt;est', '_test_generator', '_urandom', '_warn', 'betavariate', 'choice', 'expovari&lt;br /&gt;ate', 'gammavariate', 'gauss', 'getrandbits', 'getstate', 'jumpahead', 'lognormv&lt;br /&gt;ariate', 'normalvariate', 'paretovariate', 'randint', 'random', 'randrange', 'sa&lt;br /&gt;mple', 'seed', 'setstate', 'shuffle', 'uniform', 'vonmisesvariate', 'weibullvari&lt;br /&gt;ate']&lt;br /&gt;&gt;&gt;&gt;&lt;br /&gt;&lt;br /&gt;randomメソッド以外に、いくつか使ってみました。&lt;br /&gt;&lt;br /&gt;choiceメソッド: 与えられた「シーケンス」からランダムな要素を返す&lt;br /&gt;リストはシーケンスの一種なので、引数としてリストを使える。&lt;br /&gt;&gt;&gt;&gt; random.choice([1,2,3,4,5])&lt;br /&gt;3&lt;br /&gt;&gt;&gt;&gt; random.choice([1,2,3,4,5])&lt;br /&gt;1&lt;br /&gt;&gt;&gt;&gt; random.choice([1,2,3,4,5])&lt;br /&gt;5&lt;br /&gt;&gt;&gt;&gt; random.choice([1,2,3,4,5])&lt;br /&gt;3&lt;br /&gt;「タプル」もシーケンスなので、同様に動作。&lt;br /&gt;&gt;&gt;&gt; random.choice((1,2,3,4,5))&lt;br /&gt;4&lt;br /&gt;&gt;&gt;&gt; random.choice((1,2,3,4,5))&lt;br /&gt;2&lt;br /&gt;&gt;&gt;&gt; random.choice((1,2,3,4,5))&lt;br /&gt;3&lt;br /&gt;&gt;&gt;&gt; random.choice((1,2,3,4,5))&lt;br /&gt;3&lt;br /&gt;&lt;br /&gt;randrange: 2つの数字の間のランダムな整数を返す&lt;br /&gt;&gt;&gt;&gt; random.randrange(1,10)&lt;br /&gt;6&lt;br /&gt;&gt;&gt;&gt; random.randrange(1,10)&lt;br /&gt;7&lt;br /&gt;&gt;&gt;&gt; random.randrange(1,10)&lt;br /&gt;6&lt;br /&gt;&gt;&gt;&gt; random.randrange(1,10)&lt;br /&gt;8&lt;br /&gt;&gt;&gt;&gt; random.randrange(1,10)&lt;br /&gt;6&lt;br /&gt;ヘルプをみてみると、いろんなオプションが使えるようですが、無暗に使うなと警告されています。&lt;br /&gt;&gt;&gt;&gt; help(random.randrange)&lt;br /&gt;Help on method randrange in module random:&lt;br /&gt;&lt;br /&gt;randrange(self, start, stop=None, step=1, int=&lt;type 'int'&gt;, default=None, maxwid&lt;br /&gt;th=9007199254740992L) method of random.Random instance&lt;br /&gt;    Choose a random item from range(start, stop[, step]).&lt;br /&gt;&lt;br /&gt;    This fixes the problem with randint() which includes the&lt;br /&gt;    endpoint; in Python this is usually not what you want.&lt;br /&gt;    Do not supply the 'int', 'default', and 'maxwidth' arguments.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-1381780643006503718?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/1381780643006503718/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_06.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/1381780643006503718'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/1381780643006503718'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post_06.html' title='乱数モジュール'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-2651162040820707891</id><published>2009-10-05T21:48:00.002+09:00</published><updated>2009-10-05T21:48:00.483+09:00</updated><title type='text'>数値モジュール</title><content type='html'>数値モジュールを使うためには、まずmathモジュールをインポートします。mathモジュールをインポートすると、math.piなどのような定数、math.sqrt()などのようなメソッドを使うことができます。&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; import math&lt;br /&gt;&gt;&gt;&gt; math.pi&lt;br /&gt;3.1415926535897931&lt;br /&gt;&gt;&gt;&gt; math.sqrt(9)&lt;br /&gt;3.0&lt;br /&gt;&gt;&gt;&gt; math.sqrt(2)&lt;br /&gt;1.4142135623730951&lt;br /&gt;&lt;br /&gt;数値モジュールに、どんなメソッドや定数が存在するかは、dir関数を使うとわかります。&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; dir(math)&lt;br /&gt;['__doc__', '__name__', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh',&lt;br /&gt;'degrees', 'e', 'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log'&lt;br /&gt;, 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']&lt;br /&gt;&lt;br /&gt;他の言語を使いこなしている方であれば、大半の関数と定数の意味は推測できますね。より詳しい説明を読みい場合は、help関数を使いましょう。&lt;br /&gt;&lt;br /&gt;&gt;&gt;&gt; help(cos)&lt;br /&gt;Traceback (most recent call last):&lt;br /&gt;  File "&lt;stdin&gt;", line 1, in &lt;module&gt;&lt;br /&gt;NameError: name 'cos' is not defined&lt;br /&gt;&gt;&gt;&gt; help(math.cos)&lt;br /&gt;Help on built-in function cos in module math:&lt;br /&gt;&lt;br /&gt;cos(...)&lt;br /&gt;    cos(x)&lt;br /&gt;&lt;br /&gt;    Return the cosine of x (measured in radians).&lt;br /&gt;&lt;br /&gt;help関数の引数には、モジュール名を忘れずにつけましょう。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-2651162040820707891?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/2651162040820707891/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/2651162040820707891'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/2651162040820707891'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/blog-post.html' title='数値モジュール'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-7117397747718317636</id><published>2009-10-04T21:40:00.005+09:00</published><updated>2009-10-04T22:33:40.678+09:00</updated><title type='text'>四則演算と長整数型</title><content type='html'>Pythonは、コマンドラインから利用できます。加減剰余は+-*/、累乗は**です。&lt;br /&gt;&gt;&gt;&gt; 1+1&lt;br /&gt;2&lt;br /&gt;&gt;&gt;&gt; 1-1&lt;br /&gt;0&lt;br /&gt;&gt;&gt;&gt; 1*1&lt;br /&gt;1&lt;br /&gt;&gt;&gt;&gt; 10*10&lt;br /&gt;100&lt;br /&gt;&gt;&gt;&gt; 10**10&lt;br /&gt;10000000000L&lt;br /&gt;10の10乗は32ビットの整数値として表現できないので長整数型に変換されたようです。pythonの長整数型は、桁数の上限はなく、誤差も発生しません。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-7117397747718317636?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/7117397747718317636/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/python-1010-10000000000l-101032python.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/7117397747718317636'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/7117397747718317636'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/python-1010-10000000000l-101032python.html' title='四則演算と長整数型'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-6658540373074530849.post-7222489097977561570</id><published>2009-10-04T21:30:00.004+09:00</published><updated>2009-10-04T22:21:01.956+09:00</updated><title type='text'>初めてのPython</title><content type='html'>初めてのPython(オライリージャパン)を読みつつ、勉強したことをまとめていきます。&lt;br /&gt;&lt;br /&gt;初めてのPython自体がPython2.5をターゲットに書かれていること、GoogleAppEngineがPython2.5でないと正常に動作しないことから、このブログではPython2.5を使うことにします。&lt;br /&gt;&lt;br /&gt;ダウンロードアドレス&lt;a href="http://www.python.jp/Zope/download/pythoncore"&gt;&lt;br /&gt;http://www.python.jp/Zope/download/pythoncore&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;3.0や2.6など、より新しいバージョンもありますが、言語仕様が違いますので2.5のご利用を強くお勧めします。&lt;br /&gt;&lt;br /&gt;記事投稿の予定について&lt;br /&gt;　平日(月～金）に1日1記事ペースで続けていければと思っています。&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/6658540373074530849-7222489097977561570?l=python25.blogspot.com' alt='' /&gt;&lt;/div&gt;</content><link rel='replies' type='application/atom+xml' href='http://python25.blogspot.com/feeds/7222489097977561570/comments/default' title='コメントの投稿'/><link rel='replies' type='text/html' href='http://python25.blogspot.com/2009/10/python.html#comment-form' title='0 件のコメント'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/7222489097977561570'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/6658540373074530849/posts/default/7222489097977561570'/><link rel='alternate' type='text/html' href='http://python25.blogspot.com/2009/10/python.html' title='初めてのPython'/><author><name>西村洋一郎 / Ichiro / Mac / real</name><uri>http://www.blogger.com/profile/17765477399828427893</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='http://img2.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry></feed>
