python's twelth day for me
闭包:
内层函数对外层函数的变量(非全局变量)的引用。
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的更多相关文章
- Python中的多进程与多线程(一)
一.背景 最近在Azkaban的测试工作中,需要在测试环境下模拟线上的调度场景进行稳定性测试.故而重操python旧业,通过python编写脚本来构造类似线上的调度场景.在脚本编写过程中,碰到这样一个 ...
- Python高手之路【六】python基础之字符串格式化
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- Python 小而美的函数
python提供了一些有趣且实用的函数,如any all zip,这些函数能够大幅简化我们得代码,可以更优雅的处理可迭代的对象,同时使用的时候也得注意一些情况 any any(iterable) ...
- JavaScript之父Brendan Eich,Clojure 创建者Rich Hickey,Python创建者Van Rossum等编程大牛对程序员的职业建议
软件开发是现时很火的职业.据美国劳动局发布的一项统计数据显示,从2014年至2024年,美国就业市场对开发人员的需求量将增长17%,而这个增长率比起所有职业的平均需求量高出了7%.很多人年轻人会选择编 ...
- 可爱的豆子——使用Beans思想让Python代码更易维护
title: 可爱的豆子--使用Beans思想让Python代码更易维护 toc: false comments: true date: 2016-06-19 21:43:33 tags: [Pyth ...
- 使用Python保存屏幕截图(不使用PIL)
起因 在极客学院讲授<使用Python编写远程控制程序>的课程中,涉及到查看被控制电脑屏幕截图的功能. 如果使用PIL,这个需求只需要三行代码: from PIL import Image ...
- Python编码记录
字节流和字符串 当使用Python定义一个字符串时,实际会存储一个字节串: "abc"--[97][98][99] python2.x默认会把所有的字符串当做ASCII码来对待,但 ...
- Apache执行Python脚本
由于经常需要到服务器上执行些命令,有些命令懒得敲,就准备写点脚本直接浏览器调用就好了,比如这样: 因为线上有现成的Apache,就直接放它里面了,当然访问安全要设置,我似乎别的随笔里写了安全问题,这里 ...
- python开发编译器
引言 最近刚刚用python写完了一个解析protobuf文件的简单编译器,深感ply实现词法分析和语法分析的简洁方便.乘着余热未过,头脑清醒,记下一点总结和心得,方便各位pythoner参考使用. ...
随机推荐
- linux中的权限管理命令
一. 改变文件或目录的权限:chmod 命令详解 命令名称:chmod 命令所在路径:/bin/chmod 执行权限:所有用户 语法:chmod [{ugoa}{+-=}{rwx}] [文件或目录] ...
- HAWQ取代传统数仓实践(十四)——事实表技术之累积快照
一.累积快照简介 累积快照事实表用于定义业务过程开始.结束以及期间的可区分的里程碑事件.通常在此类事实表中针对过程中的关键步骤都包含日期外键,并包含每个步骤的度量,这些度量的产生一般都会滞后于数据行的 ...
- poj3107(dfs,树形dp)
和poj1655的方法完全一样,但是这道题的n的范围大了,用vector存图会TLE(poj没有O2编译优化),所以改用前向星来存图就可以了.. 有关树的重心,看这里:poj1655 这里解释一下前向 ...
- 常用的两个PHP类
/** * Class Interval * @author logonmy * @desc 简单分析程序执行时间: */ Class Interval{ var $start; publ ...
- rebar自定义template
在开发过程中rebar自带模板建立项目,或多或少不能满足自己的开发需求.本人又是那种懒人,所以就要想办法偷懒.查看了priv模板 打造适合自己的项目模板.下面我简单的介绍整个模板的打造过程. 准备过程 ...
- Apache的Mod_rewrite学习 (RewriteCond重写规则的条件) 转
RewriteCondSyntax: RewriteCond TestString CondPattern [flags] RewriteCond指令定义一条规则条件.在一条RewriteRule指令 ...
- 剑指offer-第六章面试中的各项能力(和为S的两个数字VS和为S的连续正序列)
题目1:输入一个排序数组和一个值S,输出数组中两个数的和为S的任意一对数. 思路:分别用两个指针指向数组的头start和尾end.如果两个数字之和等于S输出.如果打于,则end--,再次相加.因此循环 ...
- jfrog artifactory docker 安装试用
预备环境(docker 安装模式,使用的免费版本): docker-ce (启用镜像加速) 1. 镜像拉取 docker.bintray.io/jfrog/artifactory-oss 2. 启动 ...
- C#检测应用程序重复启动----函数检测(可以在多用户登录情况下检测)
上文是在网上找的检测程序重复运行的类,但是感觉不是很好用,而且还使用了API,似乎完全没有必要,于是晚上自己写了一个函数,经过测试,在多用户下仍然可以检测到程序的多次运行.当然,如果程序改了名字还是可 ...
- FastAdmin 出现慢的问题 (DB host)
FastAdmin 出现慢的问题 用户反馈断网后 FastAdmin 后台变慢. 而且是很多同事出现一样的现象. 查看了 runtime / log 里的日志,发现 DB 时间超过 20s. 经过群里 ...