道一站 道一站
首页
  • 历史文明
  • 自我管理
  • 经济金融
  • 未来科技
  • 李笑来
  • 股票
  • 期货
  • 期权
  • 外盘
  • 量化
  • 区块
  • 认知
  • 数理
  • 收藏
  • 前端

    • JavaScript
    • TypeScript
  • 页面

    • HTML
    • CSS
  • 编程

    • C++
    • Python
    • Shell
    • 小程序开发
  • 笔记

    • 《Git》
    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
  • 技术文档
  • Linux
  • Docker
  • GitHub
  • 博客搭建
  • 效用工具
  • 周易基础
  • 奇门遁甲
  • 收藏资源
  • 学习方法
  • 实用技巧
  • 友情链接
  • 分类
  • 标签
  • 归档
关于

daotoyi

静水流深
首页
  • 历史文明
  • 自我管理
  • 经济金融
  • 未来科技
  • 李笑来
  • 股票
  • 期货
  • 期权
  • 外盘
  • 量化
  • 区块
  • 认知
  • 数理
  • 收藏
  • 前端

    • JavaScript
    • TypeScript
  • 页面

    • HTML
    • CSS
  • 编程

    • C++
    • Python
    • Shell
    • 小程序开发
  • 笔记

    • 《Git》
    • 《JavaScript教程》
    • 《JavaScript高级程序设计》
  • 技术文档
  • Linux
  • Docker
  • GitHub
  • 博客搭建
  • 效用工具
  • 周易基础
  • 奇门遁甲
  • 收藏资源
  • 学习方法
  • 实用技巧
  • 友情链接
  • 分类
  • 标签
  • 归档
关于
  • C++

  • JavaScript

  • TypeScript

  • CSS

  • HTML

  • Python

    • Python 速查表
    • python 命名规则
    • Python 相关文件常见的后缀名
    • Python 中最常用的 5 种线程
    • Python 数据规范化(归一化)及Z-score标准化
    • Python 中的绝对导入和相对导入
    • Python 中有 3 个不可思议的返回功能
    • Python 技巧分享
    • PyQt5学习资料
    • PyQt5
    • PyQt5 QDockWidget
    • Python @1装饰器入门教程!
    • Python @函数装饰器及用法
    • Python f-string 格式化字符串的 7 个层级
    • Python 中最常用的 5 种线程
    • Python 中有 3 个不可思议的返回功能
      • Excerpt
      • 第一个:神奇的字典键
        • 💡 说明:
      • 第二个:异常处理中的return
        • 💡 说明:
      • 第三个:相同对象的判断
        • 💡 说明:
    • Python string去除(中文、英文、数字、标点符号)
  • Shell

  • Notes

  • 编程
  • Python
daotoyi
2023-10-07
目录

Python 中有 3 个不可思议的返回功能

# Python 中有 3 个不可思议的返回功能

# Excerpt

今天给大家分享 3 个比较冷门的知识


今天给大家分享 3 个比较冷门的知识

# 第一个:神奇的字典键

some_dict = {}some_dict[5.5] = "Ruby"some_dict[5.0] = "JavaScript"some_dict[5] = "Python"
1

Output:

>>> some_dict[5.5]"Ruby">>> some_dict[5.0]"Python">>> some_dict[5]"Python"
1

"Python" 消除了 "JavaScript" 的存在?

# 💡 说明:

  • Python 字典通过检查键值是否相等和比较哈希值来确定两个键是否相同.

  • 具有相同值的不可变对象在Python中始终具有相同的哈希值.

注意: 具有不同值的对象也可能具有相同的哈希值(哈希冲突).

>>> 5 == 5.0True>>> hash(5) == hash(5.0)True
1

当执行 some_dict[5] = "Python" 语句时, 因为Python将 5 和 5.0 识别为 some_dict 的同一个键, 所以已有值 "JavaScript" 就被 "Python" 覆盖了

# 第二个:异常处理中的return

def some_func():    try:        return 'from_try'    finally:        return 'from_finally'
1

Output:

>>> some_func()'from_finally'
1

# 💡 说明:

  • 当在 "try…finally" 语句的 try 中执行 return, break 或 continue 后, finally 子句依然会执行.

  • 函数的返回值由最后执行的 return 语句决定. 由于 finally 子句一定会执行, 所以 finally 子句中的 return 将始终是最后执行的语句.

# 第三个:相同对象的判断

class WTF:  pass
1

Output:

>>> WTF() == WTF() # 两个不同的对象应该不相等False>>> WTF() is WTF() # 也不相同False>>> hash(WTF()) == hash(WTF()) # 哈希值也应该不同True>>> id(WTF()) == id(WTF())True
1

# 💡 说明:

  • 当调用 id 函数时, Python 创建了一个 WTF 类的对象并传给 id 函数. 然后 id 函数获取其id值 (也就是内存地址), 然后丢弃该对象. 该对象就被销毁了.

  • 当我们连续两次进行这个操作时, Python会将相同的内存地址分配给第二个对象. 因为 (在CPython中) id 函数使用对象的内存地址作为对象的id值, 所以两个对象的id值是相同的.

  • 综上, 对象的id值仅仅在对象的生命周期内唯一. 在对象被销毁之后, 或被创建之前, 其他对象可以具有相同的id值.

  • 那为什么 is 操作的结果为 False 呢? 让我们看看这段代码.

class WTF(object):  def __init__(self): print("I")  def __del__(self): print("D")
1

Output:

>>> WTF() is WTF()IIDDFalse>>> id(WTF()) == id(WTF())IDIDTrue
1

正如你所看到的, 对象销毁的顺序是造成所有不同之处的原因.

原文链接:https://github.com/leisurelicht/wtfpython-cn (opens new window)

上次更新: 2023/10/10, 14:48:21
Python 中最常用的 5 种线程
Python string去除(中文、英文、数字、标点符号)

← Python 中最常用的 5 种线程 Python string去除(中文、英文、数字、标点符号)→

最近更新
01
置身事内
10-10
02
基础知识|八卦五行天干地支
10-08
03
基础知识|推算年月日时的干支
10-08
更多文章>
Theme by Vdoing | Copyright © 2021-2023 Daotoyi | MIT License
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式