Python

Эти крутые советы для Python сделают ваш код красивее

1. Распаковка элементов массива

first_name, last_name = [‘Farhad’, ‘Malik’]
print(first_name) #выводится Farhad
print(last_name) #выводится Malik

2. Обмен значений переменных

first_name, last_name = [‘Farhad’, ‘Malik’]
last_name, first_name = first_name, last_name
print(first_name) #выводит Malik
print(last_name) #выводит Farhad

3. Профилирование и статистика кода

import cProfile, pstats, StringIO 
pr = cProfile.Profile() pr.enable() 
# ... что-то делает ... pr.disable() 
s = StringIO.StringIO()
ps = pstats.Stats(pr, stream=s).sort_stats('cumulative') 
ps.print_stats() 
print s.getvalue()

4. Повторение строки

‘A’*3 А повторится трижды: AAA

Python — замечательный язык

5. Срез

y = ‘Abc’
y[:2] = ab
y[1:] = bc
y[:-2] = a
y[-2:] = bc

6. Реверс

x = ‘abc’
x = x[::-1]

7. Отрицательный индекс

Если вы хотите начать с последнего знака, то воспользуйтесь отрицательным индексом.

y = ‘abc’
print(y[-1]) # вернет "c"

8. Пересечение множеств

  • Чтобы найти общее двух множеств
a = {1,2,3}
b = {3,4,5}
c = a.intersection(b)

9. Разность множеств

  • Чтобы найти различия двух множеств:
a = {1,2,3}
b = {3,4,5}
c = a.difference(b)

10. Объединение коллекций

  • Чтобы получить четко выраженное объединение двух множеств
a = {1,2,3}
b = {3,4,5}
c = a.union(b)

11. Необязательные аргументы

Мы можем передавать необязательные аргументы через присвоение стандартного значения аргументу:

def my_new_function(my_value=’hello’):
 print(my_value)
 
#Вызывается
my_new_function() => выводит hello
my_new_function(‘test’) => выводит test

12. Неизвестное количество аргументов через *arguments

Если функция может принимать любое количество аргументов, то перед названием параметра добавьте *:

def myfunc(*arguments):
 for a in arguments:
   print a
myfunc(a)
myfunc(a,b)
myfunc(a,b,c)

13. Словарь в качестве аргумента через **arguments

Так вы сможете передавать в функцию разное количество аргументов ключевых слов.

В качестве аргументов ключевых слов можно также передавать и значения словаря:

def myfunc(**arguments):
return arguments[‘key’]

14. Функция с несколькими выводами

  • Если функция должна возвращать несколько значений, то:
resultA, resultB = get_result()
get_result() может вернуть ('a', 1), который является кортежем

15. Цикл в одну строку

[Variable] AggregateFunction([Value] for [item] in [collection])

16. Объединение списков с помощью Zip

  • Берет несколько коллекций и возвращает новую коллекцию.
  • Каждый элемент новой коллекции содержит по одному элементу из всех исходных коллекций.
  • Так мы получаем «пересечения» сразу по нескольким коллекциям
name = ‘farhad’
suffix = [1,2,3,4,5,6]
zip(name, suffix)
→ возвращает (f,1),(a,2),(r,3),(h,4),(a,5),(d,6)

17. Освобождение памяти

  • Механизм сборки мусора вручную можно настроить по времени или событиям.
import gc
collected_objects = gc.collect()

18. Использование декораторов

  • Декораторы добавляют функциональность коду. То есть это функции, вызывающие другие объекты/функции. Будучи вызываемыми функциями, декораторы возвращают объект, который будет вызываться при вызове функции-декоратора.
  • Вспомните о декораторах, которые реализуют аспектно-ориентированное программирование.
  • Мы можем обернуть класс/функцию, и тогда каждый раз при вызове функции будет выполняться определенный код.

Данный пример показывает, как можно вывести название функции. Это тестовый пример для вызова декоратора. С помощью декораторов можно вызывать логгеры (logger), выполнять операции по обеспечению безопасности и т.д.

def my_logger(function):

@functools.wraps(function)
def logger(*args, **kwargs):
print(function.__name__)
return function(*args, **kwargs)
return logger

Теперь воспользуйтесь этим в своих функциях:

@my_logger
 def hi():
   print 'hi'
 @my_logger
 def bye(a):
   print 'bye' + a

19. Распаковка

name = ‘farhad’
suffix = [1,2,3,4,5,6]
result = zip(name, suffix)
→ возвращает (f,1),(a,2),(r,3),(h,4),(a,5),(d,6)
unzipped = zip(*result)

20. Присоединение коллекции

name = [“FinTech”, “Explained”] 
print(“ “.join(name))

21. Объем памяти объекта

import sys 
x = ‘farhadmalik’
print(sys.getsizeof(x))

22. Вывод текущей директории

import os
print(os.getcwd())

23. Вывод импортированных модулей

import sys
imported_modules = [m.__name__ for m in sys.modules.values() if m]

24. Получение ID текущего процесса

import os
os.getpid()

Вам также может быть интересно:

Перевод статьи Farhad Malik: Top Python Tips & Tricks