python笔记(基础进阶1.8-1.9)

1.8 递归列出目录里的文件

os内的几个常用方法:
os.listdir() 列出目录下所有的文件 os.listdir(".") os.listdir("/home") 列出当前目录和/home目录下的所有文件,只列出第一层
os.path.isdir() 判断是否是目录,是返回true,否则返回false
os.path.isfile() 判断是否是文件,是返回true,否则返回false
os.path.join() 链接文件的路径 ,只是链接,不会判断文件存不存在
In [5]: os.path.join('/etc/','passwd')
Out[5]: '/etc/passwd'

打印目录下所有文件
def print_files(path):
isdir, isfile, join = os.path.isdir, os.path.isfile, os.path.join
lsdir = os.listdir(path)
dirs = [i for i in lsdir if isdir(join(path,i))]
files = [i for i in lsdir if isfile(join(path,i))]
if dirs:
for d in dirs:
print_files(join(path,d))
if files:
for f in files:
print join(path,f)
print_files(sys.argv[1])

注释版本:
#!/usr/bin/python

-- coding:UTF-8 --

import os
import sys

def print_files(path):
lsdir=os.listdir(path) #列出path路径下的所有文件和文件夹
dirs=[i for i in lsdir if os.path.isdir(os.path.join(path,i))] #循环遍历lsdir,并判断是否是目录,如果是,则链接路径并赋值给dirs
files=[i for i in lsdir if os.path.isfile(os.path.join(path,i))] #循环遍历lsdir,并判断是否是文件,如果是,则链接路径并赋值给files
if files:
for f in files: #如果文件存在,则遍历文件列表
print os.path.join(path,f) #循环打印文件名
if dir:
for d in dirs: #对目录列表再次遍历
print_files(os.path.join(path,d)) #递归调用,继续在深一层的目录下查找
print_files(sys.argv[1])
相当于linux命令的 find -type f

1.9 匿名函数
匿名函数:

  • lambda函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方。可以把函数写在一行里。

•def fun(x, y):
return x*y
fun(2, 3)
普通函数定义

•r = lambda x,y: x*y
r(2, 3)
lambda函数定义

•匿名函数优点:

  • 1.使用python写一些脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
    1. 对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
    1. 使用lambda在某些时候让代码更容易理解。

•lambda语句中,冒号前是参数,可以有多个,逗号隔开,冒号右边是返回值。
•lambda语句构建的其实是一个函数对象

reduce()函数 reduce(fun,range(1,5)) 对range(1,5)返回的序列用fun函数去处理 reduce函数第二个参数是一个序列
可以用lambda定义reduce中的函数 reduce(lambda x,y:x*y)
In [13]: reduce(lambda x, y:x+y, range(1,101))
Out[13]: 5050

序列处理函数
len() 取序列的长度
max() 取序列的最大值
min() 取序列的最小值

猜你喜欢

转载自blog.51cto.com/4833797/2324096
今日推荐