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

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

新規登録して質問してみよう
ただいま回答率
85.50%
Python 2.7

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

Python

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

Q&A

解決済

4回答

5542閲覧

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

Jay

総合スコア13

Python 2.7

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

Python

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

0グッド

0クリップ

投稿2017/07/17 11:23

編集2017/07/17 11:24

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

###例えばですが

python

1# coding: utf-8 2def circleArea(radius): 3 result=radius*radius*3.14 4 return result 5 6print circleArea(10) 7 8及び 9 10# coding: utf-8 11def circleArea(radius): 12 result=radius*radius*3.14 13 print result 14 15circleArea(10) 16 17はどちらも同じ値を返します。自分は後述のほうはすんなりと理解できるし、これのどこがだめなのか、と思ってしまいます

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

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

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

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

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

guest

回答4

0

ベストアンサー

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

  • r * r * 3.14 / 2 ---(1)
  • r * r * 3.14 / 3 ---(2)
  • r * r * 3.14 / 4 ---(3)

をそれぞれ計算したい場合はどうしますか?

メソッドが

python

1def circleArea(radius): 2 result = radius * radius * 3.14 3 return result

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

もしメソッドが

python

1def circleArea(radius): 2 result = radius * radius * 3.14 3 print result

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

投稿2017/07/17 11:51

編集2017/07/17 12:00
kmz_kappa

総合スコア35

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

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

Jay

2017/07/17 12:08

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

2017/07/17 12:15

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

2017/07/17 12:21

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

0

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

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

投稿2017/07/17 11:29

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

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

投稿2017/07/17 11:34

編集2017/07/17 11:35
退会済みユーザー

退会済みユーザー

総合スコア0

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

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

0

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

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

Python

1def circleArea(radius): 2 result = radius * radius * 3.14 3 print result 4 return result

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

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


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

Python

1def circleArea_and_print(radius): 2 result = radius * radius * 3.14 3 print result 4 return result 5 6def circleArea(radius): 7 result = radius * radius * 3.14 8 return result 9 10# 結果をみたいなぁ 11a = circleArea_and_print(3) 12 13# 結果を受け取るだけでいいな 14b = circleArea(3)

Python

1def circleArea(radius): 2 result = radius * radius * 3.14 3 return result 4 5# 結果をみたいなぁ 6a = circleArea(3) 7print a 8 9# 結果を受け取るだけでいいな 10b = circleArea(3)

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

投稿2017/07/17 12:13

編集2017/07/17 12:15
LouiS0616

総合スコア35658

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.50%

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

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

質問する

関連した質問