代码改变世界

2018.3.14学习笔记(冒泡、递归、装饰器)

2018-03-14 14:14  冒牌权限  阅读(76)  评论(0)    收藏  举报

冒泡排序

#!/usr/bin/env python
# -*- coding:utf-8 -*-

li = [156,6354,454,1548,1541,5,64,2485,64]
for y in range(1,len(li)):
    for i in range(len(li)-y):
        tmp = li[i]
        if li[i] > li[i+1]:
            li[i] = li[i+1]
            li[i+1] = tmp
print(li)

递归

#!/usr/bin/env python
# -*- coding:utf-8 -*-

#用递归输出斐波那契数列第10个数
#斐波那契数列:1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, ...
def func(a1,a2,n):
    print(n)#查看第几次执行func()
    a3 = a1 + a2
    if n == 8:#因为第1次执行就能拿到第3个数,所以拿到第10个数应该只要执行8次
        return a3
    n += 1#为下一次执行准备
    re = func(a2,a3,n)
    return re
print(func(1,1,1))

装饰器

#!/usr/bin/env python
# -*- coding:utf-8 -*-

#python里边@的特殊功能
#1、执行outer函数,并将其下的函数名当做参数
#2、将outer的返回值重新赋值给func = outer的返回值
#3、如此一来相当于有了一个新的func函数inner
#装饰器的本质就好比将一个函数封装到另外一个函数里

def outer(c_func):
    def inner():#新的func
        print('hehe')
        print('hehe')
        ret = c_func()#参数c_func就是执行@outer时outer下的函数名func
        print('fuck')
        print('fuck')
        return ret#可以看到func无返回值
    return inner#把inner返回给func,所以外部调用,直接调用func就可以

@outer#outer(func())
def func():
    print('func')

func()

 带多个参数的装饰器

#!/usr/bin/env python
# -*- coding:utf-8 -*-

def outer(c_func):
    def inner(*args,**kwargs):
        print('hehe')
        print('hehe')
        ret = c_func(*args,**kwargs)
        print(ret)#这句没什么卵用,只是验证一下c_func执行完了没有
        print('fuck')
        print('fuck')
        return ret
    return inner

@outer#outer(func())
def func(a1,a2):
    return a1 + a2

@outer
def hunc(b1,b2,b3,b4):
    return b1 - b2 +b3 - b4

func(1,2)
print('=======================')
hunc(8,7,6,5)