北京平谷区Python培训多久能学会
Python课程内容
Python基础
Python概述环境搭建、入门程序数据类型、变量基本运算符if选择结构while循环列表、for循环元组、集合字典操作字符串操作日期模块(datetime)使用函数系统模块os操作模块sys数学模块math文件IO面向对象:概述、封装面向对象:继承、多态异常处理自定义模块及使用数据库
Linux概述Python环境搭建微信飞机大战ubuntu开发MySQL数据库概述MySQL安装MySQL单表增删改查外键约束多表查询Python操作MySQLmongoDB入门mongoDB进阶Redis概述Redis安装Redis常见命令
Python核心
Python内存分析列表*操作函数*操作正则表达式案例操作网络编程多进程-多线程
前端开发
HTML概述入门程序、文档结构常见行级标签常见块级标签样式概述常见文本修饰样式尺寸修饰样式定位样式盒子模型网页项目开发JavaScript概述基础语法事件操作DOM操作常见**开发Ajax操作JQuery概述插件使用、Ajax操作Bootstrap常见全局样式常见插件的使用
Django Web框架
Web基础Django入门数据模型Model视图操作Views\路由操作模板操作Template后台管理系统表单处理、数据安全常见问题:ajax、分页等项目协同开发项目部署、分布式处理项目开发Tornado入门Tornado请求处理流程静态文件及模板的操作Tornado数据库操作Tornado安全应用Tornado异步操作WebSocketNginx下载、配置新闻发布平台项目开发
数据爬虫
爬虫原理与数据爬取urllib2爬虫*操作数据提取requests模块BeautifulSoup4Scrapy框架概述深度爬虫Scrapy分布式爬虫入门Scpary-Redis分布式爬虫Scrapy-Redis实战案例
人工智能
数据结构与算法人工智能核心概念机器学习常见算法深度学习常见算法数据分析数据可视化
下面这段代码的输出结果将是什么?请解释。
def multipliers():
return [lambda x : i * x for i in range(4)]
print [m(2) for m in multipliers()]
你如何修改上面的multipliers的定义产生想要的结果?
上面代码输出的结果是[6, 6, 6, 6] (不是我们想的[0, 2, 4, 6])。
上述问题产生的原因是Python闭包的延迟绑定。这意味着内部函数被调用时,参数的值在闭包内进行查找。因此,当任何由multipliers()返回的函数被调用时,i的值将在附近的范围进行查找。那时,不管返回的函数是否被调用,for循环已经完成,i被赋予了终的值3。
因此,每次返回的函数乘以传递过来的值3,因为上段代码传过来的值是2,它们终返回的都是6。(3*2)碰巧的是,《The Hitchhiker’s Guide to Python》也指出,在与lambdas函数相关也有一个被广泛被误解的知识点,跟这个case不一样。由lambda表达式创造的函数没有什么特殊的地方,它其实是和def创造的函数式一样的。
下面是解决这一问题的一些方法。
一种解决方法就是用Python生成器。
def multipliers():
for i in range(4): yield lambda x : i * x
另外一个解决方案就是创造一个闭包,利用默认函数立即绑定。
def multipliers():
return [lambda x, i=i : i * x for i in range(4)]
还有种替代的方案是,使用偏函数:
from functools import partial
from operator import mul
def multipliers():
return [partial(mul, i) for i in range(4)]
更多培训课程,学习资讯,课程优惠等学校信息,请进入 北京怀柔区Web培训北京平谷区Python培训北京密云区Linux云计算培训 网站详细了解,免费咨询电话:400-998-6158