Страницы

Поиск по вопросам

воскресенье, 29 декабря 2019 г.

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

#python #циклы


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), после чего берется следующее значение,
пока они не закончатся. в итоге на экране мы имеем:

0
1
2
3
4


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


Ответы

Ответ 1



Нижнее подчёркивание это такое же допустимое имя переменной, как и 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])

Ответ 2



Нижним подчеркиванием обычно обозначается переменная, имя которой нам не важно, так как мы ее не используем. Как можно заметить, в строке matrix = [[[0]*5] for _ in range(5)] Значение _ нигде не используется, просто в результате каждому элементу в соответствие ставится массив из 5 элементов.

Комментариев нет:

Отправить комментарий