1. 递归列出目录里的文件
递归是函数内部调用自己,通常用来计算阶层
计算阶层有循环和递归两种方法;
普通方法:
- 使用循环
1到n递乘:
#! /usr/bin/python
def factorial(n):
sum = 1
for i in range(1, n+1):
sum *= i
return sum
print factorial(5)
1到n递加:
#! /usr/bin/python
def factorial(n):
sum = 0
for i in range(1, n+1):
sum += i
return sum
print factorial(100)
递归调用:
n到1递乘:
def factorial(n):
if n == 0:
return 1
else:
return n * factorial(n-1)
print factorial(5)
1到n递加:
#! /usr/bin/python
def factorial(n):
if n == 0:
return 0
else:
return n + factorial(n-1)
print factorial(100)
递归的注意事项:
必须有最后的默认结果
if n == 0
递归参数必须向默认结果收敛的:
factorial(n-1)
os模块的几个方法:
os.listdir()
列出目录下的文件和目录,以列表形式输出
os.path.isdir()
判断是不是目录,返回bool值
os.path.isfile()
判断是不是文件,返回bool值
os.path.join()
连接路径,不会判断文件存不存在
打印目录下所有文件:
#! /usr/bin/python
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.isfile(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)
print_files(sys.argv[1])
2. 匿名函数
- lambda函数是一种快速定义单行的最小函数,可以用在任何需要函数的地方。
def fun(x, y):
return x*y
fun(2, 3)
r = lambda x,y: x*y
r(2, 3)
注:<function __main__.<lambda>>返回带<>号的都是对象
匿名函数优点:
- 1.使用python写一些脚本时,使用lambda可以省去定义函数的过程,让代码更加精简。
- 2. 对于一些抽象的,不会被别的地方再重复使用的函数,有时候函数起个名字也是个难题,使用lambda不需要考虑命名的问题。
- 3. 使用lambda在某些时候让代码更容易理解。
lambda语句中,冒号前是参数,可以有多个,逗号隔开,冒号右边是返回值。
lambda语句构建的其实是一个函数对象
reduce()函数:
reduce是内置函数
reduce后面的函数必须有两个参数,后面跟一个序列
序列中的参数执行所跟函数的return
def add(x, y):
return x + y
sum = reduce(add, [1, 2, 3])
reduce(lambda x,y:x+y, range(1,4))