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

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

ただいまの
回答率

87.48%

Python関数定義(変数の使い方)について質問です。初歩的な質問かもしれないのですが、宜しくお願いします。

解決済

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,087

score 31

 前提・実現したいこと

Pythonのリストにある整数の合計値を計算する関数を定義する練習問題に関して2点質問があります。
①が模範解答なのですが、これを②のように書き換えても同じ戻り値を出すことが出来ました。

≪1≫
①の回答で()の中はhandなのに、return以下のコードではplayer_handと異なる名前になっています。これを②のようにaaaに変えても戻り値を出すことが出来ました。なぜ()と同じhandにしなくても正しい結果が出てくるのでしょうか?

≪2≫
①ではplayer_sum~という変数を1行多く書き加えられているのですが、②のように直接入れた方がシンプルで判りやすいのではないのかなと感じました。
①の模範解答のように書く理由(メリット)は何なのでしょうか?

どうぞよろしくお願いします。

 発生した戻り値・エラーメッセージ

②②ともに
リストの合計は 36

 該当のソースコード

def get_sum(hand):
    result=0
    for num in hand:
        result+=num
    return result

player_hand=[1,5,20,10]
player_sum=get_sum(player_hand)
print('リストの合計は', player_sum)

def get_sum(hand):
    result=0
    for num in hand:
        result+=num
    return result

aaa=[1,5,20,10]
print('リストの合計は', get_sum(aaa))
  • 気になる質問をクリップする

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

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

    クリップを取り消します

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

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

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

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

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

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

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

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

    質問の評価を下げる

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

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

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

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

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

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

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

    詳細な説明はこちら

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

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

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

回答 2

checkベストアンサー

+7

≪1≫
①の回答で()の中はhandなのに、return以下のコードではplayer_handと異なる名前になっています。これを②のようにaaaに変えても戻り値を出すことが出来ました。なぜ()と同じhandにしなくても正しい結果が出てくるのでしょうか?

関数の引数リストの引数を仮引数、実際に渡す引数を実引数と呼びます。
今回の場合、handが仮引数でplayer_hand, aaaが実引数です。
これらの名前は一致しても/しなくてもかまいません。

関数は汎用的に使えることがしばしば要求されます。
もし実引数名が仮引数と一致しなければならないのなら、非常に使いづらいと思いませんか。

player_hand = [1, 2, 3, 4, 5]
enemy_hand  = [2, 4, 6, 8, 0]

hand = player_hand
player_sum = get_sum(hand)

hand = enemy_hand
enemy_sum = get_sum(hand)

↑ 実引数と仮引数の名前が同じでないといけないと、こんなことになる
↓ 実際は汎用的に関数を使える

player_hand = [1, 2, 3, 4, 5]
enemy_hand  = [2, 4, 6, 8, 0]

player_sum = get_sum(player_hand)
enemy_sum  = get_sum(enemy_hand)

≪2≫
①ではplayer_sum~という変数を1行多く書き加えられているのですが、②のように直接入れた方がシンプルで判りやすいのではないのかなと感じました。

その場で出力して終わりなら2番の方が分かりやすいでしょう。

①の模範解答のように書く理由(メリット)は何なのでしょうか?

その後再利用することを見越しているのかもしれません。

player_sum = get_sum(player_hand)
print('リストの合計は', player_sum)

if player_sum >= 20:
    print('Great!')

あるいは、説明変数(意味を明確にする目的で設けられる変数)としての役割を期待しているのかも。
これくらいの小さなプログラムじゃ利益はあんまり感じられませんが。

投稿

編集

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/14 21:40

    詳細に解説して下さりありがとうございました。
    とてもクリアに理解することが出来ました!

    キャンセル

+1

(1)
[1,5,20,10]というリストにplayer_handという名前を付けているのですが、実はこの名前はなんでもいいんです。例えば、

player_hand=[1,5,20,10]
another_hand=player_hand

とすれば、another_handもplayer_handと同じ[1,5,20,10]を指すようになります。関数の引数の場合もこれと同じで、関数の中ではplayer_handをhandと便宜的に呼ぶことにする、と決めているわけですね。それが

def get_sum(hand):

の部分です。便宜的に呼ぶ名前なので、それがaaaでもbbbでもいいわけです。

(2)
②のように書くと、関数を呼び出して計算した結果を使い回せなくなってしまうかなと思います。もし、printで表示させるためだけに必要なら②でもいいですが、ソースコードの他の場所でも使いたければ①のように変数に代入しておくと、一度計算した結果を他の場所でも使いまわせるようになります。同じ計算をわざわざ何度もやらずに済みますね。

投稿

  • 回答の評価を上げる

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

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

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

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2018/02/14 21:42

    詳しく解説して下さりありがとうございます。
    初心者にもわかるように丁寧に解説して下さり感謝します!

    キャンセル

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

  • ただいまの回答率 87.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

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

  • トップ
  • Pythonに関する質問
  • Python関数定義(変数の使い方)について質問です。初歩的な質問かもしれないのですが、宜しくお願いします。