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参考使用. ...
随机推荐
- chm下载地址收集
Js_chm http://jjidc.jb51.net:81/201007/books/W3C_javascript.rar jQuery_1.7_chm http://jjidc.jb5 ...
- 【51nod-1183】编辑距离
链接:https://www.51nod.com/onlineJudge/questionCode.html#!problemId=1183 #include <bits/stdc++.h> ...
- hdu4619
题解: 最大独立集问题 显然对于每一对交叉的建边 然后求出最大独立集 最大独立集=n-最大匹配 代码: #include<cstdio> #include<cmath> #in ...
- List排序共通代码
此共通方法可以根据特定字段进行排序 package com.gomecar.index.common.utils; import java.lang.reflect.Method; import ja ...
- c++使用http协议上传文件到七牛云服务器
使用c++ http协议上传文件到七牛服务器时,比较搞的一点就是header的设置: "Content-Type:multipart/form-data;boundary=xxx" ...
- 21天学通C++_Day1
被阿里实习生的第一轮电话面试刷掉以后,幡然醒悟,发现以前学习的C++基础一点都不扎实.为了把基础打扎实,重新学习一遍:为了让自己不放弃,也顺便可以把当天学到的东西记录下来,开始了写博客. 学习书籍:& ...
- c++11新特性之宽窄字符转换
C++11增加了unicode字面量的支持,可以通过L来定义宽字符:str::wstring str = L"中国人": 将宽字符转换为窄字符串需要用到codecvt库中的std: ...
- 剑指offer-第二章数据结构(数组,字符串,链表,树,栈与队列)及例题
一.数组(最简单的数据结构) 定义:占据一块连续内存并按照顺序存储数据.创建时先指定大小,分配内存. 优点:时间效率高.实现简单的hash(下标为key,对应的数据为value) 缺点:空间效率差.如 ...
- HTTP 和 SOAP
http:是一个客户端和服务器端请求和应答的标准(TCP).http协议其目的是为了提供一种发布和接收htttp页面的方法 一http协议的客户端与服务器的交互:由HTTP客户端发起一个请求,建立一个 ...
- 【学习笔记】Manacher算法
本文部分图片来源 代码来源(代码是学姐哒.. 一.引入 Manacher算法是用来求最长回文子串的算法,时间复杂度O(n). 回文子串指的是''aacaa'',''noon'',这种正着反着读都一样的 ...