61622


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

[code]

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

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

[code]

    <function test at 0x0000025BA905C1E0>
    
[/code]

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

[code]

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

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


CC BY-SA 4.0
2019-12-20T10:34:26.207
61620
2019-12-20T10:57:33.413
36978
question
python
defの使い方について


以下2点が原因です。

  * `print()`の`test`に`()`が付いていないので関数呼び出しになっていない。`test`関数の情報を`print`することになっている
  * `test`関数が戻り値を返していない。

このように修正すると良いでしょう。

[code]

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

* * *

ちなみに、`test = ['a', 'b', 'c']`(関数名 =
値)で戻り値を設定できる言語があって、それはVisualBasicやVBAです。それらの記憶があって、このような記述になったのかもしれませんね。  
[Function プロシージャ Visual Basic | Microsoft Docs](https://docs.microsoft.com/ja-
jp/dotnet/visual-basic/programming-guide/language-
features/procedures/function-procedures)  
[Functionプロシージャ - プロシージャ - Excel
VBA入門](https://www.officepro.jp/excelvba/sub/index6.html)


CC BY-SA 4.0
2019-12-20T10:41:43.503
61621
2019-12-20T10:57:33.413
2019-12-20T10:57:33.413
26370
26370
61620
answer


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

[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]


CC BY-SA 4.0
2019-12-20T10:45:38.773
61622
2019-12-20T10:45:38.773
19110
61620
answer