闭包:

  内层函数对外层函数的变量(非全局变量)的引用。

  python 遇到闭包,有一个机制,会开辟一个空间,将闭包中的全部变量放入其中。且不会随着函数的结束而关闭。

  闭包的完美体现:装饰器。

打印函数的注释:

def func1():
'''
此函数是完成登陆的功能,参数分别是...作用。
:return:返回值是登陆的成功与否(True,False)
'''
print(666)
print(func1.__name__) #打印函数名
print(func1.__doc__) #打印注释
return True
func1() #
# func1
#
# 此函数是完成登陆的功能,参数分别是...作用。
# :return:返回值是登陆的成功与否(True, False)

放在函数执行外也可以打印:

def func():
'''
此函数是完成登陆的功能,参数分别是...作用。
:return:返回值是登陆成功与否。(True,False)
'''
print(666)
return True
func()
print(func.__name__)
print(func.__doc__) #
# func
#
# 此函数是完成登陆的功能,参数分别是...作用。
# :return:返回值是登陆成功与否。(True,False)

打印日志:

from functools import wraps
def wrapper(f): # f = func1
@wraps(f)
def inner(*args,**kwargs): # 聚合
'''执行函数之前的相关操作'''
ret = f(*args,**kwargs) #打散 1,2,3
'''执行函数之后的相关操作'''
return ret
return inner
@wrapper #func1 = wrapper(func1) func1 = inner
def func1():
'''
此函数是完成登录功能,参数分别是...作用。
:return: 返回值是成功与否(True,False)
'''
print(666)
return True
func1()
print(func1.__name__)
print(func1.__doc__) #
# func1
#
# 此函数是完成登录功能,参数分别是...作用。
# :return: 返回值是成功与否(True,False)

多个装饰器装饰一个函数:

def wrapper1(func):    #func == f 函数名
def inner1():
print('wrapper1,before func') #
func()
print('wrapper1,after func') #
return inner1 def wrapper2(func):
def inner2():
print('wrapper2,before func') #
func()
print('wrapper2,after func') #
return inner2 @wrapper2 # 后 # f = warpper2(f) 里面的f == inner1 外面的 f == inner2
@wrapper1 # 先 # f = wrapper1(f) 里面的f == 函数名 f 外面的 f == inner1
def f():
print('in f') #
f() # wrapper2,before func
# wrapper1,before func
# in f
# wrapper1,after func
# wrapper2,after func

多个装饰器装饰一个函数的打印顺序:

可引用全局变量,但不能修改,用global 才能修改。

a = 6
def func1():
global a
a = a+1
print(a)
func1()

用标志位,来决定是否执行装饰器:

import time
def timer(*args,**kwargs):
def wrapper(f):
def inner(*args,**kwargs):
if flag:
start_time = time.time()
ret = f(*args,**kwargs)
time.sleep(0.3)
end_time = time.time()
print('此函数的执行效率%f' % (end_time-start_time))
else:
ret = f(*args,**kwargs)
return ret
return inner
return wrapper
flag = True
@timer(flag) #两步: . timer(flag) --> wrappen . @wrapper
def func1():
print()
@timer(flag)
def func2():
print()
func1()
func2()

python's twelth day for me的更多相关文章

  1. Python中的多进程与多线程(一)

    一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...

  2. Python高手之路【六】python基础之字符串格式化

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  3. Python 小而美的函数

    python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况   any any(iterable) ...

  4. JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议

    软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...

  5. 可爱的豆子——使用Beans思想让Python代码更易维护

    title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...

  6. 使用Python保存屏幕截图(不使用PIL)

    起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...

  7. Python编码记录

    字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...

  8. Apache执行Python脚本

    由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...

  9. python开发编译器

    引言 最近刚刚用python写完了一个解析protobuf文件的简单编译器,深感ply实现词法分析和语法分析的简洁方便.乘着余热未过,头脑清醒,记下一点总结和心得,方便各位pythoner参考使用. ...

随机推荐

  1. Workflow Builder 2.6.3 Certified on Windows 10 for EBS 12.x

    By Steven Chan - EBS-Oracle on May 17, 2016 Workflow Builder 2.6.3 is now certified on Windows 10 de ...

  2. MySQL-5.7复制功能的默认设置改进

    1. 默认开启简化的GTID 恢复 Binlog_gtid_simple_recovery=TURE(默认值)      这个参数控制了当mysql启动或重启时,mysql在搜寻GTIDs时是如何迭代 ...

  3. react_webpack.prod.config

    const path = require('path'); const webpack = require('webpack'); const jquery = require('jquery'); ...

  4. phpcms内容限制(转发自王小明爱红领巾)

    因为页面显示需要对文章内容做剪切,所以用到{str_cut($r[content],60)},但是出现了乱码 所以 {str_cut(strip_tags($r[content]),60)}加stri ...

  5. Ubuntu和Windows文件Samba共享

    1.在Ubuntu下配置Samba共享文件夹/work和/work1 1.1.安装samba sudo apt-get install samba

  6. Leetcode22. Generate Parentheses(生成有效的括号组合)

    (尊重劳动成果,转载请注明出处:http://blog.csdn.net/qq_25827845/article/details/74937307冷血之心的博客) 题目如下:

  7. Electron 使用 Webpack2 预编译 Electron 和 Browser targets

    Electron 使用 Webpack2 预编译 Electron 和 Browser targets 前一篇文章说了说怎样使用 Webpack2 预编译 Electron 应用,但是有时候我们希望使 ...

  8. canvas实现点击带水纹的按钮

    咱今天在闲逛网页时,看到一个点击带水纹的按钮特效,尼玛,写的还挺好,先看效果: 于是就奔着升级版的拿来主义,别人的好东西,咱都要拿来滴,so,扒代码! 完整代码在最后,是经过我的改进优化滴. 在这里先 ...

  9. JAVA视频链接

    Java基础Java马士兵:链接:https://pan.baidu.com/s/1jJRvxGi密码:v3xb Java刘意:链接:https://pan.baidu.com/s/1kVZQCqr密 ...

  10. Windows下运行Hadoop

    Windows下运行Hadoop,通常有两种方式:一种是用VM方式安装一个Linux操作系统,这样基本可以实现全Linux环境的Hadoop运行:另一种是通过Cygwin模拟Linux环境.后者的好处 ...