Hello World
Відкрити в Telegram
Подписывается челик на канал, а он ему как раз 🎩 По рекламе: @my_little_trump
Показати більше2 456
Підписники
Немає даних24 години
Немає даних7 днів
Немає даних30 день
Архів дописів
2 456
Мы с @python_lounge создали совместный чат для питонистов и для тех, что еще только начинает. В планах участники будут помогать друг другу с различными ошибками и просто отвечать на вопросы.
@pychat_ru - ждем всех.
2 456
type() vs isinstance()
С помощью функции type() можно проверить, принадлежит ли аргумент тому или иному типу:
>>> a = 10 >>> b = [1, 2, 3] >>> type(a) == int True >>> type(b) == list True >>> type(a) == float FalseВ отличие от type(), функция isinstance() специально создана для проверки принадлежности данных определенному классу (типу данных):
>>> isinstance(a, int) True >>> isinstance(b, list) True >>> isinstance(b, tuple) False >>> c = (4, 5, 6) >>> isinstance(c, tuple) Trueisinstance() по сравнению с type() позволяет проверить данные на принадлежность хотя бы одному типу из кортежа, переданного в качестве второго аргумента:
>>> isinstance(a, (float, int, str)) True >>> isinstance(a, (list, tuple, dict)) FalseКроме того, isinstance() поддерживает наследование. Для isinstance() экземпляр производного класса также является экземпляром базового класса. Для type() это не так:
>>> class A (list): ... pass ... >>> a = A() >>> type(a) == list False >>> type(a) == A True >>> isinstance(a, A) True >>> isinstance(a, list) True#tips #isinstance
2 456
Метод get для словарей
name_for_userid = {
382: "Alice",
590: "Bob",
951: "Dilbert",
}
def greeting(userid):
return "Hi {}".format(name_for_userid.get(userid, “there”))
Вывод:
>>> greeting(382) "Hi Alice!”Вызов функции с аргументом по умолчанию (или без существующего ключа):
>>> greeting(333333) "Hi there!”#tips #dict
2 456
Сортировка словаря по значению
>>> xs = {'a': 4, 'b': 3, 'c': 2, 'd': 1}
>>> sorted(xs.items(), key=lambda x: x[1])
[('d', 1), ('c', 2), ('b', 3), ('a', 4)]
Или c помощью operator:
>>> import operator
>>> sorted(xs.items(), key=operator.itemgetter(1))
[('d', 1), ('c', 2), ('b', 3), ('a', 4)]
#tips2 456
The random module
Нетрудно догадаться, что модуль random служит для генерации случайных чисел. В основу его работы положен алгоритм Мерсенна. Функция random.random() возвращает случайный float из интервала [0.0, 1.0). Результат всегда будет меньше чем 1.0.
>>> random.random() 0.4631297580529897 >>> random.random() 0.5855244248224873Стоит рассмотреть два интересных примера использования функции random. ▪️Для того, чтобы выбрать рандомный элемент из списка или кортежа, используйте random.choice()
>>> items = ['one', 'two', 'three', 'four', 'five'] >>> random.choice(items) ’two’▪️Для того, чтобы выбрать несколько элементов из списка или кортежа, используйте random.choices()
>>> random.choices(items, k=3) ['three', 'five', 'four’]#random
2 456
Вложенные list comprehensions
В list comprehensions можно использовать несколько for:
>>> l = [[1,2,3], [4,5,6]] >>> [lll * 2 for ll in l for lll in ll] [2, 4, 6, 8, 10, 12]#tips
2 456
Return
def func():
try:
return 'try'
finally:
return 'finally’
Вывод:
>>> func() 'finally’Объяснение: ▪️Когда в try-блоке «try … finally» выполняется оператор return, break или continue, finally также выполняется «на выходе». ▪️Возвращаемое значение функции определяется последним выполненным оператором return. Поскольку finally выполняется всегда, оператор return, выполняемый в finally, всегда будет последним. #return
2 456
Использование переменной, не определенной в области
a = 42
def func1():
return a
def func2():
a += 1
return a
Вывод:
>>> func1() 42 >>> func2() UnboundLocalError: local variable 'a' referenced before assignmentОбъяснение: ▪️Когда ты назначаешь переменную в области видимости, она становится локальной. Таким образом, переменная a становится локальной для области func2, но поскольку она ранее не была инициализирована в той же области, возникает ошибка. ▪️Чтобы изменить внешнюю переменную области a в func2, используй ключевое слово global:
def func2()
global a
a += 1
return a
Вывод:
>>> func2() 43#global
2 456
Форматирование списка
>>> l = [[1, 2, 3], [4, 5], [6], [7, 8, 9]] >>> sum(l, []) [1, 2, 3, 4, 5, 6, 7, 8, 9]В функциональном стиле:
from functools import reduce from operator import add data = [[1, 2, 3], [4, 5, 6]] reduce(add, data)Вывод:
>>> data [1, 2, 3, 4, 5, 6]#tips
2 456
Правильный ответ:
a = [1, 2, 3, 4] b = [1, 2]Хорошо, но как вам такое?
a = [1, 2] b = a a += [3, 4]Вывод:
>>> a [1, 2, 3, 4] >>> b [1, 2, 3, 4]Объяснение: ▪️a += b не ведет себя так же, как a = a + b ▪️выражение a = a + [3, 4] генерирует новый объект и устанавливает ссылку a на этот новый объект, оставляя b неизменным
2 456
Что выведут переменные a и b?
a = [1, 2]
b = a
a = a + [3, 4]
print(‘a =’, a)
print(‘b =’, b)2 456
Голосование закончено!
Сегодня мы разыграем код на PyCharm Professional, любезно предоставленный одним из наших подписчиков.
Победил: @a1*20
Всего участников: 46
Всем спасибо за участие! С победителем уже связались. Никнейм убрал на всякий случай.
2 456
Операции над множествами
Set — множество, в котором отсутствуют повторяющиеся элементы:
>>> a = set([1,2,3,4])
>>> b = set([3,4,5,6])
>>> a | b # объединение
{1, 2, 3, 4, 5, 6}
>>> a & b # пересечение
{3, 4}
>>> a < b # подмножества
False
>>> a - b # разница
{1, 2}
>>> a ^ b # симметрическая разность
{1, 2, 5, 6}
#set2 456
Одноразовая функция в классе
На тот случай, если нам вдруг понадобится функция, которая будет использоваться всего один раз, после чего будет использоваться другая функция:
class foo:
def normal_call(self):
print("normal_call")
def call(self):
print("first_call")
self.call = self.normal_call
>>> y = foo()
>>> y.call()
first_call
>>> y.call()
normal_call
>>> y.call()
normal_call
#tips2 456
Правильным ответом будет являться список 1,2. Так происходит из-за того, что дефолтные параметры хранятся в неизменном кортеже в атрибуте функции defaults, который создается в момент определения функции. Для того, чтобы добиться правильного поведения функции, воспользуемся ключевым словом None при определении аргументов по умолчанию
def append(item, x=None):
if x is None:
x=[]
x.append(item)
return x
m_list = append(1) #returns 1
m_list = append(2) #returns 22 456
Что выведет следующая функция?
def append(item, x=[]):
x.append(item)
return x
m_list = append(1)
m_list = append(2)
print(‘m_list =’, m_list)2 456
Красивый вывод
Ты можешь красиво выводить на экран словари и списки с помощью pretty-print:
from pprint import pprint pprint(m_dict)Нагляднее это, конечно, при работе со словарями. Кроме того, можно выводить информацию из JSON-файлов. #pprint
