python array赋值_从踩坑学Python内部原理(5):执行时机的差异
(给Python开发者加星标,提升Python技能)
英文:Satwik Kansal,翻译:暮晨
Python开发者
整理自 GitHub
【导读】:Python 是一个设计优美的解释型高级语言,它提供了很多能让程序员感到舒适的功能特性。但有的时候 Python 的一些输出结果对于初学者来说似乎并不是那么一目了然。
GitHub 有个仓库收集 Python 中那些难以理解和鲜为人知的功能特性,并尝试讨论这些现象背后真正的原理!
虽然有些例子并不一定会让你觉得“卧槽”(WTF),但它们依然有可能会告诉你一些你所不知道的 Python 有趣特性。我觉得这是一种学习编程语言内部原理的好办法,而且我相信你也会从中获得乐趣!
如果你是一位经验比较丰富的 Python 程序员,你可以尝试挑战看是否能一次就找到例子的正确答案。你可能对其中的一些例子已经比较熟悉了,那这也许能唤起你当年踩这些坑时的甜蜜回忆。
执行时机的差异
1.
array = [1, 8, 15]g = (x for x in array if array.count(x) > 0)array = [2, 8, 22]
Output:
>>> print(list(g))[8]
2.
array_1 = [1,2,3,4]g1 = (x for x in array_1)array_1 = [1,2,3,4,5]
array_2 = [1,2,3,4]g2 = (x for x in array_2)array_2[:] = [1,2,3,4,5]
Output:
>>> print(list(g1))[1,2,3,4]
>>> print(list(g2))[1,2,3,4,5]
说明
- 在生成器[1]表达式中,
in
子句在声明时执行, 而条件子句则是在运行时执行. - 所以在运行前,
array
已经被重新赋值为[2, 8, 22]
, 因此对于之前的1
,8
和15
, 只有count(8)
的结果是大于0
的, 所以生成器只会生成8
. - 第二部分中
g1
和g2
的输出差异则是由于变量array_1
和array_2
被重新赋值的方式导致的. - 在第一种情况下,
array_1
被绑定到新对象[1,2,3,4,5]
, 因为in
子句是在声明时被执行的, 所以它仍然引用旧对象[1,2,3,4]
(并没有被销毁). - 在第二种情况下, 对
array_2
的切片赋值将相同的旧对象[1,2,3,4]
原地更新为[1,2,3,4,5]
. 因此g2
和array_2
仍然引用同一个对象(这个对象现在已经更新为[1,2,3,4,5]
).
参考资料
[1]
生成器: https://wiki.python.org/moin/Generators
- EOF -
推荐阅读 点击标题可跳转
1、从踩坑学Python内部原理(4):for 循环怎么会事儿?
2、从踩坑学Python内部原理(3):对象那点事儿
3、卧槽!Python还有这些特性(2):奇怪的字典
觉得本文对你有帮助?请分享给更多人
推荐关注「Python开发者」,提升Python技能
点赞和在看就是最大的支持❤️
python array赋值_从踩坑学Python内部原理(5):执行时机的差异相关推荐
- python 扒数据_不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据
Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...
- python私人定制_手把手教你学python第十五讲(魔法方法续私人“定制”)
python无处不对象的深刻理解 前面写了这么多,我觉得有必要从一个大的层面,也就是OO来看问题的本质.只要你调用对象的语法是合乎python的习惯的,那就是可以的,我们以前从来没有像下面这么写过,对 ...
- python实验室怎么样_跟老齐学Python之一个免费的实验室
在学生时代,就羡慕实验室,老师在里面可以鼓捣各种有意思的东西.上大学的时候,终于有机会在实验室做大量实验了,因为我是物理系,并且,遇到了一位非常令我尊敬的老师--高老师,让我在他的实验室里面,把所有已 ...
- python计算学习_跟老齐学Python之用Python计算
一提到计算机,当然现在更多人把她叫做电脑,这两个词都是指computer.不管什么,只要提到她,普遍都会想到她能够比较快地做加减乘除,甚至乘方开方等.乃至于,有的人在口语中区分不开计算机和计算器. 那 ...
- 直接学python行不行_是否可以直接学python或者java而不学c++?
当然可以直接学python--编程语言之间基本上没有谁是谁的进阶这种说法,计算机科学才有进阶.所以你说直接学python行不行,当然没问题.即使是Eric S.Raymond也在回答How to Be ...
- python对象模型映射_看例子,学 Python(三)
看例子,学 Python(三) 包 创建一个目录 myutil,把 mymath.py 挪到里面,再添加一个空文件 __init__.py: myutil/ __init__.py mymath.py ...
- 人生苦短我学python表情包_人生苦短,我学PYTHON
写程序开心吗?开心:).真的吗?作为一个想写好程序的手残加脑抽党,经常有人劝我,你并不适合当一个程序员,但是有时候又想在并不擅长的领域疯狂试探.以前学习C的时候,在算法的狂暴洗礼后,又要消灭比代码行还 ...
- python菜鸟入门_值得收藏|菜鸟学Python【入门文章大全】
这是菜鸟学Python的第106篇原创文章 阅读本文大概需要3分钟 菜鸟学python已经写了好多好多文章,我自己也没有想到能写这么多累计已经有110篇了,从入门篇写到了数据篇. 我觉得还有好多绝招, ...
- 跟老齐学python轻松入门_跟老齐学Python 轻松入门 中文pdf_Python教程
资源名称:跟老齐学Python 轻松入门 中文pdf 第0章 预备 1第1章 基本对象类型 13第2章 语句和文件 100第3章 函数 145第4章 类 181第5章 错误和异常 233第6章 模块 ...
最新文章
- Part10 泛型程序设计与C++标准模板库 10.1泛型程序设计及STL的结构
- GetResponse() 基础连接已经关闭:服务器关闭了本应保持活动状态的连接
- 使用cloudera manager搭建HUE后的使用,包括Oozie
- 第二十期:黄金三步法 | 汇报时,如何让老板快速抓住重点?
- LetCode-MSSQL查找重复的电子邮箱
- JVM—类加载过程学习
- python中提取pdf文件某些页_付费?是不可能的!处理 PDF 只需几行代码,彻底解放双手!...
- 导出域控中不活动的计算机_满满干货丨小薇和你聊聊计算机二级的那些事儿
- 计算机二级公共基础知识(一)——数据结构与算法
- 在谷歌云盘训练YOLOV5模型
- oracle存储过程插表,oracle 一张表插入另外一张表 存储过程
- 在Android APP内部实现一个Http Server——NanoHttpd 简单剖析
- 英雄联盟自定义局怎么和其他服务器的玩家玩,英雄联盟自定义为什么没有玩家进来...
- 自监督学习(Self-supervised Learning)的深刻理解
- linux-raid (二) faulty 和 multipath
- 2022年11月选购外接固态硬盘总结
- 设置了相对定位relative之后,改变top值,如何去掉多余空白?
- 关于树叶的活动设计_大班社会教案《有趣的叶子》
- 鸿蒙实力等级划分,从综漫开始的万界之旅
- OpenCV--0016:图像ROI与ROI操作