|
132 | 132 |
|
133 | 133 | اکنون میدانیم که برای وارد کردن یک ماژول به یک اسکریپت (یا ماژولی دیگر) از دستور import استفاده میگردد. پس از آن، برای دستیابی اجزای داخل آن مانند فراخوانی یک تابع نیز میبایست از الگوی «نام ماژول + نقطه + نام تابع مورد نظر» استفاده گردد. |
134 | 134 |
|
135 | | -مثالی دیگر - ``sys`` یکی از ماژولهای مهم پایتون است؛ این ماژول امکان دسترسی به برخی از متغیرهای مورد استفاده مفسر (در زمان اجرا) و همچنین تابعهایی که با مفسر در ارتباط هستند را فراهم میآورد [`اسناد پایتون <http://docs.python.org/3/library/sys.html>`__]: |
| 135 | +و اگر از روش ``... from ... import`` استفاده کنیم: در این صورت میتوان به جای کل ماژول، تنها اجزای مورد نیاز خود را import نماییم و دیگر نیازی به ذکر نام ماژول نیز نخواهد بود:: |
| 136 | + |
| 137 | + >>> from math import sqrt, pow, radians, sin |
| 138 | + >>> sqrt(36) |
| 139 | + 6.0 |
| 140 | + >>> pow(3, 2) |
| 141 | + 9.0 |
| 142 | + >>> radians(90) |
| 143 | + 1.5707963267948966 |
| 144 | + >>> sin(_) |
| 145 | + 1.0 |
| 146 | + |
| 147 | +مثالی دیگر - ``sys`` یکی از ماژولهای مهم پایتون است؛ این ماژول امکان دسترسی به برخی از متغیرهای مورد استفاده توسط مفسر (در زمان اجرا) و همچنین تابعهایی که با مفسر در ارتباط هستند را فراهم میآورد [`اسناد پایتون <http://docs.python.org/3/library/sys.html>`__]: |
136 | 148 |
|
137 | 149 | .. code-block:: python |
138 | 150 | |
|
150 | 162 | >>> sys.getdefaultencoding() |
151 | 163 | 'utf-8' |
152 | 164 |
|
153 | | -دستور ``()sys.exit`` نیز موجب توقف اجرا (در اینجا: خروج از حالت تعاملی پایتون) میگردد. برای کنترل خطاها کاربرد دارد و همچنین میتوان پیامی مرتبط را به خروجی فرستاد (معمولا گزارش رویدادی که موجب اتمام ناگهانی برنامه شده است):: |
| 165 | +یا: |
| 166 | + |
| 167 | +.. code-block:: shell |
| 168 | + |
| 169 | + >>> from sys import version, version_info, platform, getdefaultencoding |
| 170 | + |
| 171 | + >>> version |
| 172 | + '3.4.2 (default, Jan 25 2015, 20:02:16) \n[GCC 4.9.2 20141101 (Red Hat 4.9.2-1)]' |
| 173 | + |
| 174 | + >>> version_info |
| 175 | + sys.version_info(major=3, minor=4, micro=2, releaselevel='final', serial=0) |
| 176 | + |
| 177 | + >>> platform |
| 178 | + 'linux' |
| 179 | + |
| 180 | + >>> getdefaultencoding() |
| 181 | + 'utf-8' |
| 182 | +
|
| 183 | +دستور ``()sys.exit`` نیز موجب توقف اجرا (در اینجا: خروج از حالت تعاملی پایتون) میگردد. برای کنترل خطاها کاربرد دارد و همچنین میتوان پیامی مرتبط را به خروجی فرستاد (معمولا گزارش رویدادی که موجب اتمام ناگهانی برنامه شده است): |
| 184 | + |
| 185 | +.. code-block:: shell |
154 | 186 |
|
155 | 187 | >>> import sys |
156 | 188 | |
|
159 | 191 | |
160 | 192 | user> |
161 | 193 |
|
| 194 | +یا |
| 195 | + |
| 196 | +.. code-block:: shell |
| 197 | +
|
| 198 | + >>> from sys import exit as bye |
| 199 | + |
| 200 | + >>> bye("Error: Goodbye! :| ") |
| 201 | + Error: Goodbye! :| |
| 202 | + |
| 203 | + user> |
| 204 | +
|
| 205 | +
|
| 206 | +با استفاده از ``as`` میتوان برای اجزای import شده (به هر دو روش)، یک نام دلخواه تنظیم کرد. این ویژگی در زمانی که نام اصلی طولانی بوده یا با یکی از اجزای داخل ماژول همنام باشد (برای جلوگیری از تداخل) کاربرد دارد. |
| 207 | + |
162 | 208 |
|
163 | 209 | .. _python-help: |
164 | 210 |
|
|
404 | 450 | ['', '/home/user/Documents/me', '/usr/local/lib/python34.zip', '/usr/local/lib/python3.4', '/usr/local/lib/python3.4/plat-linux', '/usr/local/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/site-packages'] |
405 | 451 | >>> |
406 | 452 |
|
407 | | - چند درس جلوتر خواهید آموخت که مقدار ``sys.path`` در واقع یک شی از نوع ``list`` است؛ ``append`` و ``insert`` نیز تابعهایی [#f4]_ هستند که توسط یک شی از نوع ``list`` ارایه میگردد. در این مرحله تنها به یاد داشته باشید که موقعیتها در یک شی از نوع ``list`` از عدد صفر شمارهگذاری میگردند. |
| 453 | + چند درس جلوتر خواهید آموخت که مقدار ``sys.path`` در واقع یک شی از نوع ``list`` است؛ ``append`` و ``insert`` نیز تابعهایی هستند که توسط یک شی از نوع ``list`` ارایه میگردد. در این مرحله تنها به یاد داشته باشید که موقعیتها در یک شی از نوع ``list`` از عدد صفر شمارهگذاری میگردند. |
408 | 454 |
|
409 | 455 | .. rubric:: دسته دوم: |
410 | 456 |
|
|
437 | 483 | معمولا کدهای اسکریپت به گونهای نوشته میشوند که اجرای آنها وابسته به اجرای یک تابع اصلی باشد که معمولا ``()main`` نامیده میشود که در انتها بتوان با قرار دادن شرط برابری مقدار ``__name__`` با ``'__main__'`` برای اجرای تابع یاد شده، از اجرای کدهای مورد نظر تنها در حالت اجرا به صورت اسکریپت (و نه در زمان import) مطمئن شد. |
438 | 484 |
|
439 | 485 | .. code-block:: python |
440 | | - :linenos: |
441 | 486 | |
442 | 487 | def main(): |
443 | 488 | print("this runs only when executed directly") |
|
455 | 500 |
|
456 | 501 |
|
457 | 502 | .. code-block:: python |
458 | | - :linenos: |
459 | 503 | |
460 | 504 | import sys |
461 | | - |
462 | | - print(sys.argv) |
463 | | - print(sys.argv[0]) |
464 | | - print(sys.argv[1]) |
465 | | - print(sys.argv[2]) |
| 505 | +
|
| 506 | + def main(): |
| 507 | + print(sys.argv) |
| 508 | + print(sys.argv[0]) |
| 509 | + print(sys.argv[1]) |
| 510 | + print(sys.argv[2]) |
| 511 | +
|
| 512 | + if __name__ == '__main__': |
| 513 | + main() |
| 514 | +
|
| 515 | +.. tip:: |
| 516 | + از آنجا که عملکرد و خروجی مورد نظر این ماژول تنها در حالت اجرای اسکریپت است (دریافت آرگومانها) و نه import آن در برنامه، بنابراین با بررسی نام ماژول در زمان اجرا از این موضوع اطمینان حاصل کردیم. |
| 517 | + |
466 | 518 |
|
467 | 519 | اسکریپت بالا را با ارسال دو آرگومان ``arg_1`` و ``arg_2`` اجرا مینماییم: |
468 | 520 |
|
469 | 521 | :: |
470 | 522 |
|
471 | | - user> python /home/user/Documents/script-argv.py arg_1 arg_2 |
472 | | - |
| 523 | + user> cd /home/user/Documents |
| 524 | + |
| 525 | + user> python script.py arg_1 arg_2 |
473 | 526 | ['/home/user/Documents/script-argv.py', 'arg_1', 'arg_2'] |
474 | 527 | /home/user/Documents/script-argv.py |
475 | 528 | arg_1 |
|
483 | 536 | ['-c', '2'] |
484 | 537 |
|
485 | 538 |
|
| 539 | + |
| 540 | +.. admonition:: تمرین |
| 541 | + |
| 542 | + یک اسکریپت ایجاد نمایید که دو پارامتر نام و سن را به صورت آرگومانهای اسکریپت دریافت و بر روی خروجی نمایش دهد. |
| 543 | + |
| 544 | + نمونه دستور اجرای اسکریپت: |
| 545 | + |
| 546 | + ``python script.py "Hideyoshi Nagachika" 19`` |
| 547 | + |
| 548 | + نمونه خروجی اسکریپت: |
| 549 | + |
| 550 | + ``Name: Hideyoshi Nagachika - Age: 19`` |
| 551 | + |
| 552 | + |
486 | 553 | .. _lesson-04-footer: |
487 | 554 |
|
488 | 555 | پینوشت |
489 | 556 | ------- |
490 | 557 |
|
491 | | -.. [#f1] «عبارت» (Expression) یک قطعه از سینتکس است که میتواند به یک مقدار ارزیابی گردد، عبارت شامل «کلمههای کلیدی» (Keywords) نمیشود و «دستور» (Statement) بخشی از یک بلاک کد است که شامل کلمههای کلیدی بوده و کاری را به انجام میرساند. [کلمههای کلیدی در آینده بررسی میشوند.] |
| 558 | +.. [#f1] «عبارت» (Expression) یک قطعه از کد است که میتواند به یک مقدار ارزیابی گردد، عبارت شامل «کلمههای کلیدی» (Keywords) نمیشود و «دستور» (Statement) بخشی از یک بلاک کد است که شامل کلمههای کلیدی بوده و کاری را به انجام میرساند. [کلمههای کلیدی در آینده بررسی میشوند.] |
492 | 559 |
|
493 | 560 | .. [#f2] درست این بود که به جای واژه «مقدار» (Value) از «شی» (Object) استفاده میشد؛ چرا که هر چیزی در پایتون یک شی است. به عنوان نمونه، عدد 5 یک شی از کلاس «اعداد صحیح» (Integers) میباشد. |
494 | 561 |
|
495 | 562 | .. [#f3] توضیحی است که در ابتدای تابعها، کلاسها و ماژولها میآید و توسط مفسر نادیده گرفته نمیشود. [docstring در آینده بررسی میشود] |
496 | 563 |
|
497 | | -.. [#f4] واژه «تابع» در مفهوم شی، مناسب نیست. در تعریف شیگرا از واژه «متد» (Method) به جای «تابع» (Function) استفاده میگردد؛ ولی در این مرحله که هنوز به شیگرایی پرداخته نشده است، ترجیح داده شد تا از واژه «تابع» استفاده گردد. |
498 | | -
|
499 | 564 |
|
500 | 565 |
|
501 | 566 | | |
|
504 | 569 |
|
505 | 570 | :emoji-size:`😊` امیدوارم مفید بوده باشه |
506 | 571 |
|
507 | | -`لطفا دیدگاه و سوالهای مرتبط با این درس خود را در کدرز مطرح نمایید. <http://coderz.ir/python-tutorial-interactive-mode/>`_ |
508 | | - |
509 | 572 |
|
0 commit comments