栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Python中** kwargs参数的可变性

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Python中** kwargs参数的可变性

让我们来看看:

import disdis.dis(lambda: print_arg(**{'key': 'value'}))  60 LOAD_GLOBAL   0 (print_arg)   3 BUILD_MAP     1   6 LOAD_ConST    1 ('value')   9 LOAD_ConST    2 ('key')  12 STORE_MAP  13 CALL_FUNCTION_KW         0  16 RETURN_VALUE

让我们找出

CALL_FUNCTION_KW
ceval.c
)的作用:

    case CALL_FUNCTION_VAR:    case CALL_FUNCTION_KW:    case CALL_FUNCTION_VAR_KW:    {        // ...        x = ext_do_call(func, &sp, flags, na, nk);        // ...static PyObject *ext_do_call(PyObject *func, PyObject ***pp_stack, int flags, int na, int nk){    int nstar = 0;    PyObject *callargs = NULL;    PyObject *stararg = NULL;    PyObject *kwdict = NULL;    PyObject *result = NULL;    if (flags & CALL_FLAG_KW) {          // if ** is involved        kwdict = EXT_POP(*pp_stack);        // get the dict passed with **   if (!PyDict_Check(kwdict)) { PyObject *d;  d = PyDict_New(); // make a NEW dict if (d == NULL)     goto ext_call_fail; if (PyDict_Update(d, kwdict) != 0) {    // update it with old     // .. fail ..     goto ext_call_fail; } Py_DECREF(kwdict);    kwdict = d;   // kwdict is now the new dict        }    }    ....      result = PyObject_Call(func, callargs, kwdict);  // call with new dict


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/660694.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号