python 中的闭包和装饰器肯定是有联系的还有作用域,看过核心变编程的会更会这样觉得
def inter(name):
print(name)
def ouint():
print(name)
return ouint
(inter ("zhangsan"))()
运行结果: zhangshan zhangshang
不要着急这是为什么了 在来看一个列子:
def inter(name):
print(name)
def ouint(name):
print(name)
return ouint
(inter("zhangsan"))("lishi")
运行结果:zhangshang lishi
不要着急在来看一和列子:
def inter(name):
print(name)
def ouint(name):
print(name)
def outin():
print(name)
return outin
return ouint
((inter("zhangsan"))("lishi"))()
输出的解果 zhangshan lishi lishi
这个时候大家就感觉奇怪了 这都层了 为什么还能输出值, 并且在函数调用完毕了 它的值不应该是被输小清除的吗??
说到这里这个作用域就来啦 我们都知道在函数得内部定义的作用只能函输体里面使用, 那么第一个函数体的值能传给第二个值
不过分吧! 同样也能传给第三个值 也不过分吧 可以暂时这样理解 方便你使用!
# def inter(name):
# print(name)
# def ouint(func,*args):
# print(name)
# def outin(*args):
# print(*args)
# return func(*args)
# return outin
# return ouint
#
# @inter(name="zhangshan")
# def hell(name):
# print("hello")
# (hell("lishi"))
#
#
# def inter(func, name):
# print(name)
# def ouint(*args,**kwargs):
# print(*args)
# print(name)
# def outin(*args):
# print(*args)
# return func(*args)
# return outin
# return ouint
#
# @inter(hell,name="0")
# def hell(name):
# print("hello")
# (hell("lishi"))
def inter( name):
print(name)
def ouint(name,**kwargs):
print(name)
return name
return ouint
@inter(name="zhangshan")
def hell(name):
print("hello")
hell("lishi")
自己测试 其中当 函数的写法, 传一个函数对像进去,想想的作用域 这样好理解一些 其他的内存的上面的问题和函数的之间的调用 下次说