4️⃣ نکات ریز و ترفندهای حرفهای
🔸 استفاده از ()next:
برای گرفتن مقدار بعدی ژنراتور:
gen = (x**2 for x in range(3))
print(next(gen)) # Khoroji: 0
print(next(gen)) # Khoroji: 1
print(next(gen)) # Khoroji: 4
🔸 مدیریت خطای StopIteration:
try:
gen = (x for x in range(2))
print(next(gen))
print(next(gen))
print(next(gen))
except StopIteration:
print("Generator tamoom shod! 🚫")
🔸 ترکیب با ()range:
evens_gen = (x for x in range(0, 10, 2))
print(list(evens_gen)) # Khoroji: [0, 2, 4, 6, 8]
🔸 ژنراتورهای تودرتو با yield from:
def nested_generator():
yield from [1, 2, 3]
yield from [4, 5, 6]
for num in nested_generator():
print(num)
# Khoroji: 1, 2, 3, 4, 5, 6
🔸 استفاده تو pipeline داده:
برای فیلتر کردن یا تبدیل دادهها بهصورت زنجیرهای:
def filter_evens():
for num in range(10):
if num % 2 == 0:
yield num
for num in filter_evens():
print(f"Zoj: {num}")
# Khoroji: Zoj: 0, Zoj: 2, Zoj: 4, Zoj: 6, Zoj: 8
💯 @PythonForYou 🧑💻👩💻
5️⃣ مثالهای کاربردی
🔸 تولید اعداد اول:
def is_prime(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
def prime_generator(limit):
for num in range(limit):
if is_prime(num):
yield num
for prime in prime_generator(20):
print(prime)
# Khoroji: 2, 3, 5, 7, 11, 13, 17, 19
🔸 ژنراتور برای دادههای بزرگ:
def large_data_generator():
for i in range(1000000):
yield i * 2
gen = large_data_generator()
for _ in range(5):
print(next(gen))
# Khoroji: 0, 2, 4, 6, 8
🔸 فیلتر کردن با ژنراتور:
numbers = [1, 2, 3, 4, 5, 6]
odds_gen = (x for x in numbers if x % 2 != 0)
print(list(odds_gen)) # Khoroji: [1, 3, 5]
—-—-—-—-—-—-—-—-—-—-—
6️⃣ نکات حرفهای
🔸 صرفهجویی در حافظه:
همیشه ژنراتورها رو به فهرست ترجیح بده برای دادههای بزرگ، مگر اینکه واقعاً به فهرست نیاز داشته باشی.
🔸 خوانایی کد:
اسمهای معنیدار برای ژنراتورها انتخاب کن (مثل evens_gen به جای g).
🔸 ترکیب با itertools:
برای کارهای پیچیدهتر، از ماژول itertools استفاده کن:
from itertools import islice
gen = (x**2 for x in range(100))
print(list(islice(gen, 5))) # Khoroji: [0, 1, 4, 9, 16]
🔸 مدیریت پایان ژنراتور:
همیشه آماده خطای StopIteration باش یا از حلقه for استفاده کن که خودش این خطا رو مدیریت میکنه.
💯 @PythonForYou 🧑💻👩💻
📢 همهچیز درباره فهرستها (Lists) + نکات حرفهای 🐍
در ادامه قراره غوغا کنیم و همهچیز درباره فهرستها (Lists) در پایتون رو یاد بگیریم! 😎
فهرستها یکی از پرکاربردترین ابزارهای پایتونن که تو هر پروژهای به کار میان. از تعریف ساده تا ترفندهای حرفهای و نکات ریز، همهچیز اینجاست! 🚀
بریم شروع کنیم!
💯 @PythonForYou 🧑💻👩💻
فهرست (List) چیه؟ 🤔
فهرست یه مجموعه مرتب از دادههاست که میتونه هر نوع دادهای (عدد، رشته، حتی فهرست دیگه!) رو نگه داره. فهرستها قابل تغییر (mutable) هستن، یعنی میتونی بعد از تعریف، اونا رو عوض کنی.
✅ سینتکس (نحوه تعریف):
my_list = [1, 2, "ali", True, 3.14]
# ya
empty_list = []
⬟〰️⬟〰️⬟〰️⬟〰️⬟
💡 ویژگیها:
- تو کروشه [] تعریف میشن.
- میتونی دادههای مختلف (int, str, bool, ...) رو باهم ذخیره کنی.
- ترتیب دارن (ایندکس از 0 شروع میشه).
- میتونی عناصر رو اضافه، حذف یا تغییر بدی.
💯 @PythonForYou 🧑💻👩💻
🟢 عملیات اصلی با فهرستها
⭐️ 1. دسترسی به عناصر (Indexing):
با ایندکس (شماره جایگاه) به عناصر دسترسی پیدا کن.
fruits = ["sib", "moz", "portoghal"]
print(fruits[0]) # Khoroji: sib
print(fruits[-1]) # Khoroji: portoghal (az akhar)
💡 نکته ریز:
✔️ ایندکس منفی برای دسترسی از آخر فهرست عالیه! مثلاً 1- یعنی آخرین عنصر.
✔️ اگه ایندکس اشتباه بدی (مثلاً fruits[10])، ارور IndexError میگیری.
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 2. برش (Slicing):
یه بخش از فهرست رو با [start:end:step] جدا کن.
numbers = [0, 1, 2, 3, 4, 5]
print(numbers[1:4]) # Khoroji: [1, 2, 3]
print(numbers[::2]) # Khoroji: [0, 2, 4] (har do adad yeki)
💡 نکته ریز:
✔️ اگه start یا end ندی، پایتون از اول یا تا آخر میره.
✔️و step منفی برای برعکس کردن فهرست:
print(numbers[::-1]) # Khoroji: [5, 4, 3, 2, 1, 0]
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 3. اضافه کردن عنصر:
🔸 append(): یه عنصر به آخر فهرست اضافه میکنه.
🔸 insert(): یه عنصر تو ایندکس خاص اضافه میکنه.
🔸 extend(): چندتا عنصر (یا فهرست دیگه) رو اضافه میکنه.
fruits = ["sib", "moz"]
fruits.append("portoghal") # ["sib", "moz", "portoghal"]
fruits.insert(1, "anar") # ["sib", "anar", "moz", "portoghal"]
fruits.extend(["angoor", "hendoone"]) # ["sib", "anar", "moz", "portoghal", "angoor", "hendoone"]
💡 نکته ریز:
- دقت کن که append یه عنصر رو کامل اضافه میکنه، حتی اگه خودش فهرست باشه:
fruits.append(["kivi", "narengi"]) # ["sib", "anar", ..., ["kivi", "narengi"]]
- برای اضافه کردن عناصر یه فهرست دیگه، از extend یا عملگر + استفاده کن.
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 4. حذف عنصر:
🔹 remove(): اولین نمونه از یه مقدار رو حذف میکنه.
🔹 pop(): عنصر با ایندکس مشخص (یا آخرین عنصر) رو حذف و برمیگردونه.
🔹 clear(): کل فهرست رو خالی میکنه.
fruits = ["sib", "moz", "sib"]
fruits.remove("sib") # ["moz", "sib"]
last_fruit = fruits.pop() # last_fruit = "sib", fruits = ["moz"]
fruits.clear() # fruits = []
💡 نکته ریز:
- اگه مقداری که میخوای با remove حذف کنی تو فهرست نباشه، ارور ValueError میگیره.
- برای جلوگیری از ارور، اول چک کن:
if "sib" in fruits:
fruits.remove("sib")
⬟〰️⬟〰️⬟〰️⬟〰️⬟
⭐️ 5. تغییر عنصر:
با ایندکس میتونی مقدار یه عنصر رو عوض کنی.
fruits = ["sib", "moz"]
fruits[1] = "anar" # ["sib", "anar"]
💯 @PythonForYou 🧑💻👩💻