一、函数的嵌套

1.1函数的嵌套调用

def max2(x,y):m  = x if x>y else yreturn mdef max4(a,b,c,d):res1 = max2(a,b)res2 = max2(res1,c)res3 = max2(res2,d)return res3# max4(23,-7,31,11)

1.2函数的嵌套定义

def f1():print("in f1")def f2():print("in f2")f2()
f1()
###########
def f1():def f2():def f3():print("in f3")print("in f2")f3()print("in f1")f2()f1()

二、函数的作用域链

  • 小范围作用域可以使用大范围的变量,但反之不行,它是单向的。

作用域链应用举例:

def f1():a = 1def f2():def f3():print(a)f3()f2()f1()
################
def f1():a = 1def f2():a = 2f2()print('a in f1 : ',a)f1()

四、函数名

  • 函数名本质上就是函数的内存地址。
  • 当普通变量用。

4.1.可以被引用

def func():print('in func')f = func
print(f)

4.2.可以被当作容器类型的元素

def f1():print('f1')def f2():print('f2')def f3():print('f3')l = [f1,f2,f3]
d = {'f1':f1,'f2':f2,'f3':f3}
#调用
l[0]()
d['f2']()

4.3.可以当作函数的参数和返回值

def f1():print('f1')def func1(argv):argv()return argvf = func1(f1)
f()

4.4.第一类对象(first-class object)

  1. 可在运行期创建;
  2. 可用作函数参数或返回值;
  3. 可存入变量的实体。

五、闭包

  • 内部函数包含对外部作用域而非全剧作用域变量的引用,该内部函数称为闭包函数;
  • 函数内部定义的函数称为内部函数;
def func():name = '太白金星'def inner():print(name)

如果我们想在函数外部调用函数内部的函数直接就把这个函数的名字返回就好了,这是闭包函数最常用用法:

def func():name = 'eva'def inner():print(name)return innerf = func()
f()

判断闭包函数的方法__closure__:

#输出的__closure__有cell元素 :是闭包函数
def func():name = 'eva'def inner():print(name)print(inner.__closure__)return innerf = func()
f()#输出的__closure__为None :不是闭包函数
name = 'egon'
def func2():def inner():print(name)print(inner.__closure__)return innerf2 = func2()
f2()

闭包嵌套:

def wrapper():money = 1000def func():name = 'eva'def inner():print(name,money)return innerreturn funcf = wrapper()
i = f()
i()

闭包函数获取网络应用:

from urllib.request import urlopendef index():url = "http://www.xiaohua100.cn/index.html"def get():return urlopen(url).read()return getxiaohua = index()
content = xiaohua()
print(content)

转载于:https://www.cnblogs.com/bingo1024/articles/9099034.html

