2009-01-01から1年間の記事一覧

任天堂 “驚き”を生む方程式

DS・Wiiの成功体験、その裏でどういう思考・試行がなされたか。 モノを作る中でどいういったことを考えて進んでいったかという物語は、読んでいて楽しく、刺激になる。 why→what→how 本自体で記載されていたわけではないけれど、Wiiができるまでの経過は、「…

関数

ポイント defステートメント ネスト可能 実行時に決定する(代入と同じ) if x <= 5: def foo(): print(x + x) else: def foo(): print(x * x) リファレンス共有 呼出元・呼出先でリファレンスを共有している 引数が可変性のオブジェクトである場合、引数操作…

applyのような関数呼び出し

>>> def foo(x, y): print("%d:%d" % (x,y)) >>> lst = [1,2] >>> foo(*lst) 1:2

ネストスコープのループ

内側の変数を代入しただけだと、その変数自体が次々に変化していくため、期待した動作が得られない。 >>> def foo(x): ... result = [] ... for i in range(x): ... result.append(lambda : print(i)) ... return result ... >>> lst = foo(3) >>> for l in …

デフォルト値が可変性オブジェクトなら上書きできてしまう

関数はオブジェクトで、デフォルト値は関数オブジェクトに対応するため。 >>> def foo(x=[10]): ... for i in x: print(i) ... x.append(sum(x)) ... >>> foo() 10 >>> foo() 10 10 >>> foo() 10 10 20

ジェネレータ式

リスト内包表記と同じ形の構文で、ジェネレータが返る。 >>> gen = ( i ** 2 for i in range(5) if i % 2 == 0) >>> gen <generator object <genexpr> at 0x00CAA828> >>> for i in gen: print(i) ... 0 4 16</generator>

Python3でreloadは廃止→imp.reloadに

>>> import trial hello >>> import imp >>> imp.reload(trial) hello! <module 'trial' from 'trial.py'></module>

Python3.0イテレータのnext()が__next__に。また、標準関数nextが使える

[PEP 3114] next標準メソッドは、__next__メソッドに改称されました。 (訳注:そのかわりにイテレータオブジェクトの順送りには、next標準関数が使える) What'sNewInPython3.0 - TSNETWiki on TextWorld

with/asステートメント

C#のusingみたい。Rubyのforeachもこんなのだったような。 >>> with open(r'trial.py') as tr: ... for line in tr: ... print(line)

例外処理

try except else tryステートメントコードが例外を発生させなかった際に実行。 finally 例外発生有無にかかわらず最後に実行される。 >>> def fetch(obj, i): ... try: ... print(obj[i]) ... except IndexError: ... print("IndexError") ... else: ... pri…

__getattr__と__setattr__

>>> class wrapper: ... def __init__(self, object): ... self.wrapped = object ... def __getattr__(self, attrname): ... print("Trace", attrname) ... return getattr(self.wrapped, attrname) ... >>> lst = wrapper([1,2,3]) >>> lst.append(4) Trac…

関数デコレータ

