Страницы

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

вторник, 31 декабря 2019 г.

Использование символа “_” в качестве промежуточной переменной для цикла

#python


У меня появился вопрос почему некоторые разрабы на python, используют этот символ
в качестве промежуточной переменной в цикле:

for _ in items:
    print(_)


может это традиционно как то в python так писать? 
    


Ответы

Ответ 1



В вашем примере символ подчеркивания использовать как раз не надо. В циклах он используется, чтобы показать, что эта переменная не применяется в вычислениях и не имеет никакого значения. for _ in range(5): print("Hohoho!") Еще в переменной _ хранится значение последнего выражения в интерпретаторе: >>> 3*2 6 >>> _ 6 >>>

Ответ 2



Есть неписанное соглашение использовать подчеркивание (_) в качестве имени переменной если нужно использовать переменную, но ее не будут использовать. Примеры: def f(x): print(x) если запустить: In [47]: [f(x) for x in list("abc")] a b c Out[47]: [None, None, None] вернется список None, чтобы этого избежать можно использовать: In [48]: _ = [f(x) for x in list("abc")] a b c Кроме этого Python Interpreter по умолчанию сохраняет результат последнего выражения в переменной _: >>> 10**2 100 >>> print(_) 100 >>> кроме этого подчеркивание можно использовать для визуального разделения в числах: In [51]: 123_456_789 Out[51]: 123456789 In [52]: 0b_0110 Out[52]: 6 In [53]: 0x_23_be Out[53]: 9150

Ответ 3



Вообще, тема с подчеркиванием в питоне холиворная. Вставлю свои две копейки: хотя подчеркивание и не является спецсимволом в питоне и его можно использовать для наименования переменной, функции, класса и даже модуля, я бы не рекомендовал так делать. В питоне есть пакет gettext, который используется для локализации программ. Этот пакет при инсталляции локализаций прописывает алиас подчеркивания на gettext.gettext, ведь проще помечать текст на локализацию так: print(_('Hello there!')) чем так: print(gettext.gettext('Hello there!')) Поэтому проблема с подчеркиванием в том, что оно может переписать алиас локализации, и если не повезет и в переменной сохранится функция с совместимой сигнатурой, можно долго искать ответ на вопрос, почему вдруг сломалась локализация. В большинстве случаев просто на ровном месте работавший раньше код начинает кидать исключения а-ля str is not callable, это может быть сигналом того, что кто-то переназначил андерскор. Так что использовать или не использовать _, каждый решает сам; если код не локализовывать или в команде принята своя конвенция (к примеру, алиасить gettext на loc вместо _), то ничего страшного в андерскоре нет. У нас большинство проектов на питоне так или иначе связаны с Django, так что пользуемся его стилем и присвоение подчеркивания отлавливаем линтером при коммитах и в CI до старта тестов.

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

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