1 字符串驻留

In [1]: a = 'something'    ...: b = 'some'+'thing'    ...: id(a)==id(b)Out[1]: True

如果上面例子返回True,但是下面例子为什么是False:

In [1]: a = '@zglg.com' In [2]: b = '@zglg'+'.com' In [3]: id(a)==id(b)Out[3]: False

这与Cpython 编译优化相关,行为称为字符串驻留,但驻留的字符串中只包含字母,数字或下划线。

2 相同值的不可变对象

In [5]: d = {}    ...: d[1] = 'java'    ...: d[1.0] = 'python' In [6]: dOut[6]: {1: 'python'} ### key=1,value=java的键值对神器消失了In [7]: d[1]Out[7]: 'python'In [8]: d[1.0]Out[8]: 'python'

这是因为具有相同值的不可变对象在Python中始终具有相同的哈希值

由于存在哈希冲突,不同值的对象也可能具有相同的哈希值。

3 对象销毁顺序

创建一个类SE:

class SE(object):  def __init__(self):    print('init')  def __del__(self):    print('del')

创建两个SE实例,使用is判断:

In [63]: SE() is SE()initinitdeldelOut[63]: False 

创建两个SE实例,使用id判断:

In [64]: id(SE()) == id(SE())initdelinitdelOut[64]: True

调用id函数, Python 创建一个 SE 类的实例,并使用id函数获得内存地址后,销毁内存丢弃这个对象。

当连续两次进行此操作, Python会将相同的内存地址分配给第二个对象,所以两个对象的id值是相同的.

但是is行为却与之不同,通过打印顺序就可以看到。

4 充分认识for

In [65]: for i in range(5):    ...:   print(i)    ...:   i = 1001234

为什么不是执行一次就退出?

按照for在Python中的工作方式, i = 10 并不会影响循环。range(5)生成的下一个元素就被解包,并赋值给目标列表的变量i.

5 认识执行时机

array = [1, 3, 5]g = (x for x in array if array.count(x) > 0)

g为生成器,list(g)后返回[1,3,5],因为每个元素肯定至少都出现一次。所以这个结果这不足为奇。但是,请看下例:

array = [1, 3, 5]g = (x for x in array if array.count(x) > 0)array = [5, 7, 9]

请问,list(g)等于多少?这不是和上面那个例子结果一样吗,结果也是[1,3,5],但是:

In [74]: list(g)Out[74]: [5]

这有些不可思议~~ 原因在于:

生成器表达式中, in 子句在声明时执行, 而条件子句则是在运行时执行。

所以代码:

array = [1, 3, 5]g = (x for x in array if array.count(x) > 0)array = [5, 7, 9]

等价于:

g = (x for x in [1,3,5] if [5,7,9].count(x) > 0)

看明白吗?

以上就是五个Python小特性,都很有意思,结果确实出乎意料。

相信了解这些好玩的特性后,大家对Python的认识更近一步了,恭喜大家。


Python的 global 到底干嘛的?

点击阅读原文,了解更多小知识

[转]5个有趣的Python小知识,返回结果让人出乎意料~相关推荐

  1. 5个有趣的Python小知识,返回结果让人出乎意料~

    1 字符串驻留 In [1]: a = 'something'...: b = 'some'+'thing'...: id(a)==id(b) Out[1]: True 如果上面例子返回True,但是 ...

  2. python恶搞小程序-有趣的python小程序

    有趣的python小程序 1.密码生成器x=int(input()) print(''.join(__import__('random').choice('QWERTYUIOPASDFGHJKLZXC ...

  3. Python小知识 | 这些技能你不会?(终章)

    零.写在前面 写完今天这一篇,Python小知识这块就完了,一共四篇,也就是我过了一遍<零压力学Python>后记录下来的一些重要的点,希望对初学者或者复习Python基础的读者有所帮助, ...

  4. Python小知识 | 这些技能你不会?(三)

    ✪ Python小知识 ✪ 最近在看<零压力学Python>,巩固一下基础知识,意外收获到很多常用却不一定被注意的小知识,分享给大家,学到东西了点赞支持哦~ 第一篇: 第二篇: 阅读提醒: ...

  5. Python小知识 | 这些技能你不会?(二)

    阅读本文可能需要8-10分钟,老表说边看边思考,边动手能学到更多东西. --老表<老表说> ✪ Python小知识 ✪ 最近在看<零压力学Python>,巩固一下基础知识,意外 ...

  6. Python小知识 | 这些技能你不会?(一)

    阅读文本大概需要 8-10 分钟,动手才能学到更多东西. ✪ Python小知识 ✪ 最近在看<零压力学Python>,巩固一下基础知识,意外收获到很多常用却不一定被注意的小知识,分享给大 ...

  7. 生活中的计算机趣味知识大全,五个有趣的电脑小知识

    五个有趣的电脑小知识 1, 更改临时文件夹的路径 问:我使用的系统为Windows XP,我想把系统临时文件(Temp文件)存放区由C盘移到其他分区(如D盘),请问该如何*作? 答:在"我的 ...

  8. 有趣的python小程序

    有趣的python小程序 1.密码生成器 x=int(input()) print(''.join(__import__('random').choice('QWERTYUIOPASDFGHJKLZX ...

  9. 【有趣的Python小程序】Python多个简单上手的库制作WalkLattice 走格子游戏 (思路篇)上

    篇写上一个思路篇,那么今天我们就来完成这一项工作 源代码和配套文件 链接: https://caiyun.139.com/m/i?135ClY1yWrSKX 提取码:e4pq 复制内容打开中国移动云盘 ...

最新文章

  1. 最近做了一个搜索接口的优化,反复压测了四次,终于达到要求了
  2. C#版本的CPU性能测试
  3. 「SAP技术」SAP MM 事务代码ME17的用法
  4. 当我们使用锁同步代码的时候,会在什么时候释放锁呢
  5. fluent的udf需要c语言环境吗,[转载]FLUENT UDF 使用指导
  6. Python老男孩 day15 函数(二) 局部变量与全局变量
  7. python中垃圾回收机制_Python中的变量和垃圾回收机制
  8. 禅道类似软件_项目管理软件之争,禅道和JIRA大对比
  9. 林业大学计算机专业排名2019,2019北京林业大学专业排名(4页)-原创力文档
  10. php解析、封装JSON与XML
  11. 6.1-数据结构算法-堆栈与队列
  12. Android万能布局检查器UI Automator Viewer使用教程、环境配置和Mac无法打开问题解决(uiautomatorviewer,android studio,layer,查看,错误)
  13. 串口转WiFi透传模块UART转WiFi模块嵌入式WiFi参数一键配置原理
  14. 响应式Web设计帮助移动终端访问网站
  15. 2020-12-01 剖析 Linux hypervisor
  16. ABAP 新特性 - COND SWITCH 操作符
  17. 绝了!一个妹子 rm -rf 把公司整个数据库删没了...
  18. ElasticSearch教程
  19. 新型无线充电技术:能为人体植入设备充电
  20. XSS漏洞讲解与多篇实战讲解

热门文章

  1. CPU调度算法——FCFS算法/SJF算法/优先级调度算法/RR算法
  2. QStandardItemModel——数据模型
  3. SQL Server中的T-SQL RegEx命令
  4. 如何对SQL Server实例执行性能测试
  5. Questions make me doubt my engineer career
  6. javascript ep
  7. 删除一个用户下的所有表脚本
  8. 68.营救问题(广搜)
  9. Hibernate-注解-实体类
  10. 网络带宽与实际上传下载速度之间关系