π Π£ΠΊΡΡ ΠΏΠΈΡΠΎΠ½Π° π
ΠΡΠΊΡΡΡΡ Π² Telegram
π ΠΠ°Π½Π°Π» ΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π½Π° ΡΠ·ΡΠΊΠ΅ Python. Π’Π΅ΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠΎΠΊΠΈ ΠΈ Π»Π°ΠΉΡΡ Π°ΠΊΠΈ. π½ ΠΠ΄ΠΌΠΈΠ½ - @tg_adminisrator π ΠΡΠΏΠΈΡΡ ΡΠ΅ΠΊΠ»Π°ΠΌΡ: https://telega.in/c/byteofpython π Π§Π°Ρ: @abyteofpython π ΠΠΎΠ΄Π΅Π»ΠΈΡΡΡΡ Ρ Π΄ΡΡΠ·ΡΡΠΌΠΈ: @byteofpython
ΠΠΎΠ»ΡΡΠ΅2 334
ΠΠΎΠ΄ΠΏΠΈΡΡΠΈΠΊΠΈ
ΠΠ΅Ρ Π΄Π°Π½Π½ΡΡ
24 ΡΠ°ΡΠ°
-117 Π΄Π½Π΅ΠΉ
-3730 Π΄Π½Π΅ΠΉ
ΠΡΡ
ΠΈΠ² ΠΏΠΎΡΡΠΎΠ²
ΠΠ°ΡΡΠΈΠ²Ρ Π² pattern matching.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ Π²ΡΡΡΡΠΏΠ°ΡΡ ΠΌΠ°ΡΡΠΈΠ²Ρ. ΠΠΎΠ΄ΠΎΠ±Π½ΡΠΌ ΡΠ°Π±Π»ΠΎΠ½Ρ ΡΠ°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡΡ ΡΠΎΠ΄Π΅ΡΠΆΠ°ΡΡ Π»ΠΈΠ±ΠΎ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠ΅ Π·Π½Π°ΡΠ΅Π½ΠΈΡ, Π»ΠΈΠ±ΠΎ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠ΅, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΡΠ»Π΅ΠΌΠ΅Π½ΡΡ ΠΌΠ°ΡΡΠΈΠ²ΠΎΠ², Π»ΠΈΠ±ΠΎ ΡΠΈΠΌΠ²ΠΎΠ» ΠΏΡΠΎΡΠ΅ΡΠΊΠ° _, Π΅ΡΠ»ΠΈ ΡΠ»Π΅ΠΌΠ΅Π½Ρ ΠΌΠ°ΡΡΠΈΠ²Π° Π½Π΅ Π²Π°ΠΆΠ΅Π½.
Π Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΠ½ΠΊΡΠΈΡ print_people ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ°ΡΡΠΈΠ², ΠΊΠΎΡΠΎΡΡΠΉ, ΠΊΠ°ΠΊ ΠΏΡΠ΅Π΄ΠΏΠΎΠ»Π°Π³Π°Π΅ΡΡΡ, ΡΠΎΡΡΠΎΠΈΡ ΠΈΠ· ΡΡΠ΅Ρ
ΡΠ»Π΅ΠΌΠ΅Π½ΡΠΎΠ², ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΈΡ
Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΉ ΡΠ°ΡΡΠΈ.
π Π£ΠΊΡΡ ΠΏΠΈΡΠΎΠ½Π° // π¬ Π§Π°Ρ // #ΡΠ΅ΠΎΡΠΈΡ #pattern_matching #ΠΌΠ°ΡΡΠΈΠ²Ρ
π©βπ» ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ ΠΊΠ»Π°ΡΡΠΎΠ² β ΠΌΠ΅ΡΠ°ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π² ΡΠΈΡΡΠΎΠΌ Π²ΠΈΠ΄Π΅
Π Python ΠΊΠ»Π°ΡΡΡ β ΡΡΠΎ ΡΠΎΠΆΠ΅ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΈ ΠΈΡ
ΠΌΠΎΠΆΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π²Π°ΡΡ "Π½Π° Π»Π΅ΡΡ" Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΈ
type(). ΠΡΠΎ ΠΎΡΠΊΡΡΠ²Π°Π΅Ρ ΠΏΡΡΡ ΠΊ Π΄ΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΎΠΌΡ API, Π°Π²ΡΠΎΠΌΠ°ΡΠΈΡΠ΅ΡΠΊΠΈΠΌ ΠΌΠΎΠ΄Π΅Π»ΡΠΌ ΠΈ DSL.
β‘οΈ ΠΡΠΈΠΌΠ΅Ρ:
def make_model(name, **fields):
return type(name, (object,), fields)
User = make_model("User", name="ΠΠ½Π½Π°", age=25)
print(User.name) # ΠΠ½Π½Π°
admin = User()
admin.role = "admin"
print(admin.role) # admin
π ΠΠ΄Π΅ΡΡ type() ΡΠΎΠ·Π΄Π°ΡΡ Π½ΠΎΠ²ΡΠΉ ΠΊΠ»Π°ΡΡ User ΠΏΡΡΠΌΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ.
Π§ΡΠΎ Π²ΡΠ²Π΅Π΄Π΅Ρ ΠΊΠΎΠ΄?
x = 0
def outer():
x = 1
def inner():
nonlocal x
x += 1
return x
print("A", inner(), x)
x = 5
print("B", inner(), x)
outer()
print("G", x)π©βπ» ΠΠΎΠ½ΡΡΠ°ΠΊΡΡ ΡΠ΅ΡΠ΅Π· Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ β Π½Π΅ ΠΏΡΠΎΡΡΠΎ ΠΏΠΎΠ΄ΡΠΊΠ°Π·ΠΊΠΈ ΡΠΈΠΏΠΎΠ²
ΠΠ½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΠΈΠΏΠΎΠ² (
type hints) β ΡΡΠΎ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΠΌΠΎΡΡ IDE.
Π‘ ΠΈΡ
ΠΏΠΎΠΌΠΎΡΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π²Π½Π΅Π΄ΡΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»Ρ Π»ΠΎΠ³ΠΈΠΊΠΈ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ β ΠΏΡΠΎΠ²Π΅ΡΡΡΡ ΡΠΈΠΏΡ, Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΠΈ ΠΈΠ½Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΡΡΠΌΠΎ Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
β‘οΈ ΠΡΠΈΠΌΠ΅Ρ:
from typing import get_type_hints
def enforce_types(func):
hints = get_type_hints(func)
def wrapper(*args, **kwargs):
for name, arg in zip(hints, args):
if not isinstance(arg, hints[name]):
raise TypeError(f"{name} Π΄ΠΎΠ»ΠΆΠ΅Π½ Π±ΡΡΡ {hints[name].__name__}")
return func(*args, **kwargs)
return wrapper
@enforce_types
def greet(name: str, age: int):
print(f"{name}, {age}")
greet("ΠΠ½Π½Π°", 25) # β
greet("ΠΠ½Π½Π°", "25") # β TypeError
π ΠΠ΄Π΅ΡΡ Π°Π½Π½ΠΎΡΠ°ΡΠΈΠΈ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ ΡΠ°ΡΡΡΡ ΠΈΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠ³ΠΎ ΠΊΠΎΠ½ΡΡΠ°ΠΊΡΠ°, Π° Π½Π΅ ΠΏΡΠΎΡΡΠΎ Π΄ΠΎΠΊΡΠΌΠ΅Π½ΡΠ°ΡΠΈΠ΅ΠΉ.
π©βπ» WeakRef β ΠΊΠ°ΠΊ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΡΡΠ΅ΡΠ΅ΠΊ ΠΏΠ°ΠΌΡΡΠΈ Π² Python
ΠΠ½ΠΎΠ³Π΄Π° ΠΎΠ±ΡΠ΅ΠΊΡ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅ Π½ΡΠΆΠ΅Π½, Π½ΠΎ Π½Π° Π½Π΅Π³ΠΎ Π²ΡΡ Π΅ΡΡ ΡΡΡΠ»Π°ΡΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΡΠ°ΡΡΠΈ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠ±ΡΡΠ½Π°Ρ ΡΡΡΠ»ΠΊΠ° ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°Π΅Ρ ΠΎΠ±ΡΠ΅ΠΊΡ Π² ΠΏΠ°ΠΌΡΡΠΈ, Π° ΡΠ»Π°Π±Π°Ρ ΡΡΡΠ»ΠΊΠ° (weak reference) β Π½Π΅Ρ.
ΠΠ½Π° Π½Π΅ ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠ±ΠΎΡΡΠΈΠΊΡ ΠΌΡΡΠΎΡΠ° ΡΠ΄Π°Π»ΠΈΡΡ ΠΎΠ±ΡΠ΅ΠΊΡ, Π΅ΡΠ»ΠΈ Π±ΠΎΠ»ΡΡΠ΅ Π½Π΅Ρ ΡΠΈΠ»ΡΠ½ΡΡ ΡΡΡΠ»ΠΎΠΊβ‘οΈ ΠΡΠΈΠΌΠ΅Ρ:
import weakref
class Data:
def __init__(self, name):
self.name = name
def __del__(self):
print(f"{self.name} ΡΠ΄Π°Π»ΡΠ½")
obj = Data("Test")
ref = weakref.ref(obj)
print(ref()) # <__main__.Data object at ...>
del obj
print(ref()) # None β ΠΎΠ±ΡΠ΅ΠΊΡ ΡΠΎΠ±ΡΠ°Π½ GC
π weakref.ref() ΡΠΎΠ·Π΄Π°ΡΡ ΡΠ»Π°Π±ΡΡ ΡΡΡΠ»ΠΊΡ: ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ ΡΠ΄Π°Π»ΡΠ½, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΡΡΡΠ»ΠΊΠ° Π΅ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ.
Π§ΡΠΎ Π²ΡΠ²Π΅Π΄Π΅Ρ ΠΊΠΎΠ΄?
import itertools
lst = [[1, 2], [3]]
it = itertools.chain.from_iterable(lst)
print(next(it))
lst.append([4, 5])
print(list(it))π©βπ» ΠΡΠΎΡΠΎΠΊΠΎΠ» Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠΎΠ² β ΡΠΊΡΡΡΡΠΉ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ ΡΠ²ΠΎΠΉΡΡΠ² ΠΈ ORM
Π Python Π·Π°
@property, staticmethod, classmethod ΠΈ Π΄Π°ΠΆΠ΅ ORM-ΠΏΠΎΠ»Ρ ΡΡΠΎΠΈΡ Π΅Π΄ΠΈΠ½ΡΠΉ ΠΌΠ΅Ρ
Π°Π½ΠΈΠ·ΠΌ β Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΡ.
ΠΡΠΎ ΠΎΠ±ΡΠ΅ΠΊΡΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΏΡΠ°Π²Π»ΡΡΡ Π΄ΠΎΡΡΡΠΏΠΎΠΌ ΠΊ Π°ΡΡΠΈΠ±ΡΡΠ°ΠΌ ΡΠ΅ΡΠ΅Π· ΠΌΠ΅ΡΠΎΠ΄Ρ __get__, __set__, __delete__β‘οΈ ΠΡΠΈΠΌΠ΅Ρ:
class LoggedAttribute:
def __init__(self, name):
self.name = name
def __get__(self, instance, owner):
value = instance.__dict__.get(self.name)
print(f"ΠΠΎΠ»ΡΡΠ΅Π½ΠΎ {self.name} = {value}")
return value
def __set__(self, instance, value):
print(f"ΠΠ·ΠΌΠ΅Π½Π΅Π½ΠΎ {self.name} = {value}")
instance.__dict__[self.name] = value
class User:
age = LoggedAttribute("age")
u = User()
u.age = 30
print(u.age)
π ΠΡΠΈ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠΈ ΠΊ u.age ΡΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΠΌΠ΅ΡΠΎΠ΄Ρ Π΄Π΅ΡΠΊΡΠΈΠΏΡΠΎΡΠ°, Π° Π½Π΅ ΠΏΡΡΠΌΠΎΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ Π°ΡΡΠΈΠ±ΡΡΡ.
π©βπ» ΠΡΠΎΡΠΎΠΊΠΎΠ» ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ β ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΡΠΈΠΊΠ» for ΠΏΠΎΠ΄ ΠΊΠ°ΠΏΠΎΡΠΎΠΌ
Π Python Π»ΡΠ±ΠΎΠΉ ΠΎΠ±ΡΠ΅ΠΊΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ ΠΈΡΠ΅ΡΠΈΡΡΠ΅ΠΌΡΠΌ, Π΅ΡΠ»ΠΈ ΠΎΠ½ ΡΠ΅Π°Π»ΠΈΠ·ΡΠ΅Ρ ΠΏΡΠΎΡΠΎΠΊΠΎΠ» ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ β ΠΌΠ΅ΡΠΎΠ΄Ρ
__iter__() ΠΈ __next__().
ΠΡΠΎ ΠΎΡΠ½ΠΎΠ²Π° ΡΠ°Π±ΠΎΡΡ for, Π³Π΅Π½Π΅ΡΠ°ΡΠΎΡΠΎΠ², ΡΠΏΠΈΡΠΊΠΎΠ²ΡΡ Π²ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΈ Π΄Π°ΠΆΠ΅ ΡΠ°ΠΉΠ»ΠΎΠ²β‘οΈ ΠΡΠΈΠΌΠ΅Ρ:
class Counter:
def __init__(self, limit):
self.limit = limit
self.value = 0
def __iter__(self):
return self
def __next__(self):
if self.value < self.limit:
self.value += 1
return self.value
raise StopIteration
for i in Counter(3):
print(i)
# 1 2 3
π Π¦ΠΈΠΊΠ» for ΠΏΡΠΎΡΡΠΎ Π²ΡΠ·ΡΠ²Π°Π΅Ρ next() Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΡΠ²ΠΈΡΡΡ StopIteration.
Π§ΡΠΎ Π²ΡΠ²Π΅Π΄Π΅Ρ ΠΊΠΎΠ΄?
class A:
def __eq__(self, o): return isinstance(o, A)
class B:
def __eq__(self, o): return isinstance(o, B)
__hash__ = object.__hash__
s = set()
try:
s.add(A())
except TypeError:
print("A")
b = B()
s.add(b)
print("B", b in s)β ΠΠ°ΡΠ΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΌΠ΅ΡΠΎΠ΄ replace() Π² Python ΠΈ ΠΊΠΎΠ³Π΄Π° Π΅Π³ΠΎ ΠΏΡΠΈΠΌΠ΅Π½ΡΡΡ?
ΠΠ΅ΡΠΎΠ΄
replace() Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅Ρ Π½ΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Π²ΡΠ΅ Π²Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°Π½Π½ΠΎΠΉ ΠΏΠΎΠ΄ΡΡΡΠΎΠΊΠΈ Π·Π°ΠΌΠ΅Π½Π΅Π½Ρ Π½Π° Π΄ΡΡΠ³ΡΡ. ΠΡΠΎ ΡΠ΄ΠΎΠ±Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± Π±ΡΡΡΡΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΡΠ΅ΠΊΡΡ Π±Π΅Π· ΡΠ»ΠΎΠΆΠ½ΡΡ
ΡΠ΅Π³ΡΠ»ΡΡΠ½ΡΡ
Π²ΡΡΠ°ΠΆΠ΅Π½ΠΈΠΉ.
β
ΠΡΠΈΠΌΠ΅Ρ:
text = "Python is hard, but Python is fun!"
new_text = text.replace("Python", "Coding")
print(new_text)
# β Coding is hard, but Coding is fun!
πΠ ΡΡΠΎΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ replace() Π·Π°ΠΌΠ΅Π½ΡΠ΅Ρ Π²ΡΠ΅ Π²Ρ
ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΡΠ»ΠΎΠ²Π° "Python" Π½Π° "Coding"
replace() ΡΠ΄ΠΎΠ±Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠΈ ΠΎΡΠΈΡΡΠΊΠ΅ Π΄Π°Π½Π½ΡΡ , ΡΠΎΡΠΌΠ°ΡΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ ΡΡΡΠΎΠΊ, Π·Π°ΠΌΠ΅Π½Π΅ ΡΠΈΠΌΠ²ΠΎΠ»ΠΎΠ² ΠΈ ΡΠ°Π±Π»ΠΎΠ½ΠΎΠ² Π² ΡΠ΅ΠΊΡΡΠ°Ρ . ΠΠ΅ΡΠΎΠ΄ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΡΠ΅Ρ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ ΡΡΡΠΎΠΊΡ, ΡΡΠΎ Π΄Π΅Π»Π°Π΅Ρ Π΅Π³ΠΎ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌ Π΄Π»Ρ ΠΏΠΎΠ²ΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ
π©βπ» ΠΠ΅ΠΌΠΎΠΈΠ·Π°ΡΠΈΡ β ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΡΡΠ½ΠΊΡΠΈΠΉ Π±Π΅Π· ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π½ΠΈΡ Π»ΠΎΠ³ΠΈΠΊΠΈ
ΠΠ΅ΠΌΠΎΠΈΠ·Π°ΡΠΈΡ β ΡΡΠΎ ΡΠ΅Ρ
Π½ΠΈΠΊΠ° ΠΊΡΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ² ΡΡΠ½ΠΊΡΠΈΠΉ.
ΠΡΠ»ΠΈ ΡΡΠ½ΠΊΡΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅ΡΡΡ Ρ ΡΠ΅ΠΌΠΈ ΠΆΠ΅ Π°ΡΠ³ΡΠΌΠ΅Π½ΡΠ°ΠΌΠΈ, ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ Π²ΠΎΠ·Π²ΡΠ°ΡΠ°Π΅ΡΡΡ ΠΈΠ· ΠΏΠ°ΠΌΡΡΠΈ, Π° Π½Π΅ Π²ΡΡΠΈΡΠ»ΡΠ΅ΡΡΡ Π·Π°Π½ΠΎΠ²ΠΎβ‘οΈ ΠΡΠΈΠΌΠ΅Ρ:
from functools import lru_cache
@lru_cache(maxsize=None)
def fib(n):
if n < 2:
return n
return fib(n-1) + fib(n-2)
print(fib(35)) # Π±ΡΡΡΡΠΎ!
π ΠΠ΄Π΅ΡΡ @lru_cache Π·Π°ΠΏΠΎΠΌΠΈΠ½Π°Π΅Ρ Π²ΡΠ΅ Π²ΡΠ·ΠΎΠ²Ρ fib(). ΠΠ΅Π· Π½Π΅Π³ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠ΅ ΡΠΈΡΠ»Π° Π€ΠΈΠ±ΠΎΠ½Π°ΡΡΠΈ 35 Π·Π°Π½ΡΠ»ΠΎ Π±Ρ ΡΠ΅ΠΊΡΠ½Π΄Ρ, Π° Ρ Π½ΠΈΠΌ β Π΄ΠΎΠ»ΠΈ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Ρ.
Π§ΡΠΎ Π²ΡΠ²Π΅Π΄Π΅Ρ ΠΊΠΎΠ΄?
import asyncio
async def worker():
await asyncio.sleep(0.05)
return "ok"
async def main():
t = asyncio.create_task(worker())
try:
await asyncio.wait_for(asyncio.shield(t), timeout=0.01)
except asyncio.TimeoutError:
print("timeout")
print(t.cancelled(), t.done())
print(await t)
asyncio.run(main())