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

  • Booredatwork.com

    Booredatwork

    5 Ocak 2009
  • incognitotraveler

    incognitotra

    27 Mayıs 2010
  • Jason Parker

    Jason Parker

    14 Aralık 2009