質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

456閲覧

python returnに関して

hiro_shoubou

総合スコア9

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2018/07/25 11:00

returnでの結果がなぜ違うのか教えてください

入門python3という書籍でプログラミングを独学しており
デコレータを学習中にどうしても理解できない部分がありましたので
質問させて頂きました

対話モードで実行した結果表示と
スクリプトファイルで実行した結果表示が異なります
なぜreturn resultの返り値が対話モードでは表示され
スクリプトファイルでは表示されないんでしょうか?

発生している問題

対話モードでの実行結果
Running function: add_ints
Positional argument: (3, 5)
Keyword argumetn: {}
Result: 8
8

スクリプトファイルでの実行結果
Running function: add_ints
Positional argument: (3, 5)
Keyword argument: {}
Result: 8

python

1def document_it(func): 2 def new_function(*args, **kwargs): 3 print('Running function:', func.__name__) 4 print('Positional argument:', args) 5 print('Keyword argument:', kwargs) 6 result = func(*args, **kwargs) 7 print('Result:', result) 8 return result 9 return new_function 10 11@document_it 12def add_ints(a,b): 13 return a + b 14 15add_ints(3, 5) 16

試したこと

pycharmで書いて実行してみましたが、スクリプトファイルと同じ結果でした
自身で色々検索してみましたが、解決に至りませんでした

補足情報(FW/ツールのバージョンなど)

python3.6.1を利用しています

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

デコレータはあまり関係ないですね。
対話モードだと、代入していない場合かつNoneではない場合にreturn結果を表示するようになっています。

python

1>>> def func(a): 2... return a 3... 4>>> func(0) 50 6>>> func(None) # 何も表示しない 7>>> a = func(0) # 何も表示しない 8>>>

また、どの変数にも代入しない場合かつreturnがNoneでない場合、対話モードでは実は_という変数へ代入が行われます。(最後の結果のみ)

python

1>>> func(0) 20 3>>> print(_) 40

これを踏まえて、スクリプトと対話で同じ結果をするには、代入するか明示的に出力させるかです。

python

1>>> a = func(0)

or

python

1>>> print(func(0)) 20

投稿2018/07/25 11:14

編集2018/07/25 11:30
tachikoma

総合スコア3601

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro_shoubou

2018/07/25 11:32

自分が何を理解していなかったのか気付ける回答して頂き大変助かりました。 ありがとうございました!
guest

0

デコレータや関数に関係なく、単に対話モードの仕様です。
対話モードで式を評価すると、その値がNoneでない限り表示するようになっているだけです。

Python

1>>> 'spam' 2'spam' 3>>> 4>>> 42 542 6>>> 7>>> def func(): 8... return 42 9... 10>>> func() 1142 12>>> 13>>> def func(): 14... return None 15... 16>>> func() 17>>>

投稿2018/07/25 11:11

LouiS0616

総合スコア35660

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

hiro_shoubou

2018/07/25 11:35

すぐに回答して頂きありがとうございました! 仕様と理由に加えて例も書いて頂いたおかげでスッキリできました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問