Python Lounge: работа и стажировки для программистов – Telegram
Python Lounge: работа и стажировки для программистов
3.91K subscribers
93 photos
1.17K links
Здесь можно найти интересующую вас работу и стажировки для программистов, а так же полезные статьи про Python.

Размещение вакансии только - @perezvonyubot

Ссылка на канал: @python_lounge

Мы входим в сеть promopoisk.com

Реклама: @adtgassetsbot
Download Telegram
Forwarded from Hello World
12 небольших фишек для улучшения твоего кода

1. Обмен значений
x, y = 1, 2
x, y = y, x


2. Получение строки из списка
a_list = [‘I’, ‘like’, ‘python’, ‘programming’]
a_string = “ “.join(a_list)


3. Разбиение строки на список
a_string = ‘I like python programming’
a_list = a_string.split()


4. Инициализация листа каким либо значением
[0]*1000 # лист, заполненный 1000 нулями
[1]*1000 # лист, заполненный 1000 единицами


5. Слияние словарей
x = {‘a’:1, ‘b’:2}
y = {‘c’:3, ‘d’:4}
z = {**x, **y}


6. Переворачивание строки
a = ‘My string’
a = a[::-1]


7. Возврат нескольких переменных из функции
def test(x,y):
return x,y
a,b = test(1,2)


8. Итерирование по словарю
a_dict = {‘a’:1, ‘b’:2, ’c’:3}
for k, v in a_dict.items():
print(‘{0}:{1}’.format(k, v))


9. Инициализация пустых контейнеров
a_list = list()
a_dict = dict()
a_set = set()
a_tuple = tuple()


10. Удаление символов в конце строки
my_string = ‘My string///‘
my_string.strip(‘/‘)


11. Проверка занимаемой объектом памяти
import sys
x = 1
print(sys.getsizeof(x))


12. Нахождение наиболее частого элемента в списке
a_list = [1, 2, 3, 1, 1, 4, 1, 4, 4, 1]
print(max(set(a_list), key=a_list.count))


#tips
Если вы хотите итерировать несколько, например, списков, то функция zip станет хорошим выбором. Она возвращает новый список кортежей, в которых находятся попарно элементы из списков.

nums = [1, 2, 3]
words = ['one', 'two', 'three']

for w, n in zip(words, nums):
print(f'{w} = {n}')

# one = 1
# two = 2
# three = 3


Обратите внимание, что zip принимает итерируемые объекты как отдельные аргументы, а не как список аргументов. Чтобы распаковать значения, вы можете использовать оператор *.

list(zip(*zip(words, nums)))
# [('one', 'two', 'three'), (1, 2, 3)]
Функция exit создана для удобства работы в интерактивном режиме, однако не рекомендуется использовать её внутри скриптов. По факту она также просто поднимают исключение, и при попытке вызова без скобок напишут подсказку о правильном способе выхода из интерпретатора:

>>> exit
Use exit() or Ctrl-D (i.e. EOF) to exit
>>> exit()
nameless@pycoders:~$

Использовать sys.exit стоит потому, что эта функция лежит в стандартном модуле и будет всегда там доступна. Также это довольно явный способ выразить своё желание завершить программу.

import sys

try:
# code
except:
sys.exit()
In : int('୧৬𝟙༣')
Out: 1613

0, 1, 2, 3, 4, 5, 6, 7, 8, 9 - не единственные символы, которые считаются цифрами. Python следует правилам Юникода и обрабатывает несколько сотен символов как цифры, полный список вот здесь.

Это влияет на такие функции, как int, unicode.isdecimal и даже re.match:

In : int('෯')
Out: 9

In : '٢'.isdecimal()
Out: True

In : bool(re.match('\d', '౫'))
Out: True
Иногда приходится писать код с несколькими контекстными менеджерами, что выглядит не особо лаконично:

with open('f') as f:
with open('g') as g:
with open('h') as h:
pass


Начиная с Python 2.7 и 3.1, вы можете использовать всего один with:

o = open
with o('f') as f, o('g') as g, o('h') as h:
pass


До этого вы могли бы использовать функцию nested из contextlib:

from contextlib import nested
with nested(o('f'), o('g'), o('h')) as (f, g, h):
pass
В Python блок else может быть представлен не только после if, но и после for и while. Код внутри else выполняется, только если цикл не был прерван с помощью break.

Типичный пример - поиск чего-либо в цикле с использованием break при нахождении:

for х in [2, 3, 4, 5]:
if x % 2 == 1:
print (x)
break
else:
print('Нет нечётных элементов в списке')

# Output: 3

