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

原创
2018/12/02 15:08
阅读数 2

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

匿名函数的优点

  1. 使用python 写一些脚本时,使用lambda 可以省去定义函数的过程,让代码更加精简。
  2. 对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
  3. 使用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
展开阅读全文
加载中

作者的其它热门文章

打赏
0
0 收藏
分享
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部