аватар question@mail.ru · 01.01.1970 03:00

for _ in range . как работает нижнее подчеркивание

matrix = [[[0]*5] for _ in range(5)]

есть такое выражение, создает пять таких элементов 0 0 0 0 0. Кто может объяснить саму механику создания, чем проще тем лучше.

К примеру

for x in range(5):    print (x)

range(5) - это 0,1,2,3,4

и для каждого значения начиная с первого (0) выполняется действие print(x) (выводит на экран текущее значение, в данном случае 0), после чего берется следующее значение, пока они не закончатся. в итоге на экране мы имеем:

01234

Желательно в таком ключе объяснение, а то я не понимаю суть этого выражения, что означает это нижнее подчеркивание?

аватар answer@mail.ru · 01.01.1970 03:00

Нижнее подчёркивание это такое же допустимое имя переменной, как и x, например.

То есть, с точки зрения интерпретатора, выражения for _ in range(5) и for x in range(5) ничем не отличаются и будут выполнятся одинаково.

Просто по традиции нижнее подчёркивание используют для того, чтобы показать, что эта переменная нигде дальше не используется. То есть мы используем какую-то синтаксическую конструкцию, в которой требуется создать новую переменную, но нам нужна не эта переменная, а какие-то другие эффекты от данной синтаксической конструкции.

Выражение for _ in range(5) обычно используется просто для того, чтобы повторить что-то 5 раз. На каждой итерации переменная _ будет принимать последовательно значения 0, 1, 2, 3, 4, но нам эти значения не нужны, нам нужно только чтобы произошло пять итераций. Поэтому мы и даём имя переменной _, так как это традиционное обозначение ненужной переменной.

Теперь относительно того, что вообще происходит в вашем выражении. Само выражение вида [что-то for переменная in последовательность] - это так называемое списковое включение (в оригинале - list comprehension).

На самом деле оно просто представляет из себя сокращённый синтаксис такого цикла:

res = []for переменная in последовательность:    res.append(что-то)

Умножение массива на число создаёт массив, в котором исходный массив повторён несколько раз. Соответственно, [0]*5 - это всего лишь краткая запись для [0, 0, 0, 0, 0]

Соответственно, с учётом вышесказанного, ваше выражение полностью эквивалентно такому коду:

matrix = []for _ in range(5):    matrix.append([0, 0, 0, 0, 0])

Последние

Похожие