分享

Python之装饰器

 昵称66738188 2019-11-02

```python3

def fn(old):

def new_fun(*args, **kwargs):

print("开始装饰")

result = old(*args, **kwargs)

print("装饰结束")

return result

return new_fun

@fn

def say_hello():

    print("大家好~~~")

say_hello()

```

窗口程序中的应用

```python3

import traceback

def run_with_exc(f):

    """窗口运行出现错误时,用messagebox把错误信息显示出来"""

    def call(window, *args, **kwargs):

        try:

            return f(window, *args, **kwargs)

        except Exception:

            exc_info = traceback.format_exc()

            QMessageBox.about(window, '错误信息', exc_info)

    return call

class GomokuWindow(QMainWindow):

    @run_with_exc

    def paintEvent(self, e):

```

带参数的三层装饰器

```python3

def timmer_out(flag):

    def timmer(func):

        def inner(*args, **kwargs):

            if flag:

                start = time.time()

                ret = func(*args, **kwargs)

                end = time.time()

                print(end-start)

                return ret

            else:

                ret = func(*args, **kwargs)

                return ret

    return inner

return timmer

```

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多