冒泡排序

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

最新文章

  1. Selenium-java-testng插件安装eclipse
  2. Swift的关键字
  3. C指针(一)
  4. SpringBoot读取配置文件
  5. RunLoop(官方文档翻译)
  6. java集合比较
  7. java中InvocationHandler 用于实现代理。
  8. 【python网络编程】使用rsa加密算法模块模拟登录新浪微博
  9. chrome浏览器不允许记忆登录账户的方法
  10. Thinkphp单字母快捷键
  11. php5.2 连接 SQL Server2008
  12. "由于这台计算机没有远程桌面客户端访问许可证,远程会话被中断"的解决方案
  13. 【MySQL】frm文件解析
  14. iOS & Mac 调试命令(VMMap&Top)
  15. Lync 2010升级到Lync 2013POC计划-过程!
  16. phpstorm+wamp+xdebug配置php调试环境
  17. 设计模式 --> (4)建造者模式
  18. kafka 客户端 consumer 配置参数
  19. centos系统java后台运行(xshll关掉不至于jar程序结束)
  20. Problem A: STL——灵活的线性表

热门文章

  1. Mantis查看问题列表的列名修改_"P","#"两列
  2. ORACLE_DELETE
  3. php 四种基本排序算法
  4. 移动端调试工具weinre
  5. JS 排序:冒泡、 二分搜索 /折半搜索 half-interval search
  6. March 24 2017 Week 12 Friday
  7. MHA 一主一从搭建
  8. HDU 1298 T9【字典树增加||查询】
  9. 安装 centos7
  10. C++/C 内存大小