プログラミング初心者です。pythonを勉強しています。
戻り値というのがよくわかりません。
・自動販売機でいうと、お金が引数で、出てくるジュースが返り値
・返り値はほかの関数でも再利用できるようにするもの
という説明をうけました。
それならばなぜ、以下のコードで変数mpgが宣言されてない、と言われるのでしょうか?
関数calculate_miles_per_gallonの中で宣言されていますよね?それをprint関数で再利用しているものと思っているのですが。
def calculate_miles_per_gallon(miles_driven, gallons_used):
mpg=miles_driven / gallons_used
mpg = round(mpg ,1)
return mpg
miles = 500
gallons = 14
calculate_miles_per_gallon(miles,gallons)
print (mpg)
よろしくお願いします。
No.3ベストアンサー
- 回答日時:
変数のスコープというものを既に勉強されていますか?
それを知っていれば理解できると思います。
関数calculate_miles_per_gallonの定義の中にある変数mpgは
関数内のローカル変数であり、print(mpg)の変数とは別ものです。
----test.py (段付の為全角スペースを使用しているので実行時は要置換)
def calculate_miles_per_gallon(miles_driven, gallons_used):
mpg=miles_driven / gallons_used
mpg = round(mpg ,1)
return mpg
# ↑ここまで関数の定義、ここまでのmpgはローカル変数であり関数の中にしか存在しないので
# MAIN処理からは見えない
# ↓ここからMAIN処理(関数を呼んで戻り値を表示する)
miles = 500
gallons = 14
mpg = calculate_miles_per_gallon(miles,gallons) # 関数の戻り値をMAINの変数mpgに代入
print(mpg) # 関数の戻り値を代入しないと、いきなり登場したmpg(値不明)の値を表示させることになる
---- ここまで
なるほど、ありがとうございます!
関数内で宣言された変数は外では使えないというとこは理解しました。
ついでで一つ質問してもよろしいでしょうか
変数MPGが関数外で使えないのであれば、「return」が返しているのは
「変数mpg」ではなく、関数calculate_miles_per_gallon()で宣言された変数mpgの中に入っている数値「そのもの」
という理解でよろしいでしょうか?
No.6
- 回答日時:
関数に間違いはないし、戻り値の戻し方もこれでいいんですが
使い方が違う。
miles = 500
gallons = 14
print(calculate_miles_per_gallon(miles,gallons))
とすると 35.7142 とか表示されます。
変数mpgを戻すんじゃなくてmpgの値を戻す。わかりますか?
No.5
- 回答日時:
No.3です。
> 変数MPGが関数外で使えないのであれば、「return」が返しているのは
> 「変数mpg」ではなく、関数calculate_miles_per_gallon()で宣言された変数mpgの中に入っている数値「そのもの」
> という理解でよろしいでしょうか?
その通りです。
No.4
- 回答日時:
> 戻り値というのがよくわかりません。
> ・自動販売機でいうと、お金が引数で、出てくるジュースが返り値
> ・返り値はほかの関数でも再利用できるようにするもの
> という説明をうけました。
こういう訳の分からない説明になっていない話をするから聞く側は理解できない。。。(^^;
Pythonでは処理のかたまりを「関数」というものにすることが出来ます。
関数には名前があって、その関数の機能を使いたい側は名前を指定して呼び出します。
関数での処理結果を呼び出し元へ返す(教える)方法にはいろんな方法がありますが、その一つが「戻り値」です。
一般にはその関数の処理が正常終了したか異常終了したかを伝えるのに使用することが多いです。
以下の説明が参考になるでしょう。
https://www.sejuku.net/blog/40791
> それならばなぜ、以下のコードで変数mpgが宣言されてない、と言われるのでしょうか?
これは以下の部分での変数未宣言のエラーを言われていますね?
> calculate_miles_per_gallon(miles,gallons)
> print (mpg)
でしたらこれと関数の戻り値は何も関係ありません。
これは「ある場所で宣言された変数の使用範囲」(←スコープと言います)のお話です。
で、「関数の中で宣言された変数」(←ローカル変数)はその関数の中でしか使用できません。
ですからある関数が返した戻り値を、その関数を呼び出した側で変数に受け取る際、その変数は呼び出し元で宣言されているか、そのプログラム内であればどこからでも使用(代入&参照)出来るグローバル変数でなければなりません。
非常に基本的なところを理解されないまま学習を進めておられるようにお見受けしますので、Pythonの入門書か解説書を購入していつでも多ページを参照できるようにして学習されるのがよいと思います。
初心者用の解説をしているWebサイトも多くありますが、やはり本があった方が勉強しやすいと考えます。
参考まで。
No.2
- 回答日時:
私はExcelのマクロがpythonになったら勉強しようかと思っているところですが、pythonって他のいろんな言語と同じくローカル変数とグローバル変数の概念があり、関数内で定義なり宣言した変数はローカル変数になるから、その関数内でしか通用しません。
なので関数の外からその値を見ることはできません。それに変数mpgは関数の戻り値に格納されている、すなわち関数calculate_miles_per_gallonを参照すれば、その値がゲットできます。なもんで…
calculate_miles_per_gallon(miles,gallons)
print (mpg)
ではなく、
print (calculate_miles_per_gallon(miles,gallons))
と書けば良いのでは?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- アプリ 歩数アプリMilesが移動が0のまま 2 2022/05/08 14:25
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- その他(プログラミング・Web制作) pythonにおける単方向リストの実装について 4 2022/07/13 12:34
- C言語・C++・C# 競技プログラミングに関する質問です。 3 2022/04/03 19:51
- その他(プログラミング・Web制作) pythonのmap、結果の利用は1度だけ? 5 2022/06/11 12:33
- Ruby プログラミング 3 2023/06/09 14:30
- JavaScript カラーミーショップのsectionループ内で、[引数][戻り値]ありの関数的な処理を行いたいです。 1 2022/05/07 19:39
- その他(プログラミング・Web制作) VScodeでpythonプログラムの関数を実行したい 2 2022/07/13 19:24
- その他(プログラミング・Web制作) Pythonのライブラリ、randomについて 3 2022/09/20 14:30
- その他(プログラミング・Web制作) 【Python初学者】以下コードについて教えていただきたいです 4 2023/04/19 13:01
関連するカテゴリからQ&Aを探す
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
「次の10件を表示する」のよ...
-
PHPでwait処理ってできます?
-
<A href ~で複数の値を渡したい
-
null代入とunset()の違いについて
-
文字列チェックの動作がおかし...
-
日付を基にした乱数生成
-
phpの質問です
-
if (isset($_a)&&$_a)この意味は
-
<python>戻り値
-
「ソースコードは 左~右へと読...
-
Dosブロンプトでtabを出力したい
-
wordの差し込み印刷で文字...
-
「取得先」という表現について
-
VBA コレクションに2次元配列...
-
DTOとEntityの差は何ですか。
-
findstrのerrorlevel
-
【C#】DataGridViewの最大列数...
-
開始と終了を指定して、その間...
-
shシェルスクリプト 空白行の...
-
switch()文で値の大小比較
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
<A href ~で複数の値を渡したい
-
日付を基にした乱数生成
-
テーブルに送信ボタンをつける
-
「次の10件を表示する」のよ...
-
PHPでwait処理ってできます?
-
なぜエラーが出るのか分からな...
-
null代入とunset()の違いについて
-
PHPのif文「POSTしていな...
-
if (isset($_a)&&$_a)この意味は
-
microtime関数は、結構イイカゲ...
-
アクセスキーについて
-
POSTされたかどうか確かめる方...
-
複合演算子につきまして!
-
Luaにて、and or の組み合わせ...
-
$_SERVER["QUERY_STRING"]の仕...
-
PHPでのNULLの正規表現
-
PHPのGETパラメーターの検索値...
-
データ)表示件数について
-
SQLにあるデータをWEB画面に出...
-
vbYesNoの使い方
おすすめ情報