diff --git a/source/lessons/l02-setup-python.rst b/source/lessons/l02-setup-python.rst index 2f9164c..d276949 100644 --- a/source/lessons/l02-setup-python.rst +++ b/source/lessons/l02-setup-python.rst @@ -85,7 +85,11 @@ البته امکان دستکاری Path در هر زمانی وجود دارد: -مسیر Control Panel > System > Advanced system settings > Advanced را طی کرده و سپس با کلیک بر روی Environment Variables پنجره‌ جدیدی باز می‌گردد که در قسمت System variables آن Path را پیدا و انتخاب نمایید. بر روی Edit در پایین همان پنجره کلیک کرده و عبارت ``;C:\Python34;C:\Python34\Scripts`` (برای نسخه 3.4) را به ابتدای متن موجود در قسمت Variable value پنجره‌ جدید وارد و سپس بر روی دکمه‌ OK کلیک نمایید. :) +مسیر Control Panel > System > Advanced system settings > Advanced را طی کرده و سپس با کلیک بر روی Environment Variables پنجره‌ جدیدی باز می‌گردد که در قسمت System variables آن Path را پیدا و انتخاب نمایید. بر روی Edit در پایین همان پنجره کلیک کرده و عبارت زیر (برای نسخه 3.4) را به ابتدای متن موجود در قسمت Variable value پنجره‌ جدید وارد و سپس بر روی دکمه‌ OK کلیک نمایید. :) + +:: + + C:\Python34;C:\Python34\Scripts; .. image:: /_static/lessons/l02-add-path-on-windows.png @@ -352,7 +356,9 @@ pip از زمان انتشار نسخه‌ 3.4 به بسته‌ نصبی پای برای بروز رسانی خود pip نیز از همین الگو استفاده می‌شود: ``pip install --upgrade pip`` - البته در ویندوز می‌بایست از دستور ``python -m pip install -U pip`` استفاده نمایید. + البته در ویندوز می‌بایست از دستور زیر استفاده نمایید:: + + python -m pip install -U pip به جای ``upgrade--`` می توانید از ``U-`` نیز استفاده نمایید. diff --git a/source/lessons/l03-create-and-run-a-python-project.rst b/source/lessons/l03-create-and-run-a-python-project.rst index 064be0b..72c4914 100644 --- a/source/lessons/l03-create-and-run-a-python-project.rst +++ b/source/lessons/l03-create-and-run-a-python-project.rst @@ -224,9 +224,9 @@ .. admonition:: تمرین - یک اسکریپت پایتون ایجاد کنید که نام و سن شما را تنها با یکبار استفاده از تابع ``()print`` به صورت پایین بر روی خروجی نمایش دهد: + یک اسکریپت پایتون ایجاد کنید که نام و سن شما را تنها با یکبار استفاده از تابع ``()print`` به صورت پایین بر روی خروجی نمایش دهد:: - ``Name: Hideyoshi Nagachika - Age: 19`` + Name: Hideyoshi Nagachika - Age: 19 ** حالت‌های مختلفی که می‌توان به این ساختار از خروجی رسید را امتحان نمایید (ورودی‌های متفاوت) diff --git a/source/lessons/l04-python-interactive-mode.rst b/source/lessons/l04-python-interactive-mode.rst index 63a0506..a7abc88 100644 --- a/source/lessons/l04-python-interactive-mode.rst +++ b/source/lessons/l04-python-interactive-mode.rst @@ -543,11 +543,15 @@ نمونه دستور اجرای اسکریپت: - ``python script.py "Hideyoshi Nagachika" 19`` + :: + + python script.py "Hideyoshi Nagachika" 19 نمونه خروجی اسکریپت: - ``Name: Hideyoshi Nagachika - Age: 19`` + :: + + Name: Hideyoshi Nagachika - Age: 19 .. _lesson-04-footer: diff --git a/source/lessons/l11-python-standard-library.rst b/source/lessons/l11-python-standard-library.rst index 78a1fc7..9967a8f 100644 --- a/source/lessons/l11-python-standard-library.rst +++ b/source/lessons/l11-python-standard-library.rst @@ -637,7 +637,9 @@ os.path >>> .. note:: - هر مسیر می‌بایست دقیقا شامل یک کاراکتر جدا کننده دایرکتوری (``os.sep``) باشد در غیر این صورت اجزا فقط از آخرین نمونه به بعد در نظر گرفته می‌شوند. این اتفاق در توپِل سوم ``('one', 'two', '/three', 'four/')`` از نمونه کد بالا رخ داده است. + هر مسیر می‌بایست دقیقا شامل یک کاراکتر جدا کننده دایرکتوری (``os.sep``) باشد در غیر این صورت اجزا فقط از آخرین نمونه به بعد در نظر گرفته می‌شوند. این اتفاق در توپِل سوم از نمونه کد بالا رخ داده است:: + + ('one', 'two', '/three', 'four/') * ``(os.path.expanduser(path``: این تابع تنها یک پارامتر با ترکیب ``user~`` می‌پذیرد و کاراکتر ``~`` را به مسیر دایرکتوری کاربر user در سیستم عامل تبدیل می‌کند [`اسناد پایتون `__]:: @@ -713,7 +715,9 @@ os.path one\..\one\two\three : one\two\three -* ``(os.path.abspath(path``: مسیر نسبی را نرمال‌سازی کرده و به مسیر مطلق (Absolute - مسیری از ابتدا یا همان روت سیستم فایل - در گنولینوکس: مسیری که با ``/`` شروع شده باشد - در ویندوز: مسیری که با نام یک درایو شروع شده باشد) تبدیل می‌کند. حاصل این تابع برابر با حاصل ``(os.path.normpath(os.path.join(os.getcwd(), path)`` می‌باشد. [`اسناد پایتون `__]: +* ``(os.path.abspath(path``: مسیر نسبی را نرمال‌سازی کرده و به مسیر مطلق (Absolute - مسیری از ابتدا یا همان روت سیستم فایل - در گنولینوکس: مسیری که با ``/`` شروع شده باشد - در ویندوز: مسیری که با نام یک درایو شروع شده باشد) تبدیل می‌کند. حاصل این تابع برابر با حاصل متد پایین می‌باشد. [`اسناد پایتون `__]:: + + (os.path.normpath(os.path.join(os.getcwd(), path) .. code:: python diff --git a/source/lessons/l12-function-in-python.rst b/source/lessons/l12-function-in-python.rst index f29d495..f80b173 100644 --- a/source/lessons/l12-function-in-python.rst +++ b/source/lessons/l12-function-in-python.rst @@ -862,7 +862,9 @@ >>> .. tip:: - با توضیحات ارائه شده، در یک تابع با سرآیندی همچون ``def f(a, b, /, c, d, *, e, f)`` ارسال آرگومان برای دو پارامتر ``a`` و ``b`` به روش نام=مقدار ممنوع است (positional-only) و ارسال آرگومان برای دو پارامتر ``c`` و ``d`` می‌تواند با استفاده از هر دو روش نام=مقدار یا موقعیت باشد (positional or keyword) و همچنین ارسال آرگومان برای دو پارامتر ``e`` و ``f`` تنها با روش مقدار=نام مجاز خواهد بود (keyword-only). + با توضیحات ارائه شده، در یک تابع با سرآیندی همچون نمونه پایین ارسال آرگومان برای دو پارامتر ``a`` و ``b`` به روش نام=مقدار ممنوع است (positional-only) و ارسال آرگومان برای دو پارامتر ``c`` و ``d`` می‌تواند با استفاده از هر دو روش نام=مقدار یا موقعیت باشد (positional or keyword) و همچنین ارسال آرگومان برای دو پارامتر ``e`` و ``f`` تنها با روش مقدار=نام مجاز خواهد بود (keyword-only):: + + def f(a, b, /, c, d, *, e, f) | diff --git a/source/lessons/l13-decorator-generator-and-lambda-with-python-functions.rst b/source/lessons/l13-decorator-generator-and-lambda-with-python-functions.rst index b66c724..99bee66 100644 --- a/source/lessons/l13-decorator-generator-and-lambda-with-python-functions.rst +++ b/source/lessons/l13-decorator-generator-and-lambda-with-python-functions.rst @@ -620,7 +620,11 @@ List Comprehensions توجه داشته باشید، چنانچه نتیجه اعمال List Comprehensions در هر نوبت شامل بیش از یک عضو باشد، می‌بایست مقادیر نتایج در داخل یک پرانتز قرار داده شوند (به صورت یک شی توپِل - tuple). -به نمونه ``[x,y) for x in a for y in b if x > 0)]`` و خروجی آن توجه نمایید. با توجه به این موضوع عبارت زیر از نظر مفسر پایتون نادرست می‌باشد:: +مانند:: + + [(x,y) for x in a for y in b if x > 0] + +با توجه به این موضوع عبارت زیر از نظر مفسر پایتون نادرست می‌باشد:: >>> [x,y for x in a for y in b] File "", line 1 @@ -638,7 +642,7 @@ List Comprehensions 'before' -اکنون List Comprehensions حوزه خود را دارد. [`توضیحات بیشتر `__] +اکنون List Comprehensions حوزه خود را دارد، در نتیجه مقدار متغیر خارج از آن بدون تغییر باقی می‌ماند. [`توضیحات بیشتر `__] diff --git a/source/lessons/l14-recursive-functions-and-memoization-in-python.rst b/source/lessons/l14-recursive-functions-and-memoization-in-python.rst index f4dfa7f..4205eb6 100644 --- a/source/lessons/l14-recursive-functions-and-memoization-in-python.rst +++ b/source/lessons/l14-recursive-functions-and-memoization-in-python.rst @@ -313,7 +313,11 @@ Function Attributes function_name.attribute_name = attribute_value -همچنین برای این منظور می‌توان از تابع آماده ``(setattr(object, name, value`` استفاده کرد [`اسناد پایتون `__]. این تابع سه آرگومان دریافت می‌کند؛ شی‌ای که می‌خواهید یک Attribute به آن اضافه کنید (در اینجا تابع)، نام (از نوع رشته - string) و مقدار Attribute مورد نظر:: +همچنین برای این منظور می‌توان از تابع آماده ``setattr`` استفاده کرد [`اسناد پایتون `__]. این تابع سه آرگومان دریافت می‌کند؛ شی‌ای که می‌خواهید یک Attribute به آن اضافه کنید (در اینجا تابع)، نام (از نوع رشته - string) و مقدار Attribute مورد نظر:: + + setattr(object, name, value) + +:: >>> setattr(foo, 'name', 'Saeid') >>> setattr(foo, 'age', 32) @@ -328,7 +332,12 @@ Function Attributes >>> foo.__dict__ {'is_done': True, 'name': 'Saeid', 'age': 32} -برای دریافت مقدار یک Attribute مشخص می‌توانید از تابع آماده ``([getattr(object, name[, default`` نیز استفاده کرد [`اسناد پایتون `__]. این تابع دو پارامتر اجباری (``object`` و ``name``) و یک پارامتر اختیاری (``default``) دارد. در صورتی که شی مورد نظر (در اینجا تابع) فاقد صفت مورد نظر باشد مقدار default (در صورت ارسال) برگردانده خواهد شد:: +برای دریافت مقدار یک Attribute مشخص می‌توانید از تابع آماده ``getattr`` نیز استفاده کرد [`اسناد پایتون `__]. این تابع دو پارامتر اجباری (``object`` و ``name``) و یک پارامتر اختیاری (``default``) دارد. در صورتی که شی مورد نظر (در اینجا تابع) فاقد صفت مورد نظر باشد مقدار default (در صورت ارسال) برگردانده خواهد شد:: + + + getattr(object, name[, default]) + +:: >>> getattr(foo, 'is_done') True @@ -402,7 +411,12 @@ eval >>> eval('math.sin(3.5+x) + 7.2') 6.494459674429608 -بر اساس تعریف موجود در اسناد پایتون ``([[eval(object[, globals[, locals``، این تابع شامل دو پارامتر ``globals`` و ``locals`` نیز می‌شود که ارسال آرگومان به آن‌ها اختیاری است. هر دو از نوع دیکشنری (dict) هستند که Scope یا حوزه‌های global و local کدی که باید اجرا شود (پارامتر یکم تابع) را ارايه می‌دهند:: +بر اساس تعریف موجود در اسناد پایتون ``eval``، این تابع شامل دو پارامتر ``globals`` و ``locals`` نیز می‌شود که ارسال آرگومان به آن‌ها اختیاری است. هر دو از نوع دیکشنری (dict) هستند که Scope یا حوزه‌های global و local کدی که باید اجرا شود (پارامتر یکم تابع) را ارايه می‌دهند:: + + + eval(object[, globals[, locals]]) + +:: >>> globals_env = {'x': 7, 'y': 10, 'birds': ['Parrot', 'Swallow', 'Albatross']} >>> locals_env = {} @@ -432,11 +446,6 @@ exec 3 4 -.. note:: - ``exec`` در پایتون نسخه 2x به صورت تابع تعریف نشده است و به صورت یک دستور به کار می‌رود [`اسناد پایتون `__]:: - - >>> exec 'import math; x=2; print(math.sin(3.5+x) + 7.2)' - 6.49445967443 این تابع همانند ``eval`` شامل دو پارامتر ``globals`` و ``locals`` نیز می‌شود:: @@ -449,12 +458,6 @@ exec Swallow Albatross -که البته در نسخه‌های 2x از سینتکس ``[[exec code[ in globals[,locals`` پیروی می‌شود:: - - >>> exec "for b in birds: print b" in globals_env, locals_env - Parrot - Swallow - Albatross compile diff --git a/source/lessons/l15-regular-expression-in-python.rst b/source/lessons/l15-regular-expression-in-python.rst index a9f2377..9cd94db 100644 --- a/source/lessons/l15-regular-expression-in-python.rst +++ b/source/lessons/l15-regular-expression-in-python.rst @@ -628,7 +628,9 @@ .. tip:: - می‌توان با استفاده از کاراکتر ``|`` در زمان ارسال آرگومان به flags، همزمان چندین مقدار را تنظیم نمود. به مانند: ``re.compile(pattern, re.I | re.M)`` + می‌توان با استفاده از کاراکتر ``|`` در زمان ارسال آرگومان به flags، همزمان چندین مقدار را تنظیم نمود. به مانند:: + + re.compile(pattern, re.I | re.M) پارامتر flags می‌تواند مقادیر دیگری نیز بپذیرد که برای مطالعه بیشتر می‌توانید به مستندات پایتون مراجعه نمایید. @@ -899,7 +901,11 @@ معکوس حالت قبل است. به این معنی که انطباق یک متن منوط به عدم برقرای شرط (انطباق) **قبل** از آن است. آن بخشی از الگو که بعد از این ساختار قرار دارد، تنها زمانی انطباق داده می‌شود که این ساختار منطبق **نباشد**. -* Yes/No Pattern ``(?(id/name)yes-pattern|no-pattern)`` +* Yes/No Pattern + + :: + + (?(id/name)yes-pattern|no-pattern) این ساختار نیز نوعی شرط گذاری است. به این صورت که می‌توان تعیین کرد بر اساس وضعیت انطباق گروه‌بندی‌های موجود (با ذکر نام گروه یا شماره اندیس آن) در الگو، یکی از الگوهای بله (yes-pattern) یا خیر (no-pattern) این ساختار بررسی شود:: diff --git a/source/lessons/l16-python-module-re.rst b/source/lessons/l16-python-module-re.rst index 057ecd0..0549bc5 100644 --- a/source/lessons/l16-python-module-re.rst +++ b/source/lessons/l16-python-module-re.rst @@ -52,8 +52,9 @@ تابع ``search`` ~~~~~~~~~~~~~~~~~~~~~~ +:: -``search(pattern, string, flags=0)`` + search(pattern, string, flags=0) تابع ``search`` به دنبال اولین انطباق pattern در string می‌گردد، در صورت موفقیت یک شی ``Match`` [`اسناد پایتون `__] و در غیر این صورت ``None`` برمی‌گرداند [`اسناد پایتون `__]:: @@ -104,7 +105,9 @@ در ادامه به بررسی برخی از متدهای مهم این شی می‌پردازیم: - * ``Match.group([group1, ...])`` [`اسناد پایتون `__] + * ``Match.group`` [`اسناد پایتون `__]:: + + Match.group([group1, ...]) این متد از شی ``Match``، گروه (های) تطبیق داده شده بر اساس الگو مورد نظر را برمی‌گرداند. این متد می‌تواند یک یا چند آرگومان عددی دریافت کند که معرف اندیس گروه مورد نظر می‌باشد. در حالت فراخوانی بدون آرگومان تمامی گروه‌های تطبیق داده شده به صورت یک مقدار رشته برگردانده می‌شود و در صورتی تنها یک مقدار به آن ارسال گردد، گروه تطبیق داده شده متناظر با آن اندیس (شمارش اندیس‌ها از یک است) در قالب یک شی رشته برگردانده می‌شود و در صورتی که بیش از یک اندیس به عنوان آرگومان ارسال گردد یک شی توپِل محتوی گروه‌های تطبیق داده شده برگردانده خواهد شد. چنانچه آرگومان ارسالی عددی منفی باشد یا اندیسی بالاتر از تعداد گروه‌های تطبیق داده شده باشد، یک استثنا ``IndexError`` رخ خواهد داد:: @@ -138,7 +141,9 @@ - * ``Match.groups(default=None)`` [`اسناد پایتون `__] + * ``Match.groups`` [`اسناد پایتون `__]:: + + Match.groups(default=None) این متد تمام گروه‌های تطبیق داده شده بر اساس الگو مورد نظر را در قالب یک شی توپِل برمی‌گرداند. این متد می‌تواند یک آرگومان بپذیرد که معرف مقدار پیش‌فرض برای جایگذاری گروه‌هایی است که در رشته ورودی تطبیق داده نشده‌اند، در حالت عادی (بدون ارسال آرگومان) این مقدار برابر با ``None`` است:: @@ -163,7 +168,9 @@ () - * ``Match.groupdict(default=None)`` [`اسناد پایتون `__] + * ``Match.groupdict`` [`اسناد پایتون `__]:: + + Match.groupdict(default=None) این متد یک شی دیکشنری (dict) حاوی حاصل تطابق تمام گروه‌های بانام (Named Groups) موجود در الگو را برمی‌گرداند:: @@ -201,7 +208,9 @@ - * ``Match.expand(template)`` [`اسناد پایتون `__] + * ``Match.expand`` [`اسناد پایتون `__]:: + + Match.expand(template) این متد حاصل انطباق را در قالب ``template`` جایگذاری کرده و یک شی رشته جدید برمی‌گرداند. قالب در اینجا یک رشته است که در آن می‌توان به حاصل انطباق گروهبندی‌های موجود در الگو ارجاع داد به این صورت کرد که می‌توان گروه‌های بی‌نام موجود در الگو را با استفاده از ارجاع عددی به شماره اندیس آن‌ها به مانند ``1\``، ``2\`` یا ```__] - این متد یک شی توپِل دوتایی از خروجی دو متد ``start`` و ``end`` را بر می‌گرداند و همانند آنها نیز یک آرگومان اختیاری دارد - نمونه خروجی: ``(m.start(group), m.end(group))``:: + این متد یک شی توپِل دوتایی از خروجی دو متد ``start`` و ``end`` را بر می‌گرداند و همانند آنها نیز یک آرگومان اختیاری دارد - نمونه خروجی:: + + (m.start(group), m.end(group)) + + :: >>> match = re.search(r"(\d+)\.(\d+)", "24.1632") >>> match.span() @@ -337,8 +350,9 @@ تابع ``match`` ~~~~~~~~~~~~~~~~~~~~~~ +:: -``match(pattern, string, flags=0)`` + match(pattern, string, flags=0) تابع ``match`` از ابتدای string انطباق pattern را انجام می‌دهد، در صورت موفقیت یک شی ``Match`` و در غیر این صورت ``None`` برمی‌گرداند [`اسناد پایتون `__]:: @@ -410,8 +424,9 @@ تابع ``fullmatch`` ~~~~~~~~~~~~~~~~~~~~~~ +:: -``fullmatch(pattern, string, flags=0)`` + fullmatch(pattern, string, flags=0) این تابع (``fullmatch``) چنانچه تمام string با pattern انطباق داشته باشد یک شی ``Match`` و در غیر این صورت ``None`` برمی‌گرداند [`اسناد پایتون `__] - این تابع از **پایتون نسخه 3.4** به بعد در دسترس است:: @@ -457,7 +472,9 @@ ~~~~~~~~~~~~~~~~~~~~~~ -``findall(pattern, string, flags=0)`` +:: + + findall(pattern, string, flags=0) این تابع (``findall``) حاصل تمام انطباق‌های ممکن pattern در string را در قالب یک لیست از رشته‌ها (نتایج) برمی‌گرداند [`اسناد پایتون `__]:: @@ -504,8 +521,9 @@ تابع ``finditer`` ~~~~~~~~~~~~~~~~~~~~~~ +:: -``finditer(pattern, string, flags=0)`` + finditer(pattern, string, flags=0) خروجی این تابع (``finditer``) یک شی ``iterator`` (شی تکرارکننده - درس نهم) است و حاصل هر بار پیمایش آن یک شی ``Match`` می‌باشد که همانند تابع ``findall`` از سمت چپ string شروع به دنبال انطباق pattern در آن می‌گردد و نتایج را به ترتیب برمی‌گرداند. [`اسناد پایتون `__]:: @@ -583,7 +601,9 @@ ~~~~~~~~~~~~~~~~~~~~~~ -``sub(pattern, repl, string, count=0, flags=0)`` +:: + + sub(pattern, repl, string, count=0, flags=0) این تابع (``sub``) حاصل انطباق‌های ممکن pattern در string را در repl جایگذاری می‌کند. این تابع همچنین دو پارامتر اختیاری دارد (flags و count)، پیش‌تر در مورد flags صحبت کردیم (که از نسخه 3.1 پایتون به این تابع اضافه شده است) و count نیز بیانگر ماکزیمم تعداد انطباقی است که می‌خواهیم در repl جایگذاری شود - این مقدار می‌بایست یک عدد مثبت باشد و مقدار صفر (مقدار پیش‌فرض) برای آن به معنی هر تعداد (نامحدود) خواهد بود. پارامتر repl در این تابع می‌تواند از نوع رشته یا تابع باشد، ابتدا حالت رشته را بررسی می‌کنیم [`اسناد پایتون `__]:: @@ -693,8 +713,9 @@ تابع ``subn`` ~~~~~~~~~~~~~~~~~~~~~~ +:: -``subn(pattern, repl, string, count=0, flags=0)`` + subn(pattern, repl, string, count=0, flags=0) عملکرد این تابع (``subn``) همانند تابع ``sub`` است. تنها تفاوت در خروجی آن‌هاست، تابع ``subn`` یک شی توپِل محتوی نتیجه و تعداد عملیات جایگذاری را برمی‌گرداند [`اسناد پایتون `__]:: @@ -735,8 +756,9 @@ تابع ``split`` ~~~~~~~~~~~~~~~~~~~~~~ +:: -``split(pattern, string, maxsplit=0, flags=0)`` + split(pattern, string, maxsplit=0, flags=0) این تابع (``split``) محتوای متن string را بر اساس الگو pattern جدا (split) می‌کند و خروجی آن یک شی لیست از رشته‌ها خواهد بود. این تابع همچنین علاوه بر پارامتر flags (که از نسخه 3.1 پایتون به این تابع اضافه شده است) یک پارامتر اختیاری دیگر نیز با نام maxsplit دارد که تعیین کننده ماکزیمم تعداد جداسازی خواهد بود - این مقدار می‌بایست یک عدد مثبت باشد و مقدار صفر (مقدار پیش‌فرض) برای آن به معنی هر تعداد (نامحدود) خواهد بود. [`اسناد پایتون `__]:: diff --git a/source/lessons/l23-traceback-and-exception-handling-in-python.rst b/source/lessons/l23-traceback-and-exception-handling-in-python.rst index eb3927c..9522166 100644 --- a/source/lessons/l23-traceback-and-exception-handling-in-python.rst +++ b/source/lessons/l23-traceback-and-exception-handling-in-python.rst @@ -172,7 +172,12 @@ با اصلاح این مشکل، برنامه از حالت ``SyntaxError`` خارج شده و کد اسکریپت ``sample.py`` با موفقیت به بایت‌کد ترجمه و به اجرا درمی‌آید. اکنون در زمان اجرا، با ``TypeError`` که پیش‌تر بررسی کردیم برخورد خواهیم کرد! -این نکته را نیز در نظر بگیرید - همانطور که اگر به خروجی‌های دقت کرده باشید حتما متوجه شده‌اید در دو حالت مربوط به گزارش خطای مربوط به ``SyntaxError`` خبری از سطر ``:Traceback (most recent call last)`` که در حالت خطای زمان اجرای ``TypeError`` مشاهده کردیم، نمی‌باشد. در واقع این سطر تنها در گزارش خطاهایی که پس از اجرای برنامه رخ دهند (Runtime errors)، نمایش داده خواهد شد. در زمان بررسی و ترجمه کد پایتون به بایت‌کد هرجا مشکلی باشد عملیات در همان نقطه متوقف می‌شود و صرفا گزارشی مبنی بر ابراز آن نقطه به برنامه‌نویس ارايه می‌گردد و نه چیزی که بتوان آن را یک گزارش ردیابی با Traceback نامید چرا که هنوز برنامه به اجرا درنیامده و اصلا نیازی به این کار نیست! +این نکته را نیز در نظر بگیرید - همانطور که اگر به خروجی‌های دقت کرده باشید حتما متوجه شده‌اید در دو حالت مربوط به گزارش خطای مربوط به ``SyntaxError`` خبری از سطر زیر که در حالت خطای زمان اجرای ``TypeError`` مشاهده کردیم، نمی‌باشد:: + + Traceback (most recent call last): + + +در واقع این سطر تنها در گزارش خطاهایی که پس از اجرای برنامه رخ دهند (Runtime errors)، نمایش داده خواهد شد. در زمان بررسی و ترجمه کد پایتون به بایت‌کد هرجا مشکلی باشد عملیات در همان نقطه متوقف می‌شود و صرفا گزارشی مبنی بر ابراز آن نقطه به برنامه‌نویس ارايه می‌گردد و نه چیزی که بتوان آن را یک گزارش ردیابی با Traceback نامید چرا که هنوز برنامه به اجرا درنیامده و اصلا نیازی به این کار نیست! .. _python-exception-handling: diff --git a/source/lessons/l25-python-module-datetime.rst b/source/lessons/l25-python-module-datetime.rst index 0227b90..55b5050 100644 --- a/source/lessons/l25-python-module-datetime.rst +++ b/source/lessons/l25-python-module-datetime.rst @@ -317,7 +317,9 @@ برای نمونه‌سازی از کلاس ``datetime.date`` می‌بایست سه Instance attribute آن را مقداردهی نماییم. این سه attribute عبارتند از: -* ``year``: از نوع ``int`` می‌باشد و مقداری برابر با سال مورد نظر خواهد داشت. این مقدار می‌بایست کمتر یا برابر ``datetime.MAXYEAR`` [`اسناد پایتون `__] و همچنین بیشتر یا برابر ``datetime.MINYEAR`` [`اسناد پایتون `__] باشد (``MINYEAR <= year <= MAXYEAR``). +* ``year``: از نوع ``int`` می‌باشد و مقداری برابر با سال مورد نظر خواهد داشت. این مقدار می‌بایست کمتر یا برابر ``datetime.MAXYEAR`` [`اسناد پایتون `__] و همچنین بیشتر یا برابر ``datetime.MINYEAR`` [`اسناد پایتون `__] باشد:: + + MINYEAR <= year <= MAXYEAR * ``month``: از نوع ``int`` می‌باشد و مقداری برابر با ماه مورد نظر خواهد داشت که می‌بایست عددی از بین اعداد ``1`` تا ``12`` باشد. @@ -391,7 +393,11 @@ | -**۵- با استفاده از کلاس متد** ``fromisocalendar(year, week, day)`` [`اسناد پایتون `__] از کلاس ``datetime.date`` (البته از نسخه 3.8 پایتون به بعد)، در تعریف این متد سه پارامتر از نوع ``int`` قرار داده شده است که از سمت چپ به ترتیب معرف سال، شماره هفته در سال و شماره روز از هفته مورد نظر می‌باشند. در واقع این متد معادل ISO calendar [`ویکی‌پدیا `__] یک تاریخ مشخص را دریافت و یک شی معادل از کلاس ``datetime.date`` را برمی‌گرداند. در این استاندارد، یک سال تقریبا شامل ۵۲ هفته می‌باشد که روزهای هر هفته نیز از روز دوشنبه (Monday) با شماره یک محاسبه می‌گردد (دوشنبه:۱، سه‌شنبه:۲، ... یکشنبه:۷):: +**۵- با استفاده از کلاس متد** ``fromisocalendar`` [`اسناد پایتون `__] از کلاس ``datetime.date`` (البته از نسخه 3.8 پایتون به بعد)، در تعریف این متد سه پارامتر از نوع ``int`` قرار داده شده است که از سمت چپ به ترتیب معرف سال، شماره هفته در سال و شماره روز از هفته مورد نظر می‌باشند. در واقع این متد معادل ISO calendar [`ویکی‌پدیا `__] یک تاریخ مشخص را دریافت و یک شی معادل از کلاس ``datetime.date`` را برمی‌گرداند. در این استاندارد، یک سال تقریبا شامل ۵۲ هفته می‌باشد که روزهای هر هفته نیز از روز دوشنبه (Monday) با شماره یک محاسبه می‌گردد (دوشنبه:۱، سه‌شنبه:۲، ... یکشنبه:۷):: + + fromisocalendar(year, week, day) + +:: >>> import datetime @@ -776,9 +782,13 @@ >>> t.isoformat('microseconds') '22:04:30.000300' -* **متد** ``utcoffset`` [`اسناد پایتون `__]: اگر پارامتر ``tzinfo`` برابر ``None`` باشد، مقدار ``None`` و در غیر این صورت مقدار ``self.tzinfo.utcoffset(None)`` را برمی‌گرداند. +* **متد** ``utcoffset`` [`اسناد پایتون `__]: اگر پارامتر ``tzinfo`` برابر ``None`` باشد، مقدار ``None`` و در غیر این صورت مقدار زیر را برمی‌گرداند:: + + self.tzinfo.utcoffset(None) -* **متد** ``tzname`` [`اسناد پایتون `__]: اگر پارامتر ``tzinfo`` برابر ``None`` باشد، مقدار ``None`` و در غیر این صورت مقدار ``self.tzinfo.tzname(None)`` را برمی‌گرداند. +* **متد** ``tzname`` [`اسناد پایتون `__]: اگر پارامتر ``tzinfo`` برابر ``None`` باشد، مقدار ``None`` و در غیر این صورت مقدار زیر را برمی‌گرداند:: + + self.tzinfo.tzname(None) :: @@ -911,7 +921,13 @@ naive / aware | -**۵- با استفاده از کلاس متد** ``(timestamp, tz=None)fromtimestamp`` [`اسناد پایتون `__]، در تعریف این متد یک پارامتر اختیاری (tz) از نوع ``tzinfo`` و یک پارامتر اجباری (timestamp) از نوع ``int`` قرار داده شده است. این متد معادل POSIX timestamp [`ویکی‌پدیا `__] یک تاریخ مشخص را دریافت و یک شی معادل از کلاس ``datetime.datetime`` را برمی‌گرداند. این مقدار برابر شمارش تعداد ثانیه‌ها به منطقه زمانی UTC از ساعت ۰۰:۰۰:۰۰ یکم ژانویه سال ۱۹۷۰ میلادی تا تاریخ مورد نظر می‌باشد. :: +**۵- با استفاده از کلاس متد** ``fromtimestamp`` [`اسناد پایتون `__]، در تعریف این متد یک پارامتر اختیاری (tz) از نوع ``tzinfo`` و یک پارامتر اجباری (timestamp) از نوع ``int`` قرار داده شده است. این متد معادل POSIX timestamp [`ویکی‌پدیا `__] یک تاریخ مشخص را دریافت و یک شی معادل از کلاس ``datetime.datetime`` را برمی‌گرداند. این مقدار برابر شمارش تعداد ثانیه‌ها به منطقه زمانی UTC از ساعت ۰۰:۰۰:۰۰ یکم ژانویه سال ۱۹۷۰ میلادی تا تاریخ مورد نظر می‌باشد. :: + + + fromtimestamp(timestamp, tz=None) + + +:: >>> import datetime @@ -931,7 +947,12 @@ naive / aware | -**۶- با استفاده از کلاس متد** ``(timestamp)utcfromtimestamp`` [`اسناد پایتون `__]، خروجی این متد نیز همانند خروجی کلاس متد ``fromtimestamp(timestamp, datetime.timezone.utc)`` بوده و معادل POSIX timestamp یک تاریخ مشخص را دریافت و یک شی معادل از کلاس ``datetime.datetime`` را بر مبنای منطقه زمانی UTC برمی‌گرداند. ولی با این تفاوت که مقدار پارامتر ``tzinfo`` آن برابر ``None`` خواهد بود:: +**۶- با استفاده از کلاس متد** ``(timestamp)utcfromtimestamp`` [`اسناد پایتون `__]، خروجی این متد نیز همانند خروجی کلاس متد زیر بوده و معادل POSIX timestamp یک تاریخ مشخص را دریافت و یک شی معادل از کلاس ``datetime.datetime`` را بر مبنای منطقه زمانی UTC برمی‌گرداند. ولی با این تفاوت که مقدار پارامتر ``tzinfo`` آن برابر ``None`` خواهد بود:: + + + fromtimestamp(timestamp, datetime.timezone.utc) + +:: >>> import datetime @@ -953,7 +974,12 @@ naive / aware | -**۸- با استفاده از کلاس متد** ``fromisocalendar(year, week, day)`` [`اسناد پایتون `__] (البته از نسخه 3.8 پایتون به بعد)، در تعریف این متد سه پارامتر از نوع ``int`` قرار داده شده است که از سمت چپ به ترتیب معرف سال، شماره هفته در سال و شماره روز از هفته مورد نظر می‌باشند. در واقع این متد معادل ISO calendar [`ویکی‌پدیا `__] یک تاریخ مشخص را دریافت و یک شی معادل از کلاس ``datetime.datetime`` را برمی‌گرداند. در این استاندارد، یک سال تقریبا شامل ۵۲ هفته می‌باشد که روزهای هر هفته نیز از روز دوشنبه (Monday) با شماره یک محاسبه می‌گردد (دوشنبه:۱، سه‌شنبه:۲، ... یکشنبه:۷). باید توجه داشت مقادیر مربوط به ساعت همانند minute ،hour یا ``tzinfo`` شی ایجاد شده برابر ``None`` خواهد بود:: +**۸- با استفاده از کلاس متد** ``fromisocalendar`` [`اسناد پایتون `__] (البته از نسخه 3.8 پایتون به بعد)، در تعریف این متد سه پارامتر از نوع ``int`` قرار داده شده است که از سمت چپ به ترتیب معرف سال، شماره هفته در سال و شماره روز از هفته مورد نظر می‌باشند. در واقع این متد معادل ISO calendar [`ویکی‌پدیا `__] یک تاریخ مشخص را دریافت و یک شی معادل از کلاس ``datetime.datetime`` را برمی‌گرداند. در این استاندارد، یک سال تقریبا شامل ۵۲ هفته می‌باشد که روزهای هر هفته نیز از روز دوشنبه (Monday) با شماره یک محاسبه می‌گردد (دوشنبه:۱، سه‌شنبه:۲، ... یکشنبه:۷). باید توجه داشت مقادیر مربوط به ساعت همانند minute ،hour یا ``tzinfo`` شی ایجاد شده برابر ``None`` خواهد بود:: + + + fromisocalendar(year, week, day) + +:: >>> import datetime >>> datetime.datetime.fromisocalendar(2021, 14, 3) # Wednesday, April 7, 2021