zoukankan      html  css  js  c++  java
  • Python函数的冒泡排序、递归以及装饰器

    函数的冒泡排序:

    本质是,让元素换位置,逐个比较最终排序。

    例1:实现a1,a2值互换:

    a1 = 123
    a2 = 456
    
    temp = a1
    a1 = a2
    a2 = temp
    print(a1)
    print(a2)
    
    结果:
    456
    123
    

    冒泡排序:

    #!/bin/bash/env python
    # -*- coding:utf-8 -*-
    
    li =  [22,1,5,4,3,66,22,12,34,21]
    
    for j in range(1,len(li)):
        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)
    
    结果:
    [1, 3, 4, 5, 12, 21, 22, 22, 34, 66]
    

    递归:

    在函数内部可以调用其他函数。如果一个函数在内部调用自己,这个函数就是递归函数。

    例:

    #!/bin/bash/env python
    
    def f4(a1,a2):
        if a1 > 10000:
            return
        print(a1)
    
        a3 = a1 + a2
        f4(a2,a3)
    
    f4(0,1)
    
    结果:
    0
    1
    1
    2
    3
    5
    8
    13
    21
    34
    55
    89
    144
    233
    377
    610
    987
    1597
    2584
    4181
    6765
    

    函数装饰器:

    装饰器的目的:当要修改一段代码时,而不进行内部的修改,这就需要在外部加装饰器来达到效果。

    原函数执行之前进行的操作:

    #!/bin/bash/env python
    
    def outer(func):
        def inner():
            print('hello')
            print('let is')
            print('moumou')
            r = func()
            return r
        return inner
    @outer
    def func1():
        print('yes')
    
    func1()
    
    结果:
    hello
    let is
    moumou
    yes
    

    函数执行之后进行操作:

    def outer(func):
        def inner():
    
            r = func()
            print('hello')
            print('let is')
            print('moumou')
            return r
        return inner
    @outer
    def func1():
        print('yes')
    
    func1()
    
    结果:
    yes
    hello
    let is
    moumou
    

    @的功能:先执行outer函数,然后把发f1当做参数传给oute。, 将outer的返回值重新赋值给f1,所以f1的函数就等于inner()

    只要函数应用装饰器,那么函数就被重新定义,重新定义为:装饰器的内层函数。

    多个参数装饰器传递:

    #!/bin/bash/env python
    
    def outer(func):
        def inner(*args,**kwargs):
            print(args)
            print(kwargs)
            ret = func(*args,**kwargs)
            return ret
        return inner
    
    @outer
    def func1(a1,a2,a3):
        print("yes")
        return a1 + a2 +a3
    
    func1(11,22,33)
    
    结果:
    (11, 22, 33)
    {}
    yes
    

    多个装饰器的应用:

    #!/bin/bash/env python
    
    def outer(func):
        def inner(*args,**kwargs):
            print('cai')
            ret = func(*args,**kwargs)
            print('rui')
            return ret
        return inner
    
    def outer1(func):
        def inner1(*args,**kwargs):
            print('123')
            ret = func(*args,**kwargs)
            return ret
        return inner1
    
    @outer1
    @outer
    def func1(a1,a2,a3):
        print("yes")
    
    
    func1(11,22,33)
    
    结果:
    123
    cai
    yes
    rui
    

    分析:

      

    先把outer和func1看做一个整体,把inner放在outer1中执行,然后再执行下面的
  • 相关阅读:
    spring mvc DispatcherServlet详解之一---处理请求深入解析
    spring mvc DispatcherServlet详解之前传---前端控制器架构
    [推荐]趣味剖析Spring5核心原理
    源码揭秘mybatis日志实现的原理
    mybatis返回自增主键踩坑记
    根据身份证号码判定原籍地的方法
    深入源码解析spring aop实现的三个过程
    匆忙--一个大龄十年老程序员战战兢兢的应对中年危机的2019年总结与2020年展望
    Java 趟坑录
    迷你MVVM框架 avalonjs1.5 入门教程
  • 原文地址:https://www.cnblogs.com/caicairui/p/7528698.html
Copyright © 2011-2022 走看看