2016-09-26 5 views
1

時々私はと混乱して、返信文を使用するのはです。私はcodecademyでPythonのトラックをやったことがあり、私はCSクラスのオンラインとの途中にあります。時々間違っています。私はそれが何をするか、それはちょうど私が適切に配置を取得しないことです:/Pythonでreturn文をどこで使うのか混乱しています

ここでは、同じコードの短い例です。

正しい方法:

def product_list(list_of_numbers): 
    c = 1 
    for e in list_of_numbers: 
     c = c * e 
    return c 

間違った方法(私が最初にやった):これはおそらく、あなたのほとんどに愚かに聞こえる

def product_list(list_of_numbers): 
    c = 1 
    for e in list_of_numbers: 
     c = c * e 
     return c 

が、より大規模で複雑な状況で、私はそれを正しく取得混乱している。誰かがそれを私に一度明確にすることができれば、私はそれをたくさん感謝します。

+7

2番目のバージョンの 'for'ループ反復の残りの部分には、*到達する瞬間がありますか? –

+0

これは、Pythonで何がブロックになるかを理解することになります。どのようにインデントが 'for'ループの一部か' product_list'関数を決定するのか理解していますか? –

+0

'return'は関数の実行を停止させ、通常は' for'ループを使用してコードを複数回実行します。 'for'ループの内側に' return'を置くと、コードは最初の 'for'繰り返しの直後に実行を停止するので、' for'ループの外側に置いておきたいのです。 – ov1d1u

答えて

3

returnは、この関数をすぐに残しておき、それを呼び出す場所に戻ることを意味します。 すぐに機能を終了することを100%確信している場合は、returnを使用する必要があります。

あなたの例では、cの最終的な値が得られるまで関数を終了したくないと思いますので、returnをループの外側に配置する必要があります。

+0

さて、基本的にforループは 'return'ステートメントなしで無限に動作します。だから、 'return'は' break'のようなものですが、代わりに値を返します。 – Vayl

+3

@Vaylいいえ、それは無限に実行されませんでした。それは 'list_of_numbers'のすべてを反復しても終了します。しかし、ループの中に 'return'を置くと、(最初の反復で)早期に終了します。 –

+0

@Vaylいいえ、それは無限に実行されませんでした。これは、あなたが尋ねた反復の正確な回数(この場合、 'list_of_numbers'の項目数)のために実行されます。 'for'ループのスコープの中の' return'は_function_を終了させ、関数を停止する副産物のようなものとして最初の繰り返しで 'for'ループからあなたを蹴り飛ばします。 – roganjosh

1

returnがループの動作を制御することに重大な影響を与えています。その代わりに、returnが関数に適用され、主に関数を終了することによって、ループが途中で終了することがあります。

breakを使用して、forループの動作を機能自体から独立して制御できます。さらに、特定の条件(たとえば、my_func1など)に応じて、どのアクションを取るべきかに応じて、関数内に複数のreturnステートメントを含めることができます。

import random 

def my_func1(my_list, entry): 
    ''' 
    Search a list for a specific entry. When found, terminate search 
    and return the list index immediately 

    Return False if not found 
    ''' 

    print "\n Starting func1" 
    index = 0 

    for item in my_list: 
     if item != entry: 
      print "Not found yet at index: {}".format(index) 
      index += 1 
     else: 
      print "found item, at index {}".format(index) 
      print "Terminating function AND loop at same time" 
      return index 

    print "########### ENTRY NOT IN LIST. RETURN FAlSE #############" 
    return False 


a = my_func1(['my', 'name', 'is', 'john'], 'is') 
b = my_func1(['my', 'name', 'is', 'john'], 'harry') 


def my_func2(my_list): 
    ''' Iterate through a list 
    For first 4 items in list, double them and save result to a list that will 
    be returned, otherwise terminate the loop 
    Also, return another list of random numbers 
    ''' 
    print '\n starting func2' 

    return_list = [] 
    for i in range(len(my_list)): 
     if i < 4: 
      print 'Value of i is {}'.format(i) 
      return_list.append(my_list[i] * 2) 
     else: 
      print 'terminating for loop, but ** keep the function going **' 
      break 

    other_list = [random.randint(1, 10) for x in range(10)] 

    print 'Returning both lists' 
    return return_list, other_list 

c = my_func2([x for x in range(10)]) 
関連する問題