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 — 可选,初始参数

猜你喜欢

转载自blog.csdn.net/wang035759984/article/details/84641194