递归列出目录里的文件和匿名函数

一、递归列出目录里的文件
1.类似find命令,列出子目录里的所有文件
在做之前先了解OS模块里的几个方法
1.os.listdir()列出目录下所有文件,列出当前目录里的所有文件。

2.os.path.isdir() 判断参数是不是目录。如果是 返回True 不是返回False。


如果目录不存在的话也是会返回False的。
3.os.path.isfile()判断参数是不是文件,如果是返回True 不是返回False。

如果文件不存在的话也是会返回False的。
4.os.path.join()连接路径,他不会判断文件存在不存在,作用就是连接组合成一个路劲。

下面来写脚本。
import os
import sys

def print_Files(path):
listdir = os.listdir(path) #列出path里的所有目录和文件
dirs = [i for i in listdir if os.path.isdir(os.path.join(path,i))] #使用列表重写的方法做判断,先列出listdir里的目录,不能直接写i,i就是一个文件的名字,要加上path,加上路径才可以判断。
files = [i for i in listdir if os.path.isfile(os.path.join(path,i))] #方法一样,判断是否是文件。
if files: #如果文件列表存在的话
for f in files: #就通过循环把每个文件都列出来
print os.path.join(path,f) #打印每个文件的路径
if dirs: #如果dirs为True 说明里面有目录,有目录就要在执行上面的方法,列出子目录里的文件和目录
for d in dirs: #对目录做遍历,递归调用函数循环做操作。
print_Files(os.path,join(path,d)) #调用递归,来对每个目录进行判断打印。最后没有目录为止,这就满足了递归的2个条件。每次递归都在向最深的目录收敛.
print_Files(sys.argv[1])

也可以看到深层次的目录文件

二、匿名函数

1.通常我们要用函数,必须定义个函数名,然后通过函数名来调用。
而匿名函数就是没有函数名。
匿名函数就是lambda函数
lambda函数是一种快速定义单行的最小行数,可以用在任何需要函数的地方。
2.通常我们定义一个函数是这么来的。
def fun(x,y):
return x * y
fun(3,5)
这样来调用。而lambda函数是这样定义的
lambda x,y : x * y

返回的是一个函数对象,所以我们用一个变量来接收一下
r = lambda x,y:x * y
r(3,5)

这就定义调用了一个匿名函数。
3.匿名函数的优点:
(1).使用python写一些脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
(2).对于一些抽象的,不会被别的地方在重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
(3).使用lambda在某些时候让代码更容易理解。
4.lambda语法规则:
lambda语句中,冒号:前是参数,可以有多个用,号隔开,:冒号右边是返回值。
lambda语句构建的其实一个函数对象。

返回带有<>号的都是对象。
5.reduce内置函数。配合使用lambda。
(1) reduce函数是Python的内置函数,他的作用是对定义的函数和值做二元计算。
(2)reduce语法,reduce(function,运算符,序列) 函数必须是含有2个参数的函数,1个或多余2个都是不行的。后面的序列是可选的。看个例子
reduce(fun,range(1,10))

常规定义了一个函数,最后写上序列,会自动计算阶层。1+2+3+4+5+6+7+8+9的和。
lambda函数这样定义
reduce(lambda x, y:x + y,range(1,10))

习题
1. 从终端接收若干个数字,要求使用filter()函数,将输入的不是数字的值剔除掉(用户输入的内容有随机性,当我们要接收一个数字的时候,他可能会输入一个字符串过来,要求当用户输入的不是数字,就剔除掉)
2. 从终端接收若干个以空格隔开的字符串,然后去除所有的26个字符之外的字符后,打印到屏幕上
要求:使用map()函数,map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回。
3. 从终端接收若干个以空格隔开的字符串
(1).以空格隔开的字符串为用户想要输入的一个值
(2).用户在输入时不小心按出来了字母键

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值