You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: lessons/l22.rst
+179Lines changed: 179 additions & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -292,7 +292,186 @@ Class Annotations
292
292
ماژول typing
293
293
~~~~~~~~~~~~~~~~~~~~~~
294
294
295
+
این ماژول از نسخه 3.5 با هدف فراهم آوردن پشتیبانی از انواع داده پیچیدهتر در Runtime پایتون، افزوده شده است [`اسناد پایتون <https://docs.python.org/3/library/typing.html>`__].
295
296
297
+
برخی از مواردی که این ماژول در پشتیبانی از قابلیت Type Hints فراهم آورده است به شرح زیر است. جهت آشنایی بیشتر میتوانید به صفحه اصلی مستندات مراجعه نمایید.
298
+
299
+
300
+
**-- معادل برخی از انواع --**
301
+
302
+
تاکنون فقط به ذکر نوع انواع سادهای همچون ``int`` و ``str`` پرداختهایم، با این حال ذکر نوع برای نوع داده دیکشنری که شامل اعضایی به صورت کلید:مقدار بوده و هر عضو نیز میتواند از دو نوع مختلف باشد چگونه باید انجام شود؟ در پاسخ باید گفت که ماژول ``typing`` یک سری انواع معادل فراهم آورده است.
با استفاده از این تابع میتوان یک نوع جدید یا درواقع یک Wrapper شخصی برای انواع موجود ایجاد نماییم [`اسناد پایتون <https://docs.python.org/3/library/typing.html#newtype>`__].
377
+
378
+
379
+
سینتکس ``NewType('UserId', int)`` یک نوع جدید با نام ``UserId`` بر اساس نوع اصلی ``int`` ایجاد میکند. توجه داشته باشید که نوع جدید تنها از نظر ظاهر برای ابزارهای type checker متفاوت بوده ولی در پایتون همان ماهیت نوع اصلی را خواهد داشت:
380
+
381
+
::
382
+
383
+
>>> from typing import NewType
384
+
385
+
>>> UserId = NewType('UserId', int)
386
+
387
+
>>> some_id = UserId(524313)
388
+
389
+
>>> some_id
390
+
524313
391
+
>>> type(some_id)
392
+
<class 'int'>
393
+
>>> isinstance(some_id, int)
394
+
True
395
+
396
+
::
397
+
398
+
>>> def get_user_name(user_id: UserId) -> str:
399
+
... if user_id == 1633:
400
+
... return 'saeid'
401
+
... else:
402
+
... return ''
403
+
...
404
+
>>> saeid_id = UserId(1633)
405
+
>>> get_user_name(saeid_id)
406
+
'saeid'
407
+
408
+
|
409
+
410
+
**-- Any --**
411
+
412
+
یک نوع خاص که به معنی هر نوعی میباشد، در واقع ``Any`` هر نوعی میتواند باشد [`اسناد پایتون <https://docs.python.org/3/library/typing.html#the-any-type>`__]. دو قطعه کد زیر از نظر ابزارهای type checker کاملا مشابه یکدیگر هستند:
413
+
414
+
::
415
+
416
+
>>> def func(param):
417
+
... return param
418
+
...
419
+
>>>
420
+
421
+
::
422
+
423
+
>>> from typing import Any
424
+
>>> def func(param: Any) -> Any:
425
+
... return param
426
+
...
427
+
>>> func(4)
428
+
4
429
+
>>> func('py')
430
+
'py'
431
+
>>> func([0, 1, 2])
432
+
[0, 1, 2]
433
+
434
+
435
+
|
436
+
437
+
**-- Callable --**
438
+
439
+
یک نوع خاص دیگر برای شرح نوع یک شی Callable (درس هفدهم) به مانند توابع میباشد [`اسناد پایتون <https://docs.python.org/3/library/typing.html#callable>`__]. ساختار این نوع به صورت زیر است:
0 commit comments