接昨天的递归调用
写一个脚本,列出目录下所有的文件
#!/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 — 可选,初始参数