富富猪猪 发表于 2020-11-9 15:58:15

学装饰器部分听不懂怎么办

在课堂上学习了装饰器结果完全听不懂

suchocolate 发表于 2020-11-9 16:29:47

动手

笨鸟学飞 发表于 2020-11-9 16:35:38

本帖最后由 笨鸟学飞 于 2020-11-9 16:38 编辑

'''希望我的这个学习笔记可以帮助你'''

def test(func):
    func()       #3..调用fun()------10..返回后继续执行
    print "call test"#11..打印'call test'

def test1(f):
    f()               #6..调用fun1()
    print "call test1"#7..打印'call test1'------8..随后返回上一层调用,即5..

def main():
    @test      #2..调用test(fun).=====这个修饰符的作用我是这么理解的,调用a()函数,紧后的函数对象作为参数传入执行
    def fun():
      print "call fun"   #4..打印‘call fun’
      @test1            #5..调用test1(fun1)------9..返回后,返回上一层调用,即3..
      def fun1():
            print "call fun1"#6..打印‘call fun1’

main()         #1..调用main()函数。

CH10 发表于 2020-11-9 16:51:43

{:10_287:}
python的装饰器不就是把方法作为参数么,很好理解啊
#coding=utf-8
    # -*- coding=utf-8 -*-
    from functools import wraps   
    def my_decorator(func):
      @wraps(func)                        #消除装饰器影响,调用被装饰函数example时,方法对象类型不再是wapper(),变成example(),和不被装饰时的类型一样
      def wrapper(*args, **kwargs):        #调用时把传入参数组成元组arg,和kwargs
            '''decorator'''                        #使用arg获取第一个参数arg获取第2个参数...,kwargs使用关键字XX获取参数
            print('Calling decorated function...')
            return func(*args, **kwargs)        #使用将元组args和字典分解成各个参数传入方法func()
      return wrapper   
    @my_decorator
    def example():
      """Docstring"""
      print('Called example function')
    print(example.__name__, example.__doc__)
页: [1]
查看完整版本: 学装饰器部分听不懂怎么办