Эти крутые советы для 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
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()
Вам также может быть интересно:
- Где и как применить Python на практике? Три основные сферы его применения
- Знакомство с объектно-ориентированным программированием в Python: классы и экземпляры
- 10 внешних Python-пакетов, которые вам точно понравятся
Перевод статьи Farhad Malik: Top Python Tips & Tricks