一路狂奔2020 发表于 2020-4-2 16:15:06

关于python解释符的疑惑

今天学习到修饰符,在网上搜到两段关于修饰符的代码:
第一段在python里直接运行就能出结果
但是第二段直接运行却没有结果,需要调用函数func()才能有结果。
第一段函数:
def test(f):
    print ("before ...")
    f()
    print ("after ...")

@test
def func():
    print ("func was called")


第二段函数:
def test(f):
    def w():
      print('add')
      return f()
    return w

@test
def func():
    print('func was called')

这两段函数在我看来没啥区别,为啥第一段直接运行就能出结果,但是第二段却不行呢?很困惑

永恒的蓝色梦想 发表于 2020-4-2 16:22:46

@test
def func()相当于func=test(func),test和func中的print都被执行了

第二段代码中test只是返回了w,没有执行w,所以没有打印。

永恒的蓝色梦想 发表于 2020-4-2 16:23:17

qiuyouzhi 发表于 2020-4-2 16:16
因为return会直接终止函数的调用。

你完美的没有看题……{:10_327:}

一路狂奔2020 发表于 2020-4-2 16:41:29

永恒的蓝色梦想 发表于 2020-4-2 16:22
相当于,test和func中的print都被执行了

第二段代码中test只是返回了w,没有执行w,所以没有打印。

原来是这样!感谢!
还有一个问题:为什么第二段代码执行后,输入func()后就能运行并得到结果:
add
func was called
这是为啥呢?此时为啥就执行w了呢?

永恒的蓝色梦想 发表于 2020-4-2 16:42:25

一路狂奔2020 发表于 2020-4-2 16:41
原来是这样!感谢!
还有一个问题:为什么第二段代码执行后,输入func()后就能运行并得到结果:



def test(f):
    def w():
      print('add')
      return f()
    return w

@test
def func():
    print('func was called')@test后其实func就是test里面的w了

一路狂奔2020 发表于 2020-4-2 16:44:06

永恒的蓝色梦想 发表于 2020-4-2 16:42
@test后其实func就是test里面的w了

有点明白了!我再琢磨琢磨!感谢!{:5_106:}
页: [1]
查看完整版本: 关于python解释符的疑惑