作家
登录

Python中的函数与方法 以及Bound Method和Unbound Method

作者: 来源: 2017-05-15 15:07:28 阅读 我要评论

  •             Py_DECREF(v); 
  •             SET_TOP(x); 
  •             if (x != NULL) DISPATCH(); 
  •             break; 
  •         }  
  • 经由过程 SET_TOP, 已经将我们须要真正履行的函数压入运行时栈, 接下来就是经由过程CALL_FUNCTION 来调用这个函数对象, 持续来看看具体过程:

    1. //取自: python2.7/objects/ceval.c 
    2. TARGET(CALL_FUNCTION) 
    3.         { 
    4.             PyObject **sp; 
    5.             PCALL(PCALL_ALL); 
    6.             sp = stack_pointer; 
    7. #ifdef WITH_TSC 
    8.             x = call_function(&sp, oparg, &intr0, &intr1); 
    9. #else 
    10.             x = call_function(&sp, oparg);  // 细节请往下看 
    11. #endif 
    12.             stack_pointer = sp; 
    13.             PUSH(x); 
    14.             if (x != NULL) DISPATCH(); 
    15.             break; 
    16.         } 
    17.        
    18. static PyObject * 
    19. call_function(PyObject ***pp_stack, int oparg)     
    20.     int na = oparg & 0xff;                // 地位参数个数 
    21.     int nk = (oparg>>8) & 0xff;           // 关键地位参数的个数 
    22.     int n = na + 2 * nk;                  // 总的个数和 
    23.     PyObject **pfunc = (*pp_stack) - n - 1;  // 当前栈地位-参数个数,获得函数对象 
    24.     PyObject *func = *pfunc;   
    25.     PyObject *x, *w; 
    26.     ... // 省略前面细节, 只看关键调用 
    27.     if (PyMethod_Check(func) && PyMethod_GET_SELF(func) != NULL) { 
    28.             /* optimize access to bound methods */ 
    29.             PyObject *self = PyMethod_GET_SELF(func); 
    30.             PCALL(PCALL_METHOD); 

        推荐阅读

        “视”创未来,首届家庭实时视频产业联盟论坛呼吁共建产业生态

      5月11日下昼,以“视”创将来为主题的首届家庭及时视频家当联盟论坛在深圳福田隆重召开。华为云核心>>>详细阅读


      本文标题:Python中的函数与方法 以及Bound Method和Unbound Method

      地址:http://www.17bianji.com/lsqh/35218.html

    关键词: 探索发现

    乐购科技部分新闻及文章转载自互联网,供读者交流和学习,若有涉及作者版权等问题请及时与我们联系,以便更正、删除或按规定办理。感谢所有提供资讯的网站,欢迎各类媒体与乐购科技进行文章共享合作。

    网友点评
    自媒体专栏

    评论

    热度

    精彩导读
    栏目ID=71的表不存在(操作类型=0)