函数的有用信息

  代码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_函数的有用信息、带参数的装饰器、多个装饰器装饰一个函数的更多相关文章

  1. python 全栈开发,Day12(函数的有用信息,带参数的装饰器,多个装饰器装饰一个函数)

    函数的执行时,*打散.函数的定义时,*聚合. from functools import wraps def wrapper(f): # f = func1 @wraps(f) def inner(* ...

  2. python:带参数的装饰器,函数的有用信息

    一.带参数的装饰器,函数的有用信息 def func1(): '''此函数的功能是完成的登陆的功能 return: 返回值是登陆成功与否(true,false) ''' print(333) func ...

  3. 函数的有用信息,装饰器 day12

    一 函数的有用信息 本函数的功能:绘图功能,实时接收数据并绘图.:return: 绘图需要的数据,返回给前端某标签 def f1(): ''' 本函数的功能:绘图功能,实时接收数据并绘图. :retu ...

  4. Python之函数的进阶(带参数的装饰器)

    函数篇--装饰器二 带参数的装饰器 def outer(flag): def timer(func): def inner(*args,**kwargs): if flag: print('''执行函 ...

  5. python全栈开发day12-函数的有用信息、带参数的装饰器、多个装饰器装饰一个函数、global和nonlocal的进一步解析和总结

    1.上周回顾 1).函数名的应用 直接打印函数名,是函数的地址 变量 函数的参数 函数的返回值 可以当容器类数据类型的元素 2).闭包 内层函数对外层函数的非全局变量的引用,就是闭包. 并返回内部函数 ...

  6. C++: 带参数回调函数和不带参数的回调函数;

    在C++中,回调函数的应用比较广泛且重要. 通过传递函数指针到其他地方,能够实现远程回调的作用,能够实现远程调用而不需要事件触发信号或者其他机制来实现,方便而快捷: 首先,回调函数有两种形式:  静态 ...

  7. JS中setInterval、setTimeout不能传递带参数的函数的解决方法

    setInterval 和 setTimeout 这两个函数比较好用,但会遇到比如说我隔个几秒后要执行的函数是带参数的,这种情况怎么办?可以用匿名函数包装处理 //不带参数的函数 function t ...

  8. 装饰器1、无参数的装饰器 2、有参数的装饰器 3、装饰器本身带参数的以及如果函数带return结果的情况

     装饰器分成三种: 1.无参数的: 2.有参数的: 3.装饰器本身带参数的. 装饰器decorator又叫语法糖 定义:本质是函数,器就是函数的意思.装饰其他函数.就是为其他函数添加附加功能. 原则: ...

  9. Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列)

    Python进阶(七)----带参数的装饰器,多个装饰器修饰同一个函数和递归简单案例(斐波那契数列) 一丶带参数的装饰器 def wrapper_out(pt): def wrapper(func): ...

随机推荐

  1. IIS 部署问题 404

    在部署IIS环境中,偶尔会遇到 404 错误,就算以前遇到过,也因为时间久了导致大概知道是什么错了,具体解决方案觉忘了,所以留下一个记录,留给自己,也是给大家一点提醒.(注:错误信息也懒得截图了,希望 ...

  2. Yii2.0手册地址

    官网打不开,可以看这里 http://yii2.techbrood.com/   ;跟官网里面文档一样.ps:今天真郁闷,官网都打不开

  3. June 7. 2018 Week 23rd Thursday

    Half is worse than none at all. 一知半解比一无所知更痛苦. From Westworld. If we go looking for the truth, get th ...

  4. Docker: docker 启动一个Nginx容器

    本文演示从官方镜像仓库拉取一个nginx镜像并启动docker run -d –p 8800:80 nginx (同一个镜像,可以启动N个容器, 比如说,一个nginx服务,可以在这个docker主机 ...

  5. 一张有料的图片!!!附文件-图片合成器C语言实现算法

    凯鲁嘎吉 - 博客园 http://www.cnblogs.com/kailugaji/ 1.打开F盘,先找两个文件,一个是压缩文件(2.rar),另一个是一张图片(1.jpg),将其放到F盘目录下, ...

  6. 用PHP打造一个高性能好用的网站

    用PHP打造一个高性能好用的网站 1. 说到高可用的话要提一下redis,用过的都知道redis是一个具备数据库特征的nosql,正好弥补了PHP的瓶颈,个人认为PHP的 瓶颈在于数据库,像Apach ...

  7. 深入理解 Node.js 中 EventEmitter源码分析(3.0.0版本)

    events模块对外提供了一个 EventEmitter 对象,即:events.EventEmitter. EventEmitter 是NodeJS的核心模块events中的类,用于对NodeJS中 ...

  8. LNMP环境

    准备工作:1)把所有的软件安装在/usr/local/,源码包放在/package/,数据:自定义,日志文件:自定义 创建www所属组及用户/usr/sbin/groupadd www/usr/sbi ...

  9. 深蓝词库转换2.2发布,支持手心输入法和Win10微软拼音

    距离上一次大版本的发布已经很久很久了,中间是不是会收到一些用户的来信,提出新的需求,于是只是做小版本的更新,终于积累了一些更新后,打算做个大版本的发布了. 深蓝词库转换是一个输入法的词库互转和生成软件 ...

  10. UIImageView - BNR

    继续上节UINavigationController - BNR. 打开BNRDetailViewController.xib文件,向view中添加UIImageView对象,选中该对象,通过Attr ...