import sys
this_module = sys.modules[__name__]
def square(x):
return x * x
print(getattr(this_module, 'square')(10))
Foo
Process finished with exit code 0
def square(x):
return x * x
functions = {
'square': square
}
print(functions['square'](10))
100
Process finished with exit code 0
# переименуем master в experiment
git checkout master
git branch -m experiment
# удалим удаленный master
git push --delete origin master
# зальем текущую ветку на удаленный репо:
git push -u origin experiment
# переключимся на комит с которого пойдет мастер по его хэшу:
git checkout 3624ce5
# ответвимся от сюда в новую ветку с именем master
git checkout -b master
# и залем ее на удаленный репо
git push -u origin master
from itertools import groupby
[
dict(
name=name,
id=id,
pos=[subitem['pos'] for subitem in subitems]
)
for (name, id), subitems in
groupby(
dic,
lambda item: (item['name'], item['id'])
)
]
В общем пытаюсь учить питон и не могу никак понять суть декораторов.
Он сам смышленый, но боюсь что книги для "больших дядей" могут быть слишком сложными для него.
import requests
import time
import json
import re
BASE_URL = 'https://rezka.ag/ajax/get_cdn_series/?t={}'
def parse_quality(urls, quality=None):
splited = urls.split(',')
if not quality:
using_quality = splited[-1].split('http')[0]
print('Используем максимально доступное качество ({})'.format(using_quality))
return splited[-1].split(' or')[0].replace(using_quality, '')
intext_quality = '[{}p]'.format(quality)
if intext_quality not in urls:
print('Качества {} нет в списке доступных'.format(quality))
# тут уже я не выдержал и импортировал регекс
available_qualities = re.findall(r'\[(.+?)\]', urls)
print('Доступные варианты: ', ', '.join(available_qualities))
return None
for url in splited:
if intext_quality in url:
return url.split(' or')[0].replace(intext_quality, '')
def get_urls(film_id, season, episode):
payload = {'id': film_id, 'translator_id': '1', 'season': season, 'episode': episode, 'action': 'get_stream'}
r = requests.post(BASE_URL.format(str(int(time.time()))), data=payload)
if r.status_code != 200:
# тут нужно будет как нибудь обработать ошибку, если запрос не прошел
print('Ошибка')
return
data = json.loads(r.text)
if data.get('success') != True:
# тут нужно будет как нибудь обработать ошибку, если запрос не прошел
print('Ошибка')
print(data)
return
return data['url']
if __name__ == '__main__':
all_urls = get_urls(9364, 1, 1)
if all_urls:
url = parse_quality(all_urls)
print(url)
[360p]https://load.hdrezka-ag.net/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/aff285f2cedd0cb70b49a97e53b8c246:2020060411/240.mp4:hls:manifest.m3u8 or https://load.hdrezka-ag.net/65af9f4fab0d894043fac8887b7da99e:2020060411/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/240.mp4,[480p]https://load.hdrezka-ag.net/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/aff285f2cedd0cb70b49a97e53b8c246:2020060411/360.mp4:hls:manifest.m3u8 or https://load.hdrezka-ag.net/ea218fab2e907aa2093c5bc7f9cb480d:2020060411/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/360.mp4,[720p]https://load.hdrezka-ag.net/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/aff285f2cedd0cb70b49a97e53b8c246:2020060411/480.mp4:hls:manifest.m3u8 or https://load.hdrezka-ag.net/92bdeccddc5661b6b786659fae6adc3b:2020060411/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/480.mp4,[1080p]https://load.hdrezka-ag.net/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/aff285f2cedd0cb70b49a97e53b8c246:2020060411/720.mp4:hls:manifest.m3u8 or https://load.hdrezka-ag.net/d2bb808ccb6910d8317224825ee2875d:2020060411/tvseries/cb2beeb8822647baa8621766e5a360cc3c7ae16b/720.mp4
elif response == 'тм1':
if response == 'сегодня':
group = False
elif response == 'тм1':
group = True
elif response == 'сегодня' and group:
...
>>> sum([x[0] for x in arrays])
34.33750876274861
>>> sum([x[1] for x in arrays])
19.305019168249604
>>> sum([x[2] for x in arrays])
32.17848566247153
>>> sum([x[3] for x in arrays])
22.424106744929986
...
import json
data = '''
[-0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0, -0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 15.626869483055735, 0.0]
[0.0, 19.305019168249604, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 22.424106744929986, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 24.802126691039216, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 25.41793956879349]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 32.17848566247153, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[34.33750876274861, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 38.54533200463435, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 40.605066388577725, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
[0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
'''
arrays = [json.loads(x) for x in data.split('\n') if x]