簡體   English   中英

返回函數如何在循環和過程中工作?

[英]How does the return function work within a loop and procedure?

我認為無論循環的條件如何,for循環都會遍歷列表中的所有元素。
對於以下問題-我希望打印輸出為6,-1,
最后一個位置,其中p[count]==n ,然后是循環結束后的return語句。

if p[count]==n找到匹配項,則循環和過程是否繼續運行超過我的返回函數?
有人對此工作原理有很好的解釋嗎?

def find_element(p,n):
    count=0
    for x in p:
        if p[count]==n:
            return count
        count=count+1
    return '-1'

print find_element(['1', '2', '1', '2', '2', '1', '2'],'2')

當執行一個函數時,遇到的第一個return語句將終止該函數,並且將給return語句的表達式結果返回給調用者。 在這種情況下,當p[count] == nTrue ,將返回計數。 如果for x in p:循環中的for x in p:耗盡,而找不到合適的元素,則該函數僅返回-1。

不管怎么說,您所擁有的循環並沒有完全按照函數建議的方式運行。.如果您希望找到具有值n的每個索引的列表,您將需要這樣的東西:

def find_element(p,n):
    return [i for i,x in enumerate(p) if x == n]

print find_element(['1', '2', '1', '2', '2', '1', '2'],'2')
#[1, 3, 4, 6]

函數只能調用return一次。 如注釋中所指出的,這將從函數返回到調用者。 因此,其余代碼不會運行。

如果要返回所有相關索引,則可以:

  1. 跟蹤列表中的索引,然后在函數末尾返回列表

  2. 查看生成器並使用yield關鍵字

假設您下班后通常在賽道上跑10圈,但老板在第4圈后打電話給您,並說“我們有緊急情況,需要您立即返回工作狀態”,那么當務之急是要超越要務來完成每一圈(至少如果您想成為一名好員工)。 Return-不是if語句本身-是導致循環結束的原因。

您的第一個問題:“ if p[count] == n找到匹配項,則循環和過程是否停止運行?”

答案是不。 程序在遇到任何return語句時退出find_element函數。 在您的情況下,要么return count ,要么return -1

您所關心的稱為“流控制”。

For循環是一種流控制形式,可讓您進行重復。 If /(then)/ Else是進行決策的另一種形式。

python文檔(第4章)對此做了很好的介紹。

這些語句可以打破循環:

  1. return語句。
  2. break語句。

在運行時,如果其中發生未處理的異常,則循環也可能被破壞。

使用continue語句實現相關流程。 如果你是兼職的方式進入循環迭代, continue將跳過迭代的其余部分,並繼續下一個。

在您的特定示例中, if語句出現在函數上下文內的循環上下文內。 return語句不僅使我們脫離循環,而且使我們脫離函數,並設置函數返回的值。

返回中止函數內的所有其他活動,並將控制權返回給調用方。 (如juanchopanza所說)

順便說一句,您不需要保留兩個單獨的變量countx 它們是多余的。 改為這樣做:

def find_element(p,n):
    try:
        return p.index(n)
    except ValueError:
        return -1

有用:

>>> print find_element(['1', '2', '1', '2', '2', '1', '2'],'2')
1
>>> print find_element(['1', '2', '1', '2', '2', '1', '2'],'4')
-1

您的for循環嘗試執行的操作是檢查p[count]是否等於n ,如果是,則停止並退出循環,函數結束並返回count的當前值。 但是,如果找不到匹配項,則循環將退出,並且您的函數將返回-1

另外,您可以/應該使用count += 1來增加count。

在Python中,就像所有(大多數)語言一樣,return確實返回值(sic)並終止函數(或過程,如在問題中所稱;但是函數或calleble更為正確)。

但是,Python確實可以選擇它們分開 通過使用' yield ':將返回值,但是(某種)繼續循環。 注意:必須在循環中調用函數(或生成器/迭代器),以逐個返回(屈服)每個值。

這有點高級,因此我留給讀者查找文檔和好的示例

最后一句話:使用計數呃,如不符合Python! 請改用枚舉助手。

def find_element(p,n):
    for count, elm in enumerate(p):  # p is a list or sequence 
        if elm == n                       # maybe 'is' is better as '=='
            return count
    return -1                               # however, returning None is  more Pythonic

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM