鱼C论坛

 找回密码
 立即注册
楼主: 小甲鱼

[扩展阅读] Python 函数修饰符(装饰器)的使用

  [复制链接]
发表于 2016-10-13 22:18:59 | 显示全部楼层
说实话,没怎么看懂,我现在学到40课了,我再学几课在回头看看吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-10-24 22:26:42 | 显示全部楼层
修饰符 我可不可以认为就是函数的调用呢
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-2 14:52:21 | 显示全部楼层
第三个内置修饰符,看不懂,代码复制下来,运行一遍还报错了。

AttributeError: type object 'Hello' has no attribute 'print_hello'
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-9 15:45:52 | 显示全部楼层
非常不错!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-13 15:54:26 | 显示全部楼层
我看了原版的文章我看懂了,看你这个版本的云里雾里不知所云
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-21 12:49:49 | 显示全部楼层
版本升级了,感觉有点
看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-22 15:23:04 | 显示全部楼层
没看懂。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-11-29 15:12:10 | 显示全部楼层
完全看不懂,写了什么东西。。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-1 18:03:08 | 显示全部楼层
什么鬼,最后三个一带而过?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-5 21:46:14 | 显示全部楼层
看不懂
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-9 12:56:53 | 显示全部楼层
这样不是更加简洁吗?

import time

def timeslong():
    start = time.clock()
    print("It's time starting ! ")
    def f():
        print("It's time ending ! ")
        end = time.clock()
        return "It's used : %s ." % (end - start)
    return f()

print(timeslong())
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-9 13:33:34 | 显示全部楼层
还有,这样也行!!把 @timeslong 去掉 ,末尾加  f = timeslong(f)() ,,注意:末尾是:print(f)

import time

def timeslong(func):
    def call():
        start = time.clock()
        print("It's time starting ! ")
        func()
        print("It's time ending ! ")
        end = time.clock()
        return "It's used : %s ." % (end - start)
    return call

def f():
    y = 0
    for i in range(10):
        y = y + i + 1
        print(y)
    return y

f = timeslong(f)()
print(f)
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-9 13:39:00 | 显示全部楼层
aluominhai 发表于 2016-12-9 13:33
还有,这样也行!!把 @timeslong 去掉 ,末尾加  f = timeslong(f)() ,,注意:末尾是:print(f)

import ...

由此可见,@timeslong 这个修饰符估计是用来替代 f = timeslong(f)() ,,如果有3层嵌套,比如:

def timeslong(func):
       def call():
            def add():
那么,@timeslong  就是替代  f = timeslong(f)()(),,,,假如是4层,就f = timeslong(f)()()()...。是不是这样理解嘛
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-10 00:16:36 | 显示全部楼层
看懂是看懂了  
但除了代码简洁了一点外还有什么大用处呢》
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-22 21:16:30 | 显示全部楼层
哈哈哈哈哈哈哈哈啊哈哈哈哈
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-12-30 15:45:02 | 显示全部楼层
  1. import time

  2. def func():
  3.         y = 0
  4.         for i in range(10):
  5.                 y = y + i + 1
  6.                 print(y)
  7.         return y   

  8. def timeslong(func):
  9.         start = time.clock()
  10.         print("It's time starting ! ")
  11.         func()
  12.         print("It's time ending ! ")
  13.         end = time.clock()
  14.         return "It's used : %s ." % (end - start)
复制代码


这不就行了? 为什么会要内嵌函数?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-26 00:22:31 | 显示全部楼层
  1. import time

  2. def timeslong(func):
  3.     def call():
  4.         start = time.clock()
  5.         print("It's time starting ! ")
  6.         func()
  7.         print("It's time ending ! ")
  8.         end = time.clock()
  9.         return "It's used : %s ." % (end - start)
  10.     return call

  11. @timeslong
  12. def f():
  13.     y = 0
  14.     for i in range(10):
  15.         y = y + i + 1
  16.         print(y)
  17.     return y

  18. print(f())
复制代码



结合了外面看的资料和这里的东西,那个func应该是指的是f()函数吧?那个timeslong是一个装饰器,相当于把f()函数当做一个变量传入到了timeslong里面去了? 然后在里面调用了func()函数即f()....


晕乎乎
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-1-26 18:47:04 | 显示全部楼层
好不容易看懂了,但是并不明白有什么用
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-1 10:54:41 | 显示全部楼层
  1. #!/usr/bin/env python
  2. # coding=utf-8

  3. __metaclass__ = type

  4. class StaticMethod:
  5.     @staticmethod
  6.     def foo():
  7.         print "This is static method foo()."

  8. class ClassMethod:
  9.     @classmethod
  10.     def bar(cls):
  11.         print "This is class method bar()."
  12.         print "bar() is part of class:", cls.__name__

  13. if __name__ == "__main__":
  14.     static_foo = StaticMethod()    #实例化
  15.     static_foo.foo()               #实例调用静态方法
  16.     StaticMethod.foo()             #通过类来调用静态方法
  17.     print "********"
  18.     class_bar = ClassMethod()
  19.     class_bar.bar()
  20.     ClassMethod.bar()
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-2-1 10:56:00 | 显示全部楼层

说白了就是静态方法和类方法不用实例化就可以调用   不知道为啥起这么多名字
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-1 03:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表