"일꾼이 일을 잘하려면 먼저 도구를 갈고 닦아야 한다." - 공자, 『논어』.
첫 장 > 프로그램 작성 > Python 및 FastAPI Pydantic 클래스에서 ** 연산자 사용

Python 및 FastAPI Pydantic 클래스에서 ** 연산자 사용

2024-08-31에 게시됨
검색:487

The Use of The ** Operator With Python and FastAPI Pydantic Classes

파이썬의 ** 연산자는 상황에 따라 다르며 함께 사용되는 대상에 따라 달라집니다. 숫자(일반적으로 두 숫자 사이)와 함께 사용하면 지수 연산자 역할을 합니다. 하지만 이 글에서는 그것이 사용되는 또 다른 맥락을 살펴볼 것입니다. 우리는 파이썬 사전을 풀기 위해 사용되는 풀기 연산자

로서의 사용법을 살펴볼 것입니다.

Python으로 코딩해본 사람이라면 누구나 **kwargs를 본 적이 있을 것입니다. 키워드 인수의 약어입니다. 이는 키 = 값 구문의 함수에 전달되는 인수입니다. kwargs는 함수에 전달될 키워드 인수의 수를 모를 때 사용됩니다. **kwargs는 사전 유형이며 사전을 함수에 전달하는 것만큼 좋습니다. 이 사전에는 다음이 포함되어 있습니다:

  • 인수 이름에 해당하는 키입니다.
  • 인수 값에 해당하는 값입니다.

이 논리에 따라 이 기사에서는 Pydantic 클래스를 사용하여 FastAPI의 사용 사례를 구축하는 Python의 사용 사례를 살펴볼 것입니다.

다음 사항을 살펴보겠습니다.

  • Python 함수와 함께 사용합니다.
  • Python 클래스와 함께 사용하세요.
  • FastAPI Pydantic 클래스와 함께 사용하세요.
  • 사용 혜택.

참고: kwargs를 반드시 사용해야 하는 것은 아니며 다른 명명 규칙을 사용할 수 있습니다. **myArgs, **모든 것 등

전제조건

  • Python 클래스 및 함수에 대한 지식
  • FastAPI에 대한 기본 지식입니다.

Python 함수와 함께 사용

이 예에서는 함수에 **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 클래스와 함께 사용

우리가 알아차렸어야 했던 것처럼, 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"]
)

FastAPI Pydantic 클래스와 함께 사용

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 모델에는 모델 데이터가 포함된 사전을 반환하는 .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)
  • 사전을 하나로 합칩니다. unpacking 연산자를 사용하면 여러 사전을 병합할 수 있습니다.
default_config = {"theme": "light", "notifications": True}
user_config = {"theme": "dark"}

# Merging dictionaries using unpacking
final_config = {**default_config, **user_config}
print(final_config)
  • 동적 방식으로 함수의 인수를 처리합니다. 이는 초기 예제에서 볼 수 있습니다.

결론

사전 압축 풀기 연산자 **는 함수와 클래스에서 인수를 처리하고 새 사전을 병합하고 생성하는 동적 특성 때문에 사용을 고려하는 연산자입니다. 이 모든 것이 합쳐지면 코드가 줄어들고 코드 유지 관리가 향상됩니다.

릴리스 선언문 이 기사는 https://dev.to/steve Purpose/the-use-of-the-operator-with-python-and-fastapi-pydantic-classes-2aj?1 에서 복제됩니다. 침해가 있는 경우에는 Study_golang에 문의하십시오. @163.com 삭제
최신 튜토리얼 더>

부인 성명: 제공된 모든 리소스는 부분적으로 인터넷에서 가져온 것입니다. 귀하의 저작권이나 기타 권리 및 이익이 침해된 경우 자세한 이유를 설명하고 저작권 또는 권리 및 이익에 대한 증거를 제공한 후 이메일([email protected])로 보내주십시오. 최대한 빨리 처리해 드리겠습니다.

Copyright© 2022 湘ICP备2022001581号-3