遞迴列出目錄裡的檔案和匿名函式

2021-08-14 09:00:22 字數 3294 閱讀 8271

一、遞迴列出目錄裡的檔案

1.類似find命令,列出子目錄裡的所有檔案

在做之前先了解os模組裡的幾個方法

1.os.listdir()列出目錄下所有檔案,列出當前目錄裡的所有檔案。

2.os.path.isdir() 判斷引數是不是目錄。如果是 返回true 不是返回false。

如果目錄不存在的話也是會返回false的。

3.os.path.isfile()判斷引數是不是檔案,如果是返回true 不是返回false。

如果檔案不存在的話也是會返回false的。

4.os.path.join()連線路徑,他不會判斷檔案存在不存在,作用就是連線組合成乙個路勁。

下面來寫指令碼。

import os

import sys

def print_files(path):

listdir = os.listdir(path) #列出path裡的所有目錄和檔案

dirs = [i for i in listdir if os.path.isdir(os.path.join(path,i))] #使用列表重寫的方法做判斷,先列出listdir裡的目錄,不能直接寫i,i就是乙個檔案的名字,要加上path,加上路徑才可以判斷。

files = [i for i in listdir if os.path.isfile(os.path.join(path,i))] #方法一樣,判斷是否是檔案。

if files: #如果檔案列表存在的話

for f in files: #就通過迴圈把每個檔案都列出來

print os.path.join(path,f) #列印每個檔案的路徑

if dirs: #如果dirs為true 說明裡面有目錄,有目錄就要在執行上面的方法,列出子目錄裡的檔案和目錄

for d in dirs: #對目錄做遍歷,遞迴呼叫函式迴圈做操作。

print_files(os.path,join(path,d)) #呼叫遞迴,來對每個目錄進行判斷列印。最後沒有目錄為止,這就滿足了遞迴的2個條件。每次遞迴都在向最深的目錄收斂.

也可以看到深層次的目錄檔案

二、匿名函式

1.通常我們要用函式,必須定義個函式名,然後通過函式名來呼叫。

而匿名函式就是沒有函式名。

匿名函式就是lambda函式

lambda函式是一種快速定義單行的最小行數,可以用在任何需要函式的地方。

2.通常我們定義乙個函式是這麼來的。

def fun(x,y):

return x * y

fun(3,5)

這樣來呼叫。而lambda函式是這樣定義的

返回的是乙個函式物件,所以我們用乙個變數來接收一下

這就定義呼叫了乙個匿名函式。

3.匿名函式的優點:

(1).使用python寫一些指令碼時,使用lambda可以省去定義函式的過程,讓**更加精簡。

(2).對於一些抽象的,不會被別的地方在重複使用的函式,有時候函式起個名字也是個難題,使用lambda不需要考慮命名的問題。

(3).使用lambda在某些時候讓**更容易理解。

4.lambda語法規則:

lambda語句中,冒號:前是引數,可以有多個用,號隔開,:冒號右邊是返回值。

lambda語句構建的其實乙個函式物件。

返回帶有<>號的都是物件。

5.reduce內建函式。配合使用lambda。

(1) reduce函式是python的內建函式,他的作用是對定義的函式和值做二元計算。

(2)reduce語法,reduce(function,運算子,序列) 函式必須是含有2個引數的函式,1個或多餘2個都是不行的。後面的序列是可選的。看個例子

常規定義了乙個函式,最後寫上序列,會自動計算階層。1+2+3+4+5+6+7+8+9的和。

lambda函式這樣定義

習題1. 從終端接收若干個數字,要求使用filter()函式,將輸入的不是數字的值剔除掉(使用者輸入的內容有隨機性,當我們要接收乙個數字的時候,他可能會輸入乙個字串過來,要求當使用者輸入的不是數字,就剔除掉)

2. 從終端接收若干個以空格隔開的字串,然後去除所有的26個字元之外的字元後,列印到螢幕上

要求:使用map()函式,map()函式接收兩個引數,乙個是函式,乙個是iterable,map將傳入的函式依次作用到序列的每個元素,並把結果作為新的iterator返回。

3. 從終端接收若干個以空格隔開的字串

(1).以空格隔開的字串為使用者想要輸入的乙個值

(2).使用者在輸入時不小心按出來了字母鍵

用遞迴列出和刪除檔案的所有目錄

遞迴 recursion 就是方法呼叫自身。對於遞迴來說,一定有乙個出口,讓遞 歸結束,只有這樣才能保證不出現死迴圈。遞迴計數器 private static int time public static void recursion 一個簡單的遞迴例項 階乘 public static int f...

匿名函式和遞迴

lambda 匿名函式 為了解決一些簡單的需求而設計的一句話函式 lambda函式不需要def來宣告,一句話就可以宣告出乙個函式 語法 函式名 lambda 引數 返回值 需要注意的是 1.函式的引數可以有多個,多個引數之間用逗號隔開 2.匿名函式不管多複雜,只能寫一行,切邏輯結束後直接返回資料 2...

python匿名函式和遞迴

命名空間 內建命名空間 python直譯器一啟動就可以使用的名字儲存在內建命名空間 在啟動器啟動時被載入進記憶體裡 全域性命名空間 程式從上到下被執行的過程中一次載入進記憶體 放置了我們所有設定的變數名和函式名 區域性命名空間 函式內部定義的名字 當函式呼叫時,才會產生這個命名空間,隨著函式執行的結...