Python函数的冒泡排序、递归以及装饰器

时间:2022-04-22
本文章向大家介绍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中执行,然后再执行下面的