1. 程式人生 > >python筆記(基礎進階1.8-1.9)

python筆記(基礎進階1.8-1.9)

1.8 遞迴列出目錄裡的檔案

os內的幾個常用方法:
os.listdir() 列出目錄下所有的檔案 os.listdir(".") os.listdir("/home") 列出當前目錄和/home目錄下的所有檔案,只列出第一層
os.path.isdir() 判斷是否是目錄,是返回true,否則返回false
os.path.isfile() 判斷是否是檔案,是返回true,否則返回false
os.path.join() 連結檔案的路徑 ,只是連結,不會判斷檔案存不存在
In [5]: os.path.join('/etc/','passwd')
Out[5]: '/etc/passwd'

列印目錄下所有檔案
def print_files(path):
isdir, isfile, join = os.path.isdir, os.path.isfile, os.path.join
lsdir = os.listdir(path)
dirs = [i for i in lsdir if isdir(join(path,i))]
files = [i for i in lsdir if isfile(join(path,i))]
if dirs:
for d in dirs:
print_files(join(path,d))
if files:
for f in files:
print join(path,f)
print_files(sys.argv[1])

註釋版本:
#!/usr/bin/python

-- coding:UTF-8 --

import os
import sys

def print_files(path):
lsdir=os.listdir(path) #列出path路徑下的所有檔案和資料夾
dirs=[i for i in lsdir if os.path.isdir(os.path.join(path,i))] #迴圈遍歷lsdir,並判斷是否是目錄,如果是,則連結路徑並賦值給dirs
files=[i for i in lsdir if os.path.isfile(os.path.join(path,i))] #迴圈遍歷lsdir,並判斷是否是檔案,如果是,則連結路徑並賦值給files
if files:
for f in files: #如果檔案存在,則遍歷檔案列表
print os.path.join(path,f) #迴圈列印檔名
if dir:
for d in dirs: #對目錄列表再次遍歷
print_files(os.path.join(path,d)) #遞迴呼叫,繼續在深一層的目錄下查詢
print_files(sys.argv[1])
相當於linux命令的 find -type f

1.9 匿名函式
匿名函式:

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

•def fun(x, y):
return x*y
fun(2, 3)
普通函式定義

•r = lambda x,y: x*y
r(2, 3)
lambda函式定義

•匿名函式優點:

  • 1.使用python寫一些指令碼時,使用lambda可以省去定義函式的過程,讓程式碼更加精簡。
    1. 對於一些抽象的,不會被別的地方再重複使用的函式,有時候函式起個名字也是個難題,使用lambda不需要考慮命名的問題。
    1. 使用lambda在某些時候讓程式碼更容易理解。

•lambda語句中,冒號前是引數,可以有多個,逗號隔開,冒號右邊是返回值。
•lambda語句構建的其實是一個函式物件

reduce()函式 reduce(fun,range(1,5)) 對range(1,5)返回的序列用fun函式去處理 reduce函式第二個引數是一個序列
可以用lambda定義reduce中的函式 reduce(lambda x,y:x*y)
In [13]: reduce(lambda x, y:x+y, range(1,101))
Out[13]: 5050

序列處理函式
len() 取序列的長度
max() 取序列的最大值
min() 取序列的最小值