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

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

ただいまの
回答率

91.74%

  • Python

    3028questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 2.7

    809questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

returnの使い方がどうしても理解できない

解決済

回答 4

投稿 2017/07/17 20:23 ・編集 2017/07/17 20:24

  • 評価
  • クリップ 0
  • VIEW 195

Jay

score 3

疑問点

初心者なのですが、わざわざreturnを使って関数を作る必要があるのかどうしても理解できません。どのサイトもreturnは値を戻す、返すと表記されているのですが自分は別にreturnを使わなくてもよいと感じてしまいます。なぜ、使わねばいけないのか、使わないと作れない表現があるのか、わかりやすく説明して頂けると幸いです。

例えばですが

# coding: utf-8
def circleArea(radius):
    result=radius*radius*3.14
    return result

print circleArea(10)

及び

# coding: utf-8
def circleArea(radius):
    result=radius*radius*3.14
    print result

circleArea(10)

はどちらも同じ値を返します。自分は後述のほうはすんなりと理解できるし、これのどこがだめなのか、と思ってしまいます
  • 気になる質問をクリップする

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

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

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 4

checkベストアンサー

+2

処理結果が print のみに使われている場合はどちらでも同じだと思ってしまいますよね。
例えば

  • r * r * 3.14 / 2 ---(1)
  • r * r * 3.14 / 3 ---(2)
  • r * r * 3.14 / 4 ---(3)
    をそれぞれ計算したい場合はどうしますか?

メソッドが

def circleArea(radius):
    result = radius * radius * 3.14
    return result


としてあれば、
(1) circleArea(r) / 2
(2) circleArea(r) / 3
(3) circleArea(r) / 4
と書くだけで、それぞれを計算することができます。
(計算結果を出力したければ、print circleArea(r) / 2などとしてください。)

もしメソッドが

def circleArea(radius):
    result = radius * radius * 3.14
    print result


であった場合、(1)~(3)のように簡単に面積を計算することができなくなってしまいます。

投稿 2017/07/17 20:51

編集 2017/07/17 21:00

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

  • 2017/07/17 21:08

    似たような計算がしたいが、詳細が異なる。その上で同じ箇所は纏めて簡単に使えるようにしたいからそこは関数にした。ただそれだけだと関数内で出した値が使えないからreturnで"戻す"。こんな感じの認識であってますかね…?

    キャンセル

  • 2017/07/17 21:15

    その認識で合っています。
    関数の目的は、「同じ処理を何度も書かなくても済むようにする(処理を再利用できるようにする。いわゆるDon't repeat yourself (DRY) )」「処理の目的を明快にする(例えばcircleAreaという名前が付いていれば、面積を計算する処理だと分かりますよね)」などだと思っておけば問題ないです。

    キャンセル

  • 2017/07/17 21:21

    ようやく、自分の中でしっくりきました。ありがとうございます

    キャンセル

+2

「同じ値を返す」というのは、print することではありません。
処理結果を返す。ということです。

再帰処理とかを見ると、理解がすすむと思います。
*余計混乱するかもしれませんが^^; 

投稿 2017/07/17 20:29

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

+1

例えばcircleAreaメソッドの処理結果に1を足したいとき
下の書き方だと1を足すことができないと思います。

投稿 2017/07/17 20:34

編集 2017/07/17 20:35

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

0

関数の有用性については、他の回答の通りだと思います。
ですので、もうちょっと漠然とした回答をしてみます。

私が関数やクラスを設計/定義するときは、その役割に注目します。
円の面積を計算することが仕事のcircleAreaさんがいて、その人に仕事を委託するイメージです。
例えば次のコードを書けば、質問者様の挙げたコード両方の利点が引き継げるように思えます。

def circleArea(radius):
    result = radius * radius * 3.14
    print result
    return result

しかし、この関数は多分にお節介です。名前からは想像もつかない、print業務も行ってしまいます。
この関数を呼び出すのが数回なら良いですが...
大規模な計算をするときに、毎回面積を表示されてはたまったものではありません。

関数は、要求されるだけの、最低限の機能を持つべきなのです。


次の二つのコード、後者の方がシンプルですよね。役割が明確なためです。

def circleArea_and_print(radius):
    result = radius * radius * 3.14
    print result
    return result

def circleArea(radius):
    result = radius * radius * 3.14
    return result

# 結果をみたいなぁ
a = circleArea_and_print(3)

# 結果を受け取るだけでいいな
b = circleArea(3)
def circleArea(radius):
    result = radius * radius * 3.14
    return result

# 結果をみたいなぁ
a = circleArea(3)
print a

# 結果を受け取るだけでいいな
b = circleArea(3)

文法的な基礎を学んだあとは、このような認識の差があるかないかで大分差がつくかと思います。
『モジュール化』とか調べると色々出てきますよ。

投稿 2017/07/17 21:13

編集 2017/07/17 21:15

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    以下のような回答は評価を下げられます

    • 間違っている回答
    • 質問の回答になっていない投稿
    • 不快な投稿

    評価を下げる際はその理由をコメントに書き込んでください。

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

ただいまの回答率

91.74%

関連した質問

  • 解決済

    pythonのエラー

    testThreadが見つからないというメッセージが出てきたのですが、どこに問題があるのでしょうか? よろしくお願いします コード #-*- coding utf-8-*-

  • 解決済

    julius音声認識結果だけを取り出すpython言語プログラム

    前提・実現したいこと 今のコードを実行するとjulius規程の結果が帰って来ます。 そこで、文字列結果だけを取りたいですが、どうすればいいですか? 該当のソースコード

  • 解決済

    Python - Tkinter ボタンのコマンドが変わってしまう

    ※つまづいているのはPythonの仕様を僕が知らないからかもしれませんので、Tkinterをご存知でない方も一読いただければと思います。初心者ですが、よろしくお願いします。

  • 解決済

    pythonで実行時間を求めたい

    実現したいこと 10種類の疑似乱数をバブルソートで実行。 その実行時間をしりたい。 エラーメッセージ t=timeit.Tiimer("Bublesort(Random

  • 解決済

    AttributeError: 'Cifar10Reader' object h...

    AttributeError: 'Cifar10Reader' object has no attribute 'bytestream'  のエラー が出ました。 reader.

  • 解決済

    Pythonのthreadingにおける、終了時の処理

    前提・実現したいこと Pythonを使って、動画や画像を表示するGUIを作っています。その中で、みなさまのご支援を頂ながらカメラの画像を取り込んで再生できるところまで来ました。

  • 受付中

    バブルソートでカウントができない

    バブルソートでカウントができないです。 バブルソートを実装したいです。 num_arrayを何回入れ替えたら元の順序である[1,2,3,4,5]に戻るかをcountでカウントして出

  • 解決済

    pythonのreturnとprintの違い

    前提・実現したいこと 関数の中でreturnの代わりにprintを使っても良いのでしょうか? また、何が違うのでしょうか? (例)PHP(CakePHP)で●●なシステムを作ってい

同じタグがついた質問を見る

  • Python

    3028questions

    Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

  • Python 2.7

    809questions

    Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。