python自動化運維學習第九天--匿名函式
阿新 • • 發佈:2018-12-04
接昨天的遞迴呼叫
寫一個指令碼,列出目錄下所有的檔案
#!/usr/bin/python
# -*- coding: utf-8 -*-
import os,sys
def print_files(path):
lsdir = os.listdir(path)
dirs = [i for i in lsdir if os.path.isdir(os.path.join(path, i))]
files = [i for i in lsdir if os.path.isfile(os.path.join(path, i))]
if files:
for f in files:
print os.path.join(path, f)
if dirs:
for d in dirs:
print_files(os.path.join(path, d))
print_files(sys.argv[1])
os.listdir(path) #列出path目錄下的檔案,結果放在列表裡
os.path.isdir(path) #判斷path是否是目錄,返回布林值,無法判斷path是否存在,不存在返回false
os.path.isfile(path) #判斷path是否是檔案,返回布林值,無法判斷path是否存在,不存在返回false
os.path.join(path1,path2,path3,...) #拼接path1、path2、path3...,返回一個字串的路徑
匿名函式
lambda函式是一種快速定義單行的最小函式,可以用在任何需要函式的地方
##正常的函式
def fun(x, y):
return x * y
fun(5, 6)
##使用lambda匿名函式
r = lambda x,y:x*y #冒號前為引數(x、y)
r(5, 6)
匿名函式的優點:
- 使用python寫一些指令碼時,使用lambda可以省去定義函式的過程,讓程式碼更加精簡。
- 對於一些抽象的,不會被別的地方再重複使用的函式,有時候函式起個名字也是一個難題,使用lambda不需要考慮命名的問題。
- 使用lambda在某些時候讓程式碼更容易理解
lambda語句中,冒號前是引數,可以有多個,逗號隔開,冒號右邊是返回值。
lambda語句構建的其實是一個函式物件。
例子:
reduce(lambda x, y: x*y, range(1, 5)) #1到4的階乘
def fun(x, y):
return x * y
reduce(fun, range(1, 5)) #1到4的階乘
reduce函式會對引數序列中元素進行累積
reduce函式語法:
reduce(function, iterable[, initializer])
function — 函式名,有兩個引數
iterable — 可迭代物件
initializer — 可選,初始引數