백엔드 개발 파이썬 튜토리얼 Python 및 FastAPI Pydantic 클래스에서 ** 연산자 사용

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

Aug 31, 2024 pm 12:32 PM

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

Python의 ** 연산자는 상황에 따라 다르며 함께 사용되는 대상에 따라 달라집니다. 숫자(일반적으로 두 숫자 사이)와 함께 사용하면 지수 연산자 역할을 합니다. 그러나 이 글에서는 그것이 사용되는 또 다른 맥락을 살펴볼 것입니다. Python 사전의 압축을 풀 때 사용되는 압축해제 연산자로서의 사용법을 살펴보겠습니다.

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

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

이 논리에 따라 이 기사에서는 Python의 사용 사례를 살펴보고 Pydantic 클래스를 사용하는 FastAPI의 사용 사례를 살펴보겠습니다.

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

  • 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: <class 'dict'>
    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")
로그인 후 복사

출력

<class 'dict'>

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" 
)
로그인 후 복사

사용의 이점

이제 unpacking 연산자를 사용하는 것이 유익한 몇 가지 상황을 살펴보겠습니다.

  • Creating new dictionaries from a pre-existing dictionary by adding or modifying entries.
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)
로그인 후 복사
  • Joining dictionaries into one. With the unpacking operator we can merge multiple dictionaries.
default_config = {"theme": "light", "notifications": True}
user_config = {"theme": "dark"}

# Merging dictionaries using unpacking
final_config = {**default_config, **user_config}
print(final_config)
로그인 후 복사
  • Handling of arguments in functions in a dynamic manner. This can be seen in our early examples.

Conclusion

The dictionary unpacking operator ** is one to consider using because of its dynamic nature of handling arguments in functions and classes, and in merging and creation of new dictionaries. All these put together leads to lesser code and better maintenance of code.

위 내용은 Python 및 FastAPI Pydantic 클래스에서 ** 연산자 사용의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

뜨거운 기사 태그

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

HTML을 구문 분석하기 위해 아름다운 수프를 어떻게 사용합니까? HTML을 구문 분석하기 위해 아름다운 수프를 어떻게 사용합니까? Mar 10, 2025 pm 06:54 PM

HTML을 구문 분석하기 위해 아름다운 수프를 어떻게 사용합니까?

파이썬의 이미지 필터링 파이썬의 이미지 필터링 Mar 03, 2025 am 09:44 AM

파이썬의 이미지 필터링

Python을 사용하여 텍스트 파일의 ZIPF 배포를 찾는 방법 Python을 사용하여 텍스트 파일의 ZIPF 배포를 찾는 방법 Mar 05, 2025 am 09:58 AM

Python을 사용하여 텍스트 파일의 ZIPF 배포를 찾는 방법

Python을 사용하여 PDF 문서를 사용하는 방법 Python을 사용하여 PDF 문서를 사용하는 방법 Mar 02, 2025 am 09:54 AM

Python을 사용하여 PDF 문서를 사용하는 방법

Django 응용 프로그램에서 Redis를 사용하여 캐시하는 방법 Django 응용 프로그램에서 Redis를 사용하여 캐시하는 방법 Mar 02, 2025 am 10:10 AM

Django 응용 프로그램에서 Redis를 사용하여 캐시하는 방법

Tensorflow 또는 Pytorch로 딥 러닝을 수행하는 방법은 무엇입니까? Tensorflow 또는 Pytorch로 딥 러닝을 수행하는 방법은 무엇입니까? Mar 10, 2025 pm 06:52 PM

Tensorflow 또는 Pytorch로 딥 러닝을 수행하는 방법은 무엇입니까?

파이썬에서 자신의 데이터 구조를 구현하는 방법 파이썬에서 자신의 데이터 구조를 구현하는 방법 Mar 03, 2025 am 09:28 AM

파이썬에서 자신의 데이터 구조를 구현하는 방법

파이썬 객체의 직렬화 및 사제화 : 1 부 파이썬 객체의 직렬화 및 사제화 : 1 부 Mar 08, 2025 am 09:39 AM

파이썬 객체의 직렬화 및 사제화 : 1 부

See all articles