Skip to content

Commit c679e85

Browse files
authored
🌐 [translation-sync] Add Type Hints section to More Language Features lecture (#78)
* Update translation: lectures/python_advanced_features.md * Update translation: .translate/state/python_advanced_features.md.yml
1 parent bfd3b9c commit c679e85

File tree

2 files changed

+146
-39
lines changed

2 files changed

+146
-39
lines changed
Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
source-sha: 1a87942398e15e03539083cc944a78653c532607
2-
synced-at: "2026-03-20"
3-
model: unknown
4-
mode: RESYNC
5-
section-count: 6
6-
tool-version: 0.11.0
1+
source-sha: f791129259d11c138d7662c88f994c9d5ebaa875
2+
synced-at: "2026-03-25"
3+
model: claude-sonnet-4-6
4+
mode: UPDATE
5+
section-count: 7
6+
tool-version: 0.12.4

lectures/python_advanced_features.md

Lines changed: 140 additions & 33 deletions
Original file line numberDiff line numberDiff line change
@@ -8,29 +8,36 @@ kernelspec:
88
language: python
99
name: python3
1010
heading-map:
11+
More Language Features: ویژگی‌های بیشتر زبان
1112
Overview: مروری کلی
12-
Iterables and Iterators: Iterableها و Iteratorها
13-
Iterables and Iterators::Iterators: Iteratorها
14-
Iterables and Iterators::Iterators in For Loops: Iteratorها در حلقه‌های For
15-
Iterables and Iterators::Iterables: Iterableها
16-
Iterables and Iterators::Iterators and built-ins: Iteratorها و توابع داخلی
17-
'`*` and `**` Operators': عملگرهای `*` و `**`
18-
'`*` and `**` Operators::Unpacking Arguments': باز کردن آرگومان‌ها
19-
'`*` and `**` Operators::Arbitrary Arguments': آرگومان‌های دلخواه
20-
Decorators and Descriptors: Decoratorها و Descriptorها
21-
Decorators and Descriptors::Decorators: Decoratorها
22-
Decorators and Descriptors::Decorators::An Example: یک مثال
23-
Decorators and Descriptors::Decorators::Enter Decorators: Decoratorها وارد می‌شوند
24-
Decorators and Descriptors::Descriptors: Descriptorها
25-
Decorators and Descriptors::Descriptors::A Solution: یک راه‌حل
26-
Decorators and Descriptors::Descriptors::How it Works: چگونه کار می‌کند
27-
Decorators and Descriptors::Descriptors::Decorators and Properties: Decoratorها و Propertyها
13+
Iterables and iterators: Iterableها و Iteratorها
14+
Iterables and iterators::Iterators: Iteratorها
15+
Iterables and iterators::Iterators in for loops: Iteratorها در حلقه‌های for
16+
Iterables and iterators::Iterables: Iterableها
17+
Iterables and iterators::Iterators and built-ins: Iteratorها و توابع داخلی
18+
'`*` and `**` operators': عملگرهای `*` و `**`
19+
'`*` and `**` operators::Unpacking arguments': باز کردن آرگومان‌ها
20+
'`*` and `**` operators::Arbitrary arguments': آرگومان‌های دلخواه
21+
Type hints: راهنمای نوع (Type Hints)
22+
Type hints::Basic syntax: نحو پایه
23+
Type hints::Common types: نوع‌های رایج
24+
Type hints::Hints don't enforce types: راهنماها نوع‌ها را اجبار نمی‌کنند
25+
Type hints::Why use type hints?: چرا از راهنمای نوع استفاده کنیم؟
26+
Type hints::Type hints in scientific Python: راهنمای نوع در پایتون علمی
27+
Decorators and descriptors: Decoratorها و Descriptorها
28+
Decorators and descriptors::Decorators: Decoratorها
29+
Decorators and descriptors::Decorators::An example: یک مثال
30+
Decorators and descriptors::Decorators::Enter decorators: decoratorها وارد می‌شوند
31+
Decorators and descriptors::Descriptors: Descriptorها
32+
Decorators and descriptors::Descriptors::A solution: یک راه‌حل
33+
Decorators and descriptors::Descriptors::How it works: چگونه کار می‌کند
34+
Decorators and descriptors::Descriptors::Decorators and properties: decoratorها و propertyها
2835
Generators: Generatorها
29-
Generators::Generator Expressions: عبارات Generator
30-
Generators::Generator Functions: توابع Generator
31-
Generators::Generator Functions::Example 1: مثال 1
32-
Generators::Generator Functions::Example 2: مثال 2
33-
Generators::Advantages of Iterators: مزایای Iteratorها
36+
Generators::Generator expressions: عبارات generator
37+
Generators::Generator functions: توابع generator
38+
Generators::Generator functions::Example 1: مثال 1
39+
Generators::Generator functions::Example 2: مثال 2
40+
Generators::Advantages of iterators: مزایای iteratorها
3441
Exercises: تمرین‌ها
3542
---
3643

@@ -47,14 +54,14 @@ heading-map:
4754

4855
## مروری کلی
4956

50-
توصیه ما برای این سخنرانی آخر این است که **در مرور اول آن را رد کنید**، مگر اینکه میل شدیدی به خواندن آن داشته باشید.
57+
توصیه ما برای این درس آخر این است که *در مرور اول آن را رد کنید*، مگر اینکه میل شدیدی به خواندن آن داشته باشید.
5158

52-
این سخنرانی اینجاست
59+
این درس اینجاست
5360

5461
1. به عنوان مرجع، تا بتوانیم در صورت نیاز به آن لینک دهیم، و
5562
1. برای کسانی که تعدادی از کاربردها را انجام داده‌اند و اکنون می‌خواهند بیشتر درباره زبان Python یاد بگیرند
5663

57-
موضوعات متنوعی در این سخنرانی بررسی می‌شوند، از جمله iteratorها، decoratorها و descriptorها، و generatorها.
64+
موضوعات متنوعی در این درس بررسی می‌شوند، از جمله iteratorها، type hintها، decoratorها و descriptorها، و generatorها.
5865

5966
## Iterableها و Iteratorها
6067

@@ -155,7 +162,7 @@ next(nikkei_data)
155162
next(nikkei_data)
156163
```
157164

158-
### Iteratorها در حلقه‌های For
165+
### Iteratorها در حلقه‌های for
159166

160167
```{index} single: Python; Iterators
161168
```
@@ -317,7 +324,6 @@ max(y)
317324

318325
در این بخش، نحوه استفاده از آن‌ها و تمایز موارد استفاده آن‌ها را بررسی خواهیم کرد.
319326

320-
321327
### باز کردن آرگومان‌ها
322328

323329
وقتی روی لیستی از پارامترها عمل می‌کنیم، اغلب نیاز داریم که محتوای لیست را به عنوان آرگومان‌های منفرد به جای یک مجموعه استخراج کنیم هنگام ارسال آن‌ها به توابع.
@@ -484,6 +490,108 @@ arb(l1=l1, l2=l2, l3=l3)
484490

485491
تفاوت این است که توابع با `*args` قادر خواهند بود *آرگومان‌های موضعی* با اندازه دلخواه بپذیرند، در حالی که `**kargs` به توابع اجازه می‌دهد تعداد دلخواه *آرگومان‌های کلیدواژه‌ای* بپذیرند.
486492

493+
## راهنمای نوع (Type Hints)
494+
495+
```{index} single: Python; Type Hints
496+
```
497+
498+
پایتون یک زبان *با نوع‌دهی پویا* است، به این معنی که نیازی به اعلان نوع متغیرها ندارید.
499+
500+
(بحث {doc}`پیشین <need_for_speed>` ما درباره نوع‌های پویا در برابر استاتیک را ببینید.)
501+
502+
با این حال، پایتون از **راهنمای نوع** (type hints) اختیاری (که به آن حاشیه‌نویسی نوع نیز گفته می‌شود) پشتیبانی می‌کند که به شما امکان می‌دهد نوع‌های مورد انتظار متغیرها، پارامترهای تابع، و مقادیر بازگشتی را مشخص کنید.
503+
504+
راهنمای نوع از پایتون ۳.۵ معرفی شد و در نسخه‌های بعدی تکامل یافت.
505+
تمام نحو نشان‌داده‌شده در اینجا در پایتون ۳.۹ و بعد از آن کار می‌کند.
506+
507+
```{note}
508+
راهنمای نوع *در زمان اجرا توسط مفسر پایتون نادیده گرفته می‌شود* --- آن‌ها بر نحوه اجرای کد شما تأثیری ندارند. آن‌ها صرفاً اطلاعاتی هستند و به عنوان مستندات برای انسان‌ها و ابزارها عمل می‌کنند.
509+
```
510+
511+
### نحو پایه
512+
513+
راهنمای نوع از دونقطه `:` برای حاشیه‌نویسی متغیرها و پارامترها، و از پیکان `->` برای حاشیه‌نویسی نوع‌های بازگشتی استفاده می‌کند.
514+
515+
در اینجا یک مثال ساده آمده است:
516+
517+
```{code-cell} python3
518+
def greet(name: str, times: int) -> str:
519+
return (name + '! ') * times
520+
521+
greet('hello', 3)
522+
```
523+
524+
در این تعریف تابع:
525+
526+
- `name: str` نشان می‌دهد که `name` انتظار می‌رود یک رشته باشد
527+
- `times: int` نشان می‌دهد که `times` انتظار می‌رود یک عدد صحیح باشد
528+
- `-> str` نشان می‌دهد که تابع یک رشته برمی‌گرداند
529+
530+
همچنین می‌توانید متغیرها را مستقیماً حاشیه‌نویسی کنید:
531+
532+
```{code-cell} python3
533+
x: int = 10
534+
y: float = 3.14
535+
name: str = 'Python'
536+
```
537+
538+
### نوع‌های رایج
539+
540+
پرکاربردترین راهنمای نوع، نوع‌های داخلی (built-in) هستند:
541+
542+
| نوع | مثال |
543+
|-----------|----------------------------------|
544+
| `int` | `x: int = 5` |
545+
| `float` | `x: float = 3.14` |
546+
| `str` | `x: str = 'hello'` |
547+
| `bool` | `x: bool = True` |
548+
| `list` | `x: list = [1, 2, 3]` |
549+
| `dict` | `x: dict = {'a': 1}` |
550+
551+
برای ظروف (containers)، می‌توانید نوع‌های عناصر آن‌ها را مشخص کنید:
552+
553+
```{code-cell} python3
554+
prices: list[float] = [9.99, 4.50, 2.89]
555+
counts: dict[str, int] = {'apples': 3, 'oranges': 5}
556+
```
557+
558+
### راهنماها نوع‌ها را اجبار نمی‌کنند
559+
560+
یک نکته مهم برای برنامه‌نویسان جدید پایتون: راهنمای نوع در زمان اجرا *اجبار نمی‌شوند*.
561+
562+
پایتون در صورت ارسال نوع «اشتباه» خطایی ایجاد نمی‌کند:
563+
564+
```{code-cell} python3
565+
def add(x: int, y: int) -> int:
566+
return x + y
567+
568+
# Passes floats — Python doesn't complain
569+
add(1.5, 2.7)
570+
```
571+
572+
راهنماها می‌گویند `int`، اما پایتون با خوشحالی آرگومان‌های `float` را می‌پذیرد و `4.2` برمی‌گرداند --- که آن هم `int` نیست.
573+
574+
این تفاوت کلیدی با زبان‌های با نوع‌دهی ایستا مانند C یا Java است، که در آن‌ها عدم تطابق نوع‌ها باعث خطاهای کامپایل می‌شود.
575+
576+
### چرا از راهنمای نوع استفاده کنیم؟
577+
578+
اگر پایتون آن‌ها را نادیده می‌گیرد، چرا زحمت بکشیم؟
579+
580+
1. **خوانایی**: راهنمای نوع امضای تابع را خوددستنویس (self-documenting) می‌کند. خواننده فوراً می‌داند که یک تابع چه نوع‌هایی را انتظار دارد و چه نوع‌هایی برمی‌گرداند.
581+
2. **پشتیبانی ویرایشگر**: IDEهایی مانند VS Code از راهنمای نوع برای ارائه تکمیل خودکار بهتر، تشخیص خطا، و مستندات درخطی استفاده می‌کنند.
582+
3. **بررسی خطا**: ابزارهایی مانند [mypy](https://mypy.readthedocs.io/) و [pyrefly](https://pyrefly.org/) راهنمای نوع را تجزیه‌وتحلیل می‌کنند تا اشکالات را *قبل از* اجرای کد شناسایی کنند.
583+
4. **کد تولیدشده توسط LLM**: مدل‌های زبانی بزرگ اغلب کدی با راهنمای نوع تولید می‌کنند، بنابراین درک نحو به شما کمک می‌کند خروجی آن‌ها را بخوانید و استفاده کنید.
584+
585+
### راهنمای نوع در پایتون علمی
586+
587+
راهنمای نوع به بحث {doc}`نیاز به سرعت <need_for_speed>` ارتباط دارد:
588+
589+
* کتابخانه‌های پرکارایی مانند [JAX](https://jax.readthedocs.io/) و [Numba](https://numba.pydata.org/) برای کامپایل کد ماشین سریع به دانستن نوع متغیرها متکی هستند.
590+
* در حالی که این کتابخانه‌ها نوع‌ها را در زمان اجرا استنتاج می‌کنند نه اینکه مستقیماً راهنمای نوع پایتون را بخوانند، *مفهوم* یکسان است --- اطلاعات صریح نوع، بهینه‌سازی را ممکن می‌سازد.
591+
* با تکامل اکوسیستم پایتون، انتظار می‌رود ارتباط بین راهنمای نوع و ابزارهای کارایی بیشتر شود.
592+
593+
در حال حاضر، مزیت اصلی راهنمای نوع در پایتون روزمره *وضوح و پشتیبانی ابزار* است، که با افزایش اندازه برنامه‌ها ارزش آن بیشتر می‌شود.
594+
487595
## Decoratorها و Descriptorها
488596

489597
```{index} single: Python; Decorators
@@ -598,7 +706,7 @@ g = check_nonneg(g)
598706

599707
در عین حال، منطق تست فقط یک بار نوشته شده است.
600708

601-
#### Decoratorها وارد می‌شوند
709+
#### decoratorها وارد می‌شوند
602710

603711
```{index} single: Python; Decorators
604712
```
@@ -770,7 +878,7 @@ car.kms
770878
به عنوان یک property، وقتی مقدار آن را از طریق `car.miles = 6000` تنظیم می‌کنیم، متد setter
771879
آن فعال می‌شود --- در این مورد `set_miles`.
772880

773-
#### Decoratorها و Propertyها
881+
#### decoratorها و propertyها
774882

775883
```{index} single: Python; Decorators
776884
```
@@ -823,7 +931,7 @@ class Car:
823931

824932
دو راه برای ساخت generatorها مطالعه خواهیم کرد: عبارات generator و توابع generator.
825933

826-
### عبارات Generator
934+
### عبارات generator
827935

828936
ساده‌ترین راه برای ساخت generatorها استفاده از *عبارات generator* است.
829937

@@ -879,7 +987,7 @@ sum((x * x for x in range(10)))
879987
sum(x * x for x in range(10))
880988
```
881989

882-
### توابع Generator
990+
### توابع generator
883991

884992
```{index} single: Python; Generator Functions
885993
```
@@ -1026,7 +1134,7 @@ def g(x):
10261134
x = x * x
10271135
```
10281136

1029-
### مزایای Iteratorها
1137+
### مزایای iteratorها
10301138

10311139
مزیت استفاده از iterator اینجا چیست؟
10321140

@@ -1084,7 +1192,6 @@ sum(draws)
10841192
* نیاز به ایجاد لیست‌ها/tupleهای بزرگ را از بین می‌برند، و
10851193
* یک رابط یکنواخت برای تکرار فراهم می‌کنند که می‌تواند به صورت شفاف در حلقه‌های `for` استفاده شود
10861194

1087-
10881195
## تمرین‌ها
10891196

10901197

@@ -1145,4 +1252,4 @@ for date in dates:
11451252
```
11461253

11471254
```{solution-end}
1148-
```
1255+
```

0 commit comments

Comments
 (0)