SORU
9 Temmuz 2010, Cuma


Eğer x listede ise, neden x = &; ha" iş " iken x = x "ha" bir istisna atar mı?

Bildiğim kadarıyla listeler için op sadece 2 işlenen iterable olması gerekir, "" net. ha

Kod:

>>> x = []
>>> x  = "ha"
>>> x
['h', 'a']
>>> x = x   "ha"
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can only concatenate list (not "str") to list

CEVAP
9 Temmuz 2010, Cuma


Listesi = extend, değil " demesi gibi.

  • Bir iterable extend diyebilirsin.
  • Sadece başka bir liste ile kullanabilirsiniz.

Sadece bu kararın nedenini tahmin edebiliyorum, ama performansla ilgili nedenlerden dolayı olduğunu tahmin ediyorum. Yeni bir nesne oluşturuldu arama sonuçları ve tüm öğeleri extend mevcut listesinde boş alanı kullanabilir ise kopyalanan, bazı durumlarda bir kopyasını kaydetme nesne.

Bu kararın yan etkisi başka bir x = x y kullanırsanız listeye x = y diğer referanslar değişiklik görürsünüz yazarsan ancak o zaman onlar. Bu aşağıda gösterilmiştir:

>>> x = ['a','b']
>>> y = ['c', d']
>>> z = x
>>> x  = y
>>> z
['a', 'b', 'c', 'd']

>>> x = ['a','b']
>>> y = ['c', d']
>>> z = x
>>> x = x   y
>>> z
['a', 'b']

Referanslar

Python source code for list.

Kaynak = için: kod

static PyObject *
list_inplace_concat(PyListObject *self, PyObject *other)
{
    PyObject *result;

    result = listextend(self, other);
    if (result == NULL)
        return result;
    Py_DECREF(result);
    Py_INCREF(self);
    return (PyObject *)self;
}

Kaynak : kodu

static PyObject *
list_concat(PyListObject *a, PyObject *bb)
{
    Py_ssize_t size;
    Py_ssize_t i;
    PyObject **src, **dest;
    PyListObject *np;
    if (!PyList_Check(bb)) {
        PyErr_Format(PyExc_TypeError,
                  "can only concatenate list (not \"%.200s\") to list",
                  bb->ob_type->tp_name);
        return NULL;
    }

    // etc ...

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • ElChakotay Andrich

    ElChakotay A

    10 EKİM 2013
  • Machinima

    Machinima

    17 Ocak 2006
  • Pocketnow

    Pocketnow

    14 EKİM 2007