三、函数的嵌套、作用域链、函数名的应用、闭包。相关推荐

  1. ES5-6 作用域、作用域链、预编译、闭包基础

    1. 作用域 上一级在执行时,内部函数被定义,内部函数便生成作用域和作用域链(拿上一级的环境),内部函数执行前生成自己的AO,并排在头部 函数执行结束时,AO被销毁(回到被定义时的状态) 上一级函数销 ...

  2. JS高级——函数执行、作用域链内存结构图

    一.JavaScript的执行过程 假如我们有下面一段代码,它在JavaScript中是如何被执行的呢? 1.1 第一步:初始化全局对象 js引擎会在执行代码之前,会在堆内存中创建一个全局对象:Glo ...

  3. 三目运算法求一个大值,以及指定位数的应用,以及函数的声明,以及函数的嵌套,以及函数的递归,以及用递归法求阶乘

    1.三目运算法 首先一般方法比较两个数的大小 用空格和回车都一样 当结果非x即y的时候 我们可以用三目运算法 z=x>y?x:y 如果表达式成立取前面的值,如果表达式不成立取后面的值 也可以改成 ...

  4. python函数的嵌套调用_python函数的嵌套调用

    我们之前的代码都是定义函数然后直接调用,但是没有在一个函数内调用另外一个函数,今天就感受下函数嵌套调用. 提示:如果你想当然的认为函数嵌套是在函数内部又嵌套定义一个函数这种操作的话,那么这叫做闭包.相 ...

  5. c语言函数嵌套是啥,函数的嵌套是什么 函数的嵌套是什么意思

    嵌套函数在我们日常生活中接触得不多,学习计算机语言的程序员或是数学专业的同学可能比较熟悉这个概念,还不了解嵌套函数什么的朋友,来看看这篇文章吧! 函数的嵌套指的是将一个函数作为另一函数的参数使用.函数 ...

  6. python 函数的嵌套定义 and 函数的返回值是函数

    python允许在定义函数的时候,其函数体内又包含另外一个函数的完整定义,这就是我们通常所说的嵌套定义. 为什么?因为 函数是用def语句定义的,凡是其他语句可以出现的地方,def语句同样可以出现. ...

  7. python函数变量的作用域_python函数变量的作用域

    python 2.7 变量作用域的疑问 函数a()定义u为全局变量,并赋值为0 函数b()中,设定没有声明u的访问方式 在函数中定义和修改全局变量,需要使用global关键字.但访问全局变量(不修改它 ...

  8. python之路day10-命名空间和作用域、函数嵌套,作用域链、闭包

    楔子 假如有一个函数,实现返回两个数中的较大值: def my_max(x,y):m = x if x>y else yreturn mbigger = my_max(10,20)print(b ...

  9. JavaScript高级第2天:定义函数的三种方式、函数的原型链结构、完整原型链、作用域以及作用域链、函数的四种调用模式、闭包、计数器、斐波那契数列优化、三种继承方式

    JavaScript高级第二天 01-定义函数的三种方式 1.函数声明 function:可以先调用再声明,因为预解析(把函数声明.变量声明进行提升) function fn() {//函数体conl ...

最新文章

  1. 独家福利 | 科大讯飞全球1024开发者节限时免费门票!
  2. JUC并发编程三 并发架构--线程运行原理
  3. Spring Task配置
  4. [label][转载][JavaSript]querySelectorAll 方法相比 getElementsBy 系列方法有什么区别?
  5. 关于数据库与LoaderManager的联合使用,节流???。。。。。
  6. Oracle 11g 内存结构
  7. 优势java_Java的核心优势
  8. 开发linux版QQ就是支持未来的国产操作系统
  9. android 倒计时 动画下载,我的倒计时软件下载-我的倒计时 安卓版v1.1.50-PC6安卓网...
  10. 对达内想说的八句话!(也适合各种参加培训的人)
  11. gwas snp 和_GWAS学习笔记4---SNP过滤
  12. CUD表单验证+增删改查
  13. html表格打印分页无边框_excel怎么显示打印线-表格换页打印没有边框线
  14. js如何获取当天日期的前几天
  15. 如何查看系统开关机时间
  16. C#中包含英文月份的美式日期输出格式
  17. face++实现人脸识别及人脸相似度对比
  18. 线性代数的视角理解LSR(least square regression)的参数评估算法本质
  19. 概率分布详解 Bernoulli、Binomial、Beta
  20. 太阳能板最大面积js

热门文章

  1. pyzabbix 删除触发器_zabbix设置邮件报警, Zabbix常用Key值, zabbix触发器表达式详解, zabbix制作自己模板...
  2. python pca降维_协方差矩阵的计算、PCA
  3. mysql查询结果输出文件_如何将MySQL查询输出保存到文件?
  4. android r中的变量_R中的变量
  5. 在C ++中将String转换为Integer并将Integer转换为String
  6. java 正则regex_Java中的正则表达式– Java Regex示例
  7. HibernateEHCache –Hibernate二级缓存
  8. springboot之@Async实现异步
  9. C++ 判断字符串是否全是数字
  10. ROS的学习(五)在工作空间中构建和使用catkin包