.NETのCustomAttributeに近い印象。 >>> class Tracer: ... def __init__(self, func): ... self.cnt = 0 ... self.func = func ... def __call__(self, *args): ... self.cnt += 1 ... print(self.cnt) ... self.func(*args) ... >>> @Tracer ... def spam(…

プロパティ

>>> class Foo: ... def __init__(self, age): ... self.age = age ... def getage(self): ... return self.age ... Age = property(getage, None, None,None) >>> f = Foo(10) >>> f.Age 10

Python3のrangeはイテレータを返す

>>> q = (i ** 2 for i in range(100000) if i % 2 == 0) >>> for i in q: ... if i > 10: break ... print(i) ... 0 4 こういうのもすぐに処理が終了する。

importステートメントとfromステートメント

importステートメントによってアクセスできる属性は、全て共有されている。 fromステートメントはスコープへの変数がコピーされる。importのような共有は発生しない。 以下のようなpythonモジュールを用意する。 module0.py。 X = 0 module1.py。 X = 1 以下…

ディレクトリごとコピー(Windows)

import shutil shutil.copytree(r"C:\tmp", r"C:\tmp2")

バックアップコマンド

試しに、指定したディレクトリにタイムスタンプ付加し、ディレクトリ配下全てをコピーするスクリプトを書いてみた。 比較としてRubyも。 python import sys import shutil from datetime import datetime str = sys.argv[1] date =datetime.today() dist = "…

ステートメント

式としては使えない ステートメントは式としては使えない。 この点、全てが式であるRubyとは違う。 > puts(class Bar; end) nil 変数 先頭は英文字か下線 構文ルール 前から順に実行 区切り自動判別 字下げ 括弧 トリプルクォーテーション コロン(:) 複合ス…

いろいろ

range >>> q = [ i ** 2 for i in range(100) if i % 2 == 0] >>> for i in q(): print(i) ネストしたリスト内包表記 >>> q = [ (i,j) for i in range(10) for j in range(10)] >>> for t in q: print("%d:%d" % t)

Python3ではprintは関数

Python2とPython3ではprintの扱いが違う。3では関数として使わないといけない。 2.6だと通る。 >>> print 'hello' hello 3.0だと通らない。 >>> print 'hello' File "<stdin>", line 1 print 'hello' ^ SyntaxError: invalid syntax printを括弧付き…関数として呼べ</stdin>…

Pythonをはじめる

「そういえばPython触ったことない。」 そんなことを思い、「はじめてのPython」を買って流し読みなどをしています。 ひとまず読んで動かして試したところまで。 不変なオブジェクト 数値 文字列 タプル タプルが印象的。 あと、文字列が不変なのもRubyとの…

PythonのGCはリファレンスカウントときどきマーク&スイープ

Python2.2以降では、リファレンスカウントをフォローする形でマーク&スイープが走るらしい。 Python では、伝統的な参照カウント法の実装を行っている一方で、 参照の循環を検出するために働く循環参照検出機構 (cycle detector) も提供しています。循環参…

接尾辞配列

C#

WEB+DB Magazineを読んでいます。 書籍内記事にて言及されていた接尾辞配列の理解のため、記載されている動きをC#で組んでみました。 圧縮接尾辞配列は理解できていません… (理解を目的としているのでString#SubStringを多用していたりArray#BinarySearchを…

規定値を指示するキーワードdefault・演算子??

キーワードdefault、演算子??は、どちらも規定値を指示します。 キーワードdefaultはパラメータ型Tに対する規定値。 演算子??は「Null許容型→Null非許容型」の変換に対する規定値。 defaultキーワード このキーワードは、参照型の場合には null を返し、数値…

検索パスを追加した新しいAppDomain

アセンブリ検索パスを追加した新しいAppDomainを作成・実行するサンプル。 using System; using System.Reflection; namespace ConsoleApplication1 { class Program { static void Main() { AppDomain currentDomain = AppDomain.CurrentDomain; Console.Wr…

式木(Expression Tree)と無名delegate

無名delegateの場合は、コンパイル時に無名メソッドそのものがILに生成されるが、式木はメソッドを表現する式そのものがインスタンスとして生成される。 ILで見てみる こういうコードを書く。 using System; using System.Linq.Expressions; namespace Sampl…

RESTFulとRails、map.resources

routes.rbに記載するmap.resourcesメソッドで提供される機能について、分かった範囲でメモ書きします。 この機能はREST支援機能なので、まずRESTから確認しました。 REST RESTについての自分の認識。 (ここではRailsにとってのRESTを見ていくので、「アーキ…

WPFに乗り換える理由

今更ながら、WPF使って簡単な画面を作ったりしたのです。 しっかり動くアプリというよりは、どんな感じに仕上がるか見るだけの、ポコポコとボタン置いたレベルの。 ざっくりとした感想。 XAMLのStyle指定が使い勝手良さそう。(このStyleの動的切換で見た目を…

Getting Started With Rails

本家のGetting Startedってのを真似て進めてみました。 以下はその際のメモ書きです。 Getting Started With Rails http://guides.rails.info/getting_started_with_rails.html railsアプリ作成 rails blog -d mysql cd blog デフォルトデータベースはSQLite…

Railsセットアップの続き(CentOS on VMWare)

前回の続き。 MySQLのセットアップ yumで。バージョンは5.0.45-7.el5。 sudo yum install mysql mysql-devel sudo yum install mysql-server サーバー入れ忘れてこんなエラーが出るご愛敬などがあった。(ソケットに接続できない。ベタにMySQL立ち上がってな…