Python часто выбирают из-за его простоты и читабельности. Но знаете ли вы, что код на Python можно существенно сокращать, не жертвуя функциональностью? Однострочники могут сэкономить вам много времени, сократить расходование памяти и произвести впечатление на ваших друзей.
Предупреждение от автора. Пожалуйста, не используйте однострочники на собеседованиях и в продакшен-коде. Эта статья носит скорее развлекательный характер: мы чисто из интереса посмотрим, как можно заменять блоки кода одной строкой. Но и польза от подобных знаний, безусловно, тоже есть.
Что такое однострочники?
Однострочник — это сжатый блок кода, вмещенный в одну строку. По-английски — one-liner. По сути это лаконичные, полезные программы, занимающие всего строку кода.
Зачем нужны однострочники?
Если вы еще не фанат однострочников, вероятно, вам интересно, зачем вообще они нужны, в чем их смысл. Вот несколько аргументов в пользу их изучения и применения:
- Научившись писать однострочники, вы попутно куда лучше разберетесь в основах языка Python.
- Однострочники позволяют писать код быстрее, а это может пригодиться на соревнованиях по программированию.
- Вы научитесь писать код более «питонично». Люди, перешедшие на Python с других языков программирования, часто пишут код, не используя нативные функции этого языка. Скажем, не пользуются представлениями списков, множественным присваиванием, срезами и т. п. вещами.
- Ловко применив однострочник, вы сможете произвести впечатление на друзей и коллег.
Но с применением однострочников связаны и определенные сложности. Подумайте о программировании как о шахматах. Вы знаете основы (что такое переменные, циклы, условия, структуры данных, классы). Однострочники можно сравнить с изучением мастерских ходов и созданием собственных стратегий.
Калькулятор на Python в одну строку
Поначалу вам может быть трудно, но как только вы поднатореете в написании однострочников, вы сможете достигать своих целей быстрее.
Примеры однострочников на Python
if 3 < 2: var=21 else: var=42
Источник: pythonist.ru
8 способов свести ваши функции Python в одну строку
Да, мы можем это сделать. Оба блока кода выполняют одно и то же, но нижний расположен в одну строку. Я уверен, что вы не знали о том, что так можно делать!
2) Лямбда-функции
Лямбда-функции — это небольшие анонимные функции, которые мы можем записать в одной строке, используя ключевое слово lambda. Синтаксис:
lambda inputs: return_value
def greet(): return ‘hello’ # this is the same as greet = lambda : ‘hello’
def add10(n): return n + 10 # this is the same as add10 = lambda n: n+10
def add(a, b): return a + b # this is the same as add = lambda a, b: a+b
3) Использование точек с запятой вместо новых строк
def hello(): x = 1 y = 2 print(x, y) # this function spans 4 lines
def hello():x=1;y=2;print(x,y) # now it spans 1 line
Условие в одну строку на python (питон) #short
Да, мы можем это сделать! Однако, обратите внимание, что это не сработает, если у вас больше 1 двоеточия, например: использование блоков if-else, циклов for и т.д. Поэтому используйте этот метод экономно и только в крайнем случае.
4) Понимание списка / словаря / множества — сжатие циклов
Понимание списка / словаря / множества — это метод в Python, который позволяет нам создать список / словарь / множество в 1 строке кода. Синтаксис:
# list comprehension [expression for var in iterable if condition] # dict comprehension
# given some numbers, we want to square them all lis = [1, 2, 3, 4, 5] # using a normal for loop new = [] for n in lis: new.append(n**2) # new = [1, 4, 9, 16, 25] # using list comprehension new = [n**2 for n in lis] # new = [1, 4, 9, 16, 25]
# given some numbers, we want to create a dict # where keys are numbers, and values are squares lis = [1, 2, 3, 4, 5] # using a normal for loop new = <> for n in lis: new[n] = n**2 # new = # using dict comprehension new = # new =
# given some numbers, find unique odd numbers lis = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5] # using a normal for loop new = set() for n in lis: if n%2 == 1: new.add(n) # # using set comprehension new = #
5) Блоки if—else в виде тернарного оператора
# if else var = X if condition else Y # if-elif-else var = A if else B if else C # if-elif-elif-else var = A if else B if else C if else D
Тернарный оператор позволяет нам сконденсировать блоки if-else в одну строку. Несколько примеров:
# normal if-else block if x==5: y = ‘hello’ else: y = ‘hi’ # using the ternary operator y = ‘hello’ if x==5 else ‘hi’
# normal if-elif-else block if x==5: y = ‘hello’ elif x==6: y = ‘hola’ else: y = ‘hi’ # using the ternary operator y = ‘hello’ if x==5 else ‘hola’ if x==6 else ‘hi’
# normal if-elif-elif-else block if x==5: y = ‘hello’ elif x==6: y = ‘hola’ elif x==7: y = ‘nihao’ else: y = ‘hi’ # using the ternary operator y = ‘hello’ of x==5 else ‘hola’ if x==6 else ‘nihao’ if x==7 else ‘hi’
6) Объединение методов в цепочку — несколько методов в одной строке
x = x.method1() x = x.method2() x = x.method3() # using method chaining x = x.method1().method2().method3()
8 способов свести ваши функции Python в одну строку
1) Опустить символ новой строки после ключевого слова‘def’
def hello(): print(‘hello’)
def hello():print(‘hello’)
Да, мы можем это сделать. Оба блока кода выполняют одно и то же, но нижний расположен в одну строку. Я уверен, что вы не знали о том, что так можно делать!
2) Лямбда-функции
Лямбда-функции – это небольшие анонимные функции, которые мы можем записать в одной строке, используя ключевое слово lambda . Синтаксис:
lambda inputs: return_value
def greet(): return ‘hello’ # this is the same as greet = lambda : ‘hello’
def add10(n): return n + 10 # this is the same as add10 = lambda n: n+10
def add(a, b): return a + b # this is the same as add = lambda a, b: a+b
3) Использование точек с запятой вместо новых строк
def hello(): x = 1 y = 2 print(x, y) # this function spans 4 lines
def hello():x=1;y=2;print(x,y) # now it spans 1 line
Да, мы можем это сделать! Однако, обратите внимание, что это не сработает, если у вас больше 1 двоеточия, например: использование блоков if-else, циклов for и т.д. Поэтому используйте этот метод экономно и только в крайнем случае.
4) Понимание списка / словаря / множества — сжатие циклов
Понимание списка / словаря / множества – это метод в Python, который позволяет нам создать список / словарь / множество в 1 строке кода. Синтаксис:
# list comprehension [expression for var in iterable if condition] # dict comprehension
# given some numbers, we want to square them all lis = [1, 2, 3, 4, 5] # using a normal for loop new = [] for n in lis: new.append(n**2) # new = [1, 4, 9, 16, 25] # using list comprehension new = [n**2 for n in lis] # new = [1, 4, 9, 16, 25]
# given some numbers, we want to create a dict # where keys are numbers, and values are squares lis = [1, 2, 3, 4, 5] # using a normal for loop new = <> for n in lis: new[n] = n**2 # new = # using dict comprehension new = # new =
# given some numbers, find unique odd numbers lis = [1, 1, 2, 2, 3, 3, 4, 4, 5, 5] # using a normal for loop new = set() for n in lis: if n%2 == 1: new.add(n) # # using set comprehension new = #
5) Блоки if—else в виде тернарного оператора
# if else var = X if condition else Y # if-elif-else var = A if else B if else C # if-elif-elif-else var = A if else B if else C if else D
Тернарный оператор позволяет нам сконденсировать блоки if-else в одну строку. Несколько примеров:
# normal if-else block if x==5: y = ‘hello’ else: y = ‘hi’ # using the ternary operator y = ‘hello’ if x==5 else ‘hi’
# normal if-elif-else block if x==5: y = ‘hello’ elif x==6: y = ‘hola’ else: y = ‘hi’ # using the ternary operator y = ‘hello’ if x==5 else ‘hola’ if x==6 else ‘hi’
# normal if-elif-elif-else block if x==5: y = ‘hello’ elif x==6: y = ‘hola’ elif x==7: y = ‘nihao’ else: y = ‘hi’ # using the ternary operator y = ‘hello’ of x==5 else ‘hola’ if x==6 else ‘nihao’ if x==7 else ‘hi’
6) Объединение методов в цепочку — несколько методов в одной строке
x = x.method1() x = x.method2() x = x.method3() # using method chaining x = x.method1().method2().method3()