en
Feedback
9 Π±Π°ΠΉΡ‚ Вотякова. Айти, ΠΏΡ€ΠΎΠ³Π°

9 Π±Π°ΠΉΡ‚ Вотякова. Айти, ΠΏΡ€ΠΎΠ³Π°

Open in Telegram

ΠŸΡ€ΠΎ Π°ΠΉΡ‚ΠΈ, ΠΏΡ€ΠΎΠ³Ρƒ ΠΈ всё с Π½ΠΈΠΌΠΈ связанноС Основной ΠΊΠ°Π½Π°Π»: @votyakov_ar_life По Ρ€Π΅ΠΊΠ»Π°ΠΌΠ΅ ΠΏΠΈΡΠ°Ρ‚ΡŒ @leeramsay

Show more
676
Subscribers
+224 hours
+27 days
+530 days
Posts Archive
Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Faker Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° faker β€” Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Ρ„Π°Π»ΡŒΡˆΠΈΠ²Ρ‹Ρ… Π΄Π°Π½Π½Ρ‹Ρ…. ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΠΌ Ρ‚Π°ΠΊΡƒΡŽ ΡΠΈΡ‚ΡƒΠ°Ρ†ΠΈΡŽ: Π²Ρ‹ Ρ€Π΅Π³ΠΈΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚Π΅ΡΡŒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ-Ρ‚ΠΎ сайтС ΠΈ Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ввСсти ЀИО, Π³ΠΎΡ€ΠΎΠ΄ проТивая, Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½ ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π§Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠ·Π°Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π°Π½Π½Ρ‹Π΅ ΠΏΡ€ΠΈ ΠΏΠΎΠΌΠΎΡ‰ΠΈ этой Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ) Установка Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ pip install Faker Π’Π²Π΅Π΄Π΅Π½ΠΈΠ΅ Π˜ΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ ΠΈ устанавливаСм русский язык:
from faker import Faker

fake = Faker("ru_RU")
Π§Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ? Π‘ΡƒΠΊΠ²Π°Π»ΡŒΠ½ΠΎ всС! ΠŸΠΎΠ»Π½Ρ‹ΠΉ ΠΏΠ΅Ρ€Π΅Ρ‡Π΅Π½ΡŒ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ здСсь, Π° ΠΌΡ‹ остановимся Π½Π° основных ΠΌΠΎΠΌΠ΅Π½Ρ‚Π°Ρ…. faker случайно Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅Ρ‚ Π΄Π°Π½Π½Ρ‹Π΅, поэтому Π΄Π°Π½Π½Ρ‹Π΅ Π² ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… ΠΌΠΎΠ³ΡƒΡ‚ отличатся ΠΎΡ‚ Π΄Π°Π½Π½Ρ‹Ρ…, ΠΏΠΎΠ»ΡƒΡ‡Π΅Π½Π½Ρ‹Ρ… Π½Π° вашСм ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π΅. 1. АдрСса 1) ИндСкс: fake.postcode() β€”> 090231 2) НазваниС ΡƒΠ»ΠΈΡ†Ρ‹: fake.street_name() β€”> ΠΏΡ€. ВСсСнний 3) АдрСс Π½Π° ΡƒΠ»ΠΈΡ†Π΅: fake.street_address() β€”> ΠΏΠ΅Ρ€. Π‘ΠΎΡ€ΠΎΠ²ΠΎΠΉ, Π΄. 9/3 ΠΊ. 7 4) НазваниС страны: fake.country() β€”> Мали 5) НазваниС Π³ΠΎΡ€ΠΎΠ΄Π°: fake.city() β€”> с. ΠšΠ°Ρ€Π³Π°ΡΠΎΠΊ 6) ΠŸΠΎΠ»Π½Ρ‹ΠΉ адрСс: fake.address() β€”> ΠΊ. Басово, ΡƒΠ». Π“Π΅ΠΎΠ»ΠΎΠ³ΠΎΠ², Π΄. 3 стр. 898, 082376 2. ИмСна 1) ΠœΡƒΠΆΡΠΊΠΎΠ΅ ЀИО: fake.name_male() β€”> ЕлисССв Π€Π°Π΄Π΅ΠΉ Π₯Π°Ρ€Π»Π°ΠΌΠΏΠΎΠ²ΠΈΡ‡ 2) ЖСнскоС ЀИО: fake.name_female() β€”> ПСлагСя Π‘Π΅Ρ€Π³Π΅Π΅Π²Π½Π° Π’ΠΎΠ»ΠΊΠΎΠ²Π° 3) Имя, Ρ„Π°ΠΌΠΈΠ»ΠΈΡŽ ΠΈ отчСство ΠΌΠΎΠΆΠ½ΠΎ Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈ ΠΏΠΎ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ 3. Π”ΠΎΠΏ. информация 1) ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΡ: fake.job() β€”> ЗвукорСТиссёр 2) НомСр Ρ‚Π΅Π»Π΅Ρ„ΠΎΠ½Π°: fake.phone_number() β€”> +7 706 901 0655 3) Π‘Π°ΠΉΡ‚: fake.hostname() β€”> db-44.samsonov.info 4) ΠŸΠΎΡ‡Ρ‚Π°: fake.ascii_free_email() β€”> uljan_67@gmail.com 5) Бсылка: fake.uri() β€”> http://gruppa.ru/explore/tagpost.jsp 6) Компания: fake.company() β€”> ООО Β«ΠœΠ°Ρ‚Π²Π΅Π΅Π², Исакова ΠΈ Π‘Π°ΠΌΠΎΠΉΠ»ΠΎΠ²Π°Β» А Ρ‚Π΅ΠΏΠ΅Ρ€ΡŒ напишСм свою Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… для рСгистрации Π½Π° сайтС. Π’ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ Π±ΡƒΠ΄Π΅ΠΌ Π΄ΠΎΠ±Π°Π²Π»ΡΡ‚ΡŒ поля, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ нас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚, Π° Π·Π°Ρ‚Π΅ΠΌ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Ρ‚ΡŒ ΠΈΡ… Π² Π²ΠΈΠ΄Π΅ строки:
from faker import Faker


