python函数嵌套以及闭包的原理

变量相关—嵌套函数

python允许创建嵌套函数。也就是说我们可以在函数里面定义函数,而且现有的作用域和变量生存周期依旧不变。

例子:

#encoding=utf-8

def outer():
    name="python"

def inner():#outer函数内部定义的函数
        print name
    return inner()#返回该内部函数

outer()

结果:

理解:

在inner函数中,python解析器需要找一个叫name的本地变量,查找失败后会继续在上层的作用域里面寻找,这个上层作用域定义在outer函数里,python函数可以访问封闭作用域。

对于outer函数中最后一句,返回inner函数调用的结果,需要知道非常重要一点就是,inner也仅仅是一个遵循python变量解析规则的变量名,python解释器会优先在outer的作用域里面对变量名inner查找匹配的变量。

把恰好是函数标识符的变量inner作为返回值返回回来,每次函数outer被调用的时候,函数inner都会被重新定义,如果它不被当做变量返回的话,每次执行过后它将不复存在。

在python里,函数就是对象,它也只是一些普通的值而已。也就是说你可以把函数像参数一样传递给其他的函数或者说从函数了里面返回函数

return内层函数时不加括号,只返回函数的地址:

代码:

#encoding=utf-8

def outer():
    name="python"

def inner():#outer函数内部定义的函数
        return name
    return inner#返回该内部函数

print outer()

 结果:

此时执行外层函数outer(),返回的是内层函数的函数引用(函数名称)--inner,想要执行内层函数,需要在outer()后边再加个括号,即outer()(),才会让内层函数执行

代码:

#encoding=utf-8

def outer():
    name="python"

def inner():#outer函数内部定义的函数
        return name
    return inner#返回该内部函数

print outer()()

结果:

原文地址:https://www.cnblogs.com/xiaxiaoxu/p/9785687.html

时间: 2024-08-26 04:47:07

python函数嵌套以及闭包的原理的相关文章

Python函数嵌套的例子

有关Python函数嵌套的实例,Python中的函数嵌套特性. 在Python中函数可以作为参数进行传递,而也可以赋值给其他变量(类似Javascript,或者C/C++中的函数指针):类似Javascript,Python支持函数嵌套,Javascript嵌套函数的应用模式对Python适用: >>> def multiplier(factor): ... def multiple(number): ... return number * factor ... return multi

Python函数进阶:闭包、装饰器、生成器、协程

返回目录 本篇索引 (1)闭包 (2)装饰器 (3)生成器 (4)协程 (1)闭包 闭包(closure)是很多现代编程语言都有的特点,像C++.Java.JavaScript等都实现或部分实现了闭包功能,很多高级应用都会依靠闭包实现. 一般专业文献上对闭包的定义都比较拗口,比如:“将组成函数的语句和这些语句的执行环境打包在一起时,得到的对象称为闭包.” 其实,简单来说,你可以将闭包看成是一个轻载的类,这个类只有一个函数方法,并且只有为数不多的几个成员变量. 闭包的优点是:实现起来比类稍微轻巧一

python 函数名 、闭包 装饰器 day13

1,函数名的使用. 函数名是函数的名字,本质就是变量,特殊的变量.函数名()加括号就是执行此函数. 1,单独打印函数名就是此函数的内存地址. def func1(): print(555) print(func1) # <function func1 at 0x0000027B7CF1A048> 2,函数名的赋值 def func(): print(666) f = func print(f()) 3,函数名可以作为容器类数据的元素. def f1(): print(111) def f2()

函数嵌套与闭包尝试装饰器

什么是函数嵌套: 在函数里面再定义一个函数 def foo(): print('from foo') def test(): pass def father(auth_type): print('from father %s' %name) def son(): #调用son函数也只能在这一排调用 在局部调用而不能去外面调用 比如在father的下面来个son() print(locals()) #locals就是局部变量 这一级的局部变量有两个 一个是参数'filedb' 还有函数son的地址

函数对象、函数嵌套、闭包函数

1.函数对象 精髓:可以把函数当成变量去用func=内存地址 def func(): print('from func') 1.1.可以赋值 f=func print(f,func) f() 1.2.可以当做函数当做参数传给另外一个函数 def foo(x): # x = func的内存地址 x() foo(func) # foo(func的内存地址) 1.3.可以将函数当做另外一个函数的返回值 def foo(x): # x=func的内存地址 return x # return func的内

python初学之函数嵌套与闭包

函数的嵌套: 在函数内部定义函数就是函数的嵌套 def func1(): pass def func2(): pass 闭包: example: def funcx(x): def funcy(y): return x*y(内部函数(funcy)对外部作用域(funcx)(不包括全局作用域)变量(x)进行引用,内部函数(funcy)就被认为是闭包) return funcy

python——函数嵌套和作用域

1.三元运算if条件成立的结果 if 条件 else 条件不成立的结果例如: a=20 b=10 c=a if a>b else b print(c) 2.命名空间 全局命名空间:创建的存储"变量名与值的关系"的空间叫做全局命名空间 局部命名空间:在函数的运行中开辟的临时的空间叫做局部命名空间 内置命名空间:内置命名空间中存放了python解释器为我们提供的名字:input,print,str,list,tuple...等等 三种命名空间之间的加载顺序和取值顺序:加载顺序:内置(

python函数知识七 闭包、装饰器一(入门)

21.闭包 闭包:在嵌套函数内,使用非全局变量(且不使用本层变量) 闭包的作用:1.保证数据的安全性(纯洁度).2.装饰器使用 .__closure__判断是否是闭包 def func(): a = 1 def foo(): print(a) return foo ret = func() ret() #例子 def func(): avg_lst = [] def foo(pirce): avg_lst.append(pirce) avg = sum(avg_lst) / len(avg_ls

python 函数嵌套支持多层嵌套,但不支持嵌套并列函数调用

def a (): def b (name='hlf'): def c(): print 'name: %s' % name return 'name: %s' % name return c return b #不支持并列嵌套无法调用到e这个函数 def e (id=1): print 'id: %s' % id return 'id: %s' % id return e #嵌套调用方法 a()()()