IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> 第六章、Python 装饰函数 -> 正文阅读

[Python知识库]第六章、Python 装饰函数

本章主要学习,python的装饰方法,你可以认为就是方法切面,就是执行目标方法之前或之后都可以执行其他函数。

1、locals()

  • 打印本地变量
# 先定义一个简单函数返回1
def func():
    return 1

print(func())

s = 'Global Variable'

# 定义函数,然后打印本地变量
def check_for_locals():
    a = 1
    b = 2
    print(locals())

2、globals()

  • 打印全局变量,就是整个py文件方法和属性
# 打印全局变量和方法
print(globals())

print(globals().keys())

# 打印内部变量, {'a': 1, 'b': 2}
check_for_locals()

3、函数引用

  • 不带() 表示函数引用,加上()表示调用该方法
  • 删除,函数引用可以删除,del 函数引用,但是这个删除不会影响到,原来赋值函数引用变量引用,说明本质方法没有删除。
# 方法可以赋值,方法可以删除
def hello(name = 'Jose'):
    return 'Hello ' +name

print(hello())

# 将hello 方法赋值给greet
greet = hello
print(greet)
print(greet())

# 删除hello方法, greet()方法还可以使用,也就是说,这个对象不会删除
# del hello
hello()

greet()

4、函数嵌入函数

  • 函数中还可以嵌入函数
  • 既然我可以获得函数引用,我们是不是可以根据不同情况返回不同函数引用,执行不同方法调用呢, 是不是实现方法的多态,不需要在类上完成这个功能

def hello(name='Jose'):
    print('The hello() function has been executed')

    def greet():
        return '\t this is inside the greet() function'

    def welcome():
        return  '\t This is inside the welcome() function'

    print(greet())
    print(welcome())
    print('Now we are back inside the hello() function')
# 调用hello, greet, welcome
hello()


 # 我们改进一下,根据name不同返回不同的函数引用

def hello(name='Jose'):

    def greet():
        return '\t This is inside the greet() function'

    def welcome():
        return "\t This is inside the welcome() function"

    if name == 'Jose':
        return greet
    else:
        return welcome
# 可以直接返回函数, 可以根据入参选择不同方法
x = hello()
print(x())

5、函数引用可以作为函数入参

  • 这样很容易实现装饰模式,在执行真正的方法之前做一些前置操作
# 函数作为入参

def hello():
    return 'Hi Jose!'

def other(func):
    print("Other code would go here")
    print(func())

#Other code would go here
#Hi Jose!
other(hello)

# 创建一个装饰类
def new_decorator(func):

    def wrap_func():
        print("Code would be here, before executing the func")
        func()
        print("Code here will execute after the func()")
    return wrap_func

def func_needs_decorator():
    print("This function s in need of a Decorator")
# 直接调用方法
func_needs_decorator()


# 组装一个装饰类函数
func_needs_decorator = new_decorator(func_needs_decorator)
func_needs_decorator()

#其实可以更简单使用注解的方式使用装饰
@new_decorator
def func_needs_decorator():
    print("This function is in need of a Decorator")

func_needs_decorator()

总结

  1. locals() 和 globals()返回都是dictionary格式
  2. 方法名不带() 表示函数引用,加上()表示调用该方法
  3. 函数可以组装,也就是数学列函数一样
  4. 支持动态装饰的注解,@函数名

参考文档

  • https://github.com/Pierian-Data/Complete-Python-3-Bootcamp.git
  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-06-29 19:00:05  更:2022-06-29 19:01:02 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年4日历 -2024/4/20 15:11:20-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码