Pythonを勉強し始めです。
日ごろ私が慣れ親しんでいる言語は、Java、PHP、Javascriptです。
Pythonをやり始めた時は、スクリプト言語だからPHPと似てるかな?と思ったのですが、
「なんでもオブジェクト」
というところはJavascriptと似てたりもしますね。
とりあえず、これは引っかかった!というポイントをメモっておきます。
①defステートメントの中で値が代入された変数は、defステートメントの中でのみ有効。
わかりにくい表現だと思うので、例を書きますね。
x=99; def hogehoge(): x = 100 hogehoge() print(x) #99が出力されます
②関数の呼び出し側のコードに、同じオブジェクトへのリファレンスを保持する変数があれば、関数と呼び出し側でオブジェクトを共有することになります。
def changer(x, y): x = 2 y[0] = 'spam' X = 1 L = [1,2] changer(X, L) print(X, L) #1 ['spam', 2]が出力されます
上記の例で、Xについては、①で述べたように1のまま変わらないんですが、Lについては、変わっています。
わかりにくっ!
こういうことを防ぐために、copy() がよく使われます。
③ //は割り算! ほんと、それだけw
④クラスのメソッドは自分自身のインスタンスが既に代入されている
下記のように、メソッドの第一引数 self を渡す必要はありません。
selfはxが代入されているのです。
class NextClass: def printer(self, text): self.message = text print(self.message) x = NextClass() x.printer('hogehoge') #hogehoge が出力される
下記の本で勉強してます。やっぱりオライリー。わかりやすい!
②、④のコードは下記本からの抜粋です。