# SOME DESCRIPTIVE TITLE. # Copyright (C) 2001 Python Software Foundation # This file is distributed under the same license as the Python package. # FIRST AUTHOR , YEAR. # # Translators: # Alireza Shabani (Revisto) , 2025 # Sepehr Rasouli , 2026 # #, fuzzy msgid "" msgstr "" "Project-Id-Version: Python 3.14\n" "Report-Msgid-Bugs-To: \n" "POT-Creation-Date: 2026-07-25 12:59+0330\n" "PO-Revision-Date: 2026-08-12 19:03+0330\n" "Last-Translator: Sepehr Rasouli , 2026\n" "Language-Team: Persian (https://github.com/revisto/python-docs-fa/)\n" "Language: fa\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Poedit 3.6\n" #: ../../tutorial/modules.rst:5 msgid "Modules" msgstr "ماژول‌ها" #: ../../tutorial/modules.rst:7 msgid "" "If you quit from the Python interpreter and enter it again, the definitions " "you have made (functions and variables) are lost. Therefore, if you want to " "write a somewhat longer program, you are better off using a text editor to " "prepare the input for the interpreter and running it with that file as input " "instead. This is known as creating a *script*. As your program gets " "longer, you may want to split it into several files for easier maintenance. " "You may also want to use a handy function that you've written in several " "programs without copying its definition into each program." msgstr "" "اگر از مفسر پایتون خارج شوید و دوباره وارد آن شوید، تعریف‌هایی که ایجاد " "کرده‌اید (تابع‌ها و متغیرها) از بین می‌روند. بنابراین، اگر می‌خواهید برنامه‌ای " "نسبتاً طولانی‌تر بنویسید، بهتر است به‌جای آن از یک ویرایشگر متن برای آماده‌سازی " "ورودی مفسر استفاده کنید و آن را با استفاده از آن فایل به‌عنوان ورودی اجرا " "کنید. این کار با نام ایجاد یک *اسکریپت* شناخته می‌شود. هرچه برنامهٔ شما " "طولانی‌تر شود، ممکن است بخواهید آن را برای نگهداری آسان‌تر به چندین فایل تقسیم " "کنید. همچنین ممکن است بخواهید از یک تابع کاربردی که در چندین برنامه " "نوشته‌اید، بدون کپی کردن تعریف آن در هر برنامه استفاده کنید." #: ../../tutorial/modules.rst:16 msgid "" "To support this, Python has a way to put definitions in a file and use them " "in a script or in an interactive instance of the interpreter. Such a file is " "called a *module*; definitions from a module can be *imported* into other " "modules or into the *main* module (the collection of variables that you have " "access to in a script executed at the top level and in calculator mode)." msgstr "" "برای پشتیبانی از این کار، پایتون روشی دارد که به شما اجازه می‌دهد تعریف‌ها را " "در یک فایل قرار دهید و از آن‌ها در یک اسکریپت یا در یک نمونهٔ تعاملی از مفسر " "استفاده کنید. چنین فایلی یک *ماژول* نامیده می‌شود؛ تعریف‌های یک ماژول را " "می‌توان به ماژول‌های دیگر یا به ماژول *اصلی* (*main*) (مجموعه‌ای از متغیرهایی " "که در یک اسکریپت اجراشده در سطح بالا و در حالت ماشین‌حساب به آن‌ها دسترسی " "دارید) *وارد* کرد." #: ../../tutorial/modules.rst:22 msgid "" "A module is a file containing Python definitions and statements. The file " "name is the module name with the suffix :file:`.py` appended. Within a " "module, the module's name (as a string) is available as the value of the " "global variable ``__name__``. For instance, use your favorite text editor " "to create a file called :file:`fibo.py` in the current directory with the " "following contents::" msgstr "" "یک ماژول فایلی است که شامل تعریف‌ها و دستورهای پایتون است. نام فایل، نام " "ماژول به‌همراه پسوند :file:`.py` است. درون یک ماژول، نام ماژول (به‌صورت یک " "رشته) به‌عنوان مقدار متغیر سراسری ``__name__`` در دسترس است. برای نمونه، با " "استفاده از ویرایشگر متن دلخواه خود فایلی با نام :file:`fibo.py` را در پوشهٔ " "جاری ایجاد کنید که محتوای زیر را داشته باشد::" #: ../../tutorial/modules.rst:28 msgid "" "# Fibonacci numbers module\n" "\n" "def fib(n):\n" " \"\"\"Write Fibonacci series up to n.\"\"\"\n" " a, b = 0, 1\n" " while a < n:\n" " print(a, end=' ')\n" " a, b = b, a+b\n" " print()\n" "\n" "def fib2(n):\n" " \"\"\"Return Fibonacci series up to n.\"\"\"\n" " result = []\n" " a, b = 0, 1\n" " while a < n:\n" " result.append(a)\n" " a, b = b, a+b\n" " return result" msgstr "" "# Fibonacci numbers module\n" "\n" "def fib(n):\n" " \"\"\"Write Fibonacci series up to n.\"\"\"\n" " a, b = 0, 1\n" " while a < n:\n" " print(a, end=' ')\n" " a, b = b, a+b\n" " print()\n" "\n" "def fib2(n):\n" " \"\"\"Return Fibonacci series up to n.\"\"\"\n" " result = []\n" " a, b = 0, 1\n" " while a < n:\n" " result.append(a)\n" " a, b = b, a+b\n" " return result" #: ../../tutorial/modules.rst:47 msgid "" "Now enter the Python interpreter and import this module with the following " "command::" msgstr "اکنون وارد مفسر پایتون شوید و این ماژول را با دستور زیر وارد کنید::" #: ../../tutorial/modules.rst:50 msgid ">>> import fibo" msgstr ">>> import fibo" #: ../../tutorial/modules.rst:52 msgid "" "This does not add the names of the functions defined in ``fibo`` directly " "to the current :term:`namespace` (see :ref:`tut-scopes` for more details); " "it only adds the module name ``fibo`` there. Using the module name you can " "access the functions::" msgstr "" "این کار نام تابع‌هایی را که در ``fibo`` تعریف شده‌اند، مستقیماً به :term:`فضای " "نام ` فعلی اضافه نمی‌کند (برای جزئیات بیشتر به :ref:`tut-scopes` مراجعه کنید)؛ " "بلکه فقط نام ماژول ``fibo`` را به آن اضافه می‌کند. با استفاده از نام ماژول " "می‌توانید به تابع‌ها دسترسی پیدا کنید::" #: ../../tutorial/modules.rst:57 msgid "" ">>> fibo.fib(1000)\n" "0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987\n" ">>> fibo.fib2(100)\n" "[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]\n" ">>> fibo.__name__\n" "'fibo'" msgstr "" ">>> fibo.fib(1000)\n" "0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987\n" ">>> fibo.fib2(100)\n" "[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]\n" ">>> fibo.__name__\n" "'fibo'" #: ../../tutorial/modules.rst:64 msgid "" "If you intend to use a function often you can assign it to a local name::" msgstr "" "اگر قصد دارید از یک تابع به‌طور مکرر استفاده کنید، می‌توانید آن را به یک نام " "محلی اختصاص دهید::" #: ../../tutorial/modules.rst:66 msgid "" ">>> fib = fibo.fib\n" ">>> fib(500)\n" "0 1 1 2 3 5 8 13 21 34 55 89 144 233 377" msgstr "" ">>> fib = fibo.fib\n" ">>> fib(500)\n" "0 1 1 2 3 5 8 13 21 34 55 89 144 233 377" #: ../../tutorial/modules.rst:74 msgid "More on Modules" msgstr "بیشتر درباره‌ی ماژول‌ها" #: ../../tutorial/modules.rst:76 msgid "" "A module can contain executable statements as well as function definitions. " "These statements are intended to initialize the module. They are executed " "only the *first* time the module name is encountered in an import statement. " "[#]_ (They are also run if the file is executed as a script.)" msgstr "" "یک ماژول می‌تواند علاوه بر تعریف تابع‌ها، شامل دستورهای اجرایی نیز باشد. هدف " "از این دستورها مقداردهی اولیهٔ ماژول است. این دستورها فقط در *اولین* باری که " "نام ماژول در یک دستور import دیده می‌شود اجرا می‌شوند. [#]_ (همچنین اگر فایل " "به‌عنوان یک اسکریپت اجرا شود، این دستورها اجرا خواهند شد.)" #: ../../tutorial/modules.rst:81 msgid "" "Each module has its own private namespace, which is used as the global " "namespace by all functions defined in the module. Thus, the author of a " "module can use global variables in the module without worrying about " "accidental clashes with a user's global variables. On the other hand, if you " "know what you are doing you can touch a module's global variables with the " "same notation used to refer to its functions, ``modname.itemname``." msgstr "" "هر ماژول فضای نام خصوصی خود را دارد که توسط تمام تابع‌های تعریف‌شده در ماژول، " "به‌عنوان فضای نام سراسری استفاده می‌شود. بنابراین، نویسندهٔ یک ماژول می‌تواند " "بدون نگرانی از تداخل تصادفی با متغیرهای سراسری کاربر، از متغیرهای سراسری " "درون ماژول استفاده کند. از طرف دیگر، اگر بدانید چه کاری انجام می‌دهید، " "می‌توانید با همان نگارشی که برای ارجاع به تابع‌های ماژول استفاده می‌کنید، به " "متغیرهای سراسری ماژول دسترسی پیدا کنید: ``modname.itemname``." #: ../../tutorial/modules.rst:88 msgid "" "Modules can import other modules. It is customary but not required to place " "all :keyword:`import` statements at the beginning of a module (or script, " "for that matter). The imported module names, if placed at the top level of " "a module (outside any functions or classes), are added to the module's " "global namespace." msgstr "" "ماژول‌ها می‌توانند ماژول‌های دیگری را وارد کنند. معمول است، اما اجباری نیست، که " "تمام دستورهای :keyword:`import` در ابتدای یک ماژول (یا به‌طور کلی یک اسکریپت) " "قرار داده شوند. نام ماژول‌های واردشده، اگر در سطح بالای یک ماژول (خارج از هر " "تابع یا کلاس) قرار گرفته باشند، به فضای نام سراسری ماژول اضافه می‌شوند." #: ../../tutorial/modules.rst:93 msgid "" "There is a variant of the :keyword:`import` statement that imports names " "from a module directly into the importing module's namespace. For example::" msgstr "" "گونه‌ای از دستور :keyword:`import` وجود دارد که نام‌ها را از یک ماژول مستقیماً " "به فضای نام ماژولی که عمل وارد کردن را انجام می‌دهد وارد می‌کند. برای مثال::" #: ../../tutorial/modules.rst:96 msgid "" ">>> from fibo import fib, fib2\n" ">>> fib(500)\n" "0 1 1 2 3 5 8 13 21 34 55 89 144 233 377" msgstr "" ">>> from fibo import fib, fib2\n" ">>> fib(500)\n" "0 1 1 2 3 5 8 13 21 34 55 89 144 233 377" #: ../../tutorial/modules.rst:100 msgid "" "This does not introduce the module name from which the imports are taken in " "the local namespace (so in the example, ``fibo`` is not defined)." msgstr "" "این کار نام ماژولی را که وارد کردن از آن انجام شده است، به فضای نام محلی " "اضافه نمی‌کند (بنابراین در مثال، ``fibo`` تعریف نشده است)." #: ../../tutorial/modules.rst:103 msgid "There is even a variant to import all names that a module defines::" msgstr "" "همچنین گونه‌ای وجود دارد که تمام نام‌هایی را که یک ماژول تعریف می‌کند وارد " "می‌کند::" #: ../../tutorial/modules.rst:105 msgid "" ">>> from fibo import *\n" ">>> fib(500)\n" "0 1 1 2 3 5 8 13 21 34 55 89 144 233 377" msgstr "" ">>> from fibo import *\n" ">>> fib(500)\n" "0 1 1 2 3 5 8 13 21 34 55 89 144 233 377" #: ../../tutorial/modules.rst:109 msgid "" "This imports all names except those beginning with an underscore (``_``). In " "most cases Python programmers do not use this facility since it introduces " "an unknown set of names into the interpreter, possibly hiding some things " "you have already defined." msgstr "" "این دستور تمام نام‌ها را به‌جز نام‌هایی که با یک زیرخط (``_``) شروع می‌شوند وارد " "می‌کند. در بیشتر موارد، برنامه‌نویسان پایتون از این قابلیت استفاده نمی‌کنند، " "زیرا مجموعه‌ای نامشخص از نام‌ها را وارد مفسر می‌کند و ممکن است برخی مواردی را " "که قبلاً تعریف کرده‌اید پنهان کند." #: ../../tutorial/modules.rst:114 msgid "" "Note that in general the practice of importing ``*`` from a module or " "package is frowned upon, since it often causes poorly readable code. " "However, it is okay to use it to save typing in interactive sessions." msgstr "" "توجه داشته باشید که به‌طور کلی، وارد کردن ``*`` از یک ماژول یا بسته عملی " "نامطلوب محسوب می‌شود، زیرا اغلب باعث ایجاد کدی با خوانایی ضعیف می‌شود. " "بااین‌حال، استفاده از آن برای کاهش تایپ در نشست‌های تعاملی اشکالی ندارد." #: ../../tutorial/modules.rst:118 msgid "" "If the module name is followed by :keyword:`!as`, then the name " "following :keyword:`!as` is bound directly to the imported module." msgstr "" "اگر نام ماژول پس از :keyword:`!as` قرار گیرد، نامی که پس از :keyword:`!" "as` می‌آید مستقیماً به ماژول واردشده متصل می‌شود." #: ../../tutorial/modules.rst:123 msgid "" ">>> import fibo as fib\n" ">>> fib.fib(500)\n" "0 1 1 2 3 5 8 13 21 34 55 89 144 233 377" msgstr "" ">>> import fibo as fib\n" ">>> fib.fib(500)\n" "0 1 1 2 3 5 8 13 21 34 55 89 144 233 377" #: ../../tutorial/modules.rst:127 msgid "" "This is effectively importing the module in the same way that ``import " "fibo`` will do, with the only difference of it being available as ``fib``." msgstr "" "این کار در عمل همانند وارد کردن ماژول به روشی که ``import fibo`` انجام می‌دهد " "است، با این تفاوت که ماژول به‌صورت ``fib`` در دسترس خواهد بود." #: ../../tutorial/modules.rst:130 msgid "" "It can also be used when utilising :keyword:`from` with similar effects::" msgstr "" "همچنین می‌توان هنگام استفاده از :keyword:`from` از آن با اثر مشابهی استفاده " "کرد::" #: ../../tutorial/modules.rst:132 msgid "" ">>> from fibo import fib as fibonacci\n" ">>> fibonacci(500)\n" "0 1 1 2 3 5 8 13 21 34 55 89 144 233 377" msgstr "" ">>> from fibo import fib as fibonacci\n" ">>> fibonacci(500)\n" "0 1 1 2 3 5 8 13 21 34 55 89 144 233 377" #: ../../tutorial/modules.rst:139 msgid "" "For efficiency reasons, each module is only imported once per interpreter " "session. Therefore, if you change your modules, you must restart the " "interpreter -- or, if it's just one module you want to test interactively, " "use :func:`importlib.reload`, e.g. ``import importlib; " "importlib.reload(modulename)``." msgstr "" "به دلایل کارایی، هر ماژول در هر نشست مفسر فقط یک بار وارد می‌شود. بنابراین، " "اگر ماژول‌های خود را تغییر دهید، باید مفسر را دوباره راه‌اندازی کنید؛ یا اگر " "فقط یک ماژول را می‌خواهید به‌صورت تعاملی آزمایش کنید، " "از :func:`importlib.reload` استفاده کنید، برای مثال: ``import importlib; " "importlib.reload(modulename)``." #: ../../tutorial/modules.rst:149 msgid "Executing modules as scripts" msgstr "اجرای ماژول‌ها به‌عنوان اسکریپت" #: ../../tutorial/modules.rst:151 msgid "When you run a Python module with ::" msgstr "وقتی یک ماژول پایتون را با استفاده از این دستور اجرا می‌کنید ::" #: ../../tutorial/modules.rst:153 msgid "python fibo.py " msgstr "python fibo.py " #: ../../tutorial/modules.rst:155 msgid "" "the code in the module will be executed, just as if you imported it, but " "with the ``__name__`` set to ``\"__main__\"``. That means that by adding " "this code at the end of your module::" msgstr "" "کد موجود در ماژول اجرا خواهد شد، درست همانند زمانی که آن را وارد کرده‌اید، " "اما مقدار ``__name__`` برابر با ``\"__main__\"`` تنظیم می‌شود. این یعنی با افزودن " "کد زیر در انتهای ماژول خود::" #: ../../tutorial/modules.rst:159 msgid "" "if __name__ == \"__main__\":\n" " import sys\n" " fib(int(sys.argv[1]))" msgstr "" "if __name__ == \"__main__\":\n" " import sys\n" " fib(int(sys.argv[1]))" #: ../../tutorial/modules.rst:163 msgid "" "you can make the file usable as a script as well as an importable module, " "because the code that parses the command line only runs if the module is " "executed as the \"main\" file:" msgstr "" "می‌توانید فایل را هم به‌عنوان یک اسکریپت و هم به‌عنوان یک ماژول قابل وارد کردن " "استفاده کنید، زیرا کدی که خط فرمان را تجزیه می‌کند فقط زمانی اجرا می‌شود که " "ماژول به‌عنوان فایل «اصلی» اجرا شود:" #: ../../tutorial/modules.rst:167 msgid "" "$ python fibo.py 50\n" "0 1 1 2 3 5 8 13 21 34" msgstr "" "$ python fibo.py 50\n" "0 1 1 2 3 5 8 13 21 34" #: ../../tutorial/modules.rst:172 msgid "If the module is imported, the code is not run::" msgstr "اگر ماژول وارد شود، کد اجرا نمی‌شود::" #: ../../tutorial/modules.rst:174 msgid "" ">>> import fibo\n" ">>>" msgstr "" ">>> import fibo\n" ">>>" #: ../../tutorial/modules.rst:177 msgid "" "This is often used either to provide a convenient user interface to a " "module, or for testing purposes (running the module as a script executes a " "test suite)." msgstr "" "این روش اغلب برای فراهم کردن یک رابط کاربری مناسب برای یک ماژول یا برای " "اهداف آزمایشی استفاده می‌شود (اجرای ماژول به‌عنوان یک اسکریپت باعث اجرای یک " "مجموعهٔ آزمون می‌شود)." #: ../../tutorial/modules.rst:184 msgid "The Module Search Path" msgstr "مسیر جستجوی ماژول‌ها" #: ../../tutorial/modules.rst:188 msgid "" "When a module named :mod:`!spam` is imported, the interpreter first searches " "for a built-in module with that name. These module names are listed " "in :data:`sys.builtin_module_names`. If not found, it then searches for a " "file named :file:`spam.py` in a list of directories given by the " "variable :data:`sys.path`. :data:`sys.path` is initialized from these " "locations:" msgstr "" "هنگامی که یک ماژول با نام :mod:`!spam` وارد می‌شود، مفسر ابتدا به دنبال یک " "ماژول داخلی با همان نام می‌گردد. نام این ماژول‌ها در " ":data:`sys.builtin_module_names` فهرست شده‌اند. اگر یافت نشود، سپس به دنبال " "فایلی با نام :file:`spam.py` در فهرستی از پوشه‌ها می‌گردد که توسط متغیر " ":data:`sys.path` مشخص شده‌اند. :data:`sys.path` از این مکان‌ها مقداردهی " "اولیه می‌شود:" #: ../../tutorial/modules.rst:194 msgid "" "The directory containing the input script (or the current directory when no " "file is specified)." msgstr "" "پوشه‌ای که اسکریپت ورودی در آن قرار دارد (یا پوشهٔ جاری، زمانی که هیچ فایلی " "مشخص نشده باشد)." #: ../../tutorial/modules.rst:196 msgid "" ":envvar:`PYTHONPATH` (a list of directory names, with the same syntax as the " "shell variable :envvar:`PATH`)." msgstr "" ":envvar:`PYTHONPATH` (فهرستی از نام پوشه‌ها با همان نحوی که متغیر پوستهٔ " ":envvar:`PATH` دارد)." #: ../../tutorial/modules.rst:198 msgid "" "The installation-dependent default (by convention including a ``site-" "packages`` directory, handled by the :mod:`site` module)." msgstr "" "مقدار پیش‌فرض وابسته به نصب (که طبق قرارداد شامل یک پوشهٔ ``site-packages`` است " "و توسط ماژول :mod:`site` مدیریت می‌شود)." #: ../../tutorial/modules.rst:201 msgid "More details are at :ref:`sys-path-init`." msgstr "جزئیات بیشتر در :ref:`sys-path-init` موجود است." #: ../../tutorial/modules.rst:204 msgid "" "On file systems which support symlinks, the directory containing the input " "script is calculated after the symlink is followed. In other words the " "directory containing the symlink is **not** added to the module search path." msgstr "" "در سیستم‌های فایلی که از پیوندهای نمادین پشتیبانی می‌کنند، پوشهٔ شامل اسکریپت " "ورودی پس از دنبال کردن پیوند نمادین محاسبه می‌شود. به عبارت دیگر، پوشه‌ای که " "پیوند نمادین در آن قرار دارد **به مسیر جستجوی ماژول‌ها اضافه نمی‌شود**." #: ../../tutorial/modules.rst:208 msgid "" "After initialization, Python programs can modify :data:`sys.path`. The " "directory containing the script being run is placed at the beginning of the " "search path, ahead of the standard library path. This means that scripts in " "that directory will be loaded instead of modules of the same name in the " "library directory. This is an error unless the replacement is intended. See " "section :ref:`tut-standardmodules` for more information." msgstr "" "پس از مقداردهی اولیه، برنامه‌های پایتون می‌توانند :data:`sys.path` را تغییر " "دهند. پوشه‌ای که اسکریپت در حال اجرا در آن قرار دارد، در ابتدای مسیر جستجو و " "پیش از مسیر کتابخانهٔ استاندارد قرار داده می‌شود. این بدان معناست که " "اسکریپت‌های موجود در آن پوشه، به‌جای ماژول‌هایی با همان نام در پوشهٔ کتابخانه " "بارگذاری خواهند شد. این کار یک خطا محسوب می‌شود، مگر اینکه جایگزینی موردنظر " "باشد. برای اطلاعات بیشتر، بخش :ref:`tut-standardmodules` را ببینید." #: ../../tutorial/modules.rst:221 msgid "\"Compiled\" Python files" msgstr "فایل‌های پایتون «کامپایل‌شده»" #: ../../tutorial/modules.rst:223 msgid "" "To speed up loading modules, Python caches the compiled version of each " "module in the ``__pycache__`` directory under the name :file:`module." "{version}.pyc`, where the version encodes the format of the compiled file; " "it generally contains the Python version number. For example, in CPython " "release 3.3 the compiled version of spam.py would be cached as ``__pycache__/" "spam.cpython-33.pyc``. This naming convention allows compiled modules from " "different releases and different versions of Python to coexist." msgstr "" "برای افزایش سرعت بارگذاری ماژول‌ها، پایتون نسخهٔ کامپایل‌شدهٔ هر ماژول را در " "پوشهٔ ``__pycache__`` و با نام :file:`module.{version}.pyc` ذخیره می‌کند؛ در " "این نام، نسخه قالب فایل کامپایل‌شده را مشخص می‌کند و معمولاً شامل شمارهٔ نسخهٔ " "پایتون است. برای مثال، در انتشار CPython نسخهٔ 3.3، نسخهٔ کامپایل‌شدهٔ spam.py " "به‌صورت ``__pycache__/spam.cpython-33.pyc`` ذخیره می‌شود. این قرارداد نام‌گذاری " "اجازه می‌دهد ماژول‌های کامپایل‌شده از انتشارها و نسخه‌های مختلف پایتون در کنار " "یکدیگر وجود داشته باشند." #: ../../tutorial/modules.rst:231 msgid "" "Python checks the modification date of the source against the compiled " "version to see if it's out of date and needs to be recompiled. This is a " "completely automatic process. Also, the compiled modules are platform-" "independent, so the same library can be shared among systems with different " "architectures." msgstr "" "پایتون تاریخ تغییر فایل منبع را با نسخهٔ کامپایل‌شده بررسی می‌کند تا مشخص شود " "آیا قدیمی شده است و نیاز به کامپایل مجدد دارد یا خیر. این فرایند کاملاً " "خودکار است. همچنین، ماژول‌های کامپایل‌شده مستقل از پلتفرم هستند، بنابراین یک " "کتابخانهٔ یکسان می‌تواند بین سیستم‌هایی با معماری‌های متفاوت به اشتراک گذاشته " "شود." #: ../../tutorial/modules.rst:236 msgid "" "Python does not check the cache in two circumstances. First, it always " "recompiles and does not store the result for the module that's loaded " "directly from the command line. Second, it does not check the cache if " "there is no source module. To support a non-source (compiled only) " "distribution, the compiled module must be in the source directory, and there " "must not be a source module." msgstr "" "پایتون در دو حالت، حافظهٔ نهان را بررسی نمی‌کند. نخست، همیشه ماژولی را که " "مستقیماً از خط فرمان بارگذاری شده است دوباره کامپایل می‌کند و نتیجه را ذخیره " "نمی‌کند. دوم، اگر هیچ ماژول منبعی وجود نداشته باشد، حافظهٔ نهان را بررسی " "نمی‌کند. برای پشتیبانی از توزیع‌های بدون منبع (فقط کامپایل‌شده)، ماژول " "کامپایل‌شده باید در پوشهٔ منبع قرار داشته باشد و نباید ماژول منبعی وجود داشته " "باشد." #: ../../tutorial/modules.rst:243 msgid "Some tips for experts:" msgstr "چند نکته برای متخصصان:" #: ../../tutorial/modules.rst:245 msgid "" "You can use the :option:`-O` or :option:`-OO` switches on the Python command " "to reduce the size of a compiled module. The ``-O`` switch removes assert " "statements, the ``-OO`` switch removes both assert statements and __doc__ " "strings. Since some programs may rely on having these available, you should " "only use this option if you know what you're doing. \"Optimized\" modules " "have an ``opt-`` tag and are usually smaller. Future releases may change " "the effects of optimization." msgstr "" "می‌توانید از گزینه‌های :option:`-O` یا :option:`-OO` در دستور پایتون برای " "کاهش اندازهٔ یک ماژول کامپایل‌شده استفاده کنید. گزینهٔ ``-O`` دستورهای assert را " "حذف می‌کند و گزینهٔ ``-OO`` هم دستورهای assert و هم رشته‌های **doc** را حذف " "می‌کند. از آنجا که برخی برنامه‌ها ممکن است به وجود این موارد وابسته باشند، فقط " "زمانی باید از این گزینه استفاده کنید که بدانید چه کاری انجام می‌دهید. " "ماژول‌های «بهینه‌شده» دارای برچسب ``opt-`` هستند و معمولاً کوچک‌ترند. انتشارهای " "آینده ممکن است اثرات بهینه‌سازی را تغییر دهند." #: ../../tutorial/modules.rst:253 msgid "" "A program doesn't run any faster when it is read from a ``.pyc`` file than " "when it is read from a ``.py`` file; the only thing that's faster about " "``.pyc`` files is the speed with which they are loaded." msgstr "" "یک برنامه زمانی که از یک فایل ``.pyc`` خوانده می‌شود، سریع‌تر از زمانی که از یک " "فایل ``.py`` خوانده می‌شود اجرا نمی‌شود؛ تنها چیزی که در فایل‌های ``.pyc`` سریع‌تر " "است، سرعت بارگذاری آن‌هاست." #: ../../tutorial/modules.rst:257 msgid "" "The module :mod:`compileall` can create .pyc files for all modules in a " "directory." msgstr "" "ماژول :mod:`compileall` می‌تواند برای تمام ماژول‌های موجود در یک پوشه " "فایل‌های .pyc ایجاد کند." #: ../../tutorial/modules.rst:260 msgid "" "There is more detail on this process, including a flow chart of the " "decisions, in :pep:`3147`." msgstr "" "جزئیات بیشتری دربارهٔ این فرایند، از جمله نمودار جریان تصمیم‌ها، در " ":pep:`3147` آمده است." #: ../../tutorial/modules.rst:267 msgid "Standard Modules" msgstr "ماژول‌های استاندارد" #: ../../tutorial/modules.rst:271 msgid "" "Python comes with a library of standard modules, described in a separate " "document, the Python Library Reference (\"Library Reference\" hereafter). " "Some modules are built into the interpreter; these provide access to " "operations that are not part of the core of the language but are " "nevertheless built in, either for efficiency or to provide access to " "operating system primitives such as system calls. The set of such modules " "is a configuration option which also depends on the underlying platform. " "For example, the :mod:`winreg` module is only provided on Windows systems. " "One particular module deserves some attention: :mod:`sys`, which is built " "into every Python interpreter. The variables ``sys.ps1`` and ``sys.ps2`` " "define the strings used as primary and secondary prompts::" msgstr "" "پایتون همراه با مجموعه‌ای از ماژول‌های استاندارد ارائه می‌شود که در یک سند " "جداگانه، یعنی مرجع کتابخانهٔ پایتون (\"مرجع کتابخانه\" از اینجا به بعد)، " "توضیح داده شده‌اند. برخی ماژول‌ها در مفسر داخلی هستند؛ این ماژول‌ها دسترسی به " "عملیاتی را فراهم می‌کنند که بخشی از هستهٔ زبان نیستند، اما بااین‌حال، یا برای " "افزایش کارایی یا برای فراهم کردن دسترسی به امکانات سیستم‌عامل مانند " "فراخوانی‌های سیستمی، به‌صورت داخلی وجود دارند. مجموعهٔ این ماژول‌ها یک گزینهٔ " "پیکربندی است که به پلتفرم زیربنایی نیز وابسته است. برای مثال، ماژول " ":mod:`winreg` فقط در سیستم‌های ویندوز ارائه می‌شود. یک ماژول خاص شایستهٔ توجه " "بیشتر است: :mod:`sys` که در هر مفسر پایتون داخلی است. متغیرهای ``sys.ps1`` و " "``sys.ps2`` رشته‌هایی را تعریف می‌کنند که به‌عنوان اعلان‌های اصلی و ثانویه استفاده " "می‌شوند::" #: ../../tutorial/modules.rst:283 msgid "" ">>> import sys\n" ">>> sys.ps1\n" "'>>> '\n" ">>> sys.ps2\n" "'... '\n" ">>> sys.ps1 = 'C> '\n" "C> print('Yuck!')\n" "Yuck!\n" "C>" msgstr "" ">>> import sys\n" ">>> sys.ps1\n" "'>>> '\n" ">>> sys.ps2\n" "'... '\n" ">>> sys.ps1 = 'C> '\n" "C> print('Yuck!')\n" "Yuck!\n" "C>" #: ../../tutorial/modules.rst:294 msgid "" "These two variables are only defined if the interpreter is in interactive " "mode." msgstr "این دو متغیر فقط زمانی تعریف می‌شوند که مفسر در حالت تعاملی باشد." #: ../../tutorial/modules.rst:296 msgid "" "The variable ``sys.path`` is a list of strings that determines the " "interpreter's search path for modules. It is initialized to a default path " "taken from the environment variable :envvar:`PYTHONPATH`, or from a built-in " "default if :envvar:`PYTHONPATH` is not set. You can modify it using " "standard list operations::" msgstr "" "متغیر ``sys.path`` فهرستی از رشته‌هاست که مسیر جستجوی مفسر برای ماژول‌ها را " "تعیین می‌کند. این متغیر از یک مسیر پیش‌فرض گرفته‌شده از متغیر محیطی " ":envvar:`PYTHONPATH` مقداردهی اولیه می‌شود، یا اگر :envvar:`PYTHONPATH` " "تنظیم نشده باشد، از یک مقدار پیش‌فرض داخلی استفاده می‌کند. می‌توانید آن را با " "استفاده از عملیات استاندارد فهرست‌ها تغییر دهید::" #: ../../tutorial/modules.rst:302 msgid "" ">>> import sys\n" ">>> sys.path.append('/ufs/guido/lib/python')" msgstr "" ">>> import sys\n" ">>> sys.path.append('/ufs/guido/lib/python')" #: ../../tutorial/modules.rst:309 msgid "The :func:`dir` Function" msgstr "تابع :func:`dir`" #: ../../tutorial/modules.rst:311 msgid "" "The built-in function :func:`dir` is used to find out which names a module " "defines. It returns a sorted list of strings::" msgstr "" "تابع داخلی :func:`dir` برای یافتن نام‌هایی که یک ماژول تعریف می‌کند استفاده " "می‌شود. این تابع یک فهرست مرتب‌شده از رشته‌ها برمی‌گرداند::" #: ../../tutorial/modules.rst:314 msgid "" ">>> import fibo, sys\n" ">>> dir(fibo)\n" "['__name__', 'fib', 'fib2']\n" ">>> dir(sys)\n" "['__breakpointhook__', '__displayhook__', '__doc__', '__excepthook__',\n" " '__interactivehook__', '__loader__', '__name__', '__package__', " "'__spec__',\n" " '__stderr__', '__stdin__', '__stdout__', '__unraisablehook__',\n" " '_clear_type_cache', '_current_frames', '_debugmallocstats', '_framework',\n" " '_getframe', '_git', '_home', '_xoptions', 'abiflags', 'addaudithook',\n" " 'api_version', 'argv', 'audit', 'base_exec_prefix', 'base_prefix',\n" " 'breakpointhook', 'builtin_module_names', 'byteorder', 'call_tracing',\n" " 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', " "'exc_info',\n" " 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info',\n" " 'float_repr_style', 'get_asyncgen_hooks', " "'get_coroutine_origin_tracking_depth',\n" " 'getallocatedblocks', 'getdefaultencoding', 'getdlopenflags',\n" " 'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile',\n" " 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval',\n" " 'gettrace', 'hash_info', 'hexversion', 'implementation', 'int_info',\n" " 'intern', 'is_finalizing', 'last_traceback', 'last_type', 'last_value',\n" " 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks',\n" " 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', " "'pycache_prefix',\n" " 'set_asyncgen_hooks', 'set_coroutine_origin_tracking_depth', " "'setdlopenflags',\n" " 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', " "'stderr',\n" " 'stdin', 'stdout', 'thread_info', 'unraisablehook', 'version', " "'version_info',\n" " 'warnoptions']" msgstr "" ">>> import fibo, sys\n" ">>> dir(fibo)\n" "['__name__', 'fib', 'fib2']\n" ">>> dir(sys)\n" "['__breakpointhook__', '__displayhook__', '__doc__', '__excepthook__',\n" " '__interactivehook__', '__loader__', '__name__', '__package__', " "'__spec__',\n" " '__stderr__', '__stdin__', '__stdout__', '__unraisablehook__',\n" " '_clear_type_cache', '_current_frames', '_debugmallocstats', '_framework',\n" " '_getframe', '_git', '_home', '_xoptions', 'abiflags', 'addaudithook',\n" " 'api_version', 'argv', 'audit', 'base_exec_prefix', 'base_prefix',\n" " 'breakpointhook', 'builtin_module_names', 'byteorder', 'call_tracing',\n" " 'callstats', 'copyright', 'displayhook', 'dont_write_bytecode', " "'exc_info',\n" " 'excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info',\n" " 'float_repr_style', 'get_asyncgen_hooks', " "'get_coroutine_origin_tracking_depth',\n" " 'getallocatedblocks', 'getdefaultencoding', 'getdlopenflags',\n" " 'getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile',\n" " 'getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval',\n" " 'gettrace', 'hash_info', 'hexversion', 'implementation', 'int_info',\n" " 'intern', 'is_finalizing', 'last_traceback', 'last_type', 'last_value',\n" " 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks',\n" " 'path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', " "'pycache_prefix',\n" " 'set_asyncgen_hooks', 'set_coroutine_origin_tracking_depth', " "'setdlopenflags',\n" " 'setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', " "'stderr',\n" " 'stdin', 'stdout', 'thread_info', 'unraisablehook', 'version', " "'version_info',\n" " 'warnoptions']" #: ../../tutorial/modules.rst:340 msgid "" "Without arguments, :func:`dir` lists the names you have defined currently::" msgstr "" "بدون آرگومان، :func:`dir` نام‌هایی را که در حال حاضر تعریف کرده‌اید فهرست " "می‌کند::" #: ../../tutorial/modules.rst:342 msgid "" ">>> a = [1, 2, 3, 4, 5]\n" ">>> import fibo\n" ">>> fib = fibo.fib\n" ">>> dir()\n" "['__builtins__', '__name__', 'a', 'fib', 'fibo', 'sys']" msgstr "" ">>> a = [1, 2, 3, 4, 5]\n" ">>> import fibo\n" ">>> fib = fibo.fib\n" ">>> dir()\n" "['__builtins__', '__name__', 'a', 'fib', 'fibo', 'sys']" #: ../../tutorial/modules.rst:348 msgid "" "Note that it lists all types of names: variables, modules, functions, etc." msgstr "" "توجه کنید که این تابع همهٔ انواع نام‌ها را فهرست می‌کند: متغیرها، ماژول‌ها، " "تابع‌ها و غیره." #: ../../tutorial/modules.rst:352 msgid "" ":func:`dir` does not list the names of built-in functions and variables. If " "you want a list of those, they are defined in the standard " "module :mod:`builtins`::" msgstr "" ":func:`dir` نام تابع‌ها و متغیرهای داخلی را فهرست نمی‌کند. اگر فهرستی از " "آن‌ها می‌خواهید، این موارد در ماژول استاندارد :mod:`builtins` تعریف شده‌اند::" #: ../../tutorial/modules.rst:356 msgid "" ">>> import builtins\n" ">>> dir(builtins)\n" "['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException',\n" " 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning',\n" " 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError',\n" " 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning',\n" " 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False',\n" " 'FileExistsError', 'FileNotFoundError', 'FloatingPointError',\n" " 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError',\n" " 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError',\n" " 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError',\n" " 'MemoryError', 'NameError', 'None', 'NotADirectoryError', " "'NotImplemented',\n" " 'NotImplementedError', 'OSError', 'OverflowError',\n" " 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError',\n" " 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning',\n" " 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError',\n" " 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError',\n" " 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError',\n" " 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning',\n" " 'ValueError', 'Warning', 'ZeroDivisionError', '_', '__build_class__',\n" " '__debug__', '__doc__', '__import__', '__name__', '__package__', 'abs',\n" " 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable',\n" " 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits',\n" " 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit',\n" " 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr',\n" " 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass',\n" " 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview',\n" " 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property',\n" " 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice',\n" " 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars',\n" " 'zip']" msgstr "" ">>> import builtins\n" ">>> dir(builtins)\n" "['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException',\n" " 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning',\n" " 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError',\n" " 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning',\n" " 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False',\n" " 'FileExistsError', 'FileNotFoundError', 'FloatingPointError',\n" " 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError',\n" " 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError',\n" " 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError',\n" " 'MemoryError', 'NameError', 'None', 'NotADirectoryError', " "'NotImplemented',\n" " 'NotImplementedError', 'OSError', 'OverflowError',\n" " 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError',\n" " 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning',\n" " 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError',\n" " 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError',\n" " 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError',\n" " 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning',\n" " 'ValueError', 'Warning', 'ZeroDivisionError', '_', '__build_class__',\n" " '__debug__', '__doc__', '__import__', '__name__', '__package__', 'abs',\n" " 'all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable',\n" " 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits',\n" " 'delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit',\n" " 'filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr',\n" " 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass',\n" " 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview',\n" " 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property',\n" " 'quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice',\n" " 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars',\n" " 'zip']" #: ../../tutorial/modules.rst:391 msgid "Packages" msgstr "بسته‌ها" #: ../../tutorial/modules.rst:393 msgid "" "Packages are a way of structuring Python's module namespace by using " "\"dotted module names\". For example, the module name :mod:`!A.B` " "designates a submodule named ``B`` in a package named ``A``. Just like the " "use of modules saves the authors of different modules from having to worry " "about each other's global variable names, the use of dotted module names " "saves the authors of multi-module packages like NumPy or Pillow from having " "to worry about each other's module names." msgstr "" "بسته‌ها روشی برای ساختاربندی فضای نام ماژول‌های پایتون با استفاده از «نام‌های " "نقطه‌دار ماژول» هستند. برای مثال، نام ماژول :mod:`!A.B` یک زیرماژول با نام " "``B`` در بسته‌ای با نام ``A`` را مشخص می‌کند. همان‌طور که استفاده از ماژول‌ها باعث " "می‌شود نویسندگان ماژول‌های مختلف نگران نام متغیرهای سراسری یکدیگر نباشند، " "استفاده از نام‌های نقطه‌دار ماژول نیز باعث می‌شود نویسندگان بسته‌های چندماژوله‌ای " "مانند NumPy یا Pillow نگران نام ماژول‌های یکدیگر نباشند." #: ../../tutorial/modules.rst:401 msgid "" "Suppose you want to design a collection of modules (a \"package\") for the " "uniform handling of sound files and sound data. There are many different " "sound file formats (usually recognized by their extension, for " "example: :file:`.wav`, :file:`.aiff`, :file:`.au`), so you may need to " "create and maintain a growing collection of modules for the conversion " "between the various file formats. There are also many different operations " "you might want to perform on sound data (such as mixing, adding echo, " "applying an equalizer function, creating an artificial stereo effect), so in " "addition you will be writing a never-ending stream of modules to perform " "these operations. Here's a possible structure for your package (expressed " "in terms of a hierarchical filesystem):" msgstr "" "فرض کنید می‌خواهید مجموعه‌ای از ماژول‌ها (یک «بسته») را برای مدیریت یکپارچهٔ " "فایل‌های صوتی و داده‌های صوتی طراحی کنید. قالب‌های فایل صوتی بسیار متفاوتی وجود " "دارند (که معمولاً با پسوندشان شناخته می‌شوند، برای مثال: :file:`.wav`، " ":file:`.aiff`، :file:`.au`)؛ بنابراین ممکن است نیاز داشته باشید مجموعه‌ای " "در حال رشد از ماژول‌ها را برای تبدیل بین قالب‌های مختلف فایل ایجاد و نگهداری " "کنید. همچنین عملیات‌های مختلف بسیاری وجود دارند که ممکن است بخواهید روی " "داده‌های صوتی انجام دهید (مانند ترکیب کردن، افزودن پژواک، اعمال تابع " "اکولایزر، ایجاد یک اثر استریوی مصنوعی)، بنابراین علاوه بر این، جریان " "بی‌پایانی از ماژول‌ها برای انجام این عملیات‌ها خواهید نوشت. ساختار احتمالی زیر " "برای بستهٔ شما وجود دارد (که به‌صورت یک سیستم فایل سلسله‌مراتبی بیان شده است):" #: ../../tutorial/modules.rst:412 msgid "" "sound/ Top-level package\n" " __init__.py Initialize the sound package\n" " formats/ Subpackage for file format conversions\n" " __init__.py\n" " wavread.py\n" " wavwrite.py\n" " aiffread.py\n" " aiffwrite.py\n" " auread.py\n" " auwrite.py\n" " ...\n" " effects/ Subpackage for sound effects\n" " __init__.py\n" " echo.py\n" " surround.py\n" " reverse.py\n" " ...\n" " filters/ Subpackage for filters\n" " __init__.py\n" " equalizer.py\n" " vocoder.py\n" " karaoke.py\n" " ..." msgstr "" "sound/ بسته‌های سطح بالا\n" " __init__.py راه‌اندازی اولیه بسته صوتی\n" " formats/ زیربسته برای تبدیل فرمت‌های فایل\n" " __init__.py\n" " wavread.py\n" " wavwrite.py\n" " aiffread.py\n" " aiffwrite.py\n" " auread.py\n" " auwrite.py\n" " ...\n" " effects/ زیربسته برای جلوه‌های صوتی\n" " __init__.py\n" " echo.py\n" " surround.py\n" " reverse.py\n" " ...\n" " filters/ زیربسته برای فیلتر‌ها\n" " __init__.py\n" " equalizer.py\n" " vocoder.py\n" " karaoke.py\n" " ..." #: ../../tutorial/modules.rst:438 msgid "" "When importing the package, Python searches through the directories on " "``sys.path`` looking for the package subdirectory." msgstr "" "هنگام وارد کردن بسته، پایتون پوشه‌های موجود در ``sys.path`` را جستجو می‌کند تا " "زیرپوشهٔ بسته را پیدا کند." #: ../../tutorial/modules.rst:441 msgid "" "The :file:`__init__.py` files are required to make Python treat directories " "containing the file as packages (unless using a :term:`namespace package`, a " "relatively advanced feature). This prevents directories with a common name, " "such as ``string``, from unintentionally hiding valid modules that occur " "later on the module search path. In the simplest case, :file:`__init__.py` " "can just be an empty file, but it can also execute initialization code for " "the package or set the ``__all__`` variable, described later." msgstr "" "فایل‌های :file:`__init__.py` لازم هستند تا پایتون پوشه‌هایی را که شامل این " "فایل هستند به‌عنوان بسته در نظر بگیرد (مگر اینکه از یک :term:`namespace " "package` استفاده شود که قابلیتی نسبتاً پیشرفته است). این کار از پنهان شدن " "ناخواستهٔ ماژول‌های معتبر که بعداً در مسیر جستجوی ماژول قرار دارند، توسط " "پوشه‌هایی با نام مشترک مانند ``string`` جلوگیری می‌کند. در ساده‌ترین حالت، " ":file:`__init__.py` می‌تواند فقط یک فایل خالی باشد، اما می‌تواند کد مقداردهی " "اولیهٔ بسته را نیز اجرا کند یا متغیر ``__all__`` را که بعداً توضیح داده می‌شود، " "تنظیم کند." #: ../../tutorial/modules.rst:449 msgid "" "Users of the package can import individual modules from the package, for " "example::" msgstr "" "کاربران بسته می‌توانند ماژول‌های جداگانه‌ای را از بسته وارد کنند، برای مثال::" #: ../../tutorial/modules.rst:452 msgid "import sound.effects.echo" msgstr "import sound.effects.echo" #: ../../tutorial/modules.rst:454 msgid "" "This loads the submodule :mod:`!sound.effects.echo`. It must be referenced " "with its full name. ::" msgstr "" "این کار زیرماژول :mod:`!sound.effects.echo` را بارگذاری می‌کند. این ماژول " "باید با نام کامل خود ارجاع داده شود. ::" #: ../../tutorial/modules.rst:457 msgid "sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)" msgstr "sound.effects.echo.echofilter(input, output, delay=0.7, atten=4)" #: ../../tutorial/modules.rst:459 msgid "An alternative way of importing the submodule is::" msgstr "روش جایگزین برای وارد کردن زیرماژول به شکل زیر است::" #: ../../tutorial/modules.rst:461 msgid "from sound.effects import echo" msgstr "from sound.effects import echo" #: ../../tutorial/modules.rst:463 msgid "" "This also loads the submodule :mod:`!echo`, and makes it available without " "its package prefix, so it can be used as follows::" msgstr "" "این روش نیز زیرماژول :mod:`!echo` را بارگذاری می‌کند و آن را بدون پیشوند " "بسته در دسترس قرار می‌دهد، بنابراین می‌توان از آن به شکل زیر استفاده کرد::" #: ../../tutorial/modules.rst:466 msgid "echo.echofilter(input, output, delay=0.7, atten=4)" msgstr "echo.echofilter(input, output, delay=0.7, atten=4)" #: ../../tutorial/modules.rst:468 msgid "" "Yet another variation is to import the desired function or variable " "directly::" msgstr "یک حالت دیگر، وارد کردن مستقیم تابع یا متغیر موردنظر است::" #: ../../tutorial/modules.rst:470 msgid "from sound.effects.echo import echofilter" msgstr "from sound.effects.echo import echofilter" #: ../../tutorial/modules.rst:472 msgid "" "Again, this loads the submodule :mod:`!echo`, but this makes its " "function :func:`!echofilter` directly available::" msgstr "" "دوباره، این کار زیرماژول :mod:`!echo` را بارگذاری می‌کند، اما باعث می‌شود " "تابع آن، یعنی :func:`!echofilter`، مستقیماً در دسترس باشد::" #: ../../tutorial/modules.rst:475 msgid "echofilter(input, output, delay=0.7, atten=4)" msgstr "echofilter(input, output, delay=0.7, atten=4)" #: ../../tutorial/modules.rst:477 msgid "" "Note that when using ``from package import item``, the item can be either a " "submodule (or subpackage) of the package, or some other name defined in the " "package, like a function, class or variable. The ``import`` statement first " "tests whether the item is defined in the package; if not, it assumes it is a " "module and attempts to load it. If it fails to find it, " "an :exc:`ImportError` exception is raised." msgstr "" "توجه کنید که هنگام استفاده از ``from package import item``، مورد item " "می‌تواند یک زیرماژول (یا زیر‌بسته) از بسته باشد، یا نام دیگری باشد که در بسته " "تعریف شده است، مانند یک تابع، کلاس یا متغیر. دستور ``import`` ابتدا بررسی " "می‌کند که آیا item در بسته تعریف شده است یا خیر؛ اگر تعریف نشده باشد، فرض " "می‌کند که یک ماژول است و تلاش می‌کند آن را بارگذاری کند. اگر نتواند آن را پیدا " "کند، یک استثنای :exc:`ImportError` ایجاد می‌شود." #: ../../tutorial/modules.rst:484 msgid "" "Contrarily, when using syntax like ``import item.subitem.subsubitem``, each " "item except for the last must be a package; the last item can be a module or " "a package but can't be a class or function or variable defined in the " "previous item." msgstr "" "برعکس، هنگام استفاده از نحوی مانند ``import item.subitem.subsubitem``، هر مورد " "به‌جز آخرین مورد باید یک بسته باشد؛ آخرین مورد می‌تواند یک ماژول یا یک بسته " "باشد، اما نمی‌تواند یک کلاس، تابع یا متغیر تعریف‌شده در مورد قبلی باشد." #: ../../tutorial/modules.rst:493 msgid "Importing \\* From a Package" msgstr "وارد کردن \\* از یک بسته" #: ../../tutorial/modules.rst:497 msgid "" "Now what happens when the user writes ``from sound.effects import *``? " "Ideally, one would hope that this somehow goes out to the filesystem, finds " "which submodules are present in the package, and imports them all. This " "could take a long time and importing sub-modules might have unwanted side-" "effects that should only happen when the sub-module is explicitly imported." msgstr "" "اکنون اگر کاربر بنویسد ``from sound.effects import *`` چه اتفاقی می‌افتد؟ در " "حالت ایده‌آل، انتظار می‌رود این دستور به‌نحوی به سیستم فایل مراجعه کند، " "زیرماژول‌های موجود در بسته را پیدا کند و همهٔ آن‌ها را وارد کند. این کار " "می‌تواند زمان زیادی طول بکشد و وارد کردن زیرماژول‌ها ممکن است عوارض جانبی " "ناخواسته‌ای ایجاد کند که باید فقط هنگام وارد کردن صریح زیرماژول رخ دهند." #: ../../tutorial/modules.rst:503 msgid "" "The only solution is for the package author to provide an explicit index of " "the package. The :keyword:`import` statement uses the following convention: " "if a package's :file:`__init__.py` code defines a list named ``__all__``, it " "is taken to be the list of module names that should be imported when ``from " "package import *`` is encountered. It is up to the package author to keep " "this list up-to-date when a new version of the package is released. Package " "authors may also decide not to support it, if they don't see a use for " "importing \\* from their package. For example, the file :file:`sound/" "effects/__init__.py` could contain the following code::" msgstr "" "تنها راه‌حل این است که نویسندهٔ بسته یک فهرست صریح از بسته فراهم کند. دستور " ":keyword:`import` از قرارداد زیر استفاده می‌کند: اگر کد " ":file:`__init__.py` یک بسته، فهرستی با نام ``__all__`` تعریف کند، این فهرست " "به‌عنوان فهرست نام ماژول‌هایی در نظر گرفته می‌شود که هنگام مشاهدهٔ ``from package " "import *`` باید وارد شوند. این وظیفهٔ نویسندهٔ بسته است که هنگام انتشار نسخهٔ " "جدید بسته، این فهرست را به‌روز نگه دارد. نویسندگان بسته همچنین ممکن است تصمیم " "بگیرند از این قابلیت پشتیبانی نکنند، اگر کاربردی برای وارد کردن \\* از بستهٔ " "خود نمی‌بینند. برای مثال، فایل :file:`sound/effects/__init__.py` می‌تواند " "شامل کد زیر باشد::" #: ../../tutorial/modules.rst:513 msgid "__all__ = [\"echo\", \"surround\", \"reverse\"]" msgstr "__all__ = [\"echo\", \"surround\", \"reverse\"]" #: ../../tutorial/modules.rst:515 msgid "" "This would mean that ``from sound.effects import *`` would import the three " "named submodules of the :mod:`!sound.effects` package." msgstr "" "این یعنی ``from sound.effects import *`` سه زیرماژول نام‌بردهٔ بستهٔ :mod:`!" "sound.effects` را وارد خواهد کرد." #: ../../tutorial/modules.rst:518 msgid "" "Be aware that submodules might become shadowed by locally defined names. For " "example, if you added a ``reverse`` function to the :file:`sound/effects/" "__init__.py` file, the ``from sound.effects import *`` would only import the " "two submodules ``echo`` and ``surround``, but *not* the ``reverse`` " "submodule, because it is shadowed by the locally defined ``reverse`` " "function::" msgstr "" "توجه داشته باشید که زیرماژول‌ها ممکن است توسط نام‌هایی که به‌صورت محلی تعریف " "شده‌اند، پوشانده شوند. برای مثال، اگر یک تابع ``reverse`` به فایل " ":file:`sound/effects/__init__.py` اضافه کنید، دستور ``from sound.effects " "import *`` فقط دو زیرماژول ``echo`` و ``surround`` را وارد خواهد کرد، اما " "*زیرماژول* ``reverse`` را وارد نمی‌کند، زیرا توسط تابع ``reverse`` تعریف‌شده در " "همان فضا پوشانده شده است::" #: ../../tutorial/modules.rst:525 msgid "" "__all__ = [\n" " \"echo\", # refers to the 'echo.py' file\n" " \"surround\", # refers to the 'surround.py' file\n" " \"reverse\", # !!! refers to the 'reverse' function now !!!\n" "]\n" "\n" "def reverse(msg: str): # <-- this name shadows the 'reverse.py' submodule\n" " return msg[::-1] # in the case of a 'from sound.effects import *'" msgstr "" "__all__ = [\n" " \"echo\", # refers to the 'echo.py' file\n" " \"surround\", # refers to the 'surround.py' file\n" " \"reverse\", # !!! refers to the 'reverse' function now !!!\n" "]\n" "\n" "def reverse(msg: str): # <-- this name shadows the 'reverse.py' submodule\n" " return msg[::-1] # in the case of a 'from sound.effects import *'" #: ../../tutorial/modules.rst:534 msgid "" "If ``__all__`` is not defined, the statement ``from sound.effects import *`` " "does *not* import all submodules from the package :mod:`!sound.effects` into " "the current namespace; it only ensures that the package :mod:`!" "sound.effects` has been imported (possibly running any initialization code " "in :file:`__init__.py`) and then imports whatever names are defined in the " "package. This includes any names defined (and submodules explicitly loaded) " "by :file:`__init__.py`. It also includes any submodules of the package that " "were explicitly loaded by previous :keyword:`import` statements. Consider " "this code::" msgstr "" "اگر ``__all__`` تعریف نشده باشد، دستور ``from sound.effects import *`` تمام " "زیرماژول‌های بستهٔ :mod:`!sound.effects` را به فضای نام فعلی وارد *نمی‌کند*؛ " "این دستور فقط اطمینان حاصل می‌کند که بستهٔ :mod:`!sound.effects` وارد شده " "است (و احتمالاً هر کد مقداردهی اولیه‌ای در :file:`__init__.py` اجرا می‌شود) و " "سپس هر نامی را که در بسته تعریف شده است وارد می‌کند. این شامل هر نامی است که " "توسط :file:`__init__.py` تعریف شده (و زیرماژول‌هایی که به‌صورت صریح بارگذاری " "شده‌اند) نیز می‌شود. همچنین شامل هر زیرماژول بسته‌ای است که قبلاً توسط دستورهای " ":keyword:`import` به‌صورت صریح بارگذاری شده‌اند. این کد را در نظر بگیرید::" #: ../../tutorial/modules.rst:543 msgid "" "import sound.effects.echo\n" "import sound.effects.surround\n" "from sound.effects import *" msgstr "" "import sound.effects.echo\n" "import sound.effects.surround\n" "from sound.effects import *" #: ../../tutorial/modules.rst:547 msgid "" "In this example, the :mod:`!echo` and :mod:`!surround` modules are imported " "in the current namespace because they are defined in the :mod:`!" "sound.effects` package when the ``from...import`` statement is executed. " "(This also works when ``__all__`` is defined.)" msgstr "" "در این مثال، ماژول‌های :mod:`!echo` و :mod:`!surround` در فضای نام فعلی " "وارد می‌شوند، زیرا هنگام اجرای دستور ``from...import`` در بستهٔ :mod:`!" "sound.effects` تعریف شده‌اند. (این حالت زمانی که ``__all__`` تعریف شده باشد نیز " "کار می‌کند.)" #: ../../tutorial/modules.rst:552 msgid "" "Although certain modules are designed to export only names that follow " "certain patterns when you use ``import *``, it is still considered bad " "practice in production code." msgstr "" "اگرچه برخی ماژول‌ها طوری طراحی شده‌اند که هنگام استفاده از ``import *`` فقط " "نام‌هایی مطابق با الگوهای خاص صادر کنند، همچنان این کار در کدهای تولیدی روشی " "نامناسب محسوب می‌شود." #: ../../tutorial/modules.rst:556 msgid "" "Remember, there is nothing wrong with using ``from package import " "specific_submodule``! In fact, this is the recommended notation unless the " "importing module needs to use submodules with the same name from different " "packages." msgstr "" "به یاد داشته باشید که استفاده از ``from package import specific_submodule`` " "هیچ مشکلی ندارد! در واقع، این نشانه‌گذاری توصیه‌شده است، مگر اینکه ماژول " "واردکننده نیاز داشته باشد از زیرماژول‌هایی با نام یکسان از بسته‌های مختلف " "استفاده کند." #: ../../tutorial/modules.rst:565 msgid "Intra-package References" msgstr "ارجاع‌های درون‌بسته‌ای" #: ../../tutorial/modules.rst:567 msgid "" "When packages are structured into subpackages (as with the :mod:`!sound` " "package in the example), you can use absolute imports to refer to submodules " "of siblings packages. For example, if the module :mod:`!" "sound.filters.vocoder` needs to use the :mod:`!echo` module in the :mod:`!" "sound.effects` package, it can use ``from sound.effects import echo``." msgstr "" "هنگامی که بسته‌ها به زیر‌بسته‌ها ساختاربندی می‌شوند (مانند بستهٔ :mod:`!sound` " "در مثال)، می‌توانید از وارد کردن مطلق برای ارجاع به زیرماژول‌های بسته‌های هم‌سطح " "استفاده کنید. برای مثال، اگر ماژول :mod:`!sound.filters.vocoder` نیاز " "داشته باشد از ماژول :mod:`!echo` در بستهٔ :mod:`!sound.effects` استفاده " "کند، می‌تواند از ``from sound.effects import echo`` استفاده کند." #: ../../tutorial/modules.rst:573 msgid "" "You can also write relative imports, with the ``from module import name`` " "form of import statement. These imports use leading dots to indicate the " "current and parent packages involved in the relative import. From " "the :mod:`!surround` module for example, you might use::" msgstr "" "همچنین می‌توانید وارد کردن نسبی بنویسید، با استفاده از شکل ``from module " "import name`` از دستور import. این وارد کردن‌ها از نقطه‌های ابتدایی برای نشان " "دادن بسته‌های فعلی و والد درگیر در وارد کردن نسبی استفاده می‌کنند. برای مثال، " "از ماژول :mod:`!surround` ممکن است از دستور زیر استفاده کنید::" #: ../../tutorial/modules.rst:578 msgid "" "from . import echo\n" "from .. import formats\n" "from ..filters import equalizer" msgstr "" "from . import echo\n" "from .. import formats\n" "from ..filters import equalizer" #: ../../tutorial/modules.rst:582 msgid "" "Note that relative imports are based on the name of the current module's " "package. Since the main module does not have a package, modules intended for " "use as the main module of a Python application must always use absolute " "imports." msgstr "" "توجه کنید که وارد کردن‌های نسبی بر اساس نام بستهٔ ماژول فعلی هستند. از آنجا که " "ماژول اصلی هیچ بسته‌ای ندارد، ماژول‌هایی که قرار است به‌عنوان ماژول اصلی یک " "برنامهٔ پایتون استفاده شوند، باید همیشه از وارد کردن‌های مطلق استفاده کنند." #: ../../tutorial/modules.rst:588 msgid "Packages in Multiple Directories" msgstr "بسته‌ها در چندین پوشه" #: ../../tutorial/modules.rst:590 msgid "" "Packages support one more special attribute, :attr:`~module.__path__`. This " "is initialized to be a :term:`sequence` of strings containing the name of " "the directory holding the package's :file:`__init__.py` before the code in " "that file is executed. This variable can be modified; doing so affects " "future searches for modules and subpackages contained in the package." msgstr "" "بسته‌ها یک ویژگی ویژهٔ دیگر را نیز پشتیبانی می‌کنند: " ":attr:`~module.__path__`. این ویژگی مقداردهی اولیه می‌شود تا پیش از اجرای " "کد موجود در آن فایل، یک :term:`sequence` از رشته‌ها باشد " "که نام پوشهٔ شامل :file:`__init__.py` بسته را در خود دارد. این متغیر قابل " "تغییر است؛ تغییر آن بر جستجوهای آینده برای ماژول‌ها و زیر‌بسته‌های موجود در " "بسته تأثیر می‌گذارد." #: ../../tutorial/modules.rst:597 msgid "" "While this feature is not often needed, it can be used to extend the set of " "modules found in a package." msgstr "" "اگرچه این قابلیت معمولاً موردنیاز نیست، می‌توان از آن برای گسترش مجموعهٔ " "ماژول‌هایی که در یک بسته پیدا می‌شوند استفاده کرد." #: ../../tutorial/modules.rst:602 msgid "Footnotes" msgstr "پانویس‌ها" #: ../../tutorial/modules.rst:603 msgid "" "In fact function definitions are also 'statements' that are 'executed'; the " "execution of a module-level function definition adds the function name to " "the module's global namespace." msgstr "" "در واقع، تعریف تابع‌ها نیز «دستورهایی» هستند که «اجرا» می‌شوند؛ اجرای یک تعریف " "تابع در سطح ماژول، نام تابع را به فضای نام سراسری ماژول اضافه می‌کند." #: ../../tutorial/modules.rst:186 ../../tutorial/modules.rst:269 #: ../../tutorial/modules.rst:350 msgid "module" msgstr "ماژول" #: ../../tutorial/modules.rst:186 msgid "search" msgstr "جست‌و‌جو" #: ../../tutorial/modules.rst:186 msgid "path" msgstr "مسیر" #: ../../tutorial/modules.rst:269 msgid "sys" msgstr "sys" #: ../../tutorial/modules.rst:350 msgid "builtins" msgstr "builtins" #: ../../tutorial/modules.rst:495 msgid "__all__" msgstr "__all__"