Python の ** 演算子は、コンテキストに依存するか、使用される内容に依存します。数値 (通常は 2 つの数値の間) とともに使用すると、べき乗演算子 として機能します。ただし、この記事では、それが使用される別のコンテキストについて見ていきます。 Python 辞書を解凍するために使用される 解凍演算子 としての使用法を見ていきます。
Python でコーディングしたことがある人なら、**kwargs を見たことがあるはずです。キーワード引数の略称。これらは、key = value 構文で関数に渡される引数です。 kwargs は、関数に渡されるキーワード引数の数がわからない場合に使用されます。 **kwargs は辞書型であり、辞書を関数に渡すのと同じくらい機能します。この辞書には次の内容が含まれています:
このロジックに従って、この記事では、Python でのユース ケースを見て、Pydantic クラスを使用した FastAPI でのユース ケースを構築していきます。
以下の点を見ていきます。
注: kwargs を使用することは必須ではありません。他の命名規則を使用することもできます。 **myArgs、**何でもなど
この例では、いくつかのキーワード引数を **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 クラスは呼び出し可能です。これは、関数を呼び出すのと同じ方法でクラスを呼び出すことができることを意味します。クラスを呼び出すと、そのクラスのインスタンス (オブジェクト) が作成されます。
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 を呼び出すと、インスタンス 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)
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 中国語 Web サイトの他の関連記事を参照してください。