装饰器:说白了就是闭包,但是内部函数调用外部变量调用的是函数,

好处:就是在不用修改原函数代码的前提下给函数增加新的功能

装饰器有两种写法

第一种:

 #被修饰的函数
def say_hello(name):
print('我就是人见人爱,花见花开的%s'%name) # 参数是被修饰函数
def wrapper(func): #1.定义装饰器
def inner(name): #2.定义闭包 在闭包中增加功能
print('-' * 50)
func(name) #3.调用原函数实现原来的功能
print('*' * 50)
return inner #4.返回增强功能的函数 say_hello = wrapper(say_hello) #5.获取增强功能的函数
say_hello('张三') #6. 调用增强函数,实现功能

第二种:

 def wrapper(func):
def inner(age1):
#增加的功能
if age1 < 0:
age1 = 0
#调用原函数
func(age1)
return inner @wrapper #相当于 getAge = wrapper(getage)
def getAge(age):
print(age)
getAge(18) #调用增强的函数

直接在被修饰的函数定义前加@修饰器函数名

多个修饰器函数修饰同一个函数

记得修饰顺序按照远近顺序就行,近的先修饰

 def wrapper1(func):
print("wrapper1~~~~外部函数")
def inner(a,b):
print('wrapper1-----内部函数')
func(a,b)
return inner def wrapper2(func):
print("wrapper2~~~~外部函数")
def inner(a, b):
print("wrapper2~~~~内部函数")
func(a, b)
return inner @wrapper1
@wrapper2
def text(num1,num2):
print(num1 + num2) text(10,20)

递归:一个函数直接或间接调用自己,递归分为正向递归,逆向递归两个过程

一个递归一定包含两个部分:递归结束条件,递归调用自己

 def  recurve(*args,**kw):
if 递归终止条件: #递归终止条件必须在递归调用前
# to do
else:
#to do
recurve(参数)
#to do

python编程基础之二十八的更多相关文章

  1. python编程基础之二十九

    栈和队列: 栈:先进后出,其他没多少特别之处了,一般可以用列表模拟栈,也可以用双端队列,封死一端. 队列:先进先出,也可以用列表模拟,但是一般用库函数,需要导collections 包:主要是为了解决 ...

  2. python编程基础之二十六

    偏函数:当一个函数有大量的参数时候,调用时候非常不方便,于是就可以用偏函数解决,将一些参数固定(默认值),达到简化函数调用的目的 使用偏函数需要导入functools import functools ...

  3. python编程基础之二十五

    匿名函数:不用def 定义的函数,没有函数名 lambda只是一个表达式,函数体比def简单的多 lambda的函数体不再是代码块 lambda只有一行,增加运行效率 lambda [参数1][参数2 ...

  4. python编程基础之二十四

    函数: def 函数名([参数1],[参数2],[参数3], ... ,[参数n]): 函数体代码 函数名命名规则:同标识符命名相同,但是多了一点,不要和系统函数重名,其实所有命名都是一样只要符合标识 ...

  5. python编程基础之二十二

    字典:字典属于可变对象,但是不属于序列,内部是通过哈希方式存储的,内部保存的是一个个键值对key:value 字典的键是唯一的, 字典查找速度比较快 d1 = {}  #括号里面用键值对表示 d2 = ...

  6. python编程基础之二十

    字符串的其他常用方法: ord(char)  # 返回char字符对应的码值,可以是中文字符 chr(x)  # 输入一个unicode码,返回对应的字符 eval(str)  # 将str 中的内容 ...

  7. python接口自动化(二十八)--html测试 报告——下(详解)

    简介 五一小长假已经结束了,想必大家都吃饱喝足玩好了,那就继续学习吧.一天不学习,自己知道:两天不学习,对手知道:三天不学习,大家知道:一周不学习,智商输给猪.好了开个玩笑都逗大家一乐,但是想想还是有 ...

  8. python学习笔记(二十八)日志模块

    我们在写程序的时候经常会打一些日志来帮助我们查找问题,这次学习一下logging模块,在python里面如何操作日志.介绍一下logging模块,logging模块就是python里面用来操作日志的模 ...

  9. VS2010/MFC编程入门之二十八(常用控件:列表视图控件List Control 上)

    前面一节中,鸡啄米讲了图片控件Picture Control,本节为大家详解列表视图控件List Control的使用.      列表视图控件简介 列表视图控件List Control同样比较常见, ...

随机推荐

  1. Spring Boot 利用 nginx 实现生产环境的伪热更新

    当我们在服务器部署Java程序,特别是使用了 Spring Boot 生成单一 Jar 文件部署的时候,单一文件为我们开发单来的极大的便利性,保障程序的完整性.但同时对我们修改程序中的任何一处都带来重 ...

  2. [AWS] Lambda by Python

    当前统治数据分析的语言还是Python,还是暂时走:Python + GPU的常规路线好了. numba, pyculib (分装了cublas) Ref: 使用 Python 构建 Lambda 函 ...

  3. 记一次处理mysql数据库无故锁表的经历

    某日,生产环境上的用户表突然无故锁表,原以为只是偶发的bug.所以第一时间想到的解决方案简单粗暴:重启数据库(service mysqld restart).问题得以解决. 10min后,该表再次锁表 ...

  4. SVN检出后文件没有图标显示

    SVN检出后文件没有图标显示   "Win + R"打开运行框,输入"regedit"打开注册表 在注册表编辑界面按"Ctrl + F"快捷 ...

  5. linux环境下Nginx的配置及使用

    切换到目录/usr/local/nginx/sbin,/usr/local为nginx的默认安装目录 #启动 ./nginx #查看命令帮助 ./nginx -h 验证配置文件状态 ./nginx - ...

  6. 远古框架-SSH maven配置 (包含gson)

    Spring3.2.17+Struts2.3.15+Hibernate3.6.10 <?xml version="1.0" encoding="UTF-8" ...

  7. 暑期——第八周总结(1,安装好hadoop之后访问http://localhost:50070,无法连接【已解决】 2,Hbase命令详解)

    所花时间:7天 代码行:800(Java) 博客量:1篇 了解到知识点 : 一:http://localhost:50070无法访问 安装好hadoop之后 输入所有东西都有 可就是访问50070无法 ...

  8. 《HelloGitHub》第 42 期

    兴趣是最好的老师,HelloGitHub 就是帮你找到兴趣! 简介 分享 GitHub 上有趣.入门级的开源项目. 这是一个面向编程新手.热爱编程.对开源社区感兴趣 人群的月刊,月刊的内容包括:各种编 ...

  9. Centos7搭建Scrapy爬虫环境

    写在前面 因为之前的爬虫环境一直是部署在我自己本地的电脑上的,最近,写了一个监控别人空间的爬虫,需要一直线上24小时运行,所有就打算云服务器上部署环境,也捣鼓了好一会才弄好,还是有一些坑,这里先记录一 ...

  10. java时间格式转换任意格式

    例如:20180918/120023转换成2018-09-18 12:00:23 //时间格式转换 public String getNomalTime(String oldTime){ String ...