python推导式特殊用法
字典推导式
>>> dic = {x: x**2 for x in (2, 4, 6)}
>>> dic
{2: 4, 4: 16, 6: 36}
>>> type(dic)
<class 'dict'>
集合推导式
>>> a = {x for x in 'abracadabra' if x not in 'abc'}
>>> a
{'d', 'r'}
>>> type(a)
<class 'set'>
元组推导式
圆括号在Python中被用作生成器的语法了,没有元组推导式。要通过类似方法生成元组,需要显式调用元组的类型转换函数tuple(),如下所示:
tup = tuple(x for x in range(9))
print(tup)
print(type(tup))
------------------------
结果:
(0, 1, 2, 3, 4, 5, 6, 7, 8)
<class 'tuple'>
面试真题
result = [lambda x: x + i for i in range(10)]
print(result[0](10))
这是一个结合了变量作用域、列表推导式和匿名函数的题目,其实答案是19,并且result0~9的结果都是19。
这是因为函数具有调用时才查找变量的特性。在你没调用它之前,它不会保存也不关心它内部变量的具体值。只有等到你调用它的时候,它才逐一去找这些变量的具体值。这里的result[0]被调用的时候,变量i已经循环完毕,变成9了,而不是想象中的动态0-9值。
使用debug查看的话,最后显示的是 x=10,i=9 最终结果是19
分析:
在列表生成式内定义的lambda函数是一个闭包,而变量i属于这个闭包引用的外部列表生成式中的变量。因此,在lambda函数内的i并不会被立即求值,而是会被保留为引用,直到调用这个lambda函数时,才去获取i的值。在列表生成式结束后,因为range(10)的关系i的当前值为9,也就是说生成的列表中每个lambda函数都是lambda x: x + 9,而不是一般所想象的lambda x: x+0, lambda x: x+1, ..., lambda x: x+9。因此,将10作为参数传递进无论哪个lambda函数,得到的结果都是10+9=19。
那如果不想要这样的结果,想要i是循环的值怎么办?不要直接引用上层变量,把变量直接传进来。这样一来结果是10
result = [lambda x, i=i: x + i for i in range(10)]
print(result[0](10))
python推导式特殊用法的更多相关文章
- python 推导式的用法
推导式看了不少,可每次都有新发现 例子1:返回满足条件为真,否则为假 try_list = [1, 2, 3, 4, 5] # 前2种一样, [a > 3 for a in b] [True i ...
- Python推导式详解,带你写出比较精简酷炫的代码
Python推导式详解,带你写出比较精简酷炫的代码 前言 1.推导式分类与用法 1.1 列表推导 1.2 集合推导 1.3 字典推导 1.4 元组推导?不存在的 2.推导式的性能 2.1 列表推导式与 ...
- python推导式与海象运算符
背景:介绍两种python用于语句优化的用法 一.推导式 1.推导式简介: Python 推导式是一种独特的数据处理方式,可以从一个数据序列构建另一个新的数据序列的结构体. 支持:列表(list).元 ...
- python推导式pythonic必备【华为云技术分享】
版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog.csdn.net/devcloud/article/detai ...
- python推导式pythonic必备
编程规范 今天公司新出了一套Python编程规范2.0,一直觉得自己写代码路子有点野,所以仔细的看了下. 多数的内容在网上都能搜到,但有几点需要说说 让我觉得羞愧的注释率 公司要求代码注释行,占代码总 ...
- Python推导式
Python推导式 推导式:是Python中提供的一个非常方便的功能,可以通过一行代码实现创建 list.dict.tuple.set的同时初始化一些值. 1.列表推到式 # -*- coding: ...
- 奇技淫巧,还是正统功夫? - Python推导式最全用法
前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,如有问题请及时联系我们以作处理. PS:如有需要Python学习资料的小伙伴可以加点击下方链接自行获取 python免费学习资 ...
- Python—推导式
推导式 推导式:comprehensions(又称解析式),是Python的一种独有特性,相当于语法糖的存在,推导式是可以从一个数据序列构建另一个新的数据序列的结构体. 共有三种推导,在Python2 ...
- python 推导式和迭代器、生成器
1.常用推导式 推导式是从一个或者多个迭代器快速简洁创建数据结构的一种方法. 1.1 _ 列表推导式 最简单的形式: [exprssion for item in iterable] 示例: nu ...
随机推荐
- C#(.net) 面试题
1.ASP.NET的页面生存周期 .aspx/.ashx->IIS->Asp.net_isapi.dll->HttpRuntime.ProcessRequest() ->Htt ...
- DBUS接口和三极管反向电路
三极管反向电路,DR16的接收机接收的信号是反向的 电路描述:VEE为低电平时NPN三极管Q1截止,A点为高电平:VEE为高电平时NPN三极管Q1导通,A点为低电平:从而实现了电平反向.阻R1作用是在 ...
- EF Core 数据过滤
1 前言 本文致力于将一种动态数据过滤的方案描述出来(基于 EF Core 官方的数据筛选器),实现自动注册,多个条件过滤,单条件禁用(实际上是参考ABP的源码),并尽量让代码保持 EF Core 的 ...
- cookie和seesion的区别和联系
今天来聊聊cookie和session的区别和联系.首先先确定一个各自的定义吧: cookies: 网站用于鉴别用户身份和追踪用户登录状态. 存在于浏览器端的一小段文本数据 session: 中文称之 ...
- OI的起点
经过几周的复制与粘贴建设与测试,我终于有了自己的博客! 本蒟蒻目前准初二,就读于深圳SFLS. 我以后会在这里发一些文章,希望大家多多支持.
- VP视频结构化框架
完成多路视频并行接入.解码.多级推理.结构化数据分析.上报.编码推流等过程,插件式/pipe式编程风格,功能上类似英伟达的deepstream和华为的mxvision,但底层核心不依赖复杂难懂的gst ...
- ServerlessBench 2.0:华为云联合上海交大发布Serverless基准测试平台
摘要:华为云联合上海交大重磅推出ServerlessBench 2.0,为社区提供涵盖12类基准测试用例.新增5大类跨平台测试用例.4大类关键特性指标.且多平台兼容的Serverless开放基准测试集 ...
- 题解 P4999 【烦人的数学作业】
数位 dp. 设 \(dp_{q,i}\)(\(i\in\{0,1,2,3,4,5,6,7,8,9\}\))为 \(1\sim q\) 中 \(i\) 出现的次数,\(1\sim q\) 的数字和显然 ...
- 【AcWing】第 62 场周赛 【2022.07.30】
AcWing 4500. 三个元素 题目描述 给定一个长度为 \(n\) 的数组 \(r\_1,r\_2,-,r\_n\). 请你找到其中的三个元素 \(r\_a,r\_b,r\_c\),使得 \(r ...
- BZOJ3224/LuoguP3369 普通平衡树 (splay)
终末のcode #include <iostream> #include <cstdio> #include <cstring> #include <algo ...