From b62ac1518013635b9173010b5e8e5d27d2677f2c Mon Sep 17 00:00:00 2001 From: Leo Alavi Date: Thu, 17 Apr 2025 17:19:29 +0200 Subject: [PATCH] Final fixes for the translations --- translations/fa-farsi/README.md | 47 ++++++++++++++++++++++----------- 1 file changed, 31 insertions(+), 16 deletions(-) diff --git a/translations/fa-farsi/README.md b/translations/fa-farsi/README.md index 54df2c5..6c924f4 100644 --- a/translations/fa-farsi/README.md +++ b/translations/fa-farsi/README.md @@ -1916,7 +1916,7 @@ some_dict = {'s': 42} str >>> s = SomeClass('s') >>> some_dict[s] = 40 ->>> some_dict # expected: Two different keys-value pairs +>>> some_dict # دو عدد کلید-مقدار توقع می رود. {'s': 40} >>> type(list(some_dict.keys())[0]) str @@ -1972,9 +1972,11 @@ a, b = a[b] = {}, 5 #### 💡 توضیح: * طبق [مرجع زبان پایتون](https://docs.python.org/3/reference/simple_stmts.html#assignment-statements)، دستورات انتساب فرم زیر را دارند: + ``` (target_list "=")+ (expression_list | yield_expression) ``` + و > یک دستور انتساب ابتدا فهرست عبارت‌ها (expression list) را ارزیابی می‌کند (توجه کنید این عبارت می‌تواند یک عبارت تکی یا فهرستی از عبارت‌ها جداشده با ویرگول باشد که دومی به یک تاپل منجر می‌شود)، سپس شیء حاصل را به هریک از اهداف انتساب از **چپ به راست** تخصیص می‌دهد. @@ -2264,7 +2266,7 @@ for idx, item in enumerate(list_4): ``` **تفاوت بین `del`، `remove` و `pop`:** -* `del var_name` فقط اتصال `var_name` را از فضای نام محلی یا سراسری حذف می‌کند (به همین دلیل است که `list_1` تحت تأثیر قرار نمی‌گیرد). +* اینجا، `del var_name` فقط اتصال `var_name` را از فضای نام محلی یا سراسری حذف می‌کند (به همین دلیل است که `list_1` تحت تأثیر قرار نمی‌گیرد). * متد `remove` اولین مقدار مطابق را حذف می‌کند، نه یک اندیس خاص را؛ اگر مقدار مورد نظر پیدا نشود، خطای `ValueError` ایجاد می‌شود. * متد `pop` عنصری را در یک اندیس مشخص حذف کرده و آن را برمی‌گرداند؛ اگر اندیس نامعتبری مشخص شود، خطای `IndexError` ایجاد می‌شود. @@ -2290,7 +2292,7 @@ for idx, item in enumerate(list_4): >>> numbers_iter = iter(numbers) >>> list(zip(numbers_iter, first_three)) [(0, 0), (1, 1), (2, 2)] -# so far so good, let's zip the remaining +# تاحالا که خوب بوده، حالا روی باقی مانده های زیپ رو امتحان می کنیم. >>> list(zip(numbers_iter, remaining)) [(4, 3), (5, 4), (6, 5)] ``` @@ -2299,6 +2301,7 @@ for idx, item in enumerate(list_4): #### 💡 توضیح: - بر اساس [مستندات](https://docs.python.org/3.3/library/functions.html#zip) پایتون، پیاده‌سازی تقریبی تابع `zip` به شکل زیر است: + ```py def zip(*iterables): sentinel = object() @@ -2311,9 +2314,11 @@ for idx, item in enumerate(list_4): result.append(elem) yield tuple(result) ``` + - بنابراین این تابع تعداد دلخواهی از اشیای قابل پیمایش (*iterable*) را دریافت می‌کند، و با فراخوانی تابع `next` روی آن‌ها، هر یک از عناصرشان را به لیست `result` اضافه می‌کند. این فرایند زمانی متوقف می‌شود که اولین پیمایشگر به انتها برسد. - نکته مهم اینجاست که هر زمان یکی از پیمایشگرها به پایان برسد، عناصر موجود در لیست `result` نیز دور ریخته می‌شوند. این دقیقاً همان اتفاقی است که برای عدد `3` در `numbers_iter` رخ داد. - روش صحیح برای انجام عملیات بالا با استفاده از تابع `zip` چنین است: + ```py >>> numbers = list(range(7)) >>> numbers_iter = iter(numbers) @@ -2322,6 +2327,7 @@ for idx, item in enumerate(list_4): >>> list(zip(remaining, numbers_iter)) [(3, 3), (4, 4), (5, 5), (6, 6)] ``` + اولین آرگومانِ تابع `zip` باید پیمایشگری باشد که کمترین تعداد عنصر را دارد. --- @@ -2482,7 +2488,8 @@ SyntaxError: invalid syntax #### 💡 توضیح -* To add multiple Exceptions to the except clause, you need to pass them as parenthesized tuple as the first argument. The second argument is an optional name, which when supplied will bind the Exception instance that has been raised. Example, +* برای افزودن چندین استثنا به عبارت `except`، باید آن‌ها را به صورت یک تاپل پرانتزدار به عنوان آرگومان اول وارد کنید. آرگومان دوم یک نام اختیاری است که در صورت ارائه، نمونهٔ Exception ایجادشده را به آن متصل می‌کند. برای مثال: + ```py some_list = [1, 2, 3] try: @@ -2492,12 +2499,16 @@ SyntaxError: invalid syntax print("Caught again!") print(e) ``` + **خروجی (Python 2.x):** + ``` Caught again! list.remove(x): x not in list ``` + **خروجی (Python 3.x):** + ```py File "", line 4 except (IndexError, ValueError), e: @@ -2505,7 +2516,8 @@ SyntaxError: invalid syntax IndentationError: unindent does not match any outer indentation level ``` -* Separating the exception from the variable with a comma is deprecated and does not work in Python 3; the correct way is to use `as`. Example, +* جدا کردن استثنا از متغیر با استفاده از ویرگول منسوخ شده و در پایتون 3 کار نمی‌کند؛ روش صحیح استفاده از `as` است. برای مثال: + ```py some_list = [1, 2, 3] try: @@ -2515,7 +2527,9 @@ SyntaxError: invalid syntax print("Caught again!") print(e) ``` + **خروجی:** + ``` Caught again! list.remove(x): x not in list @@ -2796,7 +2810,7 @@ def similar_recursive_func(a): `x, y = (0, 1) if True else (None, None)` * برای مورد ۲، عبارت صحیح برای رفتار مورد انتظار این است: -`t = ('one',)` یا `t = 'one',` (ویرگول از قلم افتاده است). در غیر این صورت مفسر `t` را به عنوان یک `str` در نظر گرفته و به صورت کاراکتر به کاراکتر روی آن پیمایش می‌کند. +اینجا، `t = ('one',)` یا `t = 'one',` (ویرگول از قلم افتاده است). در غیر این صورت مفسر `t` را به عنوان یک `str` در نظر گرفته و به صورت کاراکتر به کاراکتر روی آن پیمایش می‌کند. * علامت `()` یک توکن خاص است و نشان‌دهنده‌ی یک `tuple` خالی است. @@ -2840,15 +2854,15 @@ def similar_recursive_func(a): >>> 'a'.split() ['a'] -# is same as +# معادل است با >>> 'a'.split(' ') ['a'] -# but +# اما >>> len(''.split()) 0 -# isn't the same as +# معادل نیست با >>> len(''.split(' ')) 1 ``` @@ -2859,6 +2873,7 @@ def similar_recursive_func(a): > اگر `sep` مشخص نشده یا برابر با `None` باشد، یک الگوریتم متفاوت برای جدا کردن اعمال می‌شود: رشته‌هایی از فاصله‌های متوالی به عنوان یک جداکننده‌ی واحد در نظر گرفته شده و در نتیجه، هیچ رشته‌ی خالی‌ای در ابتدا یا انتهای لیست خروجی قرار نمی‌گیرد، حتی اگر رشته‌ی اولیه دارای فاصله‌های اضافی در ابتدا یا انتها باشد. به همین دلیل، تقسیم یک رشته‌ی خالی یا رشته‌ای که فقط شامل فضای خالی است با جداکننده‌ی `None` باعث بازگشت یک لیست خالی `[]` می‌شود. > اگر `sep` مشخص شود، جداکننده‌های متوالی در کنار هم قرار نمی‌گیرند و هر جداکننده، یک رشته‌ی خالی جدید ایجاد می‌کند. (مثلاً `'1,,2'.split(',')` مقدار `['1', '', '2']` را برمی‌گرداند.) تقسیم یک رشته‌ی خالی با یک جداکننده‌ی مشخص‌شده نیز باعث بازگشت `['']` می‌شود. - توجه به اینکه چگونه فضای خالی در ابتدا و انتهای رشته در قطعه‌ی کد زیر مدیریت شده است، این مفهوم را روشن‌تر می‌کند: + ```py >>> ' a '.split(' ') ['', 'a', ''] @@ -2992,11 +3007,11 @@ if noon_time: ```py ('Time at noon is', datetime.time(12, 0)) ``` -The midnight time is not printed. +زمان نیمه‌شب چاپ نمی‌شود. #### 💡 توضیح: -Before Python 3.5, the boolean value for `datetime.time` object was considered to be `False` if it represented midnight in UTC. It is error-prone when using the `if obj:` syntax to check if the `obj` is null or some equivalent of "empty." +پیش از پایتون 3.5، مقدار بولی برای شیء `datetime.time` اگر نشان‌دهندهٔ نیمه‌شب به وقت UTC بود، برابر با `False` در نظر گرفته می‌شد. این رفتار در استفاده از دستور `if obj:` برای بررسی تهی بودن شیء یا برابر بودن آن با مقدار "خالی"، ممکن است باعث بروز خطا شود. --- --- @@ -3118,7 +3133,7 @@ True import this ``` -Wait, what's **this**? `this` is love :heart: +صبر کن، **این** چیه؟ `this` عشقه :heart: **خروجی:** ``` @@ -3213,7 +3228,7 @@ Try block executed successfully... - عبارت `else` پس از بلاک `try` به عنوان «عبارت تکمیل» (`completion clause`) نیز شناخته می‌شود؛ چراکه رسیدن به عبارت `else` در ساختار `try` به این معنی است که بلاک `try` بدون رخ دادن استثنا با موفقیت تکمیل شده است. --- -### ◀ Ellipsis * +### ◀ عملگر Ellipsis * ```py def some_func(): @@ -3240,7 +3255,7 @@ Ellipsis >>> ... Ellipsis ``` -- `Ellipsis` می‌تواند برای چندین منظور استفاده شود: +- عملگر `Ellipsis` می‌تواند برای چندین منظور استفاده شود: + به عنوان یک نگه‌دارنده برای کدی که هنوز نوشته نشده است (مانند دستور `pass`) + در سینتکس برش (`slicing`) برای نمایش برش کامل در ابعاد باقی‌مانده @@ -3810,9 +3825,9 @@ def dict_size(o): ```py >>> some_str = "wtfpython" >>> some_list = ['w', 't', 'f', 'p', 'y', 't', 'h', 'o', 'n'] - >>> some_list is some_list[:] # False expected because a new object is created. + >>> some_list is some_list[:] # انتظار می‌رود False باشد چون یک شیء جدید ایجاد شده است. False - >>> some_str is some_str[:] # True because strings are immutable, so making a new object is of not much use. + >>> some_str is some_str[:] # True چون رشته‌ها تغییرناپذیر هستند، بنابراین ساختن یک شیء جدید فایده‌ای ندارد. True ```