Python_函数的有用信息、带参数的装饰器、多个装饰器装饰一个函数
函数的有用信息
代码1:
def login(username, password):
"""
此函数需要用户名,密码两个参数,完成的是登录的功能。
:return: True 登录成功。 False登录失败。
"""
print(login.__name__)
print(login.__doc__)
print('登录成功...')
return True print(login.__name__)
print(login.__doc__)
函数的有用信息__代码1:
结果:
D:\Python36\python.exe "E:/Python/课堂视频/day12视频与课堂笔记/day12课堂笔记/day12/03 函数的有用信息.py"
login 此函数需要用户名,密码两个参数,完成的是登录的功能。
:return: True 登录成功。 False登录失败。 Process finished with exit code 0
示例1结果
函数名.__name__ 显示函数名
函数名.__doc__ 显示函数的说明信息
代码2:
def wrapper(f):
def inner(*args, **kwargs):
print(f.__name__)
print(f.__doc__)
"""执行函数之前的操作"""
ret = f(*args, **kwargs)
"""执行函数之后的操作"""
return ret
return inner @wrapper
def login(username, password):
"""
此函数需要用户名,密码两个参数,完成的是登录的功能。
:return: True 登录成功。 False登录失败。
"""
print('登录成功...')
return True print(login.__name__)
print(login.__doc__)
login(1, 2)
函数的有用信息__代码2:
结果:
D:\Python36\python.exe "E:/Python/课堂视频/day12视频与课堂笔记/day12课堂笔记/day12/03 函数的有用信息.py"
inner
None
login 此函数需要用户名,密码两个参数,完成的是登录的功能。
:return: True 登录成功。 False登录失败。 登录成功... Process finished with exit code 0
示例2结果
代码3:
from functools import wraps def wrapper(f):
@wraps(f)
def inner(*args, **kwargs):
"""执行函数之前的操作"""
ret = f(*args, **kwargs)
"""执行函数之后的操作"""
return ret
return inner @wrapper
def login(username, password):
"""
此函数需要用户名,密码两个参数,完成的是登录的功能。
:return: True 登录成功。 False登录失败。
"""
a = 2
c = 4
print('登录成功...')
return True print(login.__name__)
print(login.__doc__)
for i in login.__dict__:
print(i)
print(dir(login))
函数的有用信息__代码3
结果:
D:\Python36\python.exe "E:/Python/课堂视频/day12视频与课堂笔记/day12课堂笔记/day12/03 函数的有用信息.py"
login 此函数需要用户名,密码两个参数,完成的是登录的功能。
:return: True 登录成功。 False登录失败。 __wrapped__
['__annotations__', '__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__get__', '__getattribute__', '__globals__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__kwdefaults__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__wrapped__'] Process finished with exit code 0
示例3结果
带参数的装饰器
代码:
def timer_out(flag1): # falg1 = flag
def timer(f):
def inner(*args, **kwargs):
if flag1:
start_time = time.time()
time.sleep(0.3)
ret = f(*args, **kwargs)
end_time = time.time()
print('执行效率%s' % (end_time - start_time))
return ret
else:
ret = f(*args, **kwargs)
return ret return inner return timer flag = False @timer_out(flag) # 1,步 timer_out(flag) == timer 2,@与timer结合,变成你熟悉的装饰器 @timer
def func1():
print(111) @timer_out(flag)
def func2():
print(222) @timer_out(flag)
def func3():
print(333) func1()
func2()
func3()
带参数的装饰器__示例:
结果:
D:\Python36\python.exe "E:/Python/课堂视频/day12视频与课堂笔记/day12课堂笔记/day12/04 带参数的装饰器.py"
111
222
333 Process finished with exit code 0
示例结果
局部只能引用全局的变量,不能修改,如果要修改,global。
count = 1 def func4():
count = count + 1
print(count) func4()
global
结果:
D:\Python36\python.exe "E:/Python/课堂视频/day12视频与课堂笔记/day12课堂笔记/day12/04 带参数的装饰器.py"
Traceback (most recent call last):
File "E:/Python/课堂视频/day12视频与课堂笔记/day12课堂笔记/day12/04 带参数的装饰器.py", line 54, in <module>
func4()
File "E:/Python/课堂视频/day12视频与课堂笔记/day12课堂笔记/day12/04 带参数的装饰器.py", line 51, in func4
count = count + 1
UnboundLocalError: local variable 'count' referenced before assignment Process finished with exit code 1
示例结果
子函数只能引用父函数的变量,不能修改,如果要修改,nonlocal。
def func4():
count = 3
def inner():
nonlocal count
count = count + 1
print(count)
func4()
nonlocal
结果:
D:\Python36\python.exe "E:/Python/课堂视频/day12视频与课堂笔记/day12课堂笔记/day12/04 带参数的装饰器.py" Process finished with exit code 0
示例结果
多个装饰器装饰一个函数
def wrapper1(func): # func = f函数名
def inner1():
print('wrapper1 ,before func') #
func()
print('wrapper1 ,after func') #
return inner1 def wrapper2(func): # func = inner1
def inner2():
print('wrapper2 ,before func') #
func() # inner1()
print('wrapper2 ,after func') #
return inner2 @wrapper2 # f = wrapper2(f) 里面的f新变量 = inner1 外面的f最新变量 = inner2
@wrapper1 # f = wrapper1(f) 里面的f函数名 外面的f新变量=inner1
def f():
print('in f') # f()
示例
结果:
D:\Python36\python.exe "E:/Python/课堂视频/day12视频与课堂笔记/day12课堂笔记/day12/05 多个装饰器装饰一个函数.py"
wrapper2 ,before func
wrapper1 ,before func
in f
wrapper1 ,after func
wrapper2 ,after func Process finished with exit code 0
示例结果
Python_函数的有用信息、带参数的装饰器、多个装饰器装饰一个函数的更多相关文章
- python 全栈开发,Day12(函数的有用信息,带参数的装饰器,多个装饰器装饰一个函数)
函数的执行时,*打散.函数的定义时,*聚合. from functools import wraps def wrapper(f): # f = func1 @wraps(f) def inner(* ...
- python:带参数的装饰器,函数的有用信息
一.带参数的装饰器,函数的有用信息 def func1(): '''此函数的功能是完成的登陆的功能 return: 返回值是登陆成功与否(true,false) ''' print(333) func ...
- 函数的有用信息,装饰器 day12
一 函数的有用信息 本函数的功能:绘图功能,实时接收数据并绘图.:return: 绘图需要的数据,返回给前端某标签 def f1(): ''' 本函数的功能:绘图功能,实时接收数据并绘图. :retu ...
- Python之函数的进阶(带参数的装饰器)
函数篇--装饰器二 带参数的装饰器 def outer(flag): def timer(func): def inner(*args,**kwargs): if flag: print('''执行函 ...
- python全栈开发day12-函数的有用信息、带参数的装饰器、多个装饰器装饰一个函数、global和nonlocal的进一步解析和总结
1.上周回顾 1).函数名的应用 直接打印函数名,是函数的地址 变量 函数的参数 函数的返回值 可以当容器类数据类型的元素 2).闭包 内层函数对外层函数的非全局变量的引用,就是闭包. 并返回内部函数 ...
- C++: 带参数回调函数和不带参数的回调函数;
在C++中,回调函数的应用比较广泛且重要. 通过传递函数指针到其他地方,能够实现远程回调的作用,能够实现远程调用而不需要事件触发信号或者其他机制来实现,方便而快捷: 首先,回调函数有两种形式: 静态 ...
- JS中setInterval、setTimeout不能传递带参数的函数的解决方法
setInterval 和 setTimeout 这两个函数比较好用,但会遇到比如说我隔个几秒后要执行的函数是带参数的,这种情况怎么办?可以用匿名函数包装处理 //不带参数的函数 function t ...
- 装饰器1、无参数的装饰器 2、有参数的装饰器 3、装饰器本身带参数的以及如果函数带return结果的情况
装饰器分成三种: 1.无参数的: 2.有参数的: 3.装饰器本身带参数的. 装饰器decorator又叫语法糖 定义:本质是函数,器就是函数的意思.装饰其他函数.就是为其他函数添加附加功能. 原则: ...
- Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)
Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列) 一丶带参数的装饰器 def wrapper_out(pt): def wrapper(func): ...
随机推荐
- Servlet(二):初识Servlet
在手动写完一个Servlet小例子后,是不是有很多疑问,接下来会为大家详细介绍Servlet的知识. 1.什么是Servlet 是在服务器上运行的小程序.一个servlet就是一个Java类,并且可以 ...
- 面试总结——Java篇
前言:前期对Java基础的相关知识点进行了总结,具体参看:Java基础和面试知识点.近期由于笔者正在换工作(ing),因此下面将笔者在面试过程中或笔者朋友面试过程中反馈的题目进行总结,相信弄清楚下面题 ...
- googLeNet网络
1.什么是inception结构 2.什么是Hebbian原理 3.什么是多尺度处理 最近深度学习的发展,大多来源于新的想法,算法以及网络结构的改善,而不是依赖于硬件,新的数据集,更深的网络,并且深度 ...
- Nginx+Keepalived双机热备
一.Keepalived Keepalived是保证集群高可用的服务软件.网络中优先级高的节点为master负责响应VIP的ARP包,将VIP和MAC地址映射关系告诉网络内其他主机,还会以多播的形式向 ...
- 使用ECharts来实现地图下钻功能(某省的市级下钻到县级)
var cityMap = { "长沙市": "430100", "株洲市": "430200", "湘潭市& ...
- windows server 2012 安装 VC14(VC2015) 安装失败解决方案
原文地址:https://www.cnblogs.com/huoniao/articles/6186021.html 系统环境如下:cmd命令行-输入 systeminfo 如下图 - The VC1 ...
- 當 Alexa 遇上 ESP8266 (一)
https://www.birdandgua.net/bird/2017/12/when_alexa_meets_esp8266-1/ 去年的 AWS 的 re:Invent 上,我見識了 Alexa ...
- Django 分页器
Django作为Python Web开发框架的一哥,提供了企业级网站开发所需要的几乎所有功能,其中就包括自带分页功能.利用Django自带的Paginator类,我们可以很轻松地实现分页.Django ...
- js 动态调用字符串方法并传入对应参数
在项目应用中,经常会需要根据业务数据需要动态去拼凑字符串,然后将字符串作为js代码进行执行. js提供eval()来支持.这里分享一个调用函数并传入需要参数的一个方法demo //动态调用自定义js方 ...
- mysql中添加索引
创建普通索引 alter table xxxxxx add index index_name(xxxxxxx) 表名↑ 列 ...