Python:函数3——内嵌函数和闭包
来源:互联网 发布:玖玖爱六粮面淘宝 编辑:程序博客网 时间:2024/06/03 21:11
一、内嵌函数
在函数内部创建另一个函数,也叫作内部函数。
>>> def func1():... print("func1() ing....")... def func2():... print("func2 ing...")... func2()... >>> func1()func1() ing....func2 ing...
注意:内部函数的整个作用域都在外部函数之内!即上边的函数中,只可以在func1内调用func2,不能再func1的外边调用func2,因为看不到!尤其是:x *= x
在内部函数的变量相对于外部函数的关系,相当于局部变量和全局变量的关系,内部函数中只能对外部函数的变量进行访问,但不能对他修改。解决办法:
>>> def func1():... x = 5... def func2():... x *= x... return x... return func2()... >>> func1()Traceback (most recent call last): File "<stdin>", line 1, in <module> File "<stdin>", line 6, in func1 File "<stdin>", line 4, in func2UnboundLocalError: local variable 'x' referenced before assignment#未定以前不能引用
python3之前通过容器(因为容器类型不是全放在函数的栈里边,所以不会被屏蔽调):
>>> def func1():... x = [5]... def func2():... x[0] *= x[0]... return x[0]... return func2()... >>> func1()25
python3之后:有了nonlocal关键字
>>> def func1():... x = [5]... def func2():... nonlocal x ... x *= x... return x[0]... return func2()... >>> func1()25
二、闭包
闭包是函数式编程的一个重要的语法结构。是一种编程方式(面向对象、面向过程)。不同的编程语言实现闭包的方式不同,python如下:
(表现形式上)如果在一个内部函数里对外部作用域(但不是在全局作用域)的变量进行引用,那么内部函数就被认为是闭包
>>> def funcX(x):... def funcY(y):... return x*y... return funcY#因为所有东西都是对象,所以可以把函数对象funcY返回... >>> i = funcX(8)>>> i<function funcX.<locals>.funcY at 0x7feed39a5e18>>>> i(5)40>>> funcX(8)(5)40
解释:(对于funcx,funcy就是他的一个内部函数,funy的外部作用域就是funcx整个函数空间)funcy引用了funcx的变量x
使用闭包注意:闭包是由内部函数演变得来,所以不可以在外部函数的外边对内部函数进行调用;变量也是这样;
1 0
- Python:函数3——内嵌函数和闭包
- python-内嵌函数和闭包
- Python-16 函数:内嵌函数和闭包
- 内嵌函数和闭包
- 内嵌函数和闭包
- python基础学习之函数(2)-内嵌函数和闭包
- FishC笔记—20 讲 函数:内嵌函数和闭包
- 020:函数:内嵌函数和闭包
- Python -- 内嵌函数 & closure(闭包) 浅析
- 零基础入门学习Python(11):内嵌函数、闭包和变量作用域
- 【Python基础】--字符串str/序列/全局标志位/全局变量/内嵌函数和闭包
- Python内建函数—isinstance()函数
- Js内嵌函数与闭包
- python闭包—返回函数
- Python工厂函数和内建函数
- Python函数闭包和语法糖
- Python函数作用域和闭包
- python闭包函数和装饰器
- 使用AppUploader上传ipa文件到APPstore
- 1.4 逆序一个栈
- 正则表达式-java
- 属性动画的使用
- 美团外卖订单中心的演进
- Python:函数3——内嵌函数和闭包
- Tanks Unity Tutorial
- angularjs请求头中x-requested-with XHR
- 基于物品的协同过滤推荐
- cf668B
- 解决方案:org.openqa.selenium.firefox.NotConnectedException: Unable to connect to host 127.0.0.1 on port
- python ml windows环境搭建 numpy(mkl)+scipy
- 一些无聊的代码
- codefoces Educational Codeforces Round 20