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中执行,然后再执行下面的
  • 相关阅读:
    win10下VMware15运行ubuntu18.04无法和主机之间复制粘贴问题
    Redis的五种数据类型
    celery的入门使用
    Django/Flask的一些实现方法
    Python3实现简单的钉钉机器人调用
    装饰者模式
    pyhdfs安装
    使用setup.py安装python包和卸载python包的方法
    zookeeper搭建
    S3C6410裸奔之旅——RVDS2.2编译、仿真、调试过程 LED流水灯---转的
  • 原文地址:https://www.cnblogs.com/caicairui/p/7528698.html
Copyright © 2011-2022 走看看