python基础之基本算法和装饰器

1、冒泡排序

  关于冒泡排序实现大小比较,大索引会向后移动,这次循环将最大数值直接移动至最后。

li = [125,56,78,23,]
for i in range(len(li)-1):
    if li[i] > li[i+1]:
        temp = li[i]
        li[i] = li[i + 1]
        li[i + 1] = temp
print(li)
[56, 78, 23, 125]

 冒泡排序以函数的方式完整的实现方法


def my_min(a):
c = len(a)
while c > 1:
for i in range(len(a) - 1):
if a[i] > a[i + 1]:
temp = a[i]
a[i] = a[i + 1]
a[i + 1] = temp
c -= 1
print(a)
b = [23,25,12,14,4,]
my_min(b)
[4, 12, 14, 23, 25]

 

2、递归

  斐波那契数列根据递归的方法实现方式,因为无线循环的递归会报错,这里我们做个限制

def f1(a1,a2):
    if a1 >1000:
        return
    print(a1)
    a3 = a1 + a2
    f1(a2,a3)
f1(0,1)
0
1
1
2
3
5
8
13
21
34
55
89
144
233
377
610
987

   以递归的方式获取菲波那切数列第十个数字的代码实现方式

def f5(de,a1,a2):
    if de == 10:
        return a1
    a3 = a1 +a2
    r = f5(de + 1,a2,a3)
    return r
print(f5(1,0,1))
34

 3、装饰器,用于装饰某个方法、函数,对象或者类

  下边我们给一个简单的函数加一个简单的装饰器

def out(func):
    def inner():
        print("hello")
        r = func()
        return r
    return inner
@out
def f1():
    print("f1")
f1()


hello
f1

  @符号在这里有特殊的含义,@函数名,会执行该函数,并且会将这行下边的函数名当做参数传入该函数,并将out的返回值重新赋值给f1

  双参数的装饰器写法

def out(func):
    def inner(a,b):
        print("hello")
        r = func(a,b)
        return r
    return inner
@out
def f1(a,b):
    print("f1")
    print(a + b)
f1(1,2)


hello
f1
3

   函数含有多个参数的装饰器的写法

def out(func):
    def inner(*arg,**kwargs):
        print("hello")
        r = func(*arg,**kwargs)
        return r
    return inner
@out
def f1(a,b):
    print("f1")
    print(a + b)
f1(1,2)

hello
f1
3

   多个装饰器装饰一个函数的写法

def out(func):
    def inner(*arg,**kwargs):
        print("hello")
        r = func(*arg,**kwargs)
        return r
    return inner
def out1(func):
    def inner(*arg,**kwargs):
        print("heh")
        r = func(*arg,**kwargs)
        return r
    return inner
@out
@out1
def f1(a,b):
    print("f1")
    print(a + b)
f1(1,2)

hello
heh
f1
3

 

posted @ 2016-06-08 19:59  菠萝丁  阅读(306)  评论(0编辑  收藏  举报