前提・実現したいこと
Pythonの関数について、関数内にprintがある際は実行の際にprintが不要な理由を伺いたく思います。(該当のソースコード欄に疑問が浮かんだ関数の例を記載しています)
背景としてPythonでデータを出力する際にはprintを利用すると学んだことから、関数の実行時にも必ずprintが
必要ではないかと考えていたところ、関数内に同表記がある場合には関数名を書くだけで実行される例を見つけ、疑問を感じたことがあります。
該当のソースコード
python
1# printが必要な関数 2def add(a,b): 3 c = a + b 4 return c 5print(add(3,4)) 6 7# 不要な関数 8def add(a,b): 9 d = a+b 10 print(d) 11add(5,2) 12 13ソースコード
試したこと
printの使い方についてググりましたが、print内の値の書き方ばかりが見つかり知りたいことにあった答えを
見つけられませんでした。
補足情報(FW/ツールのバージョンなど)
実行環境: Jupyter Notebook
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

回答6件
0
printは「指定した値を印字する」ことができるPythonの組み込み機構(Python3では関数)です。
質問者さんのコードにあるaddも関数ですが、一般に関数は「その本体でなんらかの計算や処理(印字も含む)を行い結果の値を呼び出し元に返す」ことができるものです。
値の印字が目的なら
・呼び出された関数内で興味のある値を計算してそれを印字(print)し、値として何も返さない(別に返してもよいが)
・呼び出された関数内で興味のある値を返し(returnし)、呼び出し元でその値を印字する
のどちらでも同じ結果(興味のある値を印字すること)ができます。
普通どちらが自然かといえば後者の方であることが多いでしょう。
「add」という関数名を考えてみてください。この関数の機能は「加算すること」だと考える人が多いでしょう。addが求めた値をそのままreturnするのが自然です。加算してそれを印字するところまでがこの関数の機能なら「add_and_print」というような名前の機能ということになりますが「加算はしてほしいけどいちいち印字してほしくない」場合も多いです。
python
1def add(a, b): 2 d = a + b 3 print(r)
こうなっていると「1と2を加算してさらに3を加算する」というような応用がまったくできません。そういう応用ができるように作るには「関数内で余計なこと(print)をせずに計算結果だけを返す」方がよいです。
python
1def add(a, b): 2 d = a + b 3 return d 4 5r = add(1, 2) # まず結果の値を求める 6print(r) # それを印字したいならそうすればいい 7r = add(add(1, 2), 3) # まず結果の値を求める 8print(r) # それを印字したいならそうすればいい
投稿2019/05/09 00:29
総合スコア18404
0
「実行するかどうか」と「画面表示するか」は関係有りません。
例えば、
Python
1import os 2def delete_file(fn): 3 os.remove(fn) 4 5delete_file("foo.txt")
というコードであれば、print
が一切ありません。
画面表示したければ、したいタイミングでprint
するということです。
画面表示したい場合に、関数の中で画面出力するのか、関数を呼んだ側で画面出力するのかは、関数の機能を何であると設計するかに依ります。
・足し算をする関数
・足し算をして結果を画面出力する関数
投稿2019/05/09 01:53
総合スコア86295
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。

0
呼び出し元に返り値を返してから表示するか、関数の中で表示してしまうかの違いだけですが、そんなに違和感あるでしょうか・・・?
print(add(3,4))
がなにをしているのか、という点の理解が曖昧なのかもしれません。これが実行される順序としては、大雑把には
- pythonインタプリタが「
print
関数があるのでこれを実行しよう」と認識する print
関数の実行の前に引数を評価する必要がある。引数のadd(3,4)
という式を評価するadd
関数が実行され、return
文によって7
という返り値が返る。ここで引数の評価が終わる- 結果的に
print(7)
に置き換えられ、7が表示される
という流れになります。
投稿2019/05/09 00:20
総合スコア30939
0
... 関数の実行時にも必ずprintが必要ではないか ...
このようなルールはありません。
プログラムは一行ずつ実行されていきます。一連の処理中で print があれば表示が実行させるだけです。print 文が関数の中だとか、外だとかは関係がありません。
print文が関数呼び出し時に行うのも、関数に中で orint を行うのも自由です。
両方で print するようにすることさえも。
初歩的なデバッグ手法として、プログラムの挙動を調べるために、print 文を入れて変数の値を表示させたり、処理が通ったことを orint 文で確認したりすることさえあります。
投稿2019/05/09 22:09
総合スコア22328
0
ベストアンサー
Python
1#-------add関数開始--------- 2 3def add(a,b): 4 c = a + b 5 return c # 計算結果を呼び元にかえしているだけ 6 7#-------add関数終了--------- 8 9print(add(3,4)) # 計算結果として返された値を表示している 10 11 12 13#-------add関数開始--------- 14def add(a,b): 15 d = a+b 16 print(d) # 引数として渡された数字を足したものを関数内で表示 17 18#-------add関数終了--------- 19 20add(5,2) # 関数に計算してほしい数字を渡しているだけ(関数を呼んでいるだけ) 21
ちょーかんたんなお話で、
やっていることはまぁ一緒です。
関数の中でprint()するか、関数では計算結果を返すだけで別のところで計算結果を出力するか、
たったそれだけの違いです。
難しく考えすぎなのでは?
追記
関数の実行時にも必ずprintが
必要ではないか
↑に関して何か勘違いしているようですが、
必ず何かを出力する関数とかうざいだけじゃないですか?
ただ計算してほしいだけの関数でprint()はいらないですよね。
計算した結果を 出力したい時だけ print()がいるんですよ
計算してほしいだけ のものではprint()はもちろん不要です。計算してほしいだけなんですもん。
もしかして関数を実行するときは必ずprint()がいると勘違いしているのでしょうか。
質問文からそんな感じがしてきました。
実際に関数を実行(呼び出して処理)しているのは↓のコードですよ
Python
1add(5,2)
その実行結果を出力したい時は、 add() を print() で囲います。
print()って見方を変えれば出力 関数 みたいなものなので
Python
1print( add(5,2 ) ) 2 3# ↓書き換えるとこんな感じ 4 5print( 7 ) #add(5, 2)の計算結果(返り値)=7
といった感じに print関数に出力してほしいものを渡してるだけです。
投稿2019/05/09 00:19
編集2019/05/09 00:33総合スコア2343
0
Pythonでデータを出力する際にはprintを利用すると学んだことから、関数の実行時にも必ずprintが
必要ではないか
どうしてそう考えたのでしょうか。関数の中でも外でも、print
があればそこで出力が行われます。
投稿2019/05/09 00:19
総合スコア146564
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/14 00:13
2019/05/14 00:57