1.8 递归列出目录里的文件
os模块的方法
- listdir()列出目录下的所有文件,以列表的形式显示
In [38]: os.listdir('/home')
Out[38]: ['deployer']
- path.isdir() 判断是否为目录,返回bool值,并不能判断是否存在
In [43]: os.path.isdir('/home')
Out[43]: True
In [44]: os.path.isdir('/etc')
Out[44]: True
In [45]: os.path.isdir('/a')
Out[45]: False
- path.isfile()判断是否为文件,返回bool值,并不能判断是否存在
In [46]: os.path.isfile('/etc/passwd')
Out[46]: True
In [47]: os.path.isfile('/etc/passwd/abc')
Out[47]: False
- path.join()连接两个文件的路径
In [36]: os.path.join('/etc/','passwd')
Out[36]: '/etc/passwd'
In [37]: os.path.join('/etc/','passwd','abc')
Out[37]: '/etc/passwd/abc'
案例:
打印目录下所有文件
import os
import 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.isfiel(os.path.join(path, i))] //过滤文件
if dirs:
for d in dirs:
print_files(os.path.join(path, d))
if files: //判断是否有文件
for f in files:
print os.path.join(path, f) //True 就列出文件
print_file(sys.argv[1])
os.path.join(path, i),因为定义了路径之后,是有路径的,直接打 i 是打印不出来的,所以需要做一个连接
1.9 匿名函数
所谓匿名函数,就是没有函数名 使用lambda 函数进行定义
lambda函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方
例: 之前的定义方式
In [1]: def fun(x,y):
...: return x * y
...: fun(3,5)
...:
Out[1]: 15
匿名函数的定义方式
In [2]: lambda x, y:x * y
Out[2]: <function __main__.<lambda>> //说明是一个函数对象
In [3]: r = lambda x, y:x * y
In [4]: r(2,3)
Out[4]: 6
匿名函数的优点
- 使用python 写一些脚本时,使用lambda 可以省去定义函数的过程,让代码更加精简。
- 对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
- 使用lambda在某些时候让代码更容易理解。
语法:
-
lambda语句中,冒号前是函数,可以有多个,逗号隔开,冒号左边是返回值
-
lambda 语句构建的其实是一个函数对象
案例:
reduce 内置函数
reduce(…)
reduce(function, sequence[, initial]) ->值 // 这个函数必须是2个参数
将两个参数的函数累加到一个序列的项上,
从左到右,以便将序列缩减为单个值。
例如,reduce(lambda x, y: x+y,[1,2,3,4,5])计算
((((1 + 2)+ (3)+ 4)+ 5)。如果有initial,则将它放在项目前面
的顺序,并作为默认时
序列是空的
正规定义函数写法
In [6]: def add(x, y):
...: return x + y
...:
In [7]: reduce(add, range(1,101))
Out[7]: 5050
匿名函数写法
In [10]: reduce(lambda x, y:x + y, range(1,101))
Out[10]: 5050
阶乘
In [11]: reduce(lambda x, y:x * y, range(1,6))
Out[11]: 120
In [12]: 5*4*3*2*1
Out[12]: 120