(给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, 815, 只有 count(8) 的结果是大于 0 的, 所以生成器只会生成 8.
  • 第二部分中 g1g2 的输出差异则是由于变量 array_1array_2 被重新赋值的方式导致的.
  • 在第一种情况下, array_1 被绑定到新对象 [1,2,3,4,5], 因为 in 子句是在声明时被执行的, 所以它仍然引用旧对象 [1,2,3,4](并没有被销毁).
  • 在第二种情况下, 对 array_2 的切片赋值将相同的旧对象 [1,2,3,4] 原地更新为 [1,2,3,4,5]. 因此 g2array_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):执行时机的差异相关推荐

  1. python 扒数据_不踩坑的Python爬虫:如何在一个月内学会爬取大规模数据

    Python爬虫为什么受欢迎 如果你仔细观察,就不难发现,懂爬虫.学习爬虫的人越来越多,一方面,互联网可以获取的数据越来越多,另一方面,像 Python这样的编程语言提供越来越多的优秀工具,让爬虫变得 ...

  2. python私人定制_手把手教你学python第十五讲(魔法方法续私人“定制”)

    python无处不对象的深刻理解 前面写了这么多,我觉得有必要从一个大的层面,也就是OO来看问题的本质.只要你调用对象的语法是合乎python的习惯的,那就是可以的,我们以前从来没有像下面这么写过,对 ...

  3. python实验室怎么样_跟老齐学Python之一个免费的实验室

    在学生时代,就羡慕实验室,老师在里面可以鼓捣各种有意思的东西.上大学的时候,终于有机会在实验室做大量实验了,因为我是物理系,并且,遇到了一位非常令我尊敬的老师--高老师,让我在他的实验室里面,把所有已 ...

  4. python计算学习_跟老齐学Python之用Python计算

    一提到计算机,当然现在更多人把她叫做电脑,这两个词都是指computer.不管什么,只要提到她,普遍都会想到她能够比较快地做加减乘除,甚至乘方开方等.乃至于,有的人在口语中区分不开计算机和计算器. 那 ...

  5. 直接学python行不行_是否可以直接学python或者java而不学c++?

    当然可以直接学python--编程语言之间基本上没有谁是谁的进阶这种说法,计算机科学才有进阶.所以你说直接学python行不行,当然没问题.即使是Eric S.Raymond也在回答How to Be ...

  6. python对象模型映射_看例子,学 Python(三)

    看例子,学 Python(三) 包 创建一个目录 myutil,把 mymath.py 挪到里面,再添加一个空文件 __init__.py: myutil/ __init__.py mymath.py ...

  7. 人生苦短我学python表情包_人生苦短,我学PYTHON

    写程序开心吗?开心:).真的吗?作为一个想写好程序的手残加脑抽党,经常有人劝我,你并不适合当一个程序员,但是有时候又想在并不擅长的领域疯狂试探.以前学习C的时候,在算法的狂暴洗礼后,又要消灭比代码行还 ...

  8. python菜鸟入门_值得收藏|菜鸟学Python【入门文章大全】

    这是菜鸟学Python的第106篇原创文章 阅读本文大概需要3分钟 菜鸟学python已经写了好多好多文章,我自己也没有想到能写这么多累计已经有110篇了,从入门篇写到了数据篇. 我觉得还有好多绝招, ...

  9. 跟老齐学python轻松入门_跟老齐学Python 轻松入门 中文pdf_Python教程

    资源名称:跟老齐学Python 轻松入门 中文pdf 第0章 预备 1第1章 基本对象类型 13第2章 语句和文件 100第3章 函数 145第4章 类 181第5章 错误和异常 233第6章 模块 ...

最新文章

  1. Part10 泛型程序设计与C++标准模板库 10.1泛型程序设计及STL的结构
  2. GetResponse() 基础连接已经关闭:服务器关闭了本应保持活动状态的连接
  3. 使用cloudera manager搭建HUE后的使用,包括Oozie
  4. 第二十期:黄金三步法 | 汇报时,如何让老板快速抓住重点?
  5. LetCode-MSSQL查找重复的电子邮箱
  6. JVM—类加载过程学习
  7. python中提取pdf文件某些页_付费?是不可能的!处理 PDF 只需几行代码,彻底解放双手!...
  8. 导出域控中不活动的计算机_满满干货丨小薇和你聊聊计算机二级的那些事儿
  9. 计算机二级公共基础知识(一)——数据结构与算法
  10. 在谷歌云盘训练YOLOV5模型
  11. oracle存储过程插表,oracle 一张表插入另外一张表 存储过程
  12. 在Android APP内部实现一个Http Server——NanoHttpd 简单剖析
  13. 英雄联盟自定义局怎么和其他服务器的玩家玩,英雄联盟自定义为什么没有玩家进来...
  14. 自监督学习(Self-supervised Learning)的深刻理解
  15. linux-raid (二) faulty 和 multipath
  16. 2022年11月选购外接固态硬盘总结
  17. 设置了相对定位relative之后,改变top值,如何去掉多余空白?
  18. 关于树叶的活动设计_大班社会教案《有趣的叶子》
  19. 鸿蒙实力等级划分,从综漫开始的万界之旅
  20. OpenCV--0016:图像ROI与ROI操作

热门文章

  1. 特征工程(六)lsa和lda
  2. 读科研文献也能泄露隐私,用户发现爱思唯尔PDF阅读器收集用户信息
  3. LSTM终获「正名」,IEEE 2021神经网络先驱奖授予LSTM提出者Sepp Hochreiter
  4. k8s概念入门之apiserver-针对1.1.版本阅读
  5. Python源码学习:Python函数浅析-无参函数
  6. Serializer序列化使用
  7. Django视图之状态保持
  8. 用户变量和系统变量的区别
  9. 基于DQN强化学习训练一个超级玛丽
  10. 经验 | OpenCV图像旋转的原理与技巧