9 Π±Π°ΠΉΡ ΠΠΎΡΡΠΊΠΎΠ²Π°. ΠΠΉΡΠΈ, ΠΏΡΠΎΠ³Π°
Open in Telegram
ΠΡΠΎ Π°ΠΉΡΠΈ, ΠΏΡΠΎΠ³Ρ ΠΈ Π²ΡΡ Ρ Π½ΠΈΠΌΠΈ ΡΠ²ΡΠ·Π°Π½Π½ΠΎΠ΅ ΠΡΠ½ΠΎΠ²Π½ΠΎΠΉ ΠΊΠ°Π½Π°Π»: @votyakov_ar_life ΠΠΎ ΡΠ΅ΠΊΠ»Π°ΠΌΠ΅ ΠΏΠΈΡΠ°ΡΡ @leeramsay
Show more676
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 (ΠΈ ΡΡΠΎΠ³ΠΎ ΡΠΆΠ΅ Π±ΡΠ΄Π΅Ρ Ρ
Π²Π°ΡΠ°ΡΡ), Π° Ρ Π΄ΡΡΠ³ΠΎΠΉ β Π½Π° Π½Π΅ΠΌ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡΡΡΠΎΠΈΡΡ ΡΠ΅Π»ΡΠ΅ ΠΊΠ»Π°ΡΡΡ, ΠΊΠ°ΡΡΠΎΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°Π½Π½ΡΠ΅ ΠΏΠΎΠ΄ ΡΠ΅Π±Ρ.
Π§Π°ΡΡΠΎ ΡΡΠΎΡ ΠΌΠΎΠ΄ΡΠ»Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΏΡΠΈ ΠΎΠ±ΡΡΠ΅Π½ΠΈΠΈ ΠΌΠΎΠ΄Π΅Π»Ρ ΠΌΠ°ΡΠΈΠ½Π½ΠΎΠ³ΠΎ ΠΎΠ±ΡΡΠ΅Π½ΠΈΡ ΠΈ Π½Π΅ΠΉΡΠΎΠ½Π½ΡΡ
ΡΠ΅ΡΠ΅ΠΉ.
ΠΡΠ»ΠΈ ΡΠ΅Π±Π΅ Π·Π°ΡΠ»Π° ΡΠ°ΠΊΠ°Ρ ΡΡΠ±ΡΠΈΠΊΠ°, ΡΠΎ ΡΡΠ°Π²Ρ π₯ Π° ΡΠ°ΠΊΠΆΠ΅ ΠΏΠΈΡΠΈ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΡ ΠΎΠ±Π·ΠΎΡ ΠΊΠ°ΠΊΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π΅ΡΠ΅ ΡΠ΄Π΅Π»Π°ΡΡ :)Repost from ΠΠΎΡΡΠΊΠΎΠ² | Π‘Π°ΠΌΠΎΡΠ°Π·Π²ΠΈΡΠΈΠ΅
ΠΠΎΡΠ΅ΠΌΡ Ρ Π½Π΅ ΡΡΠ°Π» Π»ΡΡΡΠΌ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠΎΠΌ
ΠΠ½ΠΎΠ³ΠΈΠ΅ Π½Π΅ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ Ρ, ΠΈΠΌΠ΅ΡΡΠΈΠΉ ΠΏΡΠ΅Π΄ΡΠ°ΡΠΏΠΎΠ»ΠΎΠΆΠ΅Π½Π½ΠΎΡΡΡ ΠΊ ΠΌΠ°ΡΠ΅ΠΌΠ°ΡΠΈΠΊΠ΅ ΠΈ ΠΏΡΠΎΠ³Π΅, Π²ΡΠ΅ ΠΆΠ΅ Π½Π΅ ΡΡΠ°Π» ΡΠ³Π»ΡΠ±Π»ΡΡΡΡΡ Π² ΠΏΡΠΎΡΠ΅ΡΡΠΈΡ ΠΏΡΠΎΠ³Π΅ΡΠ°. ΠΠ° ΡΠΎ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΈΡΠΈΠ½:
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
ΠΡΠΈΠΌΠΏΡΠΎΡΠΈΠΊΠ° ΡΠ΅ΡΠ΅Π½ΠΈΡ β1
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 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)ΠΡΠΈΠΌΠ΅ΡΡ ΡΠΈΠΊΠ»ΠΈΡΠ΅ΡΠΊΠΈΡ
ΡΡΡΠ»ΠΎΠΊ
Π‘Π±ΠΎΡΡΠΈΠΊ ΠΌΡΡΠΎΡΠ° Π² 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()
ΠΠ΅ΡΠ²ΡΠΉ Π²Π°ΡΠΈΠ°Π½Ρ. Π€ΡΠ½ΠΊΡΠΈΡ 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 β Π΄Π»ΠΈΠ½Π° ΡΠΏΠΈΡΠΊΠ°, ΡΠΎ ΠΊΠ°ΠΊΠ°Ρ Π°ΡΠΈΠΌΠΏΡΠΎΡΠΈΠΊΠ° Π²ΡΠΎΡΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°?
ΠΡΠ»ΠΈ n β Π΄Π»ΠΈΠ½Π° ΡΠΏΠΈΡΠΊΠ°, ΡΠΎ ΠΊΠ°ΠΊΠ°Ρ Π°ΡΠΈΠΌΠΏΡΠΎΡΠΈΠΊΠ° ΠΏΠ΅ΡΠ²ΠΎΠ³ΠΎ Π°Π»Π³ΠΎΡΠΈΡΠΌΠ°?
