函数递归调用
函数自己调用自己。
递归必须有最后的默认结果,如下例中的if n == 0。
递归参数必须向默认结果收敛,如下例中的factorial(n-1)。
递归调用实例
计算阶乘
输入数字,得到该数字的阶乘
循环方式
1 | #!/usr/bin/python |
输出结果1
2Please input a number:5
120
递归方式
1 | #!/usr/bin/python |
输出结果1
2Please input a number:5
120
递归列出目录中的文件
函数讲解
os .listdir() 列出当前目录下的内容。
1
2In [5]: os.listdir('/root/aming')
Out[5]: ['advance', 'basic', 'tmp.txt']os.path.isdir() 判断是否为目录,是,返回True;不是或不存在,返回False。
1
2
3
4
5In [6]: os.path.isdir('/root/aming')
Out[6]: True
In [7]: os.path.isdir('/root/aming/tmp.txt')
Out[7]: Falseos.path.isfile() 判断是否为文件,是,返回True;不是或不存在,返回False。
1
2
3
4
5
6
7
8In [8]: os.path.isfile('/root/aming')
Out[8]: False
In [9]: os.path.isfile('/root/aming/222')
Out[9]: False
In [10]: os.path.isfile('/root/aming/tmp.txt')
Out[10]: Trueos.path.join() 将字符连接为目录,不判断该路径是否存在。
1
2
3
4
5
6
7
8In [11]: os.path.join('root','aming','tmp.txt')
Out[11]: 'root/aming/tmp.txt'
In [12]: os.path.join('/root','aming','tmp.txt')
Out[12]: '/root/aming/tmp.txt'
In [13]: os.path.join('/root','aming','123')
Out[13]: '/root/aming/123'
递归输出
列出目录下所有文件,包括子目录1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17#!/usr/bin/python
import os
import sys
def printFiles(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 files:
for f in files:
print os.path.join(path,f)
if dirs:
for d in dirs:
printFiles(os.path.join(path,d))
printFiles(sys.argv[1])
输出结果1
2
3
4
5
6/root/aming/tmp.txt
/root/aming/advance/1_5_1.py
/root/aming/advance/1_4_4.py
/root/aming/advance/1_1_3.py
......................
/root/aming/basic/2_3_2.py
注意:当上述文件中if files:和if dirs:判断调换位置,输出结果将会发生变化,可自行尝试。