for х in [2, 4, 6]:
if x % 2 == 1:
print(x)
break
else:
print('Нет нечётных элементов в списке')

# Output: Нет нечётных элементов в списке
В Python имя переменной может состоять из одного подчеркивания: _. Хотя обычно такие имена не достаточно описательны и не должны использоваться, есть по крайней мере три случая, когда _ имеет общепринятый смысл.

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

>>> 2 + 2
4
>>> _
4


Во-вторых, руководство модуля gettext рекомендует псевдоним его функции gettext() для _(), чтобы минимизировать загромождение вашего кода.

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

for _ in range(10):
print('Hello!')
Если dict запоминает порядок элементов в Python3.6 +, то тогда зачем может понадобится collection.OrderedDict? Вот зачем:

>>> OrderedDict(a=1, b=2) == OrderedDict(b=2, a=1)
False
>>> dict(a=1, b=2) == dict(b=2, a=1)
True
Начиная с Python 3.5, есть возможность использовать распаковку со словарями и списками.

In: {**{'a': 1}, 'b': 2, **{'c': 3}}
Out: {'a': 1, 'b': 2, 'c': 3}

In: [1, 2, *[3, 4]]
Out: [1, 2, 3, 4]


Для словарей эта форма даже более мощная, чем функция dict, поскольку она позволяет переопределять значения:

In: {**{'a': 1, 'b': 1}, 'a': 2, **{'b': 3}}
Out: {'a': 2, 'b': 3}
Часто бывает очень удобно использовать namedtuple. Например, у вас есть словарь по типу "имя": "оценка", и вы хотите сортировать по "оценке".

import collections
Player = collections.namedtuple('Player', 'score name')
d = {'John': 5, 'Alex' : 10, 'Richard': 7}


Сортировка с наименьшей оценкой сначала:

worst = sorted(Player(v ,k) for (k, v) in d.items())


Сортировка по наивысшему рангу:

best = sorted([Player(v, k) for (k, v) in d.items()], reverse=True)


Теперь вы можете получить имя и оценку следующим образом:

player = best[1]
player.name
# Out: 'Richard'
player.score
# Out: 7
Counter из модуля collections - вид словаря, который позволяет считать количество неизменяемых объектов (в большинстве случаев, строк). Например, можно проверить, составлены ли разные слова из одного и того же набора букв.

from collections import Counter 

def check(str1, str2):
return Counter(str1) == Counter(str2)

print(check('abc', 'cba'))
# True
print(check('sdf', 'asd'))
# False
Начинаем новую серию уроков, где будем создавать приложения с пользовательским интерфейсом с помощью модуля Tkinter

Tkinter: часть 1
В отличие от некоторых языков программирования типы данных Python преобразуются в False, если они пусты, и в True, если нет. Это означает, что вам не нужно проверять, например, что длина строки, кортежа, списка или словаря равна 0. Достаточно просто проверить "правдивость" объекта.

Как и следовало ожидать, нулевое число ложно, в то время как все остальные числа истинны.

Например, следующие выражения эквивалентны. Здесь my_object - это строка, но это может быть другой тип Python (с соответствующими изменениями в тесте на равенство)


my_object = 'Test' # True example
# my_object = '' # False example


if len(my_object) > 0:
print('my_object is not empty')

if len(my_object):
print('my_object is not empty')
# 0 will evaluate to False


if my_object != '':
print('my_object is not empty')

if my_object:
print('my_object is not empty')
# an empty string will evaluate to False
Enumerate - встроенная функция Python. Ее полезность не может быть сведена в одну строку. Тем не менее, большинство новичков и даже некоторые опытные программисты не знают об этом. Это позволяет нам итерировать что-либо в цикле и иметь автоматический счетчик. Вот пример:


for counter, value in enumerate(some_list):
print(counter, value)


И это еще не все, enumerate также принимает необязательный аргумент, который делает функцию еще более полезной.

my_list = ['apple', 'banana', 'grapes', 'pear']
for c, value in enumerate(my_list, 1):
print(c, value)

# Output:
# 1 apple
# 2 banana
# 3 grapes
# 4 pear


Необязательный аргумент позволяет нам указать перечислить, откуда начинать индекс. Вы также можете создавать кортежи, содержащие индекс и элемент списка, используя список. Вот пример:


my_list = ['apple', 'banana', 'grapes', 'pear']
counter_list = list(enumerate(my_list, 1))
print(counter_list)
# Output: [(1, 'apple'), (2, 'banana'), (3, 'grapes'), (4, 'pear')]
Продолжаем осваивать модуль Tkinter, в этот раз учимся использовать Canvas и сразу же применяем его на практике

Tkinter: часть 2