python装饰器+递归+冒泡排序
冒泡排序
li = [33, 2, 10, 1,23,23523,5123,4123,1,2,0]
for k in range(1,len(li)):
for i in range(len(li) - k):#当这个for执行完时,最大值被放在了最后一个,所以下次判断时就可以不
if li[i] > li[i + 1]: #比较最后一个,所以在这里range的循环就应该少一次,所以k就加一,为了完成
temp = li[i] #所有的数的比较,所以再建立一个for循环,把k作为变量,循环的范围是1到len(li)
li[i] = li[i + 1]
li[i + 1] = temp print(li)
递归
斐波纳挈数列
def f4(a1,a2)
if a1>10000:
return
print(a1)
#a1 = 0,a2 = 1,a3 = 1
#a1 = 1,a2 = 1,a3 = 2
a3 = a1 + a2
f4(a2,a3) f4(0,1)
第十个斐波纳挈数
def f1(taller,a1,a2):
if taller == 10:
return a1
a3 = a1 + a2
r = f1(taller + 1,a2,a3)
return r feo = f1(1,0,1)
print(feo)
装饰器
def outer(func):
def inner():
print("hello")
print("hello")
print("hello")
r = func()
print("end")
print("end")
print("end")
return r
return inner #1、执行outer函数,并且将其下面的的函数名,当作参数
#2、将outer的返回值重新赋值给f1(f1 = outer的返回值)
#新f1函数 = inner 执行f1就相当于执行inner()
@outer
def f1():
print("F1") def f2():
print("F2") def f3():
print("F3") def f4():
print("F4") f1()
f2()
f3()
f4()
结果:
hello
hello
hello
F1
end
end
end
F2
F3
F4
如果有两个函数名一样的函数,在执行这个函数时,会执行下面那个函数,因为python解释器是从上往下
把代码(函数)放入内存的,所以,同样的函数名会指向最后一个函数。
装饰器的本质是将原函数封装到另一个函数里面,让装饰器里面的函数等于新函数(f1)
def outer(func):
def inner():
print("hello")
print("hello")
print("hello")
r = func()
print("end")
print("end")
print("end")
return r
return inner #首先,@outer的意思是让它下面的函数当作装饰器的参数,让装饰器函数的返回值等于f1,而装饰器的返回值为
#inner函数,所以执行f1()函数就是执行inner() 函数,再把inner的返回值赋给f1
#@outer相当于f1 = outer(f1) @outer
def f1():
print("F1") f1()
1、定义装饰器,函数
2、应用装饰器
只要函数应用装饰器,那么函数就被重新定义,重新定义为:装饰器的内层函数
带有参数的装饰器
def outer(func):
def inner(a1,a2):
print("hello")
print("hello")
print("hello")
r = func(a1,a2)
print("end")
print("end")
print("end")
return r
return inner @outer
def f1(a1,a2):
print(a1+a2)
接收任意参数的装饰器
def outer(func):
def inner(*a1,**a2):#这里的*a1可以接收多个参数
print("hello")
print("hello")
print("hello")
r = func(*a1,**a2)#这里的*a1,**a1可以接收多个参数,在执行函数是会自动把相应位置的参数传给他
print("end") #a1=>*a1=>*a1=>a1,a2=>*a1=>*a1=>a2,python有自带优化机制
print("end")
print("end")
return r
return inner @outer
def f0(a1):
print(a1) @outer
def f1(a1, a2):
print(a1 + a2) @outer
def f2(a1, a2, a3):
print(a1 + a2 + a3) @outer
def f3(a1, a2, a3, a4):
print(a1 + a2 + a3 + a4) @outer
def f4(a1, a2, a3, a4, a5):
print(a1 + a2 + a3 + a4 + a5) f0(1)
f1(1,2)
f2(1,2,3)
f3(1,2,3,4)
f4(1,2,3,4,5)
*a1接受参数放到元组里
**a2接收字典类参数放到字典里
一个函数添加多个装饰器
def outer(func):
def inner(*a1,**a2):
print("hello") #@outer相当于f1 = outer(f1)
r = func(*a1,**a2)
print("end")
return r
return inner def outer2(func):
def inner(*a1,**a2):
print("gg")
r = func(*a1,**a2)
return r
return inner @outer2 #在上面的装饰器先输出
@outer
def f1(a1, a2):
print(a1 + a2) f1(1,2)
#首先,把f1函数传到outer里面,outer里面的func代指f1函数,而f1函数就是outer函数的返回值,而outer函数的返回值为inner函数,所以执行f1函数,就是执行outer里的inner函数,而把@outer2放在@outer上面就是相当于给f1装饰的函数outer装饰一次,
outer2把outer函数当作func参数,而outer2的返回值为outer2的inner函数,当执行outer函数时,会执行outer2的inner函数,而inner函数中的func又执行了outer函数,而outer函数的返回值为outer函数的inner函数,在outer2里的inner函数里
执行func函数,就是执行了outer函数的返回值,就是执行了outer函数的inner函数,而outer函数里的inner函数有执行了f1函数,所以最后先输出最上面那个装饰器,然后是下面那个装饰器,这就是装饰器的原理
结果: gg
hello
3
end
python装饰器+递归+冒泡排序的更多相关文章
- python 装饰器、递归原理、模块导入方式
1.装饰器原理 def f1(arg): print '验证' arg() def func(): print ' #.将被调用函数封装到另外一个函数 func = f1(func) #.对原函数重新 ...
- Python 迭代器&生成器,装饰器,递归,算法基础:二分查找、二维数组转换,正则表达式,作业:计算器开发
本节大纲 迭代器&生成器 装饰器 基本装饰器 多参数装饰器 递归 算法基础:二分查找.二维数组转换 正则表达式 常用模块学习 作业:计算器开发 实现加减乘除及拓号优先级解析 用户输入 1 - ...
- 对于python装饰器结合递归的进一步理解
对于python装饰器结合递归的进一步理解 代码如下: import functools def memoize(fn): print('start memoize') known = dict() ...
- python装饰器通俗易懂的解释!
1.python装饰器 刚刚接触python的装饰器,简直懵逼了,直接不懂什么意思啊有木有,自己都忘了走了多少遍Debug,查了多少遍资料,猜有点点开始明白了.总结了一下解释得比较好的,通俗易懂的来说 ...
- (转)python装饰器进阶一
Python装饰器进阶之一 先看例子 网上有很多装饰器的文章,上来说半天也没让人看明白装饰器到底是个什么,究竟有什么用,我们直接来看几个例子. Python递归求斐波那契数列 def fibonacc ...
- Python 装饰器填坑指南 | 最常见的报错信息、原因和解决方案
本文为霍格沃兹测试学院学员学习笔记. Python 装饰器简介 装饰器(Decorator)是 Python 非常实用的一个语法糖功能.装饰器本质是一种返回值也是函数的函数,可以称之为“函数的函数”. ...
- Python装饰器:套层壳我变得更强了
Python装饰器:套层壳我变得更强了 Python装饰器:套层壳我变得更强了 关于作用域和闭包可以聊点什么? 什么是作用域 什么是闭包 装饰器:套层壳我变得更强了 参考资料 昨天阅读了<Pyt ...
- 关于python装饰器
关于python装饰器,不是系统的介绍,只是说一下某些问题 1 首先了解变量作用于非常重要 2 其次要了解闭包 def logger(func): def inner(*args, **kwargs) ...
- Python 装饰器学习
Python装饰器学习(九步入门) 这是在Python学习小组上介绍的内容,现学现卖.多练习是好的学习方式. 第一步:最简单的函数,准备附加额外功能 1 2 3 4 5 6 7 8 # -*- c ...
随机推荐
- 摩拜ofo挥师三四线市场 第二梯队面临"团灭"危机
共享单车领域,在一二线主要城市的大规模扩张时期结束,行业内头部企业目标向三四线市场的转移挤压了当地共享单车企业的生存空间,第二梯队的创业公司正面临被“杀死”的危机.上海有多少辆共享单车?答案是150万 ...
- elasticsearch 概念
elasticsearch 来源:https://baike.baidu.com/item/elasticsearch/3411206?fr=aladdin ElasticSearch是一个基于Luc ...
- Sublime Text 插件 【转】
好厉害,好漂亮. http://www.cnsecer.com/460.html 安装Sublime Text 3插件的方法: 朋友们,小站活着不容易,全靠广告费养着了,如果本文对你有帮助.麻烦动下手 ...
- Manacher算法模板
题目描述 给出一个只由小写英文字符a,b,c...y,z组成的字符串S,求S中最长回文串的长度. 字符串长度为n 输入输出格式 输入格式: 一行小写英文字符a,b,c...y,z组成的字符串S 输出格 ...
- 2016 ACM/ICPC亚洲区大连站 F - Detachment 【维护前缀积、前缀和、二分搜索优化】
F - Detachment In a highly developed alien society, the habitats are almost infinite dimensional spa ...
- Going deeper with convolutions(GoogLeNet、Inception)
从LeNet-5开始,cnn就有了标准的结构:stacked convolutional layers are followed by one or more fully-connected laye ...
- Win7系统中哪些服务可以关闭?
Win7系统中很多服务和进程其实大家在平时都用不上,这些服务和进程不仅占用了很大部分的资源,而且还会影响系统的运行速度和安全.我们可以关闭那些不常用的服务和进程来加快系统运行速度,但对于一般的用户来说 ...
- MVC学习四:Razor视图语法
@{ Layout = null; } <hr /> <!DOCTYPE html> @this.GetType().Assembly.Location.ToString() ...
- asp.net 在repeater控件中加按钮
在repeater中加入方法有两种方法: 第一种:是对repeater控件的行添加OnItemCommand事件,添加方法也是有两种 1.在设计页面中,选中repeater控件右击==>属性== ...
- kinect v2
http://www.tuicool.com/articles/NbmyyeU https://channel9.msdn.com/Blogs/raw-tech/Making-your-body-th ...