파이썬의 ** 연산자는 상황에 따라 다르며 함께 사용되는 대상에 따라 달라집니다. 숫자(일반적으로 두 숫자 사이)와 함께 사용하면 지수 연산자 역할을 합니다. 하지만 이 글에서는 그것이 사용되는 또 다른 맥락을 살펴볼 것입니다. 우리는 파이썬 사전을 풀기 위해 사용되는 풀기 연산자
로서의 사용법을 살펴볼 것입니다.Python으로 코딩해본 사람이라면 누구나 **kwargs를 본 적이 있을 것입니다. 키워드 인수의 약어입니다. 이는 키 = 값 구문의 함수에 전달되는 인수입니다. kwargs는 함수에 전달될 키워드 인수의 수를 모를 때 사용됩니다. **kwargs는 사전 유형이며 사전을 함수에 전달하는 것만큼 좋습니다. 이 사전에는 다음이 포함되어 있습니다:
이 논리에 따라 이 기사에서는 Pydantic 클래스를 사용하여 FastAPI의 사용 사례를 구축하는 Python의 사용 사례를 살펴볼 것입니다.
다음 사항을 살펴보겠습니다.
참고: kwargs를 반드시 사용해야 하는 것은 아니며 다른 명명 규칙을 사용할 수 있습니다. **myArgs, **모든 것 등
이 예에서는 함수에 **kwargs로 전달되는 여러 키워드 인수가 있으며 **kwargs는 사전이므로 사전 메서드 .items()를 사용합니다. .items() 메소드는 사전의 키-값 튜플 쌍 목록을 표시하는 뷰 객체를 반환합니다.
def print_details(**kwargs): # kwargs is a dictionary containing all keyword arguments print(type(kwargs)) # Output:print(kwargs.items()) # Displays the dictionary items (key-value pairs) # Iterate over the key-value pairs in kwargs for key, value in kwargs.items(): print(f"{key}: {value}") # Calling the function with multiple keyword arguments print_details(name="Stephen", age=30, profession="Software Developer")
산출
dict_items([('name', 'Stephen'), ('age', 30), ('profession', 'Software Developer')]) name: Stephen age: 30 profession: Software Developer
우리가 알아차렸어야 했던 것처럼, Python 클래스는 호출 가능합니다. 이는 함수를 호출하는 것과 동일한 방식으로 클래스를 호출할 수 있음을 의미합니다. 클래스를 호출하면 해당 클래스의 인스턴스(객체)가 생성됩니다.
class Tech: def __init__(self, dev, devops, design): self.dev = dev self.devops = devops self.design = design # Call class to create an instance tech = Tech(dev, devops, design)
인수 값으로 Tech를 호출하면 인스턴스 기술이 반환됩니다.
클래스에서 ** 연산자는 각 키-값 쌍이 클래스 생성자에 명명된 인수로 전달될 수 있도록 사전의 압축을 풉니다.
이 섹션의 예에서는 클래스를 정의합니다. 클래스 매개변수와 일치하는 속성을 사용하여 사전을 정의합니다. 그런 다음 **를 사용하여 사전의 압축을 풀고 클래스의 인스턴스를 만듭니다.
class Tech: def __init__(self, dev, devops, design): self.dev = dev self.devops = devops self.design = design # Define a dictionary with properties matching the class's parameters tech_team = { 'dev': 'Stephen', 'devops': ['Jenny', 'Rakeem', 'Stanley'], 'design': 'Carlos' } # Create an instance of the class using ** to unpack the dictionary tech = Tech(**tech_team) print(tech.dev) print(tech.devops) print(tech.design)
위 코드는 다음과 같습니다.
class Tech: def __init__(self, dev, devops, design): self.dev = dev self.devops = devops self.design = design # Define a dictionary with properties matching the class's parameters tech_team = { 'dev': 'Stephen', 'devops': ['Jenny', 'Rakeem', 'Stanley'], 'design': 'Carlos' } # Create an instance of the class tech = Tech( dev = tech_team["dev"], devops = tech_team["devops"], design = tech_team["design"] ) print(tech.dev) print(tech.devops) print(tech.design)
이유는 다음과 같습니다.
tech = Tech(**Tech_team)
동일함:
tech = Tech( dev = tech_team["dev"], devops = tech_team["devops"], design = tech_team["design"] )
Pydantic은 데이터 검증에 사용되는 Python 라이브러리로, Python3의 유형 힌트 시스템을 사용하여 가장 널리 사용되는 Python용 데이터 검증 라이브러리라고도 합니다. FastAPI에 사용된 이 Pydantic은 간단히 말해서 클래스인 데이터 모델을 정의하는 데 도움이 됩니다.
클래스에서는 속성이나 필드에 대한 유형(예: str, int, float, List)을 지정할 수 있습니다. 데이터가 제공되면 Pydantic은 데이터가 일치하는지 확인합니다.
이 외에도 Pydantic은 구문 분석 및 직렬화에 도움이 됩니다. 직렬화는 데이터 객체를 쉽게 전송할 수 있는 형식으로 전송하는 프로세스입니다. 예를 들어 단순성과 분석 용이성을 위해 객체 또는 배열을 JSON 형식으로 변환합니다.
Pydantic에는 정의된 클래스가 상속받는 BaseModel 클래스가 있습니다. 다음은 Pydantic 모델의 예입니다:
from pydantic import BaseModel, EmailStr # We import the BaseModel and Emailstr type from Pydantic class UserInDB(BaseModel): username: str hashed_password: str email: EmailStr full_name: Union[str, None] = None
다음이 있다고 가정합니다.
class Item(BaseModel): name:str price:float app = FastAPI() @app.post("/items/") async def create_item(item:Item): return item
위 코드에서 요청 본문 매개변수인 item은 Item 모델의 인스턴스입니다. 이는 들어오는 JSON 요청 본문을 검증하고 직렬화하여 항목 모델에 정의된 구조와 일치하는지 확인하는 데 사용됩니다.
Pydantic 모델에는 모델 데이터가 포함된 사전을 반환하는 .dict() 메서드가 있습니다.
Pydantic 모델 인스턴스를 생성하는 경우:
item = Item(name="sample item", price=5.99)
그런 다음 dict()를 호출합니다.
itemDict = item.dict() print(itemDict)
이제 사전이 생겼으며 출력은 다음과 같습니다.
{ "name": "sample item", "price":5.99 }
참고 사항:
Item(name="sample item", price=5.99)
는
와 동일합니다.
# Using the unpacking operator Item(**itemDict) # Or Item( name=itemDict["name"], price=itemDict["price" )
이제 언패킹 연산자를 사용하는 것이 유익한 몇 가지 상황을 살펴보겠습니다.
original_dict = {"name": "Stephen", "age": 30, "profession": "Software Developer"} # Creating a new dictionary with additional or modified entries new_dict = {**original_dict, "age": 31, "location": "New York"} print(new_dict)
default_config = {"theme": "light", "notifications": True} user_config = {"theme": "dark"} # Merging dictionaries using unpacking final_config = {**default_config, **user_config} print(final_config)
사전 압축 풀기 연산자 **는 함수와 클래스에서 인수를 처리하고 새 사전을 병합하고 생성하는 동적 특성 때문에 사용을 고려하는 연산자입니다. 이 모든 것이 합쳐지면 코드가 줄어들고 코드 유지 관리가 향상됩니다.
부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.
Copyright© 2022 湘ICP备2022001581号-3