闭包:

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

  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. python3 on macos with vscode

    brew install python3 python3 -m pip install pylint python3 -m pip install autopep8 python3 -m pip in ...

  2. 列出远程git的全部分支

    列出全部分支 git ls-remote --heads your.git | awk 'sub(/refs\/heads\//,""){print $2}' 其中awk中sub替 ...

  3. POI使用总结

    一. POI简介 Apache POI是Apache软件基金会的开放源码函式库,POI提供API给Java程序对Microsoft Office格式档案读和写的功能.二. HSSF概况 HSSF 是H ...

  4. 【zzulioj-2115】乘积最大(区间dp)

    题目描述 今年是国际数学联盟确定的“2000——世界数学年”,又恰逢我国著名数学家华罗庚先生诞辰90周年.在华罗庚先生的家乡江苏金坛,组织了一场别开生面的数学智力竞赛的活动,你的一个好朋友XZ也有幸得 ...

  5. Android中从SD卡中获取歌词并与歌曲同步

    先看看效果图吧,再看代码 转换文件的编码格式 package com.xm; import java.io.BufferedInputStream; import java.io.BufferedRe ...

  6. mono developer 无法启动 可以试试如下插件包.

    http://download.xamarin.com/GTKforWindows/Windows/gtk-sharp-2.12.22.msi 我以前装的旧版unity 再装了新的版本以后 mono ...

  7. 解决pip安装太慢的问题

    经常在使用Python的时候需要安装各种模块,而pip是很强大的模块安装工具,但是由于国外官方pypi经常被墙,导致不可用,所以我们最好是将自己使用的pip源更换一下,这样就能解决被墙导致的装不上库的 ...

  8. Django初体验——搭建简易blog

    前几天在网上看到了篇采用Django搭建简易博客的视频,好奇心驱使也就点进去学了下,毕竟自己对于Django是无比敬畏的,并不是很了解,来次初体验. 本文的操作环境:ubuntu.python2.7. ...

  9. 【学习】JennyHui学自动化测试

    学习材料:虫师的Python书,乙醇的教程 Selenium 常用的键盘事件 智能等待 处理富文本框 定位 界面数据与数据库数据对比 Excel操作 下载文件 Selenium 2.0 学习笔记 == ...

  10. Spring和MyBatis整合

    前言:在前面一篇文章中,介绍了单独使用MyBatis连接orace的例子,在这里分享学习下Spring和MyBatis是如何整合的,以具体工程为例子 阅读目录: 1.环境准备 2.搭建工程 2.1.a ...