@hina_fugashi (在原 ひな)

Are you sure you want to delete the question?

If your question is resolved, you may close it.

Leaving a resolved question undeleted may help others!

We hope you find it useful!

Pythonの戻り値について

Pythonの勉強を始めたばかりなのですが、
Pythonの戻り値について理解できないです。
どなたか簡単にわかりやすく説明していただけないでしょうか?

0 likes

プログラムの基本は データ入力 ⇒ データ処理 ⇒ データ出力。
関数の場合、データ入力は引数、データ処理は関数の処理、データ出力は戻り値(return値)。

数学の授業で習った関数式 f(x) = 2x + 3 の例
def f(x):
    return 2*x + 3

print(f(5))

f(5) で関数を呼び出していて、引数xに5が入力され、2*x + 3 でデータ処理され、戻り値は 2*5 + 3 を計算した結果の 13
print関数の引数に13が渡り、13が表示されます。

1Like

return と yield の2つあり

def func1():
    print(1)
    retrun
func1()

1   これは何も返さない!ではなく、
   制御を返すretrunです。

def func2():
    retrun 2
x = func2()
print(x)

2  これは基本の基本 2を返して、変数 x で受け取っています。

def func3():
    retrun 1, 2
x, y = func3()
print(x, y)

1 2  これは、2個の戻りを変数 x,yで受け取っています。

for y in [0, 1, 2]:
    print(y)

これを無理やり関数化します。

def func4():
    x = [0, 1, 2]
    retrun x

for y in func4():
    print(y)

0
1
2  これはfunc5()のゼネレータを説明するための前座で、実用的かは自信がありません。x変数 で リスト形式で受け取っています。次のfunc5()と結果は同じです。

def func5():
    for x in [0, 1, 2]:
        yield x

for y in func5():
    print(y)

0
1
2  さて、ゼネレータ、イテレータです。

retrunは関数から制御を全て返すのに対し
yield は for x in [0, 1, 2]: が終了するまで完全に制御を返しません。

for y in range(3): 
    print(y)

はretrunで [0, 1, 2]と制御をかえしますが、
yieldは

   for x in [0, 1, 2]:
    ↓
   for y in func5():

xの値をyにコツコツ、1個、1個、連動しながら、制御を含め、交互に返しながら進行します。

用途は例えば、csvファイルを読み取り、HTMLを生成する際、関数側でcsvファイルを読み取り、変数xで返し、変数yからHTMLを生成することができます。

もし、csvファイルでなく、jsonやDBに変わった場合でもHTMLを生成するコードは修正する必要がなくなります。

思い付くのは5つでしょうか?

1Like

Your answer might help someone💌