"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > استخدام العامل ** مع فئات Python و FastAPI Pydantic

استخدام العامل ** مع فئات Python و FastAPI Pydantic

تم النشر بتاريخ 2024-08-31
تصفح:500

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

العامل ** في بايثون سياقي أو يعتمد على ما يتم استخدامه معه؛ عند استخدامه مع الأرقام (عادةً بين رقمين)، فإنه يعمل بمثابة عامل الأس. ولكن في هذه المقالة سوف ننظر في سياق آخر يتم استخدامه. سننظر في استخدامه باعتباره عامل تفريغ، يستخدم لتفريغ قواميس بايثون.

لابد أن أي شخص قام بالبرمجة بلغة بايثون قد شاهد **kwargs. اختصار لوسائط الكلمات الرئيسية. وهي عبارة عن وسيطات تم تمريرها إلى الوظائف في بناء جملة المفتاح = القيمة. يتم استخدام kwargs عندما لا نعرف عدد وسائط الكلمات الرئيسية التي سيتم تمريرها إلى وظيفتنا. **kwargs هو نوع قاموس وهو جيد مثل تمرير قاموس إلى دالة. يحتوي هذا القاموس على:

  • المفاتيح المقابلة لأسماء الوسائط.
  • القيم المقابلة لقيم الوسيطة.

وفقًا لهذا المنطق، في هذه المقالة، سننظر في حالات الاستخدام الخاصة به في Python وصولاً إلى حالة الاستخدام الخاصة به في FastAPI مع فئات Pydantic.

سيتم النظر في النقاط التالية.

  • استخدام مع وظائف بايثون.
  • استخدام مع فئات بايثون.
  • استخدام مع فئات FastAPI Pydantic.
  • فوائد الاستخدام.

ملاحظة: استخدام kwargs ليس إلزاميًا، يمكنك استخدام أي اصطلاح تسمية آخر على سبيل المثال. **myArgs، **أي شيء وما إلى ذلك.

المتطلبات الأساسية

  • معرفة فئات ووظائف بايثون.
  • بعض المعرفة الأساسية بـ FastAPI.

استخدم مع وظائف بايثون

في هذا المثال، سيكون لدينا عدد من وسيطات الكلمات الرئيسية التي تم تمريرها إلى دالة باسم **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

استخدم مع فئات بايثون

كما لاحظنا، فإن فئات بايثون قابلة للاستدعاء؛ وهذا يعني أنه يمكننا استدعاء فئة بنفس الطريقة التي نسميها وظيفة. يؤدي استدعاء فئة إلى إنشاء مثيل (كائن) لتلك الفئة.

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 تستخدم للتحقق من صحة البيانات، حتى أنها توصف بأنها مكتبة التحقق من صحة البيانات الأكثر استخدامًا لـ Python، وذلك باستخدام نظام تلميحات النوع Python3. يساعدنا Pydantic المستخدم في FastAPI على تحديد نماذج البيانات التي تعتبر فئات بعبارات بسيطة.

في فصولنا، يمكننا تحديد أنواع لسماتنا أو حقولنا، على سبيل المثال 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

في الكود أعلاه، العنصر الذي يمثل معلمة نص الطلب، هو مثيل لنموذج العنصر. يتم استخدامه للتحقق من صحة نص طلب 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)
  • ضم القواميس إلى قاموس واحد. مع عامل التفريغ يمكننا دمج قواميس متعددة.
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/stevepose/the-use-of-the-operator-with-python-and-fastapi-pydantic-classes-2aj?1 إذا كان هناك أي انتهاك، فيرجى الاتصال بـ Study_golang @163.com حذف
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3