mirror of
https://github.com/satwikkansal/wtfpython
synced 2025-06-09 17:42:35 +02:00
Fix some rtl
This commit is contained in:
parent
48b0b96193
commit
17046d418a
47
translations/fa-farsi/README.md
vendored
47
translations/fa-farsi/README.md
vendored
@ -869,7 +869,7 @@ for i, some_dict[i] in enumerate(some_string):
|
||||
|
||||
- عبارت مقداردهی `i = 10` به خاطر نحوه کار کردن حلقهها، هیچوقت باعث تغییر در تکرار حلقه نمیشه. قبل از شروع هر تکرار، مقدار بعدی که توسط شیء قابل تکرار (که در اینجا `range(4)` است) ارائه میشه، از بسته خارج میشه و به متغیرهای لیست هدف (که در اینجا `i` است) مقداردهی میشه.
|
||||
|
||||
* تابع `enumerate(some_string)`، یک متغیر `i` (که یک شمارنده اقزایشی است) و یک حرف از حروف رشته `some_string` رو در هر تکرار برمیگردونه. و بعدش برای کلید `i` (تازه مقداردهیشده) در دیکشنری `some_dict`، مقدار اون حرف رو تنظیم میکنه. بازشده این حلقه میتونه مانند مثال زیر ساده بشه:
|
||||
* تابع `enumerate(some_string)`، یک متغیر `i` (که یک شمارنده افزایشی است) و یک حرف از حروف رشته `some_string` رو در هر تکرار برمیگردونه. و بعدش برای کلید `i` (تازه مقداردهیشده) در دیکشنری `some_dict`، مقدار اون حرف رو تنظیم میکنه. بازشده این حلقه میتونه مانند مثال زیر ساده بشه:
|
||||
```py
|
||||
>>> i, some_dict[i] = (0, 'w')
|
||||
>>> i, some_dict[i] = (1, 't')
|
||||
@ -969,10 +969,15 @@ False
|
||||
<!-- Example ID: 69329249-bdcb-424f-bd09-cca2e6705a7a --->
|
||||
|
||||
```py
|
||||
|
||||
# بیاید یک سطر تشکیل بدیم
|
||||
|
||||
row = [""] * 3 #row i['', '', '']
|
||||
|
||||
# حالا بیاید تخته بازی رو ایجاد کنیم
|
||||
|
||||
board = [row] * 3
|
||||
|
||||
```
|
||||
|
||||
**خروجی:**
|
||||
@ -1036,7 +1041,7 @@ for x in range(7):
|
||||
def some_func():
|
||||
return x
|
||||
funcs.append(some_func)
|
||||
results.append(some_func()) # note the function call here
|
||||
results.append(some_func()) # به فراخوانی تابع دقت کنید.
|
||||
|
||||
funcs_results = [func() for func in funcs]
|
||||
```
|
||||
@ -1150,7 +1155,6 @@ False
|
||||
- هیچ کلاس پایه واقعی بین کلاسهای `object` و `type` وجود نداره. سردرگمی که در قطعهکدهای بالا به وجود اومده، به خاطر اینه که ما به این روابط (یعنی `issubclass` و `isinstance`) از دیدگاه کلاسهای پایتون فکر میکنیم. رابطه بین `object` و `type` رو در پایتون خالص نمیشه بازتولید کرد. برای اینکه دقیقتر باشیم، رابطههای زیر در پایتون خالص نمیتونند بازتولید بشن.
|
||||
+ کلاس A یک نمونه از کلاس B، و کلاس B یک نمونه از کلاس A باشه.
|
||||
+ کلاس A یک نمونه از خودش باشه.
|
||||
-
|
||||
- این روابط بین `object` و `type` (که هردو نمونه یکدیگه و همچنین خودشون باشند) به خاطر "تقلب" در مرحله پیادهسازی، وجود دارند.
|
||||
|
||||
---
|
||||
@ -1289,7 +1293,7 @@ True
|
||||
|
||||
چرا این تغییر درست-نادرسته؟
|
||||
|
||||
#### 💡 Explanation:
|
||||
#### 💡 توضیحات:
|
||||
|
||||
- پیادهسازی تابع `all` معادل است با
|
||||
|
||||
@ -1400,7 +1404,7 @@ True
|
||||
SyntaxError: invalid syntax
|
||||
```
|
||||
|
||||
#### 💡 Explanation:
|
||||
#### 💡 توضیح:
|
||||
|
||||
* تقدم عملگرها بر نحوهی ارزیابی یک عبارت تأثیر میگذارد، و در پایتون، عملگر `==` تقدم بالاتری نسبت به عملگر `not` دارد.
|
||||
* بنابراین عبارت `not x == y` معادل `not (x == y)` است که خودش معادل `not (True == False)` بوده و در نهایت به `True` ارزیابی میشود.
|
||||
@ -1417,7 +1421,7 @@ SyntaxError: invalid syntax
|
||||
wtfpython
|
||||
>>> print("wtfpython""")
|
||||
wtfpython
|
||||
>>> # The following statements raise `SyntaxError`
|
||||
>>> # کد های زیر خطای سینکس دارند.
|
||||
>>> # print('''wtfpython')
|
||||
>>> # print("""wtfpython")
|
||||
File "<input>", line 3
|
||||
@ -1428,12 +1432,14 @@ SyntaxError: EOF while scanning triple-quoted string literal
|
||||
|
||||
#### 💡 توضیح:
|
||||
+ پایتون از الحاق ضمنی [رشتههای متنی](https://docs.python.org/3/reference/lexical_analysis.html#string-literal-concatenation) پشتیبانی میکند. برای مثال،
|
||||
|
||||
```
|
||||
>>> print("wtf" "python")
|
||||
wtfpython
|
||||
>>> print("wtf" "") # or "wtf"""
|
||||
wtf
|
||||
```
|
||||
|
||||
+ `'''` و `"""` نیز جداکنندههای رشتهای در پایتون هستند که باعث ایجاد SyntaxError میشوند، چون مفسر پایتون هنگام اسکن رشتهای که با سهنقلقول آغاز شده، انتظار یک سهنقلقول پایانی بهعنوان جداکننده را دارد.
|
||||
|
||||
---
|
||||
@ -1442,9 +1448,10 @@ SyntaxError: EOF while scanning triple-quoted string literal
|
||||
<!-- Example ID: 0bba5fa7-9e6d-4cd2-8b94-952d061af5dd --->
|
||||
1\.
|
||||
|
||||
‫ یک مثال ساده برای شمردن تعداد مقادیر بولی # اعداد صحیح در یک iterable با انواع دادهی مخلوط.
|
||||
|
||||
```py
|
||||
# یک مثال ساده برای شمردن تعداد مقادیر بولی و
|
||||
# اعداد صحیح در یک iterable با انواع دادهی مخلوط.
|
||||
|
||||
mixed_list = [False, 1.0, "some_string", 3, True, [], False]
|
||||
integers_found_so_far = 0
|
||||
booleans_found_so_far = 0
|
||||
@ -1528,7 +1535,7 @@ I have lost faith in truth!
|
||||
|
||||
---
|
||||
|
||||
### ◀ ویژگیهای کلاس و ویژگیهای نمونه
|
||||
### ◀ متغیرهای کلاس و متغیرهای نمونه
|
||||
<!-- Example ID: 6f332208-33bd-482d-8106-42863b739ed9 --->
|
||||
1\.
|
||||
```py
|
||||
@ -1599,7 +1606,7 @@ True
|
||||
|
||||
---
|
||||
|
||||
### ◀ yielding None
|
||||
### ◀ واگذار کردن None
|
||||
<!-- Example ID: 5a40c241-2c30-40d0-8ba9-cf7e097b3b53 --->
|
||||
```py
|
||||
some_iterable = ('a', 'b')
|
||||
@ -1608,7 +1615,7 @@ def some_func(val):
|
||||
return "something"
|
||||
```
|
||||
|
||||
**Output (<= 3.7.x):**
|
||||
**خروجی (<= 3.7.x):**
|
||||
|
||||
```py
|
||||
>>> [x for x in some_iterable]
|
||||
@ -1623,16 +1630,16 @@ def some_func(val):
|
||||
['a', 'something', 'b', 'something']
|
||||
```
|
||||
|
||||
#### 💡 Explanation:
|
||||
- This is a bug in CPython's handling of `yield` in generators and comprehensions.
|
||||
- Source and explanation can be found here: https://stackoverflow.com/questions/32139885/yield-in-list-comprehensions-and-generator-expressions
|
||||
- Related bug report: https://bugs.python.org/issue10544
|
||||
- Python 3.8+ no longer allows `yield` inside list comprehension and will throw a `SyntaxError`.
|
||||
#### 💡 توضیح:
|
||||
- این یک باگ در نحوهی مدیریت `yield` توسط CPython در ژنراتورها و درک لیستی (comprehensions) است.
|
||||
- منبع و توضیحات را میتوانید اینجا ببینید: https://stackoverflow.com/questions/32139885/yield-in-list-comprehensions-and-generator-expressions
|
||||
- گزارش باگ مرتبط: https://bugs.python.org/issue10544
|
||||
- از نسخهی ۳.۸ به بعد، پایتون دیگر اجازهی استفاده از `yield` در داخل درک لیستی را نمیدهد و خطای `SyntaxError` ایجاد خواهد کرد.
|
||||
|
||||
---
|
||||
|
||||
|
||||
### ◀ Yielding from... return! *
|
||||
### ◀ بازگرداندن با استفاده از `yield from`!
|
||||
<!-- Example ID: 5626d8ef-8802-49c2-adbc-7cda5c550816 --->
|
||||
1\.
|
||||
|
||||
@ -1677,7 +1684,7 @@ def some_func(x):
|
||||
|
||||
+ از پایتون نسخه ۳.۳ به بعد، امکان استفاده از عبارت `return` همراه با مقدار در داخل ژنراتورها فراهم شد (نگاه کنید به [PEP380](https://www.python.org/dev/peps/pep-0380/)). [مستندات رسمی](https://www.python.org/dev/peps/pep-0380/#enhancements-to-stopiteration) میگویند:
|
||||
|
||||
> "... `return expr` در یک ژنراتور باعث میشود که هنگام خروج از ژنراتور، `StopIteration(expr)` ایجاد شود."
|
||||
> دلیل: "... `return expr` در یک ژنراتور باعث میشود که هنگام خروج از ژنراتور، `StopIteration(expr)` ایجاد شود."
|
||||
|
||||
+ در حالت `some_func(3)`، استثنای `StopIteration` در ابتدای اجرا به دلیل وجود دستور `return` رخ میدهد. این استثنا بهطور خودکار درون پوشش `list(...)` و حلقه `for` گرفته میشود. بنابراین، دو قطعهکد بالا منجر به یک لیست خالی میشوند.
|
||||
|
||||
@ -1752,7 +1759,7 @@ True
|
||||
|
||||
#### 💡 توضیح:
|
||||
|
||||
- `'inf'` و `'nan'` رشتههایی خاص هستند (نسبت به حروف بزرگ و کوچک حساس نیستند) که وقتی بهطور صریح به نوع `float` تبدیل شوند، به ترتیب برای نمایش "بینهایت" ریاضی و "عدد نیست" استفاده میشوند.
|
||||
- در اینجا، `'inf'` و `'nan'` رشتههایی خاص هستند (نسبت به حروف بزرگ و کوچک حساس نیستند) که وقتی بهطور صریح به نوع `float` تبدیل شوند، به ترتیب برای نمایش "بینهایت" ریاضی و "عدد نیست" استفاده میشوند.
|
||||
|
||||
- از آنجا که طبق استاندارد IEEE، `NaN != NaN`، پایبندی به این قانون فرض بازتابپذیری (reflexivity) یک عنصر در مجموعهها را در پایتون نقض میکند؛ یعنی اگر `x` عضوی از مجموعهای مثل `list` باشد، پیادهسازیهایی مانند مقایسه، بر اساس این فرض هستند که `x == x`. به دلیل همین فرض، ابتدا هویت (identity) دو عنصر مقایسه میشود (چون سریعتر است) و فقط زمانی مقادیر مقایسه میشوند که هویتها متفاوت باشند. قطعهکد زیر موضوع را روشنتر میکند،
|
||||
|
||||
@ -2244,7 +2251,7 @@ for idx, item in enumerate(list_4):
|
||||
|
||||
میتوانید حدس بزنید چرا خروجی `[2, 4]` است؟
|
||||
|
||||
#### 💡 Explanation:
|
||||
#### 💡 توضیح:
|
||||
|
||||
* هیچوقت ایدهی خوبی نیست که شیئی را که روی آن پیمایش میکنید تغییر دهید. روش درست این است که روی یک کپی از آن شیء پیمایش کنید؛ در اینجا `list_3[:]` دقیقاً همین کار را میکند.
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user