Нумерация print Python

Недавно работаю с Python, вопрос наверное глупый. У меня есть функция, которая во время работы вывод в консоль print("..."). Мне нужно, чтобы каждый новый print нумеровался. То есть print ("[1]...").


Ответы (3 шт):

Автор решения: Jack_oS

Встроенная функция enumerate() - то, что вам нужно!

>>> seasons = ['Spring', 'Summer', 'Fall', 'Winter']
>>> list(enumerate(seasons))
[(0, 'Spring'), (1, 'Summer'), (2, 'Fall'), (3, 'Winter')]
>>> list(enumerate(seasons, start=1))
[(1, 'Spring'), (2, 'Summer'), (3, 'Fall'), (4, 'Winter')]

Для вашего принта:

months = ['January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December']

for i, m in enumerate(months, 1):  # начитать нумерацию с 1
    print(f'{i}: {m}')

Вывод:

1: January
2: February
3: March
4: April
5: May
6: June
7: July
8: August
9: September
10: October
11: November
12: December
→ Ссылка
Автор решения: Stanislav Volodarskiy

Написать универсальное решение не так просто. Вместо функции print создадим функцию eprint (enumeration print), которая самостоятельно вставляет номер в начале каждой печати. Получается сложная конструкция с замыканиями, итераторами и передачей параметров с помощью *args, **kwargs:

import itertools

def make_eprint():
    c = itertools.count(start=1)
    
    def eprint(*args, **kwargs):
        kwargs_copy = dict(kwargs)
        kwargs_copy.update(end=' ', flush=False)
        print(f'[{next(c)}]', **kwargs_copy)
        print(*args, **kwargs)

    return eprint

eprint = make_eprint()

eprint('Hello, world!')
eprint(1, 2, 3, sep='-')
eprint(1, 2, 3, sep='-', end='\n\n')
eprint(1, 2, 3, end=' ')
eprint(1, 2, 3)

Результат:

[1] Hello, world!
[2] 1-2-3
[3] 1-2-3

[4] 1 2 3 [5] 1 2 3

В последней строке виден дефект, который не устраняется просто.

→ Ссылка
Автор решения: TigerTV.ru

Вариант с декоратором:

def super_print(f):
    m = [0]
    foo = print
    def helper(x):
        m[0] = f(m[0])
        foo(f'[{m[0]}]: {x}')
    return helper

@super_print
def print(n):
    return n+1

print("Monday")
print("Tuesday")
print("Wednesday")

Вывод:

[1]: Monday
[2]: Tuesday
[3]: Wednesday
→ Ссылка