找回密码
 立即注册

扫一扫,访问微社区

QQ登录

只需一步,快速开始

查看: 3404|回复: 3

[代码与实例] 麻烦大大帮忙解答一个小问题

1

主题

3

帖子

3

积分

贫民

积分
3
安德伯格 发表于 2018-3-15 22:30:30 | 显示全部楼层 |阅读模式
本帖最后由 安德伯格 于 2018-3-15 22:33 编辑

在尝试廖大在装饰器一章中的课后习题时遇到了一些问题。
题目是这样的:请编写一个decorator,能在函数调用的前后打印出'begin call''end call'的日志。
网络上的大大们给出的代码基本如下:
import functools

def log(text1, text2):           
    def decorator(func):        
        @functools.wraps(func)        
        def wrapper(*args, **kw):            
            print(text1)            
            out = func(*args, **kw)            
            print(text2)            
            return out        
        return wrapper   
    return decorator
@log('begin call', 'after call')
def now(time):   
    print(time)
now('2016')
而我在尝试的过程中将now函数更改成含有返回值的如下形式时:
def now(time):   
    return time
再调用print(now('2016'))则会发生先输出'after call'和'begin call',最后输出‘2016’的情况。
出现这种情况的原因在于print与return的区别,这个我能理解,但是具体要如何修改代码才能让其对于存在返回值的函数也起作用呢?
希望大神能帮我解答一下,不胜感激。





回复

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
安德伯格  楼主| 发表于 2018-3-15 22:41:28 | 显示全部楼层
诶我是不是发错位置了,诶哟好尴尬,这问题怎么处理啊,愁。
今天代码折腾多了脑子也不好使了我的天。
回复 支持 反对

使用道具 举报

5

主题

165

帖子

165

积分

版主

Rank: 7Rank: 7Rank: 7

积分
165

热心会员突出贡献优秀版主荣誉管理

mongo 发表于 2018-3-16 12:01:00 | 显示全部楼层
可以在wrapper函数里面接收out ? 然后做一些逻辑操作?
回复 支持 反对

使用道具 举报

1

主题

3

帖子

3

积分

贫民

积分
3
安德伯格  楼主| 发表于 2018-3-16 19:54:18 | 显示全部楼层
mongo 发表于 2018-3-16 12:01
可以在wrapper函数里面接收out ? 然后做一些逻辑操作?

诶我刚学这块,能麻烦您说详细一点吗?
回复 支持 反对

使用道具 举报

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

本版积分规则

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