函数的有用信息

  代码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. JDK动态代理和cglib代理详解

    JDK动态代理 先做一下简单的描述,通过代理之后返回的对象已并非原类所new出来的对象,而是代理对象.JDK的动态代理是基于接口的,也就是说,被代理类必须实现一个或多个接口.主要原因是JDK的代理原理 ...

  2. Boolean类型在EF和MySql中的映射关系

    MySQL没有Boolean类型.这也是比较奇怪的现象.例: create table xs ( id int primary key, bl boolean ) 这样是可以创建成功,但查看一下建表后 ...

  3. 设计模式のCompositePattern(组合模式)----结构模式

    一.产生背景 又叫部分整体模式,是用于把一组相似的对象当作一个单一的对象.组合模式依据树形结构来组合对象,用来表示部分以及整体层次.这种类型的设计模式属于结构型模式,它创建了对象组的树形结构. 这种模 ...

  4. docker实战练习(一)

    systemctl start docker systemctl pause docker systemctl unpause docker systemctl start docker system ...

  5. [matlab] 18.图与网络 (转载)

    基本概念: 图论[Graph Theory]是数学的一个分支.它以图为研究对象.图论中的图是由若干给定的点及连接两点的线所构成的图形,这种图形通常用来描述某些事物之间的某种特定关系,用点代表事物,用连 ...

  6. [matlab] 15.罚函数降维

    求非线性规划 min f(x)= x(1)^2 + x(2)^2 + 8 s.t. { x(1)^2-x(2)>=0 , -x(1) - x(2)^2 +2 = 0, x(1)>=0 ,x ...

  7. tensorflow中的Supervisor

    tf.train.Supervisor()可以帮我们简化一些事情,可以保存模型参数和Summary,它有以下的作用: 1)自动去checkpoint加载数据或初始化数据 ,因此我们就不需要手动初始化或 ...

  8. 【css3】nth-child

    nth-child含义 :nth-child(an+b) 这个 CSS 伪类匹配文档树中在其之前具有 an+b-1 个兄弟节点的元素,其中 n 为正值或零值. 简单点说就是,这个选择器匹配那些在同系列 ...

  9. linux之dos2unix命令

    今天在使用脚本升级的时候碰到一个问题,然后写了一个简单的自测脚本进行测试,如上图,理论上应该输出 /usr/local/mysql/bin/mysqldump -h 127.0.0.1 -uroot ...

  10. OpenCV3计算机视觉Python语言实现笔记(四)

    1. Canny边缘检测 OpenCV提供了Canny函数来识别边缘.Canny边缘检测算法有5个步骤:使用高斯滤波器对图像进行去噪.计算梯度.在边缘上使用非最大抑制(NMS).在检测到的边缘上使用双 ...