# -*- coding:utf-8 -*-測試**:importos
importtime
file_list =
deffindfile(path):
listfile =os.listdir(path)
for file inlistfile:
try:
file =os.path.join(path,file)
ifos.path.isfile(file):
yieldfile # test1
#print(file.decode('gb2312'))
else:
findfile(file)
exceptwindowserror,e:
# 捕獲系統不允許訪問的資料夾導致的異常,會讓程式無法進行下去
# 將不允許訪問的資料夾,直接跳過該資料夾
print(e)
continue
exceptexception,e:
print(e)
start =time.time()然後執行就會只是將輸入路徑下的所有檔案列舉出來而已,但是沒有將其下的目錄下的檔案列舉出來,如圖:print('
start time :
' +str(start))
t = findfile('
h:\\python')
for i in
t:
try:
print(str(i).decode('
gb2312'))
except
unicodedecodeerror:
pass
print('
use time :
' + str(time.time() - start))
但是在上述**中,修改一下**,將yield file這一句注釋,改用下面那一句後,即使用乙個列表將所有結果匯集在一起後,然後測試,測試**如下:
start =time.time()這次測試是可以正常顯示所有資料夾下的所有檔案的,如圖:print('
start time :
' +str(start))
findfile(
'h:\\python')
for i in
file_list:
try:
print(str(i).decode('
gb2312'))
except
unicodedecodeerror:
pass
print('
use time :
' + str(time.time() - start))
這證明不是函式編寫出現的問題,也不是出現異常導致不能獲取到其他資料夾下的檔案,也將測試的**放出吧,其實只是就是在函式體加異常,而且將異常顯示出來,
但是發現執行期間沒有異常產生,如圖:
還以為是函式沒有**導致沒有查詢其他資料夾下的檔案,但是使用軟體的除錯功能來除錯該程式,發現並不是函式沒有**,而是listfile始終都是沒有改變,
都是h:\python下的所有資料夾和檔案的集合,每當判斷到其他檔案時這個值都不會改變,導致for迴圈不能判斷來自新資料夾下的所有資料夾或檔案,
那就是說for迴圈始終判斷h:\python資料夾下的元素,僅此而已。如在除錯時,跳到這個notefiles目錄時,然後就按下一步,一直到for迴圈時:
這時發現,它直接進入了下乙個資料夾,而不是進入該目錄下,也可以發現listfile還是沒有改變,為了證明其是進入了h:\python資料夾下的下乙個資料夾,可以展開listfile就可以看到for迴圈直接是忽略了當前資料夾,並且進入了下個資料夾,如圖:
但是如果該資料夾沒有檔案,也可能將會忽略該資料夾,開啟notesfile資料夾,如圖:
所以並不是該資料夾下沒有檔案,所以是因為yield導致的原因。其實經過上述的已經可以判斷是yield帶來的效果,但是至於為什麼會這樣,恐怕我不能回答大家,
因為我也不知道,哈哈哈哈哈,至於為社麼發這個部落格,我只是覺得這個很有**的意義,但是我不知道是否有意義,因為本人才疏學淺,對python更是剛接觸不久,
但是我希望各位前輩可以指點一下,告訴我是不是不能在遞迴函式使用,還是要修改一下**才可以使用,希望不吝指教,謝謝。2016-04-04
extjs 在ie8下不能正常顯示解決方法
在ie6和ie7都能正常顯示但是在ie8下面不能正常顯示,解決方法如下 x ua compatible是針對ie8新加的乙個設定,對於ie8之外的瀏覽器是不識別的,這個區別與content ie 7 在無論頁面是否包含指令,都像是使用了 windows internet explorer 7的標準模...
iOS適配 舊專案工程在iOS9下不能正常顯示
在ios開發中,很多時候會用到舊專案,比如版本的公升級 使用demo等等,ios sdk正在不斷的公升級,不斷的公升級給ios開發帶來了新的活力。然而在ios sdk新的版本出來之後,舊專案可能會出現新問題。舊專案工程在ios9下不能正常顯示 如圖,上面下面各有一塊黑色區域。未設定啟動頁 在 inf...
不能正常判斷按鍵函式中的Flag
之前在51微控制器裡面定義bit型別的變數是這樣 bit flag 0 然後今天在32裡面寫 static u8 key4 flag 0 然後我在後面進行判斷 else if keycode 4 else if key4 flag 0 0000 0000 1111 1111 0000 0000 11...