装饰器

函数里面定义函数 (函数里面可以定义类)

def foo():
    def bar():     #3
        print('in bar()')    #4

    print('in foo()')    #1
    bar()     #2
foo()

#结果
in foo()
in bar()

为什么要在函数里面定义函数呢?有啥特别之处?
函数里面函数的有效范围是在foo()函数里面的,
其实定义在里面的函数,在外面还是有办法访问的,可以吧函数变量弄到外面去,通过返回值

def foo():
    def bar():
        print('in bar()')

    print('in foo()')
    return bar    #这里的bar对应的是bar()这个函数的变量,是没有括号的

#foo()()   #也可以把下面两行注释掉,直接foo()(),因为foo()返回的是bar,
inner = foo()    #foo的返回值赋值给一个变量,inner对应的是一个函数对象
inner()     #inner()和bar(),是同一样的函数

装饰器

定义类的静态方法时,就使用了装饰器
@staticmethod #静态方法不需要self,实例方法要self。因为他不需要访问不同的实例的属性。 #静态方法不能访问实例属性,但是可以访问静态属性

def jump():    
    print("3