1. 程式人生 > >python自動化運維學習第九天--匿名函式

python自動化運維學習第九天--匿名函式

接昨天的遞迴呼叫
寫一個指令碼,列出目錄下所有的檔案

#!/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)
匿名函式的優點:
  1. 使用python寫一些指令碼時,使用lambda可以省去定義函式的過程,讓程式碼更加精簡。
  2. 對於一些抽象的,不會被別的地方再重複使用的函式,有時候函式起個名字也是一個難題,使用lambda不需要考慮命名的問題。
  3. 使用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 — 可選,初始引數