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() 取序列的最小值

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章