2009-03-20から1日間の記事一覧
ポイント defステートメント ネスト可能 実行時に決定する(代入と同じ) if x <= 5: def foo(): print(x + x) else: def foo(): print(x * x) リファレンス共有 呼出元・呼出先でリファレンスを共有している 引数が可変性のオブジェクトである場合、引数操作…
>>> 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>
>>> import trial hello >>> import imp >>> imp.reload(trial) hello! <module 'trial' from 'trial.py'></module>
[PEP 3114] next標準メソッドは、__next__メソッドに改称されました。 (訳注:そのかわりにイテレータオブジェクトの順送りには、next標準関数が使える) What'sNewInPython3.0 - TSNETWiki on TextWorld
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…
>>> 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
>>> 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のような共有は発生しない。 以下のようなpythonモジュールを用意する。 module0.py。 X = 0 module1.py。 X = 1 以下…