defの使い方について


python初心者です。  
defの使い方について質問させてください。

[code]

    def test():
        test = ['a', 'b', 'c']
    print(test)
    
[/code]

上のように書いて実行したところ、下のような結果になりました。

[code]

    <function test at 0x0000025BA905C1E0>
    
[/code]

以下のような結果を期待していたのですが、なぜこうならなかったのでしょうか。

[code]

     ['a', 'b', 'c']
    
[/code]

改善点を教えてください。




ふたつの勘違いがありそうです。期待する出力を返すコードはおそらくこれです。

[code]

    def test():
        return ['a', 'b', 'c']
    
    print(test())
    
[/code]

勘違いしてらっしゃいそうなのは次のふたつです。

  * 「関数そのもの」と「関数呼び出しの結果返ってきた値」を区別する。`test` は関数そのもの、`test()` は関数呼び出しの結果返ってきた値です。`<function test at 0x0000025BA905C1E0>` というのは関数そのものを `print` したときに出てくるものです。
  * 関数から値を返すには `return` を使う。また、Python では関数の中で何もせずそのまま変数に代入すると、その関数の中でだけ有効な変数（ローカル変数）に代入される。

最後に、元々のソースコードが何をしていたのか説明します。

[code]

    # 関数 test を定義
    def test():
        # ローカル変数 test にリストを代入
        test = ['a', 'b', 'c']
        # そのまま何も返さず関数終了
    
    # 関数自体を出力
    print(test)
    
[/code]




ふたつの勘違いがありそうです。期待する出力を返すコードはおそらくこれです。

[code]

    def test():
        return ['a', 'b', 'c']
    
    print(test())
    
[/code]

勘違いしてらっしゃいそうなのは次のふたつです。

  * 「関数そのもの」と「関数呼び出しの結果返ってきた値」を区別する。`test` は関数そのもの、`test()` は関数呼び出しの結果返ってきた値です。`<function test at 0x0000025BA905C1E0>` というのは関数そのものを `print` したときに出てくるものです。
  * 関数から値を返すには `return` を使う。また、Python では関数の中で何もせずそのまま変数に代入すると、その関数の中でだけ有効な変数（ローカル変数）に代入される。

最後に、元々のソースコードが何をしていたのか説明します。

[code]

    # 関数 test を定義
    def test():
        # ローカル変数 test にリストを代入
        test = ['a', 'b', 'c']
        # そのまま何も返さず関数終了
    
    # 関数自体を出力
    print(test)
    
[/code]

