特集PC技術

Pythonを学ぼう

 

第25回 関数オブジェクトとスコープ


1.関数オブジェクト

Pythonでは、関数をオブジェクトとして扱うことができます。
オブジェクトは、関数名の変数に格納されます。
そのため、括弧をつけずに、関数名のみを呼び出すと、オブジェクトとして扱われます。
次のプログラムを見てください。

# coding: utf-8

# 関数の定義
def function(arg):
    return arg + arg

# 関数オブジェクトの呼び出し
print(function)

# 関数の実行
print(function(1))

実行結果

<function function at 0x00BCB5F0>
2

実行結果より、関数名のみだと、オブジェクトとして扱われていることがわかります。

2.スコープ

2.1.スコープの概要

スコープとは有効範囲のことを言います。
例えば、関数内で定義した変数は、関数外では使用することができません。
このように、変数の利用できる範囲のことを指します。
Pythonでは、グローバル変数への参照は可能です。 しかし、代入は普通にはできません。
関数内で代入しようとしても、ローカル変数を定義したことになるためです。
次のプログラムを見てください。

# coding: utf-8

# グローバル変数の定義
VALUE = 1

# 関数内でグローバル変数を参照
def function1():
    print(VALUE)
function1()

# 関数内でグローバル変数へ代入しようとしても、ローカル変数として解釈される
def function2():
    VALUE = 2
    print(VALUE)
function2()
print(VALUE)

実行結果

1
2
1

2.2.global文

関数内でグローバル変数へ代入するには、global文を使用します。
次のプログラムを見てください。

# coding: utf-8

# グローバル変数の定義
VALUE = 1

# global文を使用して、関数内でグローバル変数へ代入
def function():
    global VALUE
    VALUE = 2
    print(VALUE)
function()
print(VALUE)

実行結果

2
2

3.Javaとの比較

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);
    }
}

コメントの投稿


画像の中に見える文字を入力してください。

トラックバックURL

http://www.isl.ne.jp/cgi-bin/mt/mt-tb.cgi/1789

サイト内検索

twitterTwitter

最新ブログ記事

2015年06月13日

JavaScriptの情報室

4冊目 ハイブリッドアプリが作れる。tabris.js

2014年10月16日

C++言語学習録

第3回 ファイルを分割してみよう

2014年10月09日

C++言語学習録

第2回 オブジェクト指向の復習

2014年10月02日

C++言語学習録

第1回 C++の開発環境を整える

2014年09月25日

Swiftを試してみようなう。

第4回 Swiftでクラスを使うなう。

ISL 情報戦略研究所

pagetopこのページの先頭へ戻る