2017-02-11 17 views
3

во многих кодах я вижу классы с функциями в них, которые они только что использовали pass фраза с некоторыми комментариями по ним. как эта родную встроено функция из питона:Функция python с пропуском в ней

def copyright(*args, **kwargs): # real signature unknown 
""" 
interactive prompt objects for printing the license text, a list of 
    contributors and the copyright notice. 
""" 
pass 

я знаю, передача ничего не делает, а его вида апатичную и null фразы, но почему программисты используют такие функции?

, а также есть некоторые функции с return "" как:

def bin(number): # real signature unknown; restored from __doc__ 
""" 
bin(number) -> string 

Return the binary representation of an integer. 

    >>> bin(2796202) 
    '0b1010101010101010101010' 
""" 
return "" 

почему программисты используют такие вещи?

ответ

3

Вы знаете, что вам понадобится эта функция, вы знаете, что ей дать, и вы знаете, что она возвращает, но вы не собираетесь писать ее прямо сейчас, поэтому вы делаете " прототип»

иногда пакеты будут поставляться с этими функциями, потому что они ожидают, что вы наследовать их и перезаписывать их

+3

Правдоподобным догадок, но настоящая причина совершенно другая. Обратите внимание, что это встроенные объекты, такие как встроенная функция 'bin' или объект' copyright', который существует, поэтому вы можете ввести 'copyright' в интерактивном режиме и получить сообщение об авторских правах. Они уже реализованы. – user2357112

5

Ваш IDE лежит на вас. Эти функции на самом деле не похожи; ваша IDE составляла кучу поддельного исходного кода, почти не напоминающего реальную вещь. Вот почему он говорит такие вещи, как # real signature unknown. Я не знаю, почему они думали, что это хорошая идея.

Настоящий код выглядит совершенно по-другому. Например, вот реальный bin (Python 2.7 версии):

static PyObject * 
builtin_bin(PyObject *self, PyObject *v) 
{ 
    return PyNumber_ToBase(v, 2); 
} 

PyDoc_STRVAR(bin_doc, 
"bin(number) -> string\n\ 
\n\ 
Return the binary representation of an integer or long integer."); 

Он написан на C, и она реализована в виде простой обертки вокруг функции C PyNumber_ToBase:

PyObject * 
PyNumber_ToBase(PyObject *n, int base) 
{ 
    PyObject *res = NULL; 
    PyObject *index = PyNumber_Index(n); 

    if (!index) 
     return NULL; 
    if (PyLong_Check(index)) 
     res = _PyLong_Format(index, base, 0, 1); 
    else if (PyInt_Check(index)) 
     res = _PyInt_Format((PyIntObject*)index, base, 1); 
    else 
     /* It should not be possible to get here, as 
      PyNumber_Index already has a check for the same 
      condition */ 
     PyErr_SetString(PyExc_ValueError, "PyNumber_ToBase: index not " 
         "int or long"); 
    Py_DECREF(index); 
    return res; 
} 
+0

Я полагаю, что JetBrains (это они) делают это, чтобы вы могли просматривать библиотечные модули и, в конечном итоге, задокументированный тупик, а не просто не позволять вам следовать имени в его определении. –

+0

Это странно, кажется, что это может стоить сообщение об ошибке –