0

I'd like to see the source code of chain in python itertools, but here's what I find in the source code ? Why they are all 'pass' ?

class chain(object):
    """
    chain(*iterables) --> chain object

    Return a chain object whose .__next__() method returns elements from the
    first iterable until it is exhausted, then elements from the next
    iterable, until all of the iterables are exhausted.
    """
    @classmethod
    def from_iterable(cls, iterable): # real signature unknown; restored from __doc__
        """
        chain.from_iterable(iterable) --> chain object

        Alternate chain() contructor taking a single iterable argument
        that evaluates lazily.
        """
        pass

    def __getattribute__(self, *args, **kwargs): # real signature unknown
        """ Return getattr(self, name). """
        pass

    def __init__(self, *iterables): # real signature unknown; restored from __doc__
        pass

    def __iter__(self, *args, **kwargs): # real signature unknown
        """ Implement iter(self). """
        pass

    @staticmethod # known case of __new__
    def __new__(*args, **kwargs): # real signature unknown
        """ Create and return a new object.  See help(type) for accurate signature. """
        pass
zjffdu
  • 25,496
  • 45
  • 109
  • 159

1 Answers1

2

The class you saw is probably another module. Itertools, and many other built in fuctions are written in compiled c. You can read the cpython code here https://github.com/python/cpython/blob/3.6/Modules/itertoolsmodule.c#L1792

and in the itertools documentation, it states that the chain function is roughly equivalent to:

 def chain(*iterables):
    # chain('ABC', 'DEF') --> A B C D E F
    for it in iterables:
        for element in it:
            yield element
Taku
  • 31,927
  • 11
  • 74
  • 85
  • 1
    CPython hasn't used the SVN repo in years. Perhaps use [a more modern link](https://github.com/python/cpython/blob/3.6/Modules/itertoolsmodule.c#L1792)? – ShadowRanger Feb 28 '17 at 02:25