TGViewer
Channel Public Channel
Python Lounge: работа и стажировки для программистов

Python Lounge: работа и стажировки для программистов

@python_lounge

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

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

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

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

Реклама: @adtgassetsbot
Subscribers
3.72K
Photos
93
Videos
0
Links
1.2K

Showing posts older than #101 · Back to latest

Older Posts 20 shown
Post #100 2.41K
Выражение del

Существует способ удалить элемент из списка по его индексу, а не по значению - с помощью оператора del. Это отличается от метода pop(), который возвращает значение. Оператор del также можно использовать для удаления фрагментов из списка или очистки всего списка. Например:

>>> a = [1, 2, 3, 4, 5, 6]
>>> del a[0]
>>> a
[2, 3, 4, 5, 6]
>>> del a[2:4]
>>> a
[2, 3, 6]
>>> del a[:]
>>> a
[]

del также может быть использован для удаления целых переменных:

>>> del a

Обращение к этой переменной в дальнейшем вызовет ошибку (по крайней мере, пока ей не присвоено другое значение).
Post #98 2.44K
Использование списков в качестве стеков

Стек — абстрактный тип данных, представляющий собой список элементов, организованных по принципу LIFO (англ. last in — first out, «последним пришёл — первым вышел»).

Методы встроенного списка в Python позволяют очень легко использовать список в виде стека. Чтобы добавить элемент на вершину стека, используйте append(). Чтобы извлечь элемент из верхней части стека, используйте pop() без явного индекса. Пример:

>>> stack = [3, 4, 5]
>>> stack.append(6)
>>> stack
[3, 4, 5, 6]
>>> stack.pop()
6
>>> stack
[3, 4, 5]
>>> stack.pop()
5
Post #92 318

Forwarded from Hello World

“is” vs “==“

Два списка указывают на один и тот же объект:
>>> a = [1, 2, 3]
>>> b = a


Результат:
>>> a is b
True
>>> a == b
True


Пробуем создать абсолютно новый объект:
>>> c = a[:]


Результат:
>>> a == c
True
>>> a is c
False


📎 is возвратит True, если обе переменные ссылаются на один объект

📎 == возвратит True, если сравниваемые объекты идентичны

#tips
Post #90 2.7K
Кэширование функций

Кэширование может сэкономить время, когда связанная с вводом или выводом функция периодически вызывается с одинаковыми аргументами. До Python 3.2 мы должны были написать собственную реализацию. В Python 3.2+ есть декоратор lru_cache, который позволяет нам быстро кэшировать и вскрывать возвращаемые значения функции.

Давайте реализуем калькулятор чисел Фибоначчи с использованием кэша.

from functools import lru_cache

@lru_cache(maxsize=32)
def fib(n):
if n < 2:
return n
return fib(n - 1) + fib(n - 2)

>>> print([fib(n) for n in range(10)])
# Output: [0, 1, 1, 2, 3, 5, 8, 13, 21, 34]

Советую попробовать запустить любую рекурсивную функцию с кэшированием и без него, прирост в скорости замечается сразу.
Post #87 2.82K
Реализация класса контекстного менеджера

Начнем с того, что в контекстном менеджере должны быть определены методы __enter__ и __exit__. Давайте создадим наш собственный менеджер контекста для открытия файлов и поймем суть его работы.

class NewOpen(object):
   def __init__(self, file_name, mode):
       self.file = open(file_name, mode)
   def __enter__(self):
       return self.file
   def __exit__(self, type, value, traceback):
       self.file.close()

Просто определив методы __enter__ и __exit__, мы можем использовать наш новый класс с оператором with. Давайте попробуем:

with NewOpen('test.txt', 'w') as file:
   file.write('Hello, world!')

Наш метод __exit__ принимает три аргумента. Они требуются для каждого метода __exit__, который является частью класса.

# test
Post #85 2.69K
Контекстные менеджеры

Контекстные менеджеры — это специальные конструкции, которые представляют из себя блоки кода, заключенные в инструкцию with. Инструкция with создает блок, используя протокол, контекстного менеджера.

Простейшей функцией, использующей данный протокол является функция open(). Каждый раз, когда мы открываем файл, нам необходимо его закрыть, чтобы вытолкнуть выходные данные на диск (на самом деле Python вызывает метод close() автоматически, но явное его использование является хорошим тоном). Например:

file = open("file.txt", "w")
file.write("Hello, World")
file.close()


Чтобы каждый раз не вызывать метод close() мы можем воспользоваться контекстным менеджером функции open(), который автоматически закроет файл после выхода из блока:

with open("file.txt", "w") as file:
file.write("Hello, World")


Здесь нам не нужно каждый раз вызывать метод close, чтобы вытолкнуть данные в файл. Из этого следует, что контекстный менеджер используется для выполнения каких-либо действий до входа в блок и после выхода из него. Но функциональность контекстных менеджеров на этом не заканчивается.
Post #80 2.59K
Константы модуля string

Так как это встроенный модуль, то мы должны импортировать его перед использованием любых его констант и классов. А теперь давайте посмотрим на те самые константы, определенные в этом модуле.

>>> import string
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.ascii_lowercase
'abcdefghijklmnopqrstuvwxyz'
>>> string.ascii_uppercase
'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
>>> string.digits
'0123456789'
>>> string.hexdigits
'0123456789abcdefABCDEF'
>>> string.whitespace
' \t\n\r\x0b\x0c'
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_{|}~'
Post #77 2.92K
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')]
Post #73 2.79K
В отличие от некоторых языков программирования типы данных 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
Post #66 3.18K
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
Post #63 3.09K
Часто бывает очень удобно использовать 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
Post #62 3.72K
Post #57 2.88K
Начиная с 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}
Post #56 2.95K
Если 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
Post #54 2.86K
Post #53 2.34K
В Python имя переменной может состоять из одного подчеркивания: _. Хотя обычно такие имена не достаточно описательны и не должны использоваться, есть по крайней мере три случая, когда _ имеет общепринятый смысл.

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

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


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

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

for _ in range(10):
print('Hello!')
Older posts →
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →