Path 1: 11 calls (0.38)

{'f1': '1', 'f2': '2', 'f3': 'abc'} (4) {'1': '1', '2': '2', '3': 'abc', '4': '4', '5': '5', '6': '6'} (3) {'FirstName': 'Eric', 'LastName': 'Idle'} (...

1def __next__(self):
2        if self.line_num == 0:
3            # Used only for its side effect.
4            self.fieldnames
5        row = next(self.reader)
6        self.line_num = self.reader.line_num
7
8        # unlike the basic reader, we prefer not to return blanks,
9        # because we will typically wind up with a dict full of None
10        # values
11        while row == []:
12            row = next(self.reader)
13        d = dict(zip(self.fieldnames, row))
14        lf = len(self.fieldnames)
15        lr = len(row)
16        if lf < lr:
17            d[self.restkey] = row[lf:]
18        elif lf > lr:
19            for key in self.fieldnames[lr:]:
20                d[key] = self.restval
21        return d
            

Path 2: 4 calls (0.14)

dict (4)

1def __next__(self):
2        if self.line_num == 0:
3            # Used only for its side effect.
4            self.fieldnames
5        row = next(self.reader)
6        self.line_num = self.reader.line_num
7
8        # unlike the basic reader, we prefer not to return blanks,
9        # because we will typically wind up with a dict full of None
10        # values
11        while row == []:
12            row = next(self.reader)
13        d = dict(zip(self.fieldnames, row))
14        lf = len(self.fieldnames)
15        lr = len(row)
16        if lf < lr:
17            d[self.restkey] = row[lf:]
18        elif lf > lr:
19            for key in self.fieldnames[lr:]:
20                d[key] = self.restval
21        return d
            

Path 3: 4 calls (0.14)

StopIteration (4)

1def __next__(self):
2        if self.line_num == 0:
3            # Used only for its side effect.
4            self.fieldnames
5        row = next(self.reader)
6        self.line_num = self.reader.line_num
7
8        # unlike the basic reader, we prefer not to return blanks,
9        # because we will typically wind up with a dict full of None
10        # values
11        while row == []:
12            row = next(self.reader)
13        d = dict(zip(self.fieldnames, row))
14        lf = len(self.fieldnames)
15        lr = len(row)
16        if lf < lr:
17            d[self.restkey] = row[lf:]
18        elif lf > lr:
19            for key in self.fieldnames[lr:]:
20                d[key] = self.restval
21        return d
            

Path 4: 3 calls (0.1)

{'FirstName': 'Under1', 'LastName': None} (2) {'fname': 'Under1', 'lname': None} (1)

1def __next__(self):
2        if self.line_num == 0:
3            # Used only for its side effect.
4            self.fieldnames
5        row = next(self.reader)
6        self.line_num = self.reader.line_num
7
8        # unlike the basic reader, we prefer not to return blanks,
9        # because we will typically wind up with a dict full of None
10        # values
11        while row == []:
12            row = next(self.reader)
13        d = dict(zip(self.fieldnames, row))
14        lf = len(self.fieldnames)
15        lr = len(row)
16        if lf < lr:
17            d[self.restkey] = row[lf:]
18        elif lf > lr:
19            for key in self.fieldnames[lr:]:
20                d[key] = self.restval
21        return d
            

Path 5: 3 calls (0.1)

{'FirstName': 'John', 'LastName': 'Cleese'} (2) {'fname': 'John', 'lname': 'Cleese'} (1)

1def __next__(self):
2        if self.line_num == 0:
3            # Used only for its side effect.
4            self.fieldnames
5        row = next(self.reader)
6        self.line_num = self.reader.line_num
7
8        # unlike the basic reader, we prefer not to return blanks,
9        # because we will typically wind up with a dict full of None
10        # values
11        while row == []:
12            row = next(self.reader)
13        d = dict(zip(self.fieldnames, row))
14        lf = len(self.fieldnames)
15        lr = len(row)
16        if lf < lr:
17            d[self.restkey] = row[lf:]
18        elif lf > lr:
19            for key in self.fieldnames[lr:]:
20                d[key] = self.restval
21        return d
            

Path 6: 2 calls (0.07)

dict (2)

1def __next__(self):
2        if self.line_num == 0:
3            # Used only for its side effect.
4            self.fieldnames
5        row = next(self.reader)
6        self.line_num = self.reader.line_num
7
8        # unlike the basic reader, we prefer not to return blanks,
9        # because we will typically wind up with a dict full of None
10        # values
11        while row == []:
12            row = next(self.reader)
13        d = dict(zip(self.fieldnames, row))
14        lf = len(self.fieldnames)
15        lr = len(row)
16        if lf < lr:
17            d[self.restkey] = row[lf:]
18        elif lf > lr:
19            for key in self.fieldnames[lr:]:
20                d[key] = self.restval
21        return d
            

Path 7: 1 calls (0.03)

{'1': '1', '2': '2', '3': 'abc', '4': 'DEFAULT', '5': 'DEFAULT', '6': 'DEFAULT'} (1)

1def __next__(self):
2        if self.line_num == 0:
3            # Used only for its side effect.
4            self.fieldnames
5        row = next(self.reader)
6        self.line_num = self.reader.line_num
7
8        # unlike the basic reader, we prefer not to return blanks,
9        # because we will typically wind up with a dict full of None
10        # values
11        while row == []:
12            row = next(self.reader)
13        d = dict(zip(self.fieldnames, row))
14        lf = len(self.fieldnames)
15        lr = len(row)
16        if lf < lr:
17            d[self.restkey] = row[lf:]
18        elif lf > lr:
19            for key in self.fieldnames[lr:]:
20                d[key] = self.restval
21        return d
            

Path 8: 1 calls (0.03)

{'1': '1', '2': '2', '3': 'abc', '4': '4', '5': '5', '6': '6'} (1)

1def __next__(self):
2        if self.line_num == 0:
3            # Used only for its side effect.
4            self.fieldnames
5        row = next(self.reader)
6        self.line_num = self.reader.line_num
7
8        # unlike the basic reader, we prefer not to return blanks,
9        # because we will typically wind up with a dict full of None
10        # values
11        while row == []:
12            row = next(self.reader)
13        d = dict(zip(self.fieldnames, row))
14        lf = len(self.fieldnames)
15        lr = len(row)
16        if lf < lr:
17            d[self.restkey] = row[lf:]
18        elif lf > lr:
19            for key in self.fieldnames[lr:]:
20                d[key] = self.restval
21        return d