[英]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] == n
為True
,將返回計數。 如果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
一次。 如注釋中所指出的,這將從函數返回到調用者。 因此,其余代碼不會運行。
如果要返回所有相關索引,則可以:
跟蹤列表中的索引,然后在函數末尾返回列表
查看生成器並使用yield
關鍵字
假設您下班后通常在賽道上跑10圈,但老板在第4圈后打電話給您,並說“我們有緊急情況,需要您立即返回工作狀態”,那么當務之急是要超越要務來完成每一圈(至少如果您想成為一名好員工)。 Return-不是if語句本身-是導致循環結束的原因。
您的第一個問題:“ if p[count] == n
找到匹配項,則循環和過程是否停止運行?”
答案是不。 程序在遇到任何return
語句時退出find_element
函數。 在您的情況下,要么return count
,要么return -1
。
您所關心的稱為“流控制”。
For循環是一種流控制形式,可讓您進行重復。 If /(then)/ Else是進行決策的另一種形式。
python文檔(第4章)對此做了很好的介紹。
這些語句可以打破循環:
return
語句。 break
語句。 在運行時,如果其中發生未處理的異常,則循環也可能被破壞。
使用continue
語句實現相關流程。 如果你是兼職的方式進入循環迭代, continue
將跳過迭代的其余部分,並繼續下一個。
在您的特定示例中, if
語句出現在函數上下文內的循環上下文內。 return
語句不僅使我們脫離循環,而且使我們脫離函數,並設置函數返回的值。
返回中止函數內的所有其他活動,並將控制權返回給調用方。 (如juanchopanza所說)
順便說一句,您不需要保留兩個單獨的變量count
和x
。 它們是多余的。 改為這樣做:
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.