๐ ๐ ๐ถ¶
๐ โ๏ธ ๐โ๐ฆบ ๐ฆ "๐ ๐".
๐ซ "๐ ๐" ๐ โ ๐ โ ๐ฃ ๐ ๐ข.
๐ฃ ๐ ๐ ๐ข, ๐จโ๐จ & ๐งฐ ๐ช ๐ค ๐ ๐ ๐โ๐ฆบ.
๐ โฉ ๐ฐ / โ๏ธ ๐ ๐ ๐ ๐. โซ๏ธ ๐ ๐ด ๐ฏ ๐ช โ๏ธ ๐ซ โฎ๏ธ FastAPI... โ ๐ค ๐ถ ๐ฅ.
FastAPI ๐ โ๏ธ ๐ ๐ซ ๐ ๐, ๐ซ ๐ค โซ๏ธ ๐ ๐ & ๐ฐ.
โ๏ธ ๐ฅ ๐ ๐ โ๏ธ FastAPI, ๐ ๐ ๐ฐ โช๏ธโก๏ธ ๐ซ ๐ ๐ ๐ซ.
Note
๐ฅ ๐ ๐ ๐ด, & ๐ โช ๐ญ ๐ ๐ ๐ ๐, ๐ถ โญ ๐.
๐ฏ¶
โก๏ธ โถ๏ธ โฎ๏ธ ๐ ๐ผ:
def get_full_name(first_name, last_name):
full_name = first_name.title() + " " + last_name.title()
return full_name
print(get_full_name("john", "doe"))
๐ค ๐ ๐ ๐ข:
John Doe
๐ข ๐จ ๐:
- โ
first_name
&last_name
. - ๐ ๐ฅ ๐ค ๐ 1๏ธโฃ โ ๐ผ โฎ๏ธ
title()
. - ๐ข ๐ซ โฎ๏ธ ๐ ๐.
def get_full_name(first_name, last_name):
full_name = first_name.title() + " " + last_name.title()
return full_name
print(get_full_name("john", "doe"))
โ โซ๏ธ¶
โซ๏ธ ๐ถ ๐ ๐.
โ๏ธ ๐ ๐ ๐ ๐ โ โซ๏ธ โช๏ธโก๏ธ ๐.
โ ๐ ๐ โ๏ธ โถ๏ธ ๐ ๐ข, ๐ โ๏ธ ๐ข ๐...
โ๏ธ โคด๏ธ ๐ โ๏ธ ๐ค "๐ ๐ฉโ๐ฌ ๐ ๐ ๐ฅ ๐ค โ ๐ผ".
โซ๏ธ upper
โ โซ๏ธ uppercase
โ first_uppercase
โ capitalize
โ
โคด๏ธ, ๐ ๐ โฎ๏ธ ๐ ๐ฉโ๐ป ๐จโ๐งโ๐ฆ, ๐จโ๐จ โ.
๐ ๐ ๐ฅ ๐ข ๐ข, first_name
, โคด๏ธ โฃ (.
) & โคด๏ธ ๐ฏ Ctrl+Space
โฒ ๐ ๏ธ.
โ๏ธ, ๐, ๐ ๐ค ๐ณ โ :
๐ฎ ๐¶
โก๏ธ ๐ ๐ โธ โช๏ธโก๏ธ โฎ๏ธ โฌ.
๐ฅ ๐ ๐ โซ๏ธโ ๐ ๐งฌ, ๐ข ๐ข, โช๏ธโก๏ธ:
first_name, last_name
:
first_name: str, last_name: str
๐ โซ๏ธ.
๐ "๐ ๐":
def get_full_name(first_name: str, last_name: str):
full_name = first_name.title() + " " + last_name.title()
return full_name
print(get_full_name("john", "doe"))
๐ ๐ซ ๐ ๐ฃ ๐ข ๐ฒ ๐ ๐ โฎ๏ธ:
first_name="john", last_name="doe"
โซ๏ธ ๐ ๐.
๐ฅ โ๏ธ โค (:
), ๐ซ ๐ (=
).
& โ ๐ ๐ ๐ ๐ซ ๐ โซ๏ธโ ๐จ โช๏ธโก๏ธ โซ๏ธโ ๐ ๐จ ๐ต ๐ซ.
โ๏ธ ๐, ๐ ๐ ๐ ๐ ๐ ๐ ๐ข, โ๏ธ โฎ๏ธ ๐ ๐.
๐ โ, ๐ ๐ โฒ ๐ โฎ๏ธ Ctrl+Space
& ๐ ๐:
โฎ๏ธ ๐, ๐ ๐ช ๐, ๐ ๐, โญ ๐ ๐ 1๏ธโฃ ๐ "๐ ๐":
๐ ๐ฏ¶
โ ๐ ๐ข, โซ๏ธ โช โ๏ธ ๐ ๐:
def get_name_with_age(name: str, age: int):
name_with_age = name + " is this old: " + age
return name_with_age
โฉ๏ธ ๐จโ๐จ ๐ญ ๐ ๐ข, ๐ ๐ซ ๐ด ๐ค ๐ ๏ธ, ๐ ๐ค โ โ :
๐ ๐ ๐ญ ๐ ๐ โ๏ธ ๐ง โซ๏ธ, ๐ age
๐ป โฎ๏ธ str(age)
:
def get_name_with_age(name: str, age: int):
name_with_age = name + " is this old: " + str(age)
return name_with_age
๐ฃ ๐¶
๐ ๐ ๐ ๐ฅ ๐ฃ ๐ ๐. ๐ข ๐ข.
๐ ๐ ๐ฅ ๐ ๐ โ๏ธ ๐ซ โฎ๏ธ FastAPI.
๐ ๐¶
๐ ๐ช ๐ฃ ๐ ๐ฉ ๐ ๐, ๐ซ ๐ด str
.
๐ ๐ช โ๏ธ, ๐ผ:
int
float
bool
bytes
def get_items(item_a: str, item_b: int, item_c: float, item_d: bool, item_e: bytes):
return item_a, item_b, item_c, item_d, item_d, item_e
๐ ๐ โฎ๏ธ ๐ ๐ข¶
๐ค ๐ ๐ ๐ ๐ช ๐ ๐ ๐ฒ, ๐ dict
, list
, set
& tuple
. & ๐ ๐ฒ ๐ช โ๏ธ ๐ซ ๐ ๐ ๐โโ๏ธ.
๐ ๐ ๐ โ๏ธ ๐ ๐ ๐ค "๐" ๐. & โซ๏ธ ๐ช ๐ฃ ๐ซ, โฎ๏ธ ๐ซ ๐ ๐.
๐ฃ ๐ ๐ & ๐ ๐, ๐ ๐ช โ๏ธ ๐ฉ ๐ ๐น typing
. โซ๏ธ ๐ ๐ฏ ๐โ๐ฆบ ๐ซ ๐ ๐.
๐ โฌ ๐¶
โ โ๏ธ typing
๐ โฎ๏ธ ๐ โฌ, โช๏ธโก๏ธ ๐ 3๏ธโฃ.6๏ธโฃ โช ๐, โ
๐ 3๏ธโฃ.9๏ธโฃ, ๐ 3๏ธโฃ.1๏ธโฃ0๏ธโฃ, โ๏ธ.
๐ ๐ง, ๐ โฌ ๐ โฎ๏ธ ๐ ๐โ๐ฆบ ๐ ๐ โ & ๐ ๐ผ ๐ ๐ ๐ซ ๐ช ๐ & โ๏ธ typing
๐น ๐ฃ ๐ โ.
๐ฅ ๐ ๐ช โ ๐ โฎ๏ธ โฌ ๐ ๐ ๐, ๐ ๐ ๐ช โ ๐ ๐ โ ๐ฆ. ๐ ๐ผ ๐.
๐¶
๐ผ, โก๏ธ ๐ฌ ๐ข list
str
.
โช๏ธโก๏ธ typing
, ๐ List
(โฎ๏ธ ๐ L
):
from typing import List
def process_items(items: List[str]):
for item in items:
print(item)
๐ฃ ๐ข, โฎ๏ธ ๐ โค (:
) โ.
๐, ๐ฎ List
๐ ๐ ๐ โช๏ธโก๏ธ typing
.
๐ ๐ ๐ ๐ ๐ ๐, ๐ ๐ฎ ๐ซ โฌ ๐:
from typing import List
def process_items(items: List[str]):
for item in items:
print(item)
๐ฃ ๐ข, โฎ๏ธ ๐ โค (:
) โ.
๐, ๐ฎ list
.
๐ ๐ ๐ ๐ ๐ ๐, ๐ ๐ฎ ๐ซ โฌ ๐:
def process_items(items: list[str]):
for item in items:
print(item)
Info
๐ ๐ ๐ โฌ ๐ ๐ค "๐ ๐ข".
๐ ๐ผ, str
๐ ๐ข ๐ถโโ๏ธ List
(โ๏ธ list
๐ 3๏ธโฃ.9๏ธโฃ & ๐).
๐ โ: "๐ข items
list
, & ๐ ๐ฌ ๐ ๐ str
".
Tip
๐ฅ ๐ โ๏ธ ๐ 3๏ธโฃ.9๏ธโฃ โ๏ธ ๐, ๐ ๐ซ โ๏ธ ๐ List
โช๏ธโก๏ธ typing
, ๐ ๐ช โ๏ธ ๐ ๐ฅ list
๐ โฉ๏ธ.
๐จ ๐, ๐ ๐จโ๐จ ๐ช ๐ ๐โ๐ฆบ โช ๐ญ ๐ฌ โช๏ธโก๏ธ ๐:
๐ต ๐, ๐ ๐ ๐ช ๐.
๐ ๐ ๐ข item
1๏ธโฃ ๐ฃ ๐ items
.
& , ๐จโ๐จ ๐ญ โซ๏ธ str
, & ๐ ๐โ๐ฆบ ๐.
๐ข & โ¶
๐ ๐ ๐ ๐ฃ tuple
โ & set
โ:
from typing import Set, Tuple
def process_items(items_t: Tuple[int, int, str], items_s: Set[bytes]):
return items_t, items_s
def process_items(items_t: tuple[int, int, str], items_s: set[bytes]):
return items_t, items_s
๐ โ:
- ๐ข
items_t
tuple
โฎ๏ธ 3๏ธโฃ ๐ฌ,int
, โ1๏ธโฃint
, &str
. - ๐ข
items_s
set
, & ๐ ๐ฎ ๐ฌ ๐bytes
.
#๏ธโฃ¶
๐ฌ dict
, ๐ ๐ถโโ๏ธ 2๏ธโฃ ๐ ๐ข, ๐ โ.
๐ฅ ๐ ๐ข ๐ dict
.
๐ฅ ๐ ๐ข ๐ฒ dict
:
from typing import Dict
def process_items(prices: Dict[str, float]):
for item_name, item_price in prices.items():
print(item_name)
print(item_price)
def process_items(prices: dict[str, float]):
for item_name, item_price in prices.items():
print(item_name)
print(item_price)
๐ โ:
- ๐ข
prices
dict
:- ๐ ๐
dict
๐str
(โก๏ธ ๐ฌ, ๐ ๐ ๐ฌ). - ๐ฒ ๐
dict
๐float
(โก๏ธ ๐ฌ, ๐ ๐ ๐ฌ).
- ๐ ๐
๐ช๐บ¶
๐ ๐ช ๐ฃ ๐ ๐ข ๐ช ๐ ๐ ๐, ๐ผ, int
โ๏ธ str
.
๐ 3๏ธโฃ.6๏ธโฃ & ๐ (โ
๐ 3๏ธโฃ.1๏ธโฃ0๏ธโฃ) ๐ ๐ช โ๏ธ Union
๐ โช๏ธโก๏ธ typing
& ๐ฎ ๐ โฌ ๐ ๐ช ๐ ๐ซ.
๐ 3๏ธโฃ.1๏ธโฃ0๏ธโฃ ๐ค ๐ โ ๐โ ๐ ๐ช ๐ฎ ๐ช ๐ ๐ฝ โธ โธ (|
).
from typing import Union
def process_item(item: Union[int, str]):
print(item)
def process_item(item: int | str):
print(item)
๐ฏโโ๏ธ ๐ผ ๐ โ ๐ item
๐ช int
โ๏ธ str
.
๐ฒ None
¶
๐ ๐ช ๐ฃ ๐ ๐ฒ ๐ช โ๏ธ ๐, ๐ str
, โ๏ธ ๐ โซ๏ธ ๐ช None
.
๐ 3๏ธโฃ.6๏ธโฃ & ๐ (โ
๐ 3๏ธโฃ.1๏ธโฃ0๏ธโฃ) ๐ ๐ช ๐ฃ โซ๏ธ ๐ญ & โ๏ธ Optional
โช๏ธโก๏ธ typing
๐น.
from typing import Optional
def say_hi(name: Optional[str] = None):
if name is not None:
print(f"Hey {name}!")
else:
print("Hello World")
โ๏ธ Optional[str]
โฉ๏ธ str
๐ โก๏ธ ๐จโ๐จ โน ๐ ๐ โ ๐โ ๐ ๐ช ๐ค ๐ ๐ฒ ๐ง str
, ๐โ โซ๏ธ ๐ช ๐ค None
๐โโ๏ธ.
Optional[Something]
๐ค โจ Union[Something, None]
, ๐ซ ๐.
๐ โ ๐ ๐ 3๏ธโฃ.1๏ธโฃ0๏ธโฃ, ๐ ๐ช โ๏ธ Something | None
:
from typing import Optional
def say_hi(name: Optional[str] = None):
if name is not None:
print(f"Hey {name}!")
else:
print("Hello World")
from typing import Union
def say_hi(name: Union[str, None] = None):
if name is not None:
print(f"Hey {name}!")
else:
print("Hello World")
def say_hi(name: str | None = None):
if name is not None:
print(f"Hey {name}!")
else:
print("Hello World")
โ๏ธ Union
โ๏ธ Optional
¶
๐ฅ ๐ โ๏ธ ๐ โฌ ๐ 3๏ธโฃ.1๏ธโฃ0๏ธโฃ, ๐ฅ ๐โโ โช๏ธโก๏ธ ๐ ๐ถ ๐ค โ ๐:
- ๐ถ โ โ๏ธ
Optional[SomeType]
- โฉ๏ธ ๐ถ โ๏ธ
Union[SomeType, None]
๐ถ.
๐ฏโโ๏ธ ๐ & ๐ ๐ซ ๐, โ๏ธ ๐ค ๐ ๐ Union
โฉ๏ธ Optional
โฉ๏ธ ๐ค "๐ฆ" ๐ ๐ ๐ ๐ ๐ฒ ๐ฆ, & โซ๏ธ ๐ค โ "โซ๏ธ ๐ช None
", ๐ฅ โซ๏ธ ๐ซ ๐ฆ & โ.
๐ค ๐ญ Union[SomeType, None]
๐ ๐ ๐ โซ๏ธโ โซ๏ธ โ.
โซ๏ธ ๐ ๐ค & ๐. โ๏ธ ๐ ๐ค ๐ช ๐ โ ๐ & ๐ ๐คฝโโ ๐ญ ๐ ๐.
๐ผ, โก๏ธ โ ๐ ๐ข:
from typing import Optional
def say_hi(name: Optional[str]):
print(f"Hey {name}!")
๐ข name
๐ฌ Optional[str]
, โ๏ธ โซ๏ธ ๐ซ ๐ฆ, ๐ ๐ซ๐ ๐ค ๐ข ๐ต ๐ข:
say_hi() # Oh, no, this throws an error! ๐ฑ
name
๐ข โ (๐ซ ๐ฆ) โฉ๏ธ โซ๏ธ ๐ซ โ๏ธ ๐ข ๐ฒ. , name
๐ซ None
๐ฒ:
say_hi(name=None) # This works, None is valid ๐
๐ ๐ฐ, ๐ ๐ ๐ ๐ 3๏ธโฃ.1๏ธโฃ0๏ธโฃ ๐ ๐ ๐ซ โ๏ธ ๐ ๐ ๐, ๐ ๐ ๐ช ๐ฏ โ๏ธ |
๐ฌ ๐ช๐บ ๐:
def say_hi(name: str | None):
print(f"Hey {name}!")
& โคด๏ธ ๐ ๐ ๐ซ โ๏ธ ๐ ๐ ๐ ๐ Optional
& Union
. ๐ถ
๐ ๐¶
๐ ๐ ๐ โ ๐ ๐ข โฌ ๐ ๐ค ๐ ๐ โ๏ธ ๐, ๐ผ:
List
Tuple
Set
Dict
Union
Optional
- ...& ๐.
๐ ๐ช โ๏ธ ๐ ๐ฝ ๐ ๐ (โฎ๏ธ โฌ ๐ & ๐ ๐):
list
tuple
set
dict
& ๐ โฎ๏ธ ๐ 3๏ธโฃ.6๏ธโฃ, โช๏ธโก๏ธ typing
๐น:
Union
Optional
- ...& ๐.
๐ ๐ช โ๏ธ ๐ ๐ฝ ๐ ๐ (โฎ๏ธ โฌ ๐ & ๐ ๐):
list
tuple
set
dict
& ๐ โฎ๏ธ ๐ 3๏ธโฃ.6๏ธโฃ, โช๏ธโก๏ธ typing
๐น:
Union
Optional
(๐ โฎ๏ธ ๐ 3๏ธโฃ.6๏ธโฃ)- ...& ๐.
๐ 3๏ธโฃ.1๏ธโฃ0๏ธโฃ, ๐ โ๏ธ ๐ Union
& Optional
, ๐ ๐ช โ๏ธ โธ โธ (|
) ๐ฃ ๐ช๐บ ๐.
๐ ๐¶
๐ ๐ช ๐ฃ ๐ ๐ ๐ข.
โก๏ธ ๐ฌ ๐ โ๏ธ ๐ Person
, โฎ๏ธ ๐:
class Person:
def __init__(self, name: str):
self.name = name
def get_person_name(one_person: Person):
return one_person.name
โคด๏ธ ๐ ๐ช ๐ฃ ๐ข ๐ Person
:
class Person:
def __init__(self, name: str):
self.name = name
def get_person_name(one_person: Person):
return one_person.name
& โคด๏ธ, ๐, ๐ ๐ค ๐ ๐จโ๐จ ๐โ๐ฆบ:
Pydantic ๐ท¶
Pydantic ๐ ๐ ๐ญ ๐ ๐ฌ.
๐ ๐ฃ "๐ " ๐ฝ ๐ โฎ๏ธ ๐ข.
& ๐ ๐ข โ๏ธ ๐.
โคด๏ธ ๐ โ ๐ ๐ ๐ โฎ๏ธ ๐ฒ & โซ๏ธ ๐ โ ๐ฒ, ๐ ๐ซ โ ๐ (๐ฅ ๐ ๐ผ) & ๐ค ๐ ๐ โฎ๏ธ ๐ ๐ฝ.
& ๐ ๐ค ๐ ๐จโ๐จ ๐โ๐ฆบ โฎ๏ธ ๐ ๐ ๐.
๐ผ โช๏ธโก๏ธ ๐ Pydantic ๐ฉบ:
from datetime import datetime
from typing import List, Union
from pydantic import BaseModel
class User(BaseModel):
id: int
name = "John Doe"
signup_ts: Union[datetime, None] = None
friends: List[int] = []
external_data = {
"id": "123",
"signup_ts": "2017-06-01 12:22",
"friends": [1, "2", b"3"],
}
user = User(**external_data)
print(user)
# > User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]
print(user.id)
# > 123
from datetime import datetime
from typing import Union
from pydantic import BaseModel
class User(BaseModel):
id: int
name = "John Doe"
signup_ts: Union[datetime, None] = None
friends: list[int] = []
external_data = {
"id": "123",
"signup_ts": "2017-06-01 12:22",
"friends": [1, "2", b"3"],
}
user = User(**external_data)
print(user)
# > User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]
print(user.id)
# > 123
from datetime import datetime
from pydantic import BaseModel
class User(BaseModel):
id: int
name = "John Doe"
signup_ts: datetime | None = None
friends: list[int] = []
external_data = {
"id": "123",
"signup_ts": "2017-06-01 12:22",
"friends": [1, "2", b"3"],
}
user = User(**external_data)
print(user)
# > User id=123 name='John Doe' signup_ts=datetime.datetime(2017, 6, 1, 12, 22) friends=[1, 2, 3]
print(user.id)
# > 123
Info
๐ก ๐ ๐ Pydantic, โ ๐ฎ ๐ฉบ.
FastAPI ๐ โ๏ธ ๐ Pydantic.
๐ ๐ ๐ ๐ ๐ ๐ ๐ ๐ก ๐ฐ - ๐ฉโ๐ป ๐ฆฎ.
Tip
Pydantic โ๏ธ ๐ ๐ญ ๐โ ๐ โ๏ธ Optional
โ๏ธ Union[Something, None]
๐ต ๐ข ๐ฒ, ๐ ๐ช โ ๐
๐ โซ๏ธ Pydantic ๐ฉบ ๐ โ ๐ฆ ๐.
๐ ๐ FastAPI¶
FastAPI โ ๐ ๐ซ ๐ ๐ ๐ ๐.
โฎ๏ธ FastAPI ๐ ๐ฃ ๐ข โฎ๏ธ ๐ ๐ & ๐ ๐ค:
- ๐จโ๐จ ๐โ๐ฆบ.
- ๐ โ .
...and FastAPI uses the same declarations :
- ๐ฌ ๐: โช๏ธโก๏ธ ๐จ โก ๐ข, ๐ข ๐ข, ๐, ๐ช, ๐, โ๏ธ.
- ๐ ๐ฝ: โช๏ธโก๏ธ ๐จ ๐ ๐.
- โ ๐ฝ: ๐ โช๏ธโก๏ธ ๐ ๐จ:
- ๐ญ ๐ง โ ๐จ ๐ฉโ๐ป ๐โ ๐ โ.
- ๐ ๐ ๏ธ โ๏ธ ๐:
- โ โคด๏ธ โ๏ธ ๐ง ๐ ๐งพ ๐ฉโ๐ป ๐ข.
๐ 5๏ธโฃ๐ ๐ ๐ ๐. ๐ซ ๐. ๐ ๐ ๐ ๐ ๐ ๐ฏ ๐ฐ - ๐ฉโ๐ป ๐ฆฎ.
โ ๐ ๐ โ๏ธ ๐ฉ ๐ ๐, ๐ ๐ฅ (โฉ๏ธ โ ๐ ๐, ๐จโ๐จ, โ๏ธ), FastAPI ๐ ๐ ๐ท ๐.
Info
๐ฅ ๐ โช ๐ถ ๐ ๐ ๐ฐ & ๐ ๐ ๐ ๐
๐ ๐, ๐ โน "๐ฎ ๐ผ" โช๏ธโก๏ธ mypy
.