python中的 @ 修饰符

@符号用作函数修饰符是python2.4新增加的功能,修饰符必须出现在函数定义前一行,不允许和函数定义在同一行。一个修饰符就是一个函数,它将被修饰的函数做为参数,并返回修饰后的同名函数或其它可调用的东西。

def f1(arg):
    print("function f1")
    rl = arg()
    print(rl)
    return rl + " f1 return"


# 这里 @ 符作符相当于 f1(f2())
@f1
def f2(arg=""):
    print("function f2")
    return arg + "f2 return"


print("------")
print(f2)
# Traceback --- TypeError: 'str' object is not callable
# 因为f1()中的rl = arg()没有参数
# print(f2("1"))

# output:
# function f1
# function f2
# f2 return
# ------
# f2 return f1 return

这种方式可以传递参数:

import sys

debug_log = sys.stderr

def f1(arg):
    print("function f1")

    def callf(*args, **kwargs):
        debug_log.write('first argument: {}\n'.format(args[0]))
        rl = arg(*args, **kwargs)
        print(rl)
        return rl + " f1 return"

    return callf


@f1
def f2(arg=""):
    print("function f2")
    return arg + "f2 return"


print("------")
print(f2('sss'))

# output:
# first argument: sss
# function f1
# ------
# function f2
# sssf2 return
# sssf2 return f1 return
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值