Является ли мой анализ этого кода правильным, и почему он будет написан таким образом? - PullRequest
1 голос
/ 21 июня 2019

Я унаследовал программу на Python (больше похожую на большое количество скриптов), которую я переписываю в программу ООП. Я все еще изучаю Python и наткнулся на эту строку кода, в которой я не уверен.

К сожалению, я не знаю, как называется эта операция, поэтому мои поиски не были очень успешными.

bands = [int(b) for b in bands] if bands is not None else [10, 11]

Я думаю, что этот код просматривает переменную 'groups' и, если она не 'None', перебирает переменную и преобразует каждую запись в списке в int. Если 'groups' пусто, он устанавливает 'band' равным списку, содержащему 10 и 11.

Является ли мой анализ кода правильным?

Код выглядит для меня чуждо, вроде как задом наперед. Есть ли какая-то конкретная причина, по которой кто-то хотел бы написать код таким образом вместо обычного оператора if? Это быстрее или у него есть другие преимущества?

Ответы [ 2 ]

1 голос
/ 21 июня 2019

Ваш анализ верен.Я написал бы это по-другому, но я бы не использовал 4 строки, чтобы просто инициализировать / очистить переменную, когда Python предлагает множество способов быть более краткими, но в то же время разборчивыми.

Вот несколько альтернатив:

bands = [int(b) for b in bands] if bands else [10,11] # <-- I would have chosen this one
bands = [int(b) for b in bands or [10,11]]
bands = list(map(int,bands)) if bands else [10,11]
bands = list(map(int,bands or [10,11]))
bands = [*map(int,bands)] if bands or [10,11]
bands = [*map(int,bands or [10,11])]

# this is what I would NOT have done (too verbose and ignores Python's idioms):
if bands:
    bands = [int(b) for b in bands]
else:
    bands = [10,11]
1 голос
/ 21 июня 2019

Это.

С левой стороны есть list comprehension.И ты прав.Он использует итерацию bands для создания нового списка, где каждый элемент - это значение, возвращаемое int для каждого элемента bands.

Но это вызовет исключение, если bands равно None.Таким образом, он оценивается только если bands is not None.Если bands равно None, то по умолчанию используется [10, 11].

Узнайте обо всех понятиях (список, словарь, набор и генератор).Они супер полезны.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...