1. static void ShowDictObject(PyDictObject* dictObject)
  2. {
  3. PyDictEntry* entry = dictObject->ma_table;
  4. int count = dictObject->ma_mask+1;
  5. int i;
  6. //输出key
  7. printf(" key : ");
  8. for(i = 0; i < count; ++i) {
  9. PyObject* key = entry->me_key;
  10. PyObject* value = entry->me_value;
  11. if(key == NULL) {
  12. printf("NULL");
  13. }
  14. else {
  15. if(PyString_Check(key)) {
  16. if(PyString_AsString(key)[0] == '<') {
  17. printf("dummy");
  18. }
  19. else {
  20. (key->ob_type)->tp_print(key, stdout, 0);
  21. }
  22. }
  23. else{
  24. (key->ob_type)->tp_print(key, stdout, 0);
  25. }
  26. }
  27. printf("\t");
  28. ++entry;
  29. }
  30. //输出value
  31. printf("\nvalue : ");
  32. entry = dictObject->ma_table;
  33. for(i = 0; i < count; ++i) {
  34. PyObject* key = entry->me_key;
  35. PyObject* value = entry->me_value;
  36. if(value == NULL) {
  37. printf("NULL");
  38. }
  39. else {
  40. (key->ob_type)->tp_print(value, stdout, 0);
  41. }
  42. printf("\t");
  43. ++entry;
  44. }
  45. printf("\n");
  46. }
  47.  
  48. static void IsTestDictObject(PyDictObject* mp,PyObject *key,Py_ssize_t n_used)
  49.  
  50. {
  51. PyDictEntry *p;
  52. long strHash;
  53. PyObject* str = PyString_FromString("test");
  54. strHash = PyObject_Hash(str);
  55. p = mp->ma_lookup(mp, str, strHash);
  56. if(p->me_value != NULL && (key->ob_type)->tp_name[0] == 'i') {
  57. PyIntObject* intObject = (PyIntObject*)key;
  58. printf("insert %d\n", intObject->ob_ival);
  59. ShowDictObject(mp);
  60. printf("n_used=%d\tma_used=%d\t ma_fill=%d\t ma_mask=%d\n",n_used,mp->ma_used,mp->ma_fill,mp->ma_mask);
  61. }
  62. }

  

Python开发【源码剖析】 Dict对象的更多相关文章

  1. 《python解释器源码剖析》第12章--python虚拟机中的函数机制

    12.0 序 函数是任何一门编程语言都具备的基本元素,它可以将多个动作组合起来,一个函数代表了一系列的动作.当然在调用函数时,会干什么来着.对,要在运行时栈中创建栈帧,用于函数的执行. 在python ...

  2. 《python解释器源码剖析》第0章--python的架构与编译python

    本系列是以陈儒先生的<python源码剖析>为学习素材,所记录的学习内容.不同的是陈儒先生的<python源码剖析>所剖析的是python2.5,本系列对应的是python3. ...

  3. 《python解释器源码剖析》第6章--python中的dict对象

    6.0 序 元素和元素之间可能存在着某种关系,比如学生姓名和成绩.我希望能够通过学生的姓名找到这个学生的成绩,那么只需要将两者关联起来即可.字典正是这么做的,字典中的每个元素就是一个key:value ...

  4. 《python解释器源码剖析》第1章--python对象初探

    1.0 序 对象是python中最核心的一个概念,在python的世界中,一切都是对象,整数.字符串.甚至类型.整数类型.字符串类型,都是对象.换句话说,python中面向对象的理念观测的非常彻底,面 ...

  5. 《python解释器源码剖析》第7章--python中的set对象

    7.0 序 集合和字典一样,都是性能非常高效的数据结构,性能高效的原因就在于底层使用了哈希表.因此集合和字典的原理本质上是一样的,都是把值映射成索引,通过索引去查找. 7.1 PySetObject ...

  6. 《python解释器源码剖析》第2章--python中的int对象

    2.0 序 在所有的python内建对象中,整数对象是最简单的对象.从对python对象机制的剖析来看,整数对象是一个非常好的切入点.那么下面就开始剖析整数对象的实现机制 2.1 初识PyLongOb ...

  7. 《python解释器源码剖析》第5章--python中的tuple对象

    5.0 序 我们知道对于tuple,就相当于不支持元素添加.修改.删除等操作的list 5.1 PyTupleObject对象 tuple的实现机制非常简单,可以看做是在list的基础上删除了增删改等 ...

  8. 《python解释器源码剖析》第4章--python中的list对象

    4.0 序 python中的list对象,底层对应的则是PyListObject.如果你熟悉C++,那么会很容易和C++中的list联系起来.但实际上,这个C++中的list大相径庭,反而和STL中的 ...

  9. 《python解释器源码剖析》第13章--python虚拟机中的类机制

    13.0 序 这一章我们就来看看python中类是怎么实现的,我们知道C不是一个面向对象语言,而python却是一个面向对象的语言,那么在python的底层,是如何使用C来支持python实现面向对象 ...

  10. 《python解释器源码剖析》第11章--python虚拟机中的控制流

    11.0 序 在上一章中,我们剖析了python虚拟机中的一般表达式的实现.在剖析一遍表达式是我们的流程都是从上往下顺序执行的,在执行的过程中没有任何变化.但是显然这是不够的,因为怎么能没有流程控制呢 ...

随机推荐

  1. 灰度图像--图像分割 Prewitt算子

    学习DIP第45天 转载请标明本文出处:http://blog.csdn.net/tonyshengtan,欢迎大家转载,发现博客被某些论坛转载后,图像无法正常显示,无法正常表达本人观点,对此表示很不 ...

  2. mybatis 根据多个id查询数据 foreach标签

    //根据设备多个id获取设备信息 public List<Devices> getDevicesAll(@Param("devicesIds") String[] de ...

  3. 学习HSDB

    HSDB则是在SA(Serviceability Agent)基础上包装起来的一个调试器,而SA是个非常便于探索HotSpot VM内部实现的API. Stack Memory窗口的内容有三栏: 左起 ...

  4. vue使用案例,vue初始化,vue初始化方法,vue条件语句,vue在js里面添加元素调用vue方法

     <div id="main" > <button id='but1' type="button" v-on:click="save ...

  5. 冰多多团队-第七次scrum例会

    冰多多团队-第七次Scrum会议 工作情况 团队成员 已完成任务 待完成任务 zpj 接入IAT模块 debug, IAT 牛雅哲 调研科大讯飞SDK中其他模块,寻找符合我们的需求的部分,将接口更换成 ...

  6. linux驱动由浅入深系列:高通sensor架构实例分析之二(驱动代码结构)【转】

    本文转载自:https://blog.csdn.net/radianceblau/article/details/73498303 本系列导航: linux驱动由浅入深系列:高通sensor架构实例分 ...

  7. Android如何屏蔽home键和recent键

    最近在做一个项目的时候,进入一个 Activity后需要暂时屏蔽掉home键和recent键(back键可以在onKeyDown里面处理),网上找了半天,都是针对旧版本android的方法,andro ...

  8. 解决:Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceMode

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/Eric_K1m/article/deta ...

  9. django入门8之xadmin引入富文本和excel插件

    django入门8之xadmin引入富文本和excel插件 Xadmin引入富文本 插件的文档 https://xadmin.readthedocs.io/en/docs-chinese/make_p ...

  10. spark 监控--WebUi、Metrics System(转载)

    转载自:https://www.cnblogs.com/barrenlake/p/4364644.html Spark 监控相关的部分有WebUi 及 Metrics System; WebUi用于展 ...