Python

字典

key不存在,报错场景

复制代码

dic={} dic['a'] # 报错 dic.get('a') # 不报错 返回None dic['a']=1 # 不报错,直接创建a=1的键值对 print(dic)

查看源码

cmd+click,蓝色面板里面显示了python内置是怎么实现字典的get,但是没有底层源码

方法入参

TypeVar来自typing.TypeVar,用于泛型占位。

复制代码

KT = TypeVar("KT") # 入参是name VT = TypeVar("VT")

用法举例

复制代码

from typing import TypeVar T = TypeVar('T') def demo(x: T) -> T: return x

  • "/"

    入参按照顺序传入get(k1) ✅,不允许写成k1=v1传入 get(k1=v1)❌

python的内置函数源码注册在CPython中

CPython源码:https://github.com/python/cpython/blob/main/Objects/dictobject.c#L3703

CPython是Python的解释器,由C语言实现。Python内置的函数,例如dict.get(k)的源码注册在CPython中,所以总说Python的底层是C语言。

调用顺序

.py - CPython 编译成中间码 - CPython 解释器 执行+调用c层函数

类比java : .java - jvm编译成.class中间码 - jvm解释器执行

复制代码

_PyDict_Subscript(PyObject *self, PyObject *key) { Py_hash_t hash = _PyObject_HashFast(key); if (hash == -1) { dict_unhashable_type(self, key); return NULL; } return _PyDict_SubscriptKnownHash(self, key, hash); }

Argument clinic机制

c层开发者利用Argument clinic工具,实现简单声明-> 代码生成。

复制代码

/*[clinic input] demo.add x: int y: int = 1 / Return x + y. [clinic start generated code]*/

Hashable

字典的key必须是hashable的。作为key的变量,在其生命周期,不会变。比如str,int等,但是数组1,2不行,作为key的话,内容发生变化,hash会发生变化,导致无法快速查找,视为unhashable。

相关推荐
云和数据.ChenGuang7 分钟前
深入剖析 Python 的 MRO 规则:从 C3 线性化到实战踩坑
开发语言·python·1024程序员节
123_不打狼16 分钟前
Squidiff:基于条件扩散模型预测细胞发育与扰动响应
开发语言·python·squidiff
databook20 分钟前
用Python DSL 写轻量数据质检工具
python·数据分析
郝学胜-神的一滴30 分钟前
AI 编程智能体 17:四步搞定专属AI智能体
大数据·人工智能·python·神经网络·算法·langchain·强化学习
岁寒良木33 分钟前
麒麟 V10 (x86_64) 离线/联网部署 Docker 26.1.4 与 MaxKB v2.10 LTS 实战指南
python·docker·kylin
Norna1 小时前
receive 取消了,TCP 为什么还在读:AnyIO 的一次背压修复
python
Ven%1 小时前
在魔搭 Notebook 容器里跑 Qwen Code:从零配置到省魔粒的完整实践
人工智能·python·ai·ai编程·modelscope
2401_885885041 小时前
巴林语音通知接口如何对接?系统告警语音API接入教程
android·前端·网络·python·语音识别
执假以为真2 小时前
Python内存分析器memray的简单介绍
python
收纳过往2 小时前
数据库加索引的时机:慢查询日志说话
android·开发语言·数据库·python·低代码·rxjava