python3学习笔记(9)_closure
1 #python 学习笔记 2017/07/13 2 # !/usr/bin/env python3 3 # -*- conding:utf-8 -*- 4 5 #从高阶函数的定义,我们可以知道,把函数作为参数的函数,把函数作为返回值的参数都是高阶函数 6 7 #可变参数求和 8 def calc_sum(*args): 9 sum = 0 10 for n in args: 11 sum = sum + n 12 return sum 13 14 #这个函数会立即返回求和结果,如果不要立即返回求和结果,而是需要在计算,可以返回求和函数,当再次调用时才给出计算结果 15 def lazy_sum(*args): 16 def sum(): 17 tem = 0 18 for n in args: 19 tem = tem + n 20 return tem 21 return sum 22 23 #我们调用 lazy_sum()时,返回的并不是求和结果,而是求和函数 24 f = lazy_sum(1,2,3) 25 print("f addr:",f) 26 27 print("f() :",f()) 28 29 #这种函数lazy_sum内部再定义一个函数,且内函数sum可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum返回sum时,相关的参数和变量都保存在返回的函数中,这就是闭包。 30 #在JavaScript中我也写过几篇理解闭包的学习笔记,JavaScript的旧标准是没有作用域概念的,作用域用函数来区分,闭包就可以保持作用域 31 #延长变量的 存活周期,缺点也就随之而来,就是用的多的话内存会保留大量的变量,占用内存空间 32 33 34 #我们需要注意的是,每次调用 lazy_sum()时,都会返回一个全新的函数,即使传入的参数完全相同 35 # 如 36 f1 = lazy_sum(1,2) 37 f2 = lazy_sum(1,2) 38 print(f1 == f2)#False 39 40 #闭包里返回的函数没有立即执行,而是直接调用函数f()时,才执行 41 def count(): 42 fs = [] 43 for i in range(1, 4): 44 def f(): 45 return i*i 46 fs.append(f) 47 return fs 48 f1,f2,f3 = count() 49 print("f1():", f1(), "f2() :", f2(), "f3():", f3())#9 , 9, 9 50 #发现 调用 f1(), f2() ,f3() 的结果全部是9, 这是因为返回的函数引用了变量i, 但它并非立刻执行。 51 #等到3个函数都返回时,他们所引用的变量 i 已经变成了3.最终结果是9 52 53 #所以返回闭包时,返回函数不要引用任何循环变量,或者后续会发生变换的变量 54 55 #如果一定要引用循环变量,可以再创建一个函数,用该函数的 参数绑定循环变量当前的值,无论该循环变量后续如何更改,已经绑定到函数参数的值不会变 56 def countNew(): 57 def f(j): 58 def g(): 59 return j*j 60 return g 61 fs = [] 62 for i in range(1, 4): 63 fs.append(f(i))#f(i)被立即执行,因此,i的当前值被传入f() 64 return fs 65 66 f1, f2, f3 = countNew() 67 print(f1(), f2(), f3())
转载于:https://www.cnblogs.com/wjw-blog/p/7161599.html
python3学习笔记(9)_closure相关推荐
- python基础第三章选择结构答案-python3 学习笔记(二)选择结构、循环结构
python3 学习笔记 python 优雅 明确 简单 1.选择结构 (1)简单判断 if else 使用格式: if 条件: 表达式1 else: 表达式2 (2)多条件判断 elif 使用格式 ...
- Python3学习笔记之-学习基础(第三篇)
Python3学习笔记之-学习基础(第三篇) 文章目录 目录 Python3学习笔记之-学习基础(第三篇) 文章目录 一.循环 1.for循环 2.while循环 3.break,continue 二 ...
- A Byte of Python3 学习笔记
A Byte of Python3 学习笔记 第七章 控制流 1.if语句(带输入函数) 2.while语句 3.for循环 4.break.continue.return的区别 第八章 函数 8.1 ...
- Python3 学习笔记
Python3 学习笔记 1.基础语法 1.1 字符串操作 title() 将单词首字母改为大写 upper() 所有字母改为大写 lower() 所有字母改为小写 str1+str2 字符串通过'+ ...
- Python3学习笔记01-环境安装和运行环境
最近在学习Python3,想写一些自己的学习笔记.方便自己以后看,主要学习的资料来自菜鸟教程的Python3教程和廖雪峰官方网站的Python教程. 1.下载 1)打开https://www.pyth ...
- python3学习笔记:3.其他部分
整理文档发现两年前学习paython3的笔记.当时工作有需要结果也没用上,现在忘的差不多了,在这里整理下. 按 菜鸟编程python3教程编写的demo.链接 这里主要是以前记录的一些资料链接 Pyt ...
- Python3学习笔记-数据类型和变量
有C++基础,一直对"万能"的Python语言感兴趣,目前正在学习廖雪峰老师的Python3教程和其他资料用来入门,这里记录一些没接触过或与C++有差异的知识,方便自己查阅吧~ 字 ...
- Python3学习笔记----环境安装及文本编辑器的选择
在线学习网站:廖雪峰的Python3教程网站 如果你正在使用Mac,系统是OS X 10.8~10.10,那么系统自带的Python版本是2.7.如要安装最新的Python 3,有两个方法: 方法一: ...
- Mooc的Python3学习笔记
文章目录 一些优秀的博主 仅供自己查阅!!! 首先是掌握基本语法! 内置的运算符函数 函数模块补充知识点 pass 函数返回多个值 关于默认参数使用的注意事项 可变参数的使用方法 天天向上代码 单元测 ...
最新文章
- Ghost后只有一个C盘解决方法(转)
- 5.Lambert光照Diffuse Shader
- vivo C/C++工程师 HR视频面试问题总结20180807
- java多线程队列_java多线程消费者生产者模式(BlockingQueue 通过阻塞队列实现)
- java File_encoding属性
- 怎么查江苏省计算机一级成绩,江苏省计算机一级查询成绩在哪里查-江苏省计算机一级查询成绩查询网址-常州宝...
- Python基础——if else与if elif else条件判断
- XSS注入,js脚本注入后台
- DotNetNuke 5 User's Guide: Get Your Website Up and Running
- 计算机基础知识题库pdf,计算机基础知识题库完整.pdf
- 问题 F: 求一个3*3矩阵对角线元素之和
- 如何将CM android移植到你的设备(二)
- 梦断代码读后感 (一)
- cadence 旋转快捷键_cadence常用快捷键自己总结
- Java Web——基于Jsp+Servlet的大学生社团管理系统
- 碳足迹-ISO14064认证
- 你听过最美的网名是什么?
- aba会导致问题_CAS导致的ABA问题及解决
- 一些离谱的化学方程式
- C语言编写通讯录系统