def generate_registration_data(is_male=True, extra_info=False):
    fake = Faker("ru_RU")
    data = {}
    if is_male:
        data["ЀИО"] = fake.name_male()
    else:
        data["ЀИО"] = fake.name_female()

    data["АдрСс"] = fake.address()
    data["Π’Π΅Π»Π΅Ρ„ΠΎΠ½"] = fake.phone_number()
    data["ΠŸΠΎΡ‡Ρ‚Π°"] = fake.ascii_free_email()

    if extra_info:
        data["ΠŸΡ€ΠΎΡ„Π΅ΡΡΠΈΡ"] = fake.job()
        data["Компания"] = fake.company()

    return "\n".join([item[0] + ": " + item[1] for item in data.items()])


print(generate_registration_data(extra_info=True))
РазумССтся, Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ faker для Π³Π΅Π½Π΅Ρ€Π°Ρ†ΠΈΠΈ Π΄Π°Π½Π½Ρ‹Ρ… Π½Π° сайтах гос.услуг, Π±Π°Π½ΠΊΠ°Ρ… ΠΈ Ρ‚.Π΄. 😜

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Tqdm Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° tqdm β€” позволяСт ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΈΠ½Π΄ΠΈΠΊΠ°Ρ‚ΠΎΡ€ΠΎΠΌ выполнСния (progressbar) Π² консоли. Им ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ, Ссли Ρƒ тСбя Π΄ΠΎΠ»Π³ΠΎ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°, ΠΈ Ρ‚Ρ‹ Ρ…ΠΎΡ‡Π΅ΡˆΡŒ Π·Π½Π°Ρ‚ΡŒ Π½Π° ΠΊΠ°ΠΊΠΎΠΌ этапС выполнСния ΠΎΠ½Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ. Установка Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ pip install tqdm ΠŸΡ€ΠΎΡΡ‚ΠΎΠΉ ΠΈ наглядный ΠΏΡ€ΠΈΠΌΠ΅Ρ€ (запусти Π½Π° своСм ΠΊΠΎΠΌΠΏΠ΅!): Π’ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ tqdm Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ΄Π°Ρ‚ΡŒ любой ΠΈΡ‚Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚.
from tqdm import tqdm
from time import sleep

for i in tqdm(range(100), ncols=80, ascii=True, desc='Total'):
    sleep(0.1) # засыпаСм Π½Π° 0.1 сСкунду
НСкоторыС Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ tqdm(): ncols β€” ΡˆΠΈΡ€ΠΈΠ½Π° progressbar ascii β€” для ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²ΠΊΠΈ ASCII desc β€” тСкст Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΏΠ°Π½Π΅Π»ΠΈ progressbar ΠžΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ range() Класс tqdm.trange(i) - это ΡΠΏΠ΅Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ экзСмпляр tqdm.tqdm(range(i)). АргумСнты, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΎΠ½ ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Π΅Ρ‚ ΠΏΡ€ΠΈ ΠΈΠ½ΠΈΡ†ΠΈΠ°Π»ΠΈΠ·Π°Ρ†ΠΈΠΈ, Π°Π½Π°Π»ΠΎΠ³ΠΈΡ‡Π½Ρ‹ конструктору класса tqdm.tqdm():
from tqdm import trange
from time import sleep

for i in trange(100, ncols=80, desc='Total'):
    sleep(0.1)
ДинамичСскоС ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ progressbar Если ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ экзСмпляр класса tqdm.tqdm(), Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ динамичСски (Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹) ΠΌΠ΅Π½ΡΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ progressbar, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π΅Π³ΠΎ описаниС. Код Π½ΠΈΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠΎΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎ ΠΌΠ΅Π½ΡΡ‚ΡŒ Π±ΡƒΠΊΠ²Ρ‹ английского Π°Π»Ρ„Π°Π²ΠΈΡ‚Π° Π² описании ΠΊ progressbar:
from tqdm import tqdm
from time import sleep
from string import ascii_letters

pbar = tqdm(ascii_letters, ncols=80)

for char in pbar:
    sleep(0.25)
    pbar.set_description(f"Processing '{char}'")
ΠœΠΎΠ΄ΡƒΠ»ΡŒ tqdm довольно ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Ρ‹ΠΉ: с ΠΎΠ΄Π½ΠΎΠΉ стороны, Π² Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΉ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠ΅ΠΉ tqdm (ΠΈ этого ΡƒΠΆΠ΅ Π±ΡƒΠ΄Π΅Ρ‚ Ρ…Π²Π°Ρ‚Π°Ρ‚ΡŒ), Π° с Π΄Ρ€ΡƒΠ³ΠΎΠΉ β€” Π½Π° Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ Ρ†Π΅Π»Ρ‹Π΅ классы, кастомизированныС ΠΏΠΎΠ΄ сСбя. Часто этот ΠΌΠΎΠ΄ΡƒΠ»ΡŒ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΏΡ€ΠΈ ΠΎΠ±ΡƒΡ‡Π΅Π½ΠΈΠΈ модСль машинного обучСния ΠΈ Π½Π΅ΠΉΡ€ΠΎΠ½Π½Ρ‹Ρ… сСтСй. Если Ρ‚Π΅Π±Π΅ зашла такая Ρ€ΡƒΠ±Ρ€ΠΈΠΊΠ°, Ρ‚ΠΎ ΡΡ‚Π°Π²ΡŒ πŸ”₯ Π° Ρ‚Π°ΠΊΠΆΠ΅ пиши Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Ρ‹ ΠΎΠ±Π·ΠΎΡ€ ΠΊΠ°ΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ Π΅Ρ‰Π΅ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ :)

