遞歸是函數內部調用本身,一般用來計算階層python
計算階層有循環和遞歸兩種方法;函數
普通方法:spa
- 使用循環對象
1到n遞乘:遞歸
#! /usr/bin/pythonio
def factorial(n):function
sum = 1import
for i in range(1, n+1):匿名函數
sum *= ilambda
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])
- 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))