函数的有用信息

  代码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. Kali 2.0 Web后门工具----WebaCoo、weevely、PHP Meterpreter

    注:以下内容仅供学习使用,其他行为均与作者无关!转载请注明出处,谢谢! 本文将介绍 Kali 2.0 版本下的三款Web后门工具:WebaCoo.weevely.PHP Meterpreter,这类工 ...

  2. 使用 dep 配置 golang 开发环境

    概要 golang 的包管理一直没有官方统一的解决方案,因此也产生了很多非官方的包管理工具. 之前我一直使用的 gb(https://getgb.io/) 能够很好的隔开各个 golang 工程,当时 ...

  3. Linux 小知识翻译 - 「SCP和SFTP」

    这次想说说「SCP和SFTP」. 不管SCP还是SFTP,都是SSH的功能之一.都是使用SSH协议来传输文件的. 不用说文件内容,就是登录时的用户信息都是经过SSH加密后才传输的,所以说SCP和SFT ...

  4. win32gui.Findwindow(parm1,parm2)查找窗口的句柄方法

    介绍之前先让大家了解一下win32gui的模块用法 和 获取窗口类名工具 使用Python时,有时也会要操作到系统窗口的一些东西,下面就介绍win32gui.Findwindow(param1,par ...

  5. Teradata的profile使用

    1.proflie优势 使用profile可以批量管理用户参数,尤其是在一批用户具有相同的参数配置时,十分便捷. 2.profile可配置用户参数 [Account id][Default datab ...

  6. 【Git】Git pull 强制覆盖本地文件

    git fetch --all  git reset --hard origin/master git pull 备注: git fetch 只是下载远程的库的内容,不做任何的合并 git reset ...

  7. JavaScript的基本包装类型_String类型

    String类型概述 String在底层字符串是以字符数组的形式保存的 var str = "Hello"; // 在底层其实就是['H','e','l','l','o'] 字符串 ...

  8. js模块化规范—commonjs

    commonjs规范说明 每个js文件都可当作一个模块 在服务器端: 模块的加载是运行时同步加载的(不会阻塞,等待时间回比较长).在浏览器端: 模块需要提前编译打包处理 commonjs规范基本语法 ...

  9. 设计模式のObserver Pattern(观察者模式)----行为模式

    一.问题产生背景 又被称为订阅发布模式. 最初流传最广的一个面试题:有一只猫咪,猫咪叫了一声,老鼠跑了,老人惊醒了,男主人骂,小偷吓得不敢动了....这就产生一个问题的模型,当对象间存在一对多关系时, ...

  10. Idea自带工具解决冲突

    1:产生冲突 2:解决冲突 解决冲突具体操作: 手动合并代码: 此时点击的是local的>:点击changes的X则合并效果为: 也可以两侧都点击>.结果为: 也可以都点击X,结果为: 最 ...