ΠŸΠΎΡ‡Π΅ΠΌΡƒ я Π½Π΅ стал Π»ΡŽΡ‚Ρ‹ΠΌ программистом МногиС Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡŽΡ‚, ΠΏΠΎΡ‡Π΅ΠΌΡƒ я, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ ΠΏΡ€Π΅Π΄Ρ€Π°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡ‚ΡŒ ΠΊ ΠΌΠ°Ρ‚Π΅ΠΌΠ°Ρ‚ΠΈΠΊΠ΅ ΠΈ ΠΏΡ€ΠΎΠ³Π΅, всС ΠΆΠ΅ Π½Π΅ стал ΡƒΠ³Π»ΡƒΠ±Π»ΡΡ‚ΡŒΡΡ Π² ΠΏΡ€ΠΎΡ„Π΅ΡΡΠΈΡŽ ΠΏΡ€ΠΎΠ³Π΅Ρ€Π°. На Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ нСсколько ΠΏΡ€ΠΈΡ‡ΠΈΠ½: 1. Π― Π³ΠΎΡ‚ΠΎΠ²ΠΈΠ» рСбят ΠΊ ΠΎΠ»ΠΈΠΌΠΏΠΈΠ°Π΄Π°ΠΌ ΠΈ Сгэ со своСго 10-Π³ΠΎ класса, вСсь фокус Ρƒ мСня Π±Ρ‹Π» Π½Π° этом, Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ Π½Π° Ρ€Π°Π·Π²ΠΈΠ²Π°ΡŽΡ‰ΡƒΡŽΡΡ сфСру программирования я Π½Π΅ ΠΎΠ±Ρ€Π°Ρ‰Π°Π» внимания. 2. По ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π΅ ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ ΠΏΡƒΠ½ΠΊΡ‚Π°, ΠΊΠΎΠ³Π΄Π° случился β€œΠΏΡ€ΠΎΠ³Π΅Ρ€ΡΠΊΠΈΠΉ бум”, ΠΌΠ½Π΅ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ совсСм Π½Π΅ солидно ΠΈΠ΄Ρ‚ΠΈ Π΄ΠΆΡƒΠ½ΠΎΠΌ. 3. Π’ школС ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€Π΅ Π²ΠΎΠΎΠ±Ρ‰Π΅ Π½ΠΈΠΊΡ‚ΠΎ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΏΡ€ΠΎΡ„ΠΎΡ€ΠΈΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π». Π― Π½Π΅ понял ΠΊΠ΅ΠΌ Ρ…ΠΎΡ‡Ρƒ Π±Ρ‹Ρ‚ΡŒ ΠΈ Ρ€Π΅ΡˆΠΈΠ» ΡΡ‚Π°Ρ‚ΡŒ бСздСльником Π°Π±ΡΠΎΠ»ΡŽΡ‚Π½Ρ‹ΠΌ ΠΏΠΎΠ±Π΅Π΄ΠΈΡ‚Π΅Π»Π΅ΠΌ ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚Π΅Π»Π΅ΠΌ ΠΈ ΠΏΡ€Π΅Π΄ΠΏΡ€ΠΈΠ½ΠΈΠΌΠ°Ρ‚Π΅Π»Π΅ΠΌ. 4. Блишком ΠΌΠ½ΠΎΠ³ΠΎ Π΄Π΅Π½Π΅Π³ Π·Π°Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π». НСсмотря Π½Π° Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ всС программисты Π·Π°Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ 300ΠΊΠΊ/наносСк, Π° Ρ‚ΠΎΡ‡Π½Π΅Π΅ ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ, я ΡƒΠΆΠ΅ Π·Π°Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π» большС Π½Π° рСпСтиторствС, ΠΈ ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΈ с ΠΏΠΎΠ½ΠΈΠΆΠ΅Π½ΠΈΠ΅ΠΌ Π² Π΄ΠΎΡ…ΠΎΠ΄Π΅ Π±Ρ‹Π»ΠΎ Π±Ρ‹ ΠΎΡ‡Π΅Π½ΡŒ больно ΠΌΠΎΡ€Π°Π»ΡŒΠ½ΠΎ. 5. ПослСдняя ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° - я люблю ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Ρ‚ΡŒ. МСня это Π΄Ρ€Π°ΠΉΠ²ΠΈΠ»ΠΎ всСгда, ΠΈ это Ρ‚ΠΎ, Π² Ρ‡Π΅ΠΌ я имСю большС ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΈ. Π’ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠΈ я Π±Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΈ стал классным ΠΈ Π±ΠΎΠ³Π°Ρ‚Ρ‹ΠΌ, Π½ΠΎ приносило Π±Ρ‹ ΠΌΠ½Π΅ это ΠΊΠ°ΠΉΡ„? Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ. Π­Ρ‚ΠΎΡ‚ ΠΊΠ°ΠΉΡ„ Π±Ρ‹Π» Π±Ρ‹ сопоставим с ΠΏΡ€Π΅ΠΏΠΎΠ΄Π°Π²Π°Π½ΠΈΠ΅ΠΌ? Π’ΠΎΡ‡Π½ΠΎ Π½Π΅Ρ‚. Π₯ΠΎΡ‚Π΅Π» с Π²Π°ΠΌΠΈ ΠΏΠΎΠ΄Π΅Π»ΠΈΡ‚ΡŒΡΡ этими Ρ€Π°Π·ΠΌΡ‹ΡˆΠ»Π΅Π½ΠΈΡΠΌΠΈ, Π²Ρ‹Π²ΠΎΠ΄Ρ‹ ΠΏΡƒΡΡ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ сдСлаСт сам, Π½ΠΎ Ρ‚ΠΎΡ‡Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡƒΡ‚Π²Π΅Ρ€ΠΆΠ΄Π°Ρ‚ΡŒ ΠΎΠ΄Π½ΠΎ: классно, ΠΊΠΎΠ³Π΄Π° Ρ‚Π²ΠΎΠ΅ Π΄Π΅Π»ΠΎ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ приносит Ρ‚Π΅Π±Π΅ ΠΈ Ρ…ΠΎΡ€ΠΎΡˆΠΈΠΉ Π΄ΠΎΡ…ΠΎΠ΄, ΠΈ ΠΏΠΎ-настоящСму заряТаСт тСбя. Π₯ΠΎΡ‡Ρƒ ΠΏΠΎΠ½ΡΡ‚ΡŒ, нравится Π»ΠΈ Π²Π°ΠΌ Ρ‚Π°ΠΊΠΎΠΉ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚ постов? Π‘Ρ‚ΠΎΠΈΡ‚ Π»ΠΈ ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ°Ρ‚ΡŒ Π΄Π΅Π»ΠΈΡ‚ΡŒΡΡ с Π²Π°ΠΌΠΈ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΌ ΠΎΠΏΡ‹Ρ‚ΠΎΠΌ? Π‘Ρ‚Π°Π²ΡŒΡ‚Π΅ πŸ”₯, Ссли ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΠΎΠ»ΠΎΠΆΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΉ) И ΠΏΠΈΡˆΠΈΡ‚Π΅ Π² ΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ…, нашли Π»ΠΈ Π²Ρ‹ своС Π΄Π΅Π»ΠΎ, Π³Π΄Π΅ ваша Ρ„ΠΎΡ€ΠΌΡƒΠ»Π° ΠΊΠ°Ρ€ΡŒΠ΅Ρ€Π½ΠΎΠ³ΠΎ успСха = max(ΠΊΠΎΠΌΠΏΠ΅Ρ‚Π΅Π½Ρ†ΠΈΠΈ*Π΄ΠΎΡ…ΠΎΠ΄*Π΄Ρ€Π°ΠΉΠ²)?

