在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/Python/ python set add方法

python set add方法

python 集合set


class set(object):
    def add(self, *args, **kwargs):  
    
 
源代碼里面,add方法,參數(shù)寫的是*args,不是應(yīng)該可以可以傳遞多個值的嗎

ss = {1,3,5}
ss.add(7,9)  為什么會出錯呢!?。。??
回答
編輯回答
絯孑氣

你和我看的不是一份源碼(lib\sets.py)?

class Set(BaseSet):
    def add(self, element):
        """Add an element to a set.

        This has no effect if the element is already present.
        """
        try:
            self._data[element] = True
        except TypeError:
            transform = getattr(element, "__as_immutable__", None)
            if transform is None:
                raise # re-raise the TypeError exception we caught
            self._data[transform()] = True
2018年5月26日 06:27
編輯回答
空白格

集合的實現(xiàn)部分是 C 語言實現(xiàn)的,不知道你們找的 "源碼" 究竟是哪里看的,一些IDE為了提示友好是會做一些聲明工作的如 PyCharm。題主應(yīng)該只是想追究 add 中參數(shù)是怎么聲明的吧。這部分在 setobject.c 中可以看關(guān)于 set 對象的屬性方法:

static PyMethodDef set_methods[] = {
    {"add",             (PyCFunction)set_add,           METH_O, add_doc},
    {"clear",           (PyCFunction)set_clear,         METH_NOARGS, clear_doc},
    {"difference",      (PyCFunction)set_difference_multi,      METH_VARARGS, difference_doc},
    ...
}

set.add 的實現(xiàn)部分就是 set_add 了,可以看下它的聲明:

static PyObject *
set_add(PySetObject *so, PyObject *key)
{
    if (set_add_key(so, key))
        return NULL;
    Py_RETURN_NONE;
}

只有一個參數(shù)哦~也就是說它只能單個元素添加。

另外,這部分你可以通過 python 內(nèi)置的幫助函數(shù) help() 來看它的說明:

>>> help(set.add)
Help on method_descriptor:

add(...)
    Add an element to a set.

    This has no effect if the element is already present.

>>>

代碼出處:https://github.com/python/cpy...

2017年3月7日 01:47