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中执行,然后再执行下面的
Python函数的冒泡排序、递归以及装饰器的更多相关文章
- python函数知识七 闭包、装饰器一(入门)、装饰器二(进阶)
21.闭包 闭包:在嵌套函数内,使用非全局变量(且不使用本层变量) 闭包的作用:1.保证数据的安全性(纯洁度).2.装饰器使用 .__closure__判断是否是闭包 def func(): a = ...
- Python函数小结(2)-- 装饰器、 lambda
本篇依然是一篇学习笔记,文章的结构首先讲装饰器,然后讲lambda表达式.装饰器内容较多,先简要介绍了装饰器语法,之后详细介绍理解和使用不带参数装饰器时应当注意到的一些细节,然后实现了一个简单的缓存装 ...
- python函数(3):装饰器
昨天学了很多函数方面的概念和知识其中有一个闭包的函数.很多人都对闭包的作用不是很清楚,今天我们就来认识一个新的知识点装饰器.它就是闭包函数的一个经典应用. 预习: 编写装饰器,为多个函数加上认证的功能 ...
- Python函数篇(5)-装饰器及实例讲解
1.装饰器的概念 装饰器本质上就是一个函数,主要是为其他的函数添加附加的功能,装饰器的原则有以下两个: 装饰器不能修改被修饰函数的源代码 装饰器不能修改被修改函数的调用方式 装饰器可以简单的理 ...
- python 函数及变量作用域及装饰器decorator @详解
一.函数及变量的作用 在python程序中,函数都会创建一个新的作用域,又称为命名空间,当函数遇到变量时,Python就会到该函数的命名空间来寻找变量,因为Python一切都是对象,而在命名空间中 ...
- python函数作用域,闭包,装饰器
第一:函数作用域: L:local 函数内部作用域 E:enclosing 函数内部与内嵌函数之间(闭包) G:global 全局作用域 B:build_in ...
- Python函数进阶:闭包、装饰器、生成器、协程
返回目录 本篇索引 (1)闭包 (2)装饰器 (3)生成器 (4)协程 (1)闭包 闭包(closure)是很多现代编程语言都有的特点,像C++.Java.JavaScript等都实现或部分实现了闭包 ...
- Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)
Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列) 一丶带参数的装饰器 def wrapper_out(pt): def wrapper(func): ...
- python --> 递归 以及装饰器
一.递归知识 函数迭套执行,逐层执行之后,满足某个条件之后就会停止执行,将return值返回上层的函数,上层函数再逐层返回,最终返回给最初始函数. 递归在斐波那契数列的应用[斐波那契数列特点:前两个数 ...
随机推荐
- AngularJS:参考手册
ylbtech-AngularJS:参考手册 1.返回顶部 1. AngularJS 参考手册 AngularJS 指令 本教程用到的 AngularJS 指令 : 指令 描述 ng-app 定义应用 ...
- 【OpenCV】图像代数运算:平均值去噪,减去背景
代数运算,就是对两幅图像的点之间进行加.减.乘.除的运算.四种运算相应的公式为: 代数运算中比较常用的是图像相加和相减.图像相加常用来求平均值去除addtive噪声或者实现二次曝光(double-ex ...
- Java学习之系统高可用性渲染接口日志自动服务降级
背景:公司都追求系统的高可用性,这里不可用时间就是其中很重要的一个指标,为此在做系统功能升级迭代的过程中如何快速处理异常恢复正常功能极为重要.现在对新增模块的要求是都增加开关,方便快速关闭异常模块,但 ...
- Rails的静态资源管理(一)——Asset Pipeline是什么
官方文档:http://guides.ruby-china.org/asset_pipeline.html http://guides.rubyonrails.org/asset_pipeline.h ...
- SQL 2008提供几种数据同步方式
SQL 2008提供几种数据同步的方式如下. 1.日志传送(Log Shipping),定时将主数据库的日志备份,恢复到目标数据库. 2.数据库镜像(Database Mirror),原理同日志传送, ...
- SpringMVC工作原理图解
SpringMVC的工作原理图: SpringMVC流程 1. 用户发送请求至前端控制器DispatcherServlet. 2. DispatcherServlet收到请求调用HandlerMa ...
- jackson 进行json与java对象转换 之二
主要用于测试学习用jackson包实现json.对象.Map之间的转换. 1.准备测试用的Java类 (1)Link类 package test; /** * Description: 联系方式,被u ...
- 问题:table 可否实现对角线;结果:用div+css模拟表格对角线
首先声明: 这只是探讨一种CSS模拟表格对角线的用法,实际在工作中可能觉得这样做有点小题大作,这不是本主题讨论的重点.如果对此深以为然的朋友,请一笑过之... 有时在插入文档时,要用到表格对角线,常见 ...
- LAMP 2.2 Apache配置静态缓存
这里的静态文件指的是图片.js.css 等文件,用户访问一个站点,其实大多数元素都是图片.js.css 等,这些静态文件其实是会被客户端的浏览器缓存到本地电脑上的,目的就是为了下次再请求时不再去服务器 ...
- java中sleep()的用法
Thread.sleep(long millis)和Thread.sleep(long millis, int nanos)静态方法强制当前正在执行的线程休眠(暂停执行),以“减慢线程”. 当线程睡眠 ...