В 3.5, вы можете злоупотреблять additional unpacking generalizations и заменить:
list(map(print,range(10)))
с:
*map(print,range(10)),
сохранение четырех символов (это производит tuple
от None
с).
С 3.4 и выше, вы можете (при условии, один символ долго буквальным существует, не будет существовать на выходе) делать:
0in map(print,range(10)) # tokenizer is fine with no space between 0 and in
который сохраняет два символа в то же время избегая хранения каких-либо промежуточных list
с.
Если выходы не контролируются на всех, и вы ниже 3,5, как отметили другие, сохраняя один символ легко (например, просто замените list
с any
, если только возможно «falsy» значения, если all
возможны только «правдивые» значения, или set()
для всех значений за счет хранения set
), но выше сохранены немного больше, если у вас есть версия или генераторный выход.
Очевидно, что если вам не нужно print
, это может сократить еще больше, так как *somegen,
будет делать работу без каких-либо бессмысленных print
с, требуя только два символа больше, чем ссылки на генератор, в первую очередь.
Переключиться на Python 2.7, где 'map' не возвращает генератор. Только половина шутки ;-) – Kevin
Используйте 'for'-loop. Что в этом плохого? (Также подумайте о бедных душах, которые должны будут прочитать ваш код! :) –
@ AndreaCorbellini OP упомянул, что это для кодового гольфа. – erip