Day-4

冒泡算法:

    相鄰兩個值進行比較,將較大的值放在右側,依次比較!

    例如:   

li = [13, 22, 6, 99, 11]


for m in range(4):     # 等價於 #for m in range(len(li)-1):

    if li[m]> li[m+1]:

        temp = li[m+1]

        li[m+1] = li[m]

        li[m] = temp

li = [13, 22, 6, 99, 11]


for m in range(4):     # 等價於 #for m in range(len(li)-1):

    if li[m]> li[m+1]:

        temp = li[m+1]

        li[m+1] = li[m]

        li[m] = temp


for m in range(3):     # 等價於 #for m in range(len(li)-2):

    if li[m]> li[m+1]:

        temp = li[m+1]

        li[m+1] = li[m]

        li[m] = temp


for m in range(2):     # 等價於 #for m in range(len(li)-3):

    if li[m]> li[m+1]:

        temp = li[m+1]

        li[m+1] = li[m]

        li[m] = temp


for m in range(1):     # 等價於 #for m in range(len(li)-4):

    if li[m]> li[m+1]:

        temp = li[m+1]

        li[m+1] = li[m]

        li[m] = temp

print li


第二步


li = [13, 22, 6, 99, 11]


for i in range(1,5):

    for m in range(len(li)-i): 

        if li[m] > li[m+1]:

            temp = li[m+1]

            li[m+1] = li[m]

            li[m] = temp


第三步


遞歸

斐波那契數列指的是這樣一個數列 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368

  

def func(arg1,arg2):

    if arg1 == 0:

        print arg1, arg2

    arg3 = arg1 + arg2

    print arg3

    func(arg2, arg3)


func(0,1)



lambda表達式:

    對於簡單的函數,也存在一種簡便的表示方式,即:lambda表達式

    

# 定義函數(普通方式)
def func(arg):
    return arg + 1
  
# 執行函數
result = func(123)
  
# ###################### lambda ######################
  
# 定義函數(lambda表達式)
my_lambda = lambda arg : arg + 1
  
# 執行函數
result = my_lambda(123)

lambda存在意義就是對簡單函數的簡潔表示


內置函數 


一、map

    

例:

li = [11, 22, 33]

new_list = map(lambda a: a + 100, li)



li = [11, 22, 33]
sl = [1, 2, 3]
new_list = map(lambda a, b: a + b, li, sl)

二、filter
對於序列中的元素進行篩選,最終獲取符合條件的序列[object Object]
li = [11, 22, 33]

new_list = filter(lambda arg: arg > 22, li)
#filter第一個參數爲空,將獲取原來序列

三、reduce
對於序列內所有元素進行累計操作
li = [11, 22, 33]

result = reduce(lambda arg1, arg2: arg1 + arg2, li)

# reduce的第一個參數,函數必須要有兩個參數
# reduce的第二個參數,要循環的序列
# reduce的第三個參數,初始值

獲取序列所有元素的和

yield生成器
range會在內存中創建所有指定的數字,而xrange不會立即創建,只有在迭代循環時,纔去創建每個數組。
def nrange(num):
    temp = -1
    while True:
        temp = temp + 1
        if temp >= num:
            return
        else:
            yield temp

自定義生成器nrange

2、文件操作的 read 和 xreadlinex 的的區別
      1.read會讀取所有內容到內存
      2.xreadlines則只有在循環迭代時才獲取
裝飾器是函數,只不過該函數可以具有特殊的含義,裝飾器用來裝飾函數或類,使用裝飾器可以在函數執行前和執行後添加相應操作。
  import functools


def wrapper(func):
    @functools.wraps(func)
    def wrapper():
        print 'before'
        func()
        print 'after'
    return wrapper

@wrapper
def foo():
    print 'foo'
    
    或
#!/usr/bin/env python
#coding:utf-8
 
def Before(request,kargs):
    print 'before'
     
def After(request,kargs):
    print 'after'
 
 
def Filter(before_func,after_func):
    def outer(main_func):
        def wrapper(request,kargs):
             
            before_result = before_func(request,kargs)
            if(before_result != None):
                return before_result;
             
            main_result = main_func(request,kargs)
            if(main_result != None):
                return main_result;
             
            after_result = after_func(request,kargs)
            if(after_result != None):
                return after_result;
             
        return wrapper
    return outer
     
@Filter(Before, After)
def Index(request,kargs):
    print 'index'
     
     
if __name__ == '__main__':
    Index(1,2)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章