Π ΡƒΠ±Ρ€ΠΈΠΊΠ° "Алгоритминутка" Π”Π°Π½ список Ρ†Π΅Π»Ρ‹Ρ… чисСл nums ΠΈ Ρ†Π΅Π»ΠΎΠ΅ число target, Π½ΡƒΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ индСксы Π΄Π²ΡƒΡ… чисСл Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡ… сумма Ρ€Π°Π²Π½ΡΠ»Π°ΡΡŒ target. МоТно ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»Π°Π³Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Π·Π°Π΄Π°Ρ‡Π° ΠΈΠΌΠ΅Π΅Ρ‚ ΠΎΠ΄Π½ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅. Одно число нСльзя ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π²Π°ΠΆΠ΄Ρ‹. ΠžΡ‚Π²Π΅Ρ‚Ρ‹ ΠΌΠΎΠΆΠ½ΠΎ Π²Π΅Ρ€Π½ΡƒΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ»ΡŒΠ½ΠΎΠΌ порядкС. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹: 1) nums = [2,7,11,15], target = 9 β€”> [0,1] 2) nums = [3,2,4], target = 6 β€”> [1,2] 3) nums = [3,3], target = 6 β€”> [0, 1] РСшСниС β„–1 0) ΠΠ°ΠΏΡ€Π°ΡˆΠΈΠ²Π°Π΅Ρ‚ΡΡ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ Π΄Π²Π° Ρ†ΠΈΠΊΠ»Π° ΠΏΠΎ списку с индСксами i, j 1) Π’Π°ΠΊ ΠΊΠ°ΠΊ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ Π³Π°Ρ€Π°Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½ΠΎ Π΅ΡΡ‚ΡŒ (ΠΏΠΎ ΡƒΡΠ»ΠΎΠ²ΠΈΡŽ), Ρ‚ΠΎ Π² ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΌΠΎΠΌΠ΅Π½Ρ‚ nums[i] + nums[j] = target. И ΠΌΡ‹ Ρ€Π΅ΡˆΠΈΠ»ΠΈ Π·Π°Π΄Π°Ρ‡Ρƒ
def solve(nums, target):
    for i in range(len(nums)):
        for j in range(i + 1, len(nums)):
            if nums[i] + nums[j] == target:
                return [i, j]
ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π½ΠΈΠΆΠ΅ Π² опросС ΠΎΡ†Π΅Π½ΠΈΡ‚ΡŒ ΡΡ„Ρ„Π΅ΠΊΡ‚ΠΈΠ²Π½ΠΎΡΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ³ΠΎ Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ РСшСниС β„–2 0) Π—Π°Π²Π΅Π΄Π΅ΠΌ ΡΠ»ΠΎΠ²Π°Ρ€ΡŒ, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ ΠΊΠ»ΡŽΡ‡Π°ΠΌΠΈ Π±ΡƒΠ΄ΡƒΡ‚ элСмСнты списка, Π° значСниями Π±ΡƒΠ΄ΡƒΡ‚ ΠΈΡ… индСксы (Ссли элСмСнт встрСчаСтся нСсколько Ρ€Π°Π·, Ρ‚ΠΎ Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ послСдний индСкс). 1) ΠŸΡ€ΠΎΠΉΠ΄Π΅ΠΌΡΡ ΠΏΠΎ списку Ρ†ΠΈΠΊΠ»ΠΎΠΌ ΠΈ Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡ‚Π΅Ρ€Π°Ρ†ΠΈΠΈ Π±ΡƒΠ΄Π΅ΠΌ ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ "Π½Π΅Π΄ΠΎΡΡ‚Π°ΡŽΡ‰ΠΈΠΉ" элСмСнт Π΄ΠΎ Ρ†Π΅Π»Π΅Π²ΠΎΠ³ΠΎ значСния: x = target - nums[i]. 2) Если x встрСчаСтся Π² словарС ΠΈ Π΅Π³ΠΎ индСкс ΠΎΡ‚Π»ΠΈΡ‡Π΅Π½ ΠΎΡ‚ i, Ρ‚ΠΎ ΠΌΡ‹ нашли Ρ‚Π°ΠΊΡƒΡŽ ΠΏΠ°Ρ€Ρƒ индСксов. Π˜Π½Π°Ρ‡Π΅ ΠΈΠ΄Π΅ΠΌ дальшС
def solve(nums, target):
    data = {}

    for i in range(len(nums)):
        data[nums[i]] = i

    for i in range(len(nums)):
        x = target - nums[i]
        if x in data and data[x] != i:
            return [i, data[x]]
