Browse Source
docs(fastapi): add Persian (fa) translation for Python Types document…pull/13291/head
committed by
GitHub
1 changed files with 185 additions and 0 deletions
@ -0,0 +1,185 @@ |
|||||
|
|
||||
|
|
||||
|
# معرفی انواع داده در پایتون (Python Types) |
||||
|
|
||||
|
پایتون از «نشانههای نوع» (type hints) که به آنها «حاشیهنویسی نوع» (type annotations) نیز گفته میشود، پشتیبانی میکند. |
||||
|
|
||||
|
این **نشانههای نوع** یک سینتکس خاص دارند که امکان تعیین نوع داده متغیرها را فراهم میکنند. |
||||
|
|
||||
|
با تعیین نوع متغیرها، ادیتورها و ابزارها میتوانند تجربه بهتری برای توسعه ارائه دهند. |
||||
|
|
||||
|
این یک **مرور سریع و کاربردی** دربارهی type hints در پایتون است و تنها حداقل موارد موردنیاز برای استفاده در **FastAPI** را پوشش میدهد؛ در واقع، آنقدر ساده است که بهراحتی میتوان آن را یاد گرفت. |
||||
|
|
||||
|
**FastAPI** کاملاً بر اساس این type hints ساخته شده و از مزایای آنها بهره میبرد. |
||||
|
|
||||
|
اما حتی اگر از **FastAPI** استفاده نمیکنید، یادگیری این مفاهیم همچنان برایتان مفید خواهد بود. |
||||
|
|
||||
|
/// note |
||||
|
اگر در پایتون حرفهای هستید و همهچیز را دربارهی type hints میدانید، میتوانید به فصل بعد بروید. |
||||
|
/// |
||||
|
|
||||
|
## انگیزه (Motivation) |
||||
|
|
||||
|
بیایید با یک مثال ساده شروع کنیم: |
||||
|
|
||||
|
{\* ../../docs\_src/python\_types/tutorial001.py \*} |
||||
|
|
||||
|
خروجی اجرای این برنامه: |
||||
|
|
||||
|
``` |
||||
|
John Doe |
||||
|
``` |
||||
|
|
||||
|
این تابع کارهای زیر را انجام میدهد: |
||||
|
|
||||
|
- پارامترهای `first_name` و `last_name` را دریافت میکند. |
||||
|
- با استفاده از `title()` حرف اول هر کدام را بزرگ میکند. |
||||
|
- آنها را با یک فاصله در میانشان ادغام میکند. |
||||
|
|
||||
|
{\* ../../docs\_src/python\_types/tutorial001.py hl[2] \*} |
||||
|
|
||||
|
### ویرایش آن |
||||
|
|
||||
|
این یک برنامهی بسیار ساده است. اما تصور کنید در حال نوشتن آن از ابتدا هستید. |
||||
|
|
||||
|
در مرحلهای که تعریف تابع را شروع کردهاید و پارامترها را مشخص نمودهاید... |
||||
|
|
||||
|
اما باید متدی را فراخوانی کنید که حرف اول را بزرگ میکند. |
||||
|
|
||||
|
آیا `upper` بود؟ `uppercase`؟ `first_uppercase`؟ `capitalize`؟ |
||||
|
|
||||
|
اینجاست که سراغ دوست قدیمی برنامهنویسها، یعنی **تکمیل خودکار** ادیتور میروید. |
||||
|
|
||||
|
پارامتر اول تابع (`first_name`) را تایپ میکنید، یک نقطه (`.`) میگذارید و `Ctrl+Space` را فشار میدهید تا تکمیل خودکار فعال شود. |
||||
|
|
||||
|
اما متأسفانه چیزی مفید نمایش داده نمیشود: |
||||
|
|
||||
|
### افزودن نوع (Add types) |
||||
|
|
||||
|
بیایید یک خط از نسخهی قبلی را تغییر دهیم. بخش پارامترهای تابع را از: |
||||
|
|
||||
|
```Python |
||||
|
first_name, last_name |
||||
|
``` |
||||
|
|
||||
|
به این تغییر میدهیم: |
||||
|
|
||||
|
```Python |
||||
|
first_name: str, last_name: str |
||||
|
``` |
||||
|
|
||||
|
این همان **نشانههای نوع** است: |
||||
|
|
||||
|
{\* ../../docs\_src/python\_types/tutorial002.py hl[1] \*} |
||||
|
|
||||
|
این کار با تعریف مقدار پیشفرض (مثلاً `first_name="john"`) متفاوت است. ما از دونقطه (`:`) استفاده میکنیم، نه مساوی (`=`). |
||||
|
|
||||
|
افزودن type hints معمولاً رفتار برنامه را تغییر نمیدهد. |
||||
|
|
||||
|
حالا اگر در حال نوشتن همین تابع با type hints باشید و `Ctrl+Space` را فشار دهید، این را مشاهده میکنید: |
||||
|
|
||||
|
اکنون میتوانید گزینههای صحیح را سریعتر پیدا کنید: |
||||
|
|
||||
|
## انگیزهی بیشتر (More Motivation) |
||||
|
|
||||
|
این تابع که از قبل type hints دارد را بررسی کنید: |
||||
|
|
||||
|
{\* ../../docs\_src/python\_types/tutorial003.py hl[1] \*} |
||||
|
|
||||
|
از آنجا که ادیتور نوع متغیرها را میداند، نه تنها **تکمیل خودکار**، بلکه **بررسی خطاها** نیز انجام میشود: |
||||
|
|
||||
|
حالا متوجه میشوید که باید `age` را با `str(age)` به رشته تبدیل کنید: |
||||
|
|
||||
|
{\* ../../docs\_src/python\_types/tutorial004.py hl[2] \*} |
||||
|
|
||||
|
## اعلام انواع (Declaring Types) |
||||
|
|
||||
|
### انواع ساده (Simple Types) |
||||
|
|
||||
|
میتوانید از انواع استاندارد پایتون مانند `int`، `float`، `bool` و `bytes` استفاده کنید: |
||||
|
|
||||
|
{\* ../../docs\_src/python\_types/tutorial005.py hl[1] \*} |
||||
|
|
||||
|
### انواع جنریک با پارامترهای نوع (Generic Types) |
||||
|
|
||||
|
ساختارهای دادهای مانند `list`، `dict`، `set` و `tuple` که میتوانند شامل مقادیر دیگر باشند، «جنریک» نامیده میشوند. برای تعیین نوع داخلی آنها از ماژول `typing` استفاده میشود. |
||||
|
|
||||
|
#### نسخههای جدید پایتون |
||||
|
|
||||
|
در نسخههای جدید پایتون (مثلاً ۳.۹+)، میتوانید به جای `List` از `list` استفاده کنید: |
||||
|
|
||||
|
```Python |
||||
|
def process_items(items: list[str]): |
||||
|
for item in items: |
||||
|
print(item) |
||||
|
``` |
||||
|
|
||||
|
#### لیست (List) |
||||
|
|
||||
|
//// tab | Python 3.9+ |
||||
|
|
||||
|
```Python |
||||
|
{!> ../../docs_src/python_types/tutorial006_py39.py!} |
||||
|
``` |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
#### تاپل و ست (Tuple and Set) |
||||
|
|
||||
|
//// tab | Python 3.9+ |
||||
|
|
||||
|
```Python |
||||
|
{!> ../../docs_src/python_types/tutorial007_py39.py!} |
||||
|
``` |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
#### دیکشنری (Dict) |
||||
|
|
||||
|
//// tab | Python 3.9+ |
||||
|
|
||||
|
```Python |
||||
|
{!> ../../docs_src/python_types/tutorial008_py39.py!} |
||||
|
``` |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
#### یونیون (Union) |
||||
|
|
||||
|
در پایتون ۳.۱۰+ میتوانید از سینتکس `|` استفاده کنید: |
||||
|
|
||||
|
//// tab | Python 3.10+ |
||||
|
|
||||
|
```Python |
||||
|
{!> ../../docs_src/python_types/tutorial008b_py310.py!} |
||||
|
``` |
||||
|
|
||||
|
//// |
||||
|
|
||||
|
#### مقادیر اختیاری (Optional) |
||||
|
|
||||
|
```Python |
||||
|
from typing import Optional |
||||
|
|
||||
|
def say_hi(name: Optional[str] = None): |
||||
|
if name is not None: |
||||
|
print(f"Hey {name}!") |
||||
|
else: |
||||
|
print("Hello World") |
||||
|
``` |
||||
|
|
||||
|
## نوعدهی در FastAPI |
||||
|
|
||||
|
FastAPI از type hints برای: |
||||
|
|
||||
|
- دریافت خودکار پارامترها |
||||
|
- تبدیل دادهها |
||||
|
- اعتبارسنجی |
||||
|
- تولید مستندات OpenAPI |
||||
|
|
||||
|
استفاده میکند. |
||||
|
|
||||
|
/// اطلاعات |
||||
|
اگر همهی آموزش را گذراندهاید و بازگشتهاید تا اطلاعات بیشتری دربارهی انواع داده به دست آورید، یک منبع خوب "cheat sheet" از mypy است. |
||||
|
/// |
||||
|
|
Loading…
Reference in new issue