Pythonでは、関数をオブジェクトとして扱うことができます。
オブジェクトは、関数名の変数に格納されます。
そのため、括弧をつけずに、関数名のみを呼び出すと、オブジェクトとして扱われます。
次のプログラムを見てください。
# coding: utf-8 # 関数の定義 def function(arg): return arg + arg # 関数オブジェクトの呼び出し print(function) # 関数の実行 print(function(1)) |
実行結果
<function function at 0x00BCB5F0>
2
実行結果より、関数名のみだと、オブジェクトとして扱われていることがわかります。
スコープとは有効範囲のことを言います。
例えば、関数内で定義した変数は、関数外では使用することができません。
このように、変数の利用できる範囲のことを指します。
Pythonでは、グローバル変数への参照は可能です。
しかし、代入は普通にはできません。
関数内で代入しようとしても、ローカル変数を定義したことになるためです。
次のプログラムを見てください。
# coding: utf-8 # グローバル変数の定義 VALUE = 1 # 関数内でグローバル変数を参照 def function1(): print(VALUE) function1() # 関数内でグローバル変数へ代入しようとしても、ローカル変数として解釈される def function2(): VALUE = 2 print(VALUE) function2() print(VALUE) |
実行結果
1
2
1
関数内でグローバル変数へ代入するには、global文を使用します。
次のプログラムを見てください。
# coding: utf-8 # グローバル変数の定義 VALUE = 1 # global文を使用して、関数内でグローバル変数へ代入 def function(): global VALUE VALUE = 2 print(VALUE) function() print(VALUE) |
実行結果
2
2
Javaのソースコードとの比較をします。
Javaを知っている方は参考にしてください。
Python | Java |
---|---|
# coding: utf-8 # グローバル変数の定義 VALUE = 1 # グローバル変数を参照する関数 def function1(): print(VALUE) # グローバル変数へ代入する関数 def function2(): global VALUE VALUE = 2 # 各関数の実行 function1() function2() print(VALUE) |
public class Java25 { // グローバル変数の定義 static int VALUE = 1; // グローバル変数を参照する関数 public static void function1() { System.out.println(VALUE); } // グローバル変数へ代入する関数 public static void function2() { VALUE = 2; } // 各関数の実行 public static void main(String[] args) { function1(); function2(); System.out.println(VALUE); } } |
Copyright (C) 2011 ほぷしぃ. All Rights Reserved.