return True/False/1/0
. А потом заводишь нужные переменные, обрабатываешь общий случай с разными ответвлениями и вычислениями, в конце которого уже идет return answer
. GIL который блокирует доступ разных потоков к одному и тому же участку памятиНет, GIL гарантирует, что в каждый момент времени работает только один поток. При этом каждые несколько десятков/сотен тактов процессора работающие потоки сменяют друг друга (если их больше одного).
что собственно является одним из якорей в производетельностиСпорное и корявое утверждение.
зачем нужен класс threading.LockЧтобы дать работать одному потоку, а всем остальным запретить. Потому что иначе переключение между потоками произойдет в общем-то в случайный момент времени, а именно тогда, когда захочет интерпретатор. Он, конечно же, не парится по поводу зашитой в код логики и не будет ждать завершения каких-то конкретных вычислений/чтения/записи.
numpy.where
, которую можно вкладывать в себя, как обычные условные операторы:import numpy as np
import pandas as pd
if __name__ == '__main__':
df = pd.DataFrame({
'movie': [9999999, 2, 3, 1, 9999999],
'rating': [9999999, 2, 9999999, 9999999, 3],
'name': [1, 2, 4, 5, 10]})
df['result'] = np.where(
df['movie'] != 9999999,
df['movie'],
np.where(
df['rating'] != 9999999,
df['rating'],
df['name']))
print(df)
movie rating name result
0 9999999 9999999 1 1
1 2 2 2 2
2 3 9999999 4 3
3 1 9999999 5 1
4 9999999 3 10 3
self.player
равным. Тогда это были бы два различных объекта с абсолютно одинаковым поведением - это кстати один из подходов к созданию синглтонов в питоне.import pandas as pd
class URL_2:
def __init__(self, title=None, description=None):
self.title = title
self.description = description
def __iter__(self):
for attr_name in self.__dict__:
yield getattr(self, attr_name)
if __name__ == '__main__':
site_1 = URL_2(title='Купить телевизор', description='Телевизоры по низкой цене')
site_2 = URL_2(title='Услуги юриста', description='Адвокат спешит к вам')
df = pd.DataFrame([site_1, site_2])
df.columns = site_1.__dict__
print(df)
title description
0 Купить телевизор Телевизоры по низкой цене
1 Услуги юриста Адвокат спешит к вам
uuid[position] < '1'отберет 1/16 от всех значений, а условие
uuid[position] < '11'1/256 часть.
from dateutil import parser
spisok = ['25.05..2001', '25.06.2001', '25.43.2004', '05.02.2005', '27.02.2008']
for elem in spisok:
try:
d = parser.parse(elem, dayfirst=True)
print(f"{elem} -> {repr(d)}")
except parser.ParserError as err:
print(f"{elem} -> {err.__class__.__name__}: {err}")
import dateparser
spisok = ['25.05..2001', '25.06.2001', '25.43.2004', '05.02.2005', '27.02.2008']
for elem in spisok:
d = dateparser.parse(elem, languages=['ru'])
print(f"{elem} -> {repr(d)}")
foo = dict()
min_amount = 1
for type_, amount in (('food', 4), ('food', 3), ('car', 3), ('dog', 1)):
foo[type_] = foo.get(type_, 0) + (amount if amount >= min_amount else 0)
print(*sorted(foo.items(), key=lambda x: x[1]), sep='\n')
import pandas as pd
data = {
'1': ['L', 'M', 'L', 'O', 'M'],
'2': ['M', 'O', 'M', None, 'O'],
'3': ['O', None, 'O', None, None]}
df = pd.DataFrame.from_dict(data)
print('original:\n', df)
column_letter_map = {'1': 'L', '2': 'M', '3': 'O'} # соответствие между названием столбца и буквой
new_data = list()
# перебираем все содержимое словаря
for column, letter in column_letter_map.items():
new_data.append(
(df == letter).any(axis=1) # ищем буквы
.replace({True: letter, False: None}) # если нашли, то меняем на саму эту букву
)
new_data[-1].name = column
new_df = pd.concat(new_data, axis=1)
print('\nmodified:\n', new_df)