РСшаСм эту Π·Π°Π΄Π°Ρ‡ΠΊΡƒ Π½Π° LeetCode ΠΈ Ссли ΠΎΠ½Π° зашла, Ρ‚ΠΎ ставим ❀️. И Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅ΠΌ Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅, ΠΎΠ½ΠΎ Π½Π°ΠΌ Π΅Ρ‰Π΅ ΠΏΡ€ΠΈΠ³ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ :) #Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠΈΠ½ΡƒΡ‚ΠΊΠ°

Асимптотика Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ β„–2
Anonymous voting

Асимптотика Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ β„–1
Anonymous voting

from rich import inspect my_list = ["foo", "bar"] inspect(my_list, methods=True)
from rich import inspect my_list = ["foo", "bar"] inspect(my_list, methods=True)

from rich import pretty, print from math import pi pretty.install() print([False, True, pi, "Hello World!"])
from rich import pretty, print
from math import pi

pretty.install()
print([False, True, pi, "Hello World!"])

from rich import print print("Hello, [bold magenta]World[/bold magenta]!", ":vampire:")
from rich import print

print("Hello, [bold magenta]World[/bold magenta]!", ":vampire:")

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° rich Π’Π°ΠΌ Π΅Ρ‰Π΅ Π½Π΅ Π½Π°Π΄ΠΎΠ΅Π» скучный Π΄ΠΈΠ·Π°ΠΉΠ½ Python-консоли? ΠŸΡ€Π΅Π΄Π»Π°Π³Π°ΡŽ Π΅Π³ΠΎ ΠΎΠ±Π½ΠΎΠ²ΠΈΡ‚ΡŒ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ rich! Rich β€” это Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° Python для создания насыщСнного тСкста ΠΈ красивого форматирования Π² консоли (Π΄Π°ΠΆΠ΅ смайлики ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ!). Как ΡƒΡΡ‚Π°Π½ΠΎΠ²ΠΈΡ‚ΡŒ? pip install rich Π§Ρ‚ΠΎΠ±Ρ‹ ΡƒΠ·Π½Π°Ρ‚ΡŒ Π½Π° Ρ‡Ρ‚ΠΎ способна эта Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ°, Π²Π²Π΅Π΄ΠΈΡ‚Π΅ Π² консоли: python -m rich Hello, World Когда Π½Π°Ρ‡ΠΈΠ½Π°Π΅ΡˆΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΠΈΠ»ΠΈ ΠΈΠ·ΡƒΡ‡Π°Ρ‚ΡŒ ΠΊΠ°ΠΊΡƒΡŽ-Ρ‚ΠΎ Π½ΠΎΠ²ΡƒΡŽ Ρ‚Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΡŽ, Ρ‚ΠΎ ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π½ΡƒΠΆΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Ρ‚ΡŒ Π²Ρ‹Π²ΠΎΠ΄ "Hello, World". Π”Π°Π²Π°ΠΉΡ‚Π΅ это сдСлаСм Π²ΠΎΡ‚ Ρ‚Π°ΠΊ:
from rich import print

print("Hello, [bold magenta]World[/bold magenta]!", ":vampire:")
Π‘Π΄Π΅Π»Π°ΠΉΡ‚Π΅ это Π² своСй консоли ΠΈ посмотритС Π½Π° Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ :) ΠšΡ€Π°ΡΠΈΠ²Ρ‹ΠΉ ΠΏΡ€ΠΈΠ½Ρ‚ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Если Π½Π΅ хочСтся Π²ΠΎΠ·ΠΈΡ‚ΡŒΡΡ с Ρ†Π²Π΅Ρ‚Π°ΠΌΠΈ ΠΈ ΠΏΡ€ΠΎΡ‡ΠΈΠΌ, Ρ‚ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ pretty.install(), с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ всС значСния Π±ΡƒΠ΄ΡƒΡ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ красиво.
from rich import pretty, print
from math import pi

pretty.install()
print([False, True, pi, "Hello World!"])
ΠžΡ‚Ρ‡Π΅Ρ‚ с rich Π‘ ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ inspect() ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΎΡ‚Ρ‡Π΅Ρ‚ ΠΎΠ± любом Python-ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π΅. Рассмотрим Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ списка:
from rich import inspect

my_list = ["foo", "bar"]
inspect(my_list, methods=True)
Если ΠΏΠΎΠ½Ρ€Π°Π²ΠΈΠ»Π°ΡΡŒ ΡΡ‚Π°Ρ‚ΡŒΡ ΠΈ Π²Ρ‹ Ρ…ΠΎΡ‚ΠΈΡ‚Π΅ большС интСрСсных постов ΠΏΡ€ΠΎ Python, Ρ‚ΠΎ ΡΡ‚Π°Π²ΡŒΡ‚Π΅ πŸ”₯ А ΠΏΡ€ΠΎΠ΄ΠΎΠ»ΠΆΠ΅Π½ΠΈΠ΅ Ρ‡ΠΈΡ‚Π°ΠΉΡ‚Π΅ Π² Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ)

from rich import inspect my_list = ["foo", "bar"] inspect(my_list, methods=True)
from rich import inspect

my_list = ["foo", "bar"]
inspect(my_list, methods=True)

ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ цикличСских ссылок
ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ цикличСских ссылок

Π‘Π±ΠΎΡ€Ρ‰ΠΈΠΊ мусора Π² Python Π’ Python ΠΊΠ°ΠΊ ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… языках программирования (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Java) Π΅ΡΡ‚ΡŒ сборщик мусора. Для Ρ‡Π΅Π³ΠΎ ΠΎΠ½ Π½ΡƒΠΆΠ΅Π½? Π‘Π±ΠΎΡ€Ρ‰ΠΈΠΊ мусора ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ‚ Π² ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ памяти, пСриодичСски удаляя ΠΈΠ· Π½Π΅Π΅ Π½Π΅Π½ΡƒΠΆΠ½Ρ‹Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Python ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ Π΄Π²Π° Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ° для сборки мусора: подсчСт ссылок ΠΈ generational garbage collector (GC). Алгоритм подсчёта ссылок простой ΠΈ эффСктивный: ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π½ΠΈΡ… большС Π½Π΅Ρ‚ ссылок. Но Ρƒ Π½Π΅Π³ΠΎ Π΅ΡΡ‚ΡŒ минус β€” ΠΎΠ½ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΠΏΡ€Π΅Π΄Π΅Π»ΡΡ‚ΡŒ цикличСскиС ссылки. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ сущСствуСт GC, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ слСдит Π·Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌΠΈ с ΠΏΠΎΡ‚Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ цикличСскими ссылками. GC ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ подсчСта ссылок ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ нСльзя. Алгоритм подсчСта ссылок Ѐункция getrefcount() ΠΈΠ· Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠΈ sys позволяСт ΡƒΠ·Π½Π°Ρ‚ΡŒ сколько ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ссылаСтся Π½Π° ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚. ΠžΠ±Ρ‹Ρ‡Π½ΠΎ sys.getrefcount() Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ количСство Π½Π° Π΅Π΄ΠΈΠ½ΠΈΡ†Ρƒ большС, Ρ‡Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΆΠΈΠ΄Π°Ρ‚ΡŒ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ Ρ‡Ρ‚ΠΎ Π²ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ Π²Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ ссылку Π² качСствС Π°Ρ€Π³ΡƒΠΌΠ΅Π½Ρ‚Π°. ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–1
import sys
x = [1, 2, 3]
print(sys.getrefcount(x)) # 2
Π—Π΄Π΅ΡΡŒ всС Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ ΠΈΠ½Ρ‚ΡƒΠΈΡ‚ΠΈΠ²Π½ΠΎ: Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ списка ссылаСтся пСрСмСнная x ΠΈ Π΅Ρ‰Π΅ ΠΎΠ΄Π½Π° ссылка добавляСтся ΠΈΠ·-Π·Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ getrefcount(). ΠŸΡ€ΠΈΠΌΠ΅Ρ€ β„–2 Python ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚ малСнькиС Ρ†Π΅Π»Ρ‹Π΅ числа. ΠŸΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ Π²Ρ‹Π·Π²Π°Ρ‚ΡŒ эту Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ ΠΎΡ‚ 1 (ΠΎΡ‚Π²Π΅Ρ‚ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ΅Ρ‚ ΠΎΡ‚Π»ΠΈΡ‡Π°Ρ‚ΡŒΡΡ Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π°Ρ…)
import sys
x = 1
print(sys.getrefcount(x)) # 87
Python Π½Π΅ удаляСт ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΌΠ°Π»Π΅Π½ΡŒΠΊΠΈΡ… чисСл, Π΄Π°ΠΆΠ΅ Ссли Π½Π° Π½ΠΈΡ… Π½ΠΈΠΊΡ‚ΠΎ Π½Π΅ ссылаСтся. Π­Ρ‚ΠΎ связано с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ нСбольшиС Ρ†Π΅Π»Ρ‹Π΅ числа ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΎΡ‡Π΅Π½ΡŒ часто ΠΈ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π΅ ΡΠΎΠ·Π΄Π°Π²Π°Ρ‚ΡŒ Π½ΠΎΠ²Ρ‹ΠΉ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ числа ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, Python ΠΈΡ… ΠΊΡΡˆΠΈΡ€ΡƒΠ΅Ρ‚. На ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°Ρ… Ρ‚ΠΈΠΏΠ° list, float это Π½Π΅ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ β€” ΠΎΠ½ΠΈ ΡƒΠ΄Π°Π»ΡΡŽΡ‚ΡΡ ΠΊΠ°ΠΊ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π½Π° Π½ΠΈΡ… пСрСстали ΡΡΡ‹Π»Π°Ρ‚ΡŒΡΡ. Garbage collector (GC) Алгоритм подсчСта ссылок Π½Π΅ справляСтся с Π·Π°Π΄Π°Ρ‡Π΅ΠΉ, Ссли ΠΏΠΎΡΠ²Π»ΡΡŽΡ‚ΡΡ цикличСскиС ссылки. ЦикличСскиС ссылки Π²ΠΎΠ·Π½ΠΈΠΊΠ°ΡŽΡ‚, Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ ссылку Π½Π° самого сСбя (см. ΠΊΠ°Ρ€Ρ‚ΠΈΠ½ΠΊΡƒ). Π”Π°Π²Π°ΠΉΡ‚Π΅ ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΈΠΌ насколько Π½ΡƒΠΆΠ΅Π½ GC: ΠΎΡ‚ΠΊΠ»ΡŽΡ‡ΠΈΠΌ Π΅Π³ΠΎ ΠΈ ΠΏΠΎΠΏΡ€ΠΎΠ±ΡƒΠ΅ΠΌ ΠΏΠΎΠ΄ΡΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ количСство ссылок Π½Π° наши ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Π‘ΠΎΠ·Π΄Π°Π΄ΠΈΠΌ цикличСскиС ссылки ΠΊΠ°ΠΊ Π½Π° рисункС:
import gc
import ctypes

# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ctypes для доступа ΠΊ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Π°ΠΌ ΠΏΠΎ адрСсу памяти
class PyObject(ctypes.Structure):
    _fields_ = [("refcnt", ctypes.c_long)]


gc.disable()  # Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π°Π΅ΠΌ цикличСский GC

lst = []
lst.append(lst)       # создаСм Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ссылку lst <--> lst
lst_address = id(lst) # сохраняСм адрСс списка lst

del lst # удаляСм ссылку lst

# создаСм цикличСскиС ссылки: object_1 --> object_2 ΠΈ object_2 --> object_1
object_1 = {}
object_2 = {}
object_1['obj2'] = object_2
object_2['obj1'] = object_1

obj_address = id(object_1)

# удаляСм ссылки
del object_1, object_2

# раскоммСнтируйтС для запуска Ρ€ΡƒΡ‡Π½ΠΎΠΉ сборки ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² с цикличСскими ссылками
# gc.collect()

# провСряСм счСтчик ссылок
print(PyObject.from_address(obj_address).refcnt)
print(PyObject.from_address(lst_address).refcnt)
Если ΠΎΡΡ‚Π°Π²ΠΈΡ‚ΡŒ GC Π²Ρ‹ΠΊΠ»ΡŽΡ‡Π΅Π½Π½Ρ‹ΠΌ, Ρ‚ΠΎ останСтся ΠΏΠΎ ΠΎΠ΄Π½ΠΎΠΉ ссылкС Π½Π° ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹. Если ΠΆΠ΅ Π²ΠΊΠ»ΡŽΡ‡ΠΈΡ‚ΡŒ GC, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ Ρ€Π°ΡΠΊΠΎΠΌΠΌΠ΅Π½Ρ‚ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ строчку gc.collect(), Ρ‚ΠΎ GC ΡƒΠ΄Π°Π»ΠΈΡ‚ всС ссылки ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ Π΄Π²Π° нуля. Π’ΠΎ Π΅ΡΡ‚ΡŒ Ссли ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ содСрТит Ρ†ΠΈΠΊΠ»ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ ссылку ΠΈ ΠΌΡ‹ Π΅Π³ΠΎ удаляСт, Ρ‚ΠΎ ссылка Π½ΠΈΠΊΡƒΠ΄Π° Π½Π΅ ΠΏΡ€ΠΎΠΏΠ°Π΄Π°Π΅Ρ‚ (Ссли ΠΎΡ‚ΠΊΠ»ΡŽΡ‡Π΅Π½ GC). ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ Π·Π°Π΄Π°Ρ‡Π° GC Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΈΠ΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚Ρ‹ ΠΈ ΡƒΠ΄Π°Π»ΡΡ‚ΡŒ ΠΈΡ…. Π‘Π±ΠΎΡ€ΠΊΠ° мусора Π² Python ΠΏΠΎΠ΄ΠΎΠ±Π½Π° ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠΌΡƒ ΠΏΠΎΠΌΠΎΡ‰Π½ΠΈΠΊΡƒ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ эффСктивно ΠΎΡ‡ΠΈΡ‰Π°Π΅Ρ‚ ΠΏΠ°ΠΌΡΡ‚ΡŒ, прСдотвращая Π΅Π΅ ΡƒΡ‚Π΅Ρ‡ΠΊΠΈ ΠΈ автоматичСски освобоТдая рСсурсы. Π­Ρ‚ΠΎ позволяСт Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚Ρ‡ΠΈΠΊΠ°ΠΌ ΡΠΎΡΡ€Π΅Π΄ΠΎΡ‚ΠΎΡ‡ΠΈΡ‚ΡŒΡΡ Π½Π° нСпосрСдствСнном написании ΠΊΠΎΠ΄Π°, Π½Π΅ бСспокоясь ΠΎΠ± ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠΈ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ. ΠŸΠΎΡΡ‚ написан Π½Π° основС этой ΠΈ этой статСй.

Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Ѐункция foo()
Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Ѐункция foo()

ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Ѐункция factorial()
ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚. Ѐункция factorial()

Π‘ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° pysnooper pysnooper β€” это Python Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΠ° с ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹ΠΌ ΠΊΠΎΠ΄ΠΎΠΌ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½Ρ‹ΠΉ Π»ΠΎΠ³ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Π›ΠΎΠ³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ β€” это способ записи ΠΈΠ½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΠΈ ΠΎ состоянии ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. Π›ΠΎΠ³Π°ΠΌΠΈ Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ сами записи. ВмСсто Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΡ€ΠΈΠ½Ρ‚ΠΎΠ² с Π²Ρ‹Π²ΠΎΠ΄ΠΎΠΌ ΠΊΠ°ΠΊΠΈΡ…-Ρ‚ΠΎ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ… ΠΌΠΎΠΆΠ½ΠΎ Π΄ΠΎΠ±Π°Π²ΠΈΡ‚ΡŒ всСго лишь ΠΎΠ΄Π½Ρƒ строчку с ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΠ΅ΠΌ pysnooper, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π²Ρ‹Π²Π΅Π΄Π΅Ρ‚ измСнСния Π»ΠΎΠΊΠ°Π»ΡŒΠ½Ρ‹Ρ… ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, ΠΎΡ‚Ρ€Π°Π±ΠΎΡ‚Π°Π²ΡˆΠΈΠ΅ строки ΠΈ врСмя ΠΈΡ… выполнСния. ΠŸΠ΅Ρ€Π²Ρ‹ΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ МоТно ΠΏΠΎΠ²Π΅ΡΠΈΡ‚ΡŒ Π΄Π΅ΠΊΠΎΡ€Π°Ρ‚ΠΎΡ€ @pysnooper.snoop() Ρ†Π΅Π»ΠΈΠΊΠΎΠΌ Π½Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ, Ρ‚ΠΎΠ³Π΄Π° ΠΏΡ€ΠΈ Π²Ρ‹Π·ΠΎΠ²Π΅ этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π² консоль Π±ΡƒΠ΄Π΅Ρ‚ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π»ΠΎΠ³ для этой Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ. Рассмотрим это Π½Π° ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ рСкурсивно (это Π½Π΅ самая идСальная рСализация Ρ„Π°ΠΊΡ‚ΠΎΡ€ΠΈΠ°Π»Π°, рСкурсия взята для ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°)
import pysnooper


@pysnooper.snoop()
def factorial(x):
    return 1 if x == 1 else x * factorial(x - 1)


print(factorial(3))
Π’Ρ‚ΠΎΡ€ΠΎΠΉ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ Но Ρ‡Ρ‚ΠΎ Ссли Π½Π°ΠΌ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ Π²Ρ‹Π²ΠΎΠ΄ΠΈΡ‚ΡŒ вСсь Π»ΠΎΠ³ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ, Π° Π½ΡƒΠΆΠ½ΠΎ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ?
import pysnooper
import random


def foo():
    lst = []
    # Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ список ΠΈΠ· 10 элСмСнтов
    for i in range(10):
        # добавляСм Π² список случайноС число ΠΈΠ· Π΄ΠΈΠ°ΠΏΠ°Π·ΠΎΠ½Π° 1, 1000
        lst.append(random.randrange(1, 1000))

    # с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ конструкции with Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ Π»ΠΎΠ³ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ для Π²Π»ΠΎΠΆΠ΅Π½Π½Ρ‹Ρ… строк
    with pysnooper.snoop():
        # считаСм ΠΌΠΈΠ½ΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ, ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡŒΠ½Ρ‹ΠΉ ΠΈ ΠΈΡ… срСднСС арифмСтичСскоС
        lower = min(lst)
        upper = max(lst)
        mid = (lower + upper) / 2
        # Π²Ρ‹Π²ΠΎΠ΄ΠΈΠΌ ΠΈΡ… Π½Π° экран
        print(lower, mid, upper)


foo()
Π›ΠΎΠ³Π³ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π² Ρ„Π°ΠΉΠ» Π’ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π°Ρ… Π²Ρ‹ΡˆΠ΅ информация ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π»Π°ΡΡŒ Π² консоль, ΠΈΠ½ΠΎΠ³Π΄Π° это Π½Π΅ ΡƒΠ΄ΠΎΠ±Π½ΠΎ. Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ Π»ΠΎΠ³ Π² Ρ„Π°ΠΉΠ» Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ Π² Ρ„ΡƒΠ½ΠΊΡ†ΠΈΡŽ snoop() ΠΏΠ΅Ρ€Π΅Π΄Π°Ρ‚ΡŒ Π² Π²ΠΈΠ΄Π΅ строки ΠΏΡƒΡ‚ΡŒ Π΄ΠΎ Ρ„Π°ΠΉΠ»Π°, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅Ρ‚ Π»ΠΎΠ³ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹. НапримСр, ΠΏΡ€ΠΈ Ρ‚Π°ΠΊΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅ pysnooper.snoop("log_file.log") создастся Ρ„Π°ΠΉΠ» log_file.log Π½Π° ΡƒΡ€ΠΎΠ²Π½Π΅ запускаСмого Ρ„Π°ΠΉΠ»Π°. Если Ρ‚ΠΎΠΆΠ΅ лСнь ΠΏΠΈΡΠ°Ρ‚ΡŒ бСсконСчныС print ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Π΄Π΅Π±Π°Π³, Ρ‚ΠΎ ΡΡ‚Π°Π²ΡŒ πŸ”₯ ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉ эту Π±ΠΈΠ±Π»ΠΈΠΎΡ‚Π΅ΠΊΡƒ :)

Если n β€” Π΄Π»ΠΈΠ½Π° списка, Ρ‚ΠΎ какая асимптотика Π²Ρ‚ΠΎΡ€ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°?
Anonymous voting

Если n β€” Π΄Π»ΠΈΠ½Π° списка, Ρ‚ΠΎ какая асимптотика ΠΏΠ΅Ρ€Π²ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌΠ°?
Anonymous voting

9 Π±Π°ΠΉΡ‚ Вотякова. Айти, ΠΏΡ€ΠΎΠ³Π° - Statistics & analytics of Telegram channel @nine_bytes