While testing type inference in mpi4py, I noticed that code like the
one below is failing in the last line. It seems that in  Py>=2.6,
Python makes a coercion on "kw" and builds an actual dict instance
before calling.

class Foo:
    def view(self, **kw):
        print (kw)
        for k in kw.keys():
            print (k)

Foo().view(a=0, b=1, c=2)

class MyDict(object):
    def __getitem__(self, k):
        assert k == 'a'
        return 7
    def keys(self):
        return ['a']

Foo().view(**MyDict()) # <-- Here is the issue


Running on Py>=2.6, the code above gives:

{'a': 0, 'c': 2, 'b': 1}
a
c
b
{'a': 7}
a

so that makes me think that at some point Python is building a tmp
dict out of MyDict instance.



-- 
Lisandro Dalcín
---------------
Centro Internacional de Métodos Computacionales en Ingeniería (CIMEC)
Instituto de Desarrollo Tecnológico para la Industria Química (INTEC)
Consejo Nacional de Investigaciones Científicas y Técnicas (CONICET)
PTLC - Güemes 3450, (3000) Santa Fe, Argentina
Tel/Fax: +54-(0)342-451.1594
_______________________________________________
Cython-dev mailing list
Cython-dev@codespeak.net
http://codespeak.net/mailman/listinfo/cython-dev

Reply via email to