|
× [PR]上記の広告は3ヶ月以上新規記事投稿のないブログに表示されています。新しい記事を書く事で広告が消えます。 |
|
|
|
|
|
Pythonでフィールドを定義するときに他言語と合わせて クラスブロックに入れてみた場合とコンストラクタに入れてみた場合を比較してみた。 i = 0
def func():
global i
i = i + 1
return i
class Person:
vals1 = func() #field define
def __init__(self):
print '[Person.__init__]'
self.vals2 = func() #costruct
print "finished compile."
func()
info = Person()
print info.vals1, info.vals2
del info
info = Person()
print info.vals1, info.vals2
結果
finished compile. [Person.__init__] 1 3 [Person.__init__] 1 4 どうやらクラスブロックにフィールドを指定したら、コンパイル時に プリプロセスされてしまってスカラーに変換されてるっぽい。 |
|
|
|
Pythonの変数のスコープについてなぜグローバル変数を用いるためにglobalをつける必要があるか考察してみた。 まず、C言語の関数から見てみよう int func()
{
int L;
L = 23;
printf("%d%s", L, G); //出力:"23bit"
}
C言語において、変数は「Use with definition」である。 次に、VBの関数を見てみよう。 Sub func
L = 23
print L & G ’出力:"23bit"
End Sub
VBにおいて、Option Explicitをつけない場合、変数は「Use without definition」である。 いよいよPythonの関数を見てみよう def func():
L = 23
print L,G #出力:"23bit"
Pythonにおいて、変数は「Use with definition. But writing is definition.」である。 実際に変数Gには何が設定されているのか知りたければGで検索すれば設定場所がひっかかる。 def func2():
global G
G = "bit"
global変数に値を設定する場合、ローカル変数の「値を設定して使う」というルールに参加させるため、globalキーワードを用いる。 なぜ、こんな仕様になったのか考えてみると、システム屋ではない人が作ってもPythonは整った文になるように設計されているということである。 さらに次のルールが生まれる。 とてもよく考えられているルールではないだろうか? |
|
忍者ブログ [PR] |


