3.1. آرگومانهای کلمه کلیدی
میتونی موقع صدا کردن تابع، اسم پارامترها رو مشخص کنی تا ترتیب مهم نباشه. به این میگن آرگومانهای کلمه کلیدی.
✨ مثال 1: اطلاعات کاربر
def user_info(name, age):
print(f"Name: {name}, Age: {age}") # Print user info
user_info(age=18, name="Ali") # Keyword arguments
user_info(name="Sara", age=20)
🔹 خروجی:
Name: Ali, Age: 18
Name: Sara, Age: 20
✨ مثال 2: هزینه سفر
def travel_cost(destination, cost):
print(f"Trip to {destination} costs {cost}") # Print travel cost
travel_cost(cost=500, destination="Paris")
🔹 خروجی:
Trip to Paris costs 500
✨مثال 3: سفارش غذا
def order_food(food, quantity):
print(f"Ordered {quantity} of {food}") # Print order
order_food(quantity=2, food="Pizza")
🔹 خروجی:
Ordered 2 of Pizza
✅ چرا کلمه کلیدی باحاله؟
- ترتیب پارامترها مهم نیست، پس کد خواناتر میشه.
- وقتی تابع پارامترهای زیادی داره، مشخص کردن اسمها از اشتباه جلوگیری میکنه.
✨ مثال روزمره: فرض کن داری یه اپلیکیشن رزرو بلیط میسازی. با آرگومانهای کلمه کلیدی، کاربر میتونه مقصد و تاریخ رو به هر ترتیبی وارد کنه.
❓ تمرین: یه تابع بنویسید که سه پارامتر (اسم، شهر، شغل) بگیره و پیغام چاپ کنه. تابع رو با آرگومانهای کلمه کلیدی و با ترتیبهای مختلف صدا کنید.
💯 @PythonForYou 🧑💻👩💻
4.1. آرگومانهای با مقدار پیشفرض
میتونی برای پارامترها مقدار پیشفرض بذاری، یعنی اگه موقع صدا کردن تابع چیزی ندی، از اون مقدار استفاده میشه.
✨ مثال 1: خوشامدگویی پیشفرض
def greet(name="Guest"):
print(f"Hello {name}, welcome to coding!") # Print greeting
greet("Ali") # Use provided name
greet() # Use default name
🔹 خروجی:
Hello Ali, welcome to coding!
Hello Guest, welcome to coding!
✨ مثال 2: رزرو رستوران
def book_table(name, people=2):
print(f"Table for {people} reserved for {name}") # Print reservation
book_table("Sara", 4)
book_table("Ali")
🔹 خروجی:
Table for 4 reserved for Sara
Table for 2 reserved for Ali
✨ مثال 3: تنظیمات بازی
def start_game(player, level="Easy"):
print(f"{player} started game at {level} level") # Print game start
start_game("Ali", "Hard")
start_game("Sara")
🔹 خروجی:
Ali started game at Hard level
Sara started game at Easy level
✅ نکتهها:
- پارامترهای پیشفرض باید بعد از پارامترهای اجباری تعریف بشن.
- این ویژگی تابع رو انعطافپذیرتر میکنه.
✨ مثال روزمره: فرض کن داری یه اپلیکیشن برای تنظیم قرار ملاقات میسازی. تابع زمان قرار رو میگیره، ولی اگه کاربر زمانی نداد، پیشفرض "10 صبح" باشه.
❓ تمرین: یه تابع بنویسید که دو پارامتر بگیره: اسم و پیام (با پیشفرض "Welcome!"). تابع رو یه بار با اسم و پیام، و یه بار فقط با اسم صدا کنید.
💯 @PythonForYou 🧑💻👩💻
5.1. تعریف و فراخوانی توابع با تعداد پارامترهای متغیر (args)
اگه نخوای تعداد پارامترها رو محدود کنی، میتونی از *args استفاده کنی. این به تابع اجازه میده هر تعداد ورودی بگیره.
✨ مثال 1: جمع اعداد متغیر
def sum_numbers(*args):
total = 0
for num in args:
total += num
return total # Return sum of all numbers
print(sum_numbers(1, 2, 3)) # 3 numbers
print(sum_numbers(1, 2, 3, 4, 5)) # 5 numbers
🔹 خروجی:
6
15
✨ مثال 2: میانگین نمرات
def average_scores(*scores):
if not scores:
return 0 # Return 0 if no scores
total = sum(scores)
count = len(scores)
return total / count # Return average
print(average_scores(10, 15, 20))
print(average_scores(5, 10, 15, 20, 25))
خروجی:
15.0
15.0
✨ مثال 3: لیست خرید
pythondef shopping_list(*items):
print(f"Shopping list: {items}") # Print all items
shopping_list("Apple", "Banana", "Orange")
shopping_list("Bread", "Milk")
🔹 خروجی:
textShopping list: ('Apple', 'Banana', 'Orange')
Shopping list: ('Bread', 'Milk')
✅ چرا args باحاله؟
- میتونی هر تعداد ورودی بدی، بدون اینکه تعداد پارامترها رو مشخص کنی.
- مثل یه لیست عمل میکنه، پس میتونی باهاش حلقه بزنی.
✨ مثال روزمره: فرض کن داری یه اپلیکیشن برای مدیریت خرید میسازی. تابع لیست خرید میتونه هر تعداد آیتم رو بگیره و نشون بده.
❓ تمرین: یه تابع بنویسید که تعداد متغیر عدد بگیره و بزرگترین عدد رو برگردونه. تابع رو با چند مجموعه ورودی تست کنید (مثلاً 3 و 5 عدد).
💯 @PythonForYou 🧑💻👩💻
@PythonForYou .pdf
حجم:
439.8K
✅ جزوه آموزشی پایتون به زبان فارسی 😍
💯 @PythonForYou 🧑💻👩💻
@PythonForYou.pdf
حجم:
13.38M
📚 کتاب ارزشمند یادگیری پایتون به زبان فارسی 🤩
💯 @PythonForYou 🧑💻👩💻
@PythonForYou.pdf
حجم:
5.05M
✨ بریم برای یه کتاب عالی زبان انگلیسی در خصوص پایتون 😍
📚 Python Bookcamp Exercises and Projects
💯 @PythonForYou 🧑💻👩💻
@PythonForYou.pdf
حجم:
15.11M
✨ این هم یه کتاب دیگه با مثال های متنوع در راستای افزایش مهارت شما عزیزان
📚 The Python Workbook: A Brief Introduction with Exercises and Solutions
💯 @PythonForYou 🧑💻👩💻
@PythonForYou.pdf
حجم:
1.04M
✨ مجموعه ای از نکات و مطالب پایتون است که به شکل بسیار کاربردی و ارزشمند جمع آوری شده است. مطالب جامع همراه با مثال (از جمله برنامه نویسی سوکت و امنیت با پایتون) را در بر دارد. پیشنهاد می شود حتما دانلود کنید.
📚 python-cheatsheet Documentation
💯 @PythonForYou 🧑💻👩💻
📢 تسلط بر ژنراتورها (Generators) 🐍
در این پست قراره عمیق به دنیای ژنراتورها در پایتون شیرجه بزنیم! 😎
ژنراتورها ابزارهایی فوقالعاده برای مدیریت دادههای بزرگ، صرفهجویی تو حافظه و نوشتن کدهای بهینه هستن.
از پایه تا ترفندهای حرفهای، همهچیز اینجاست! 🚀
بریم شروع کنیم!
ژنراتورها چیه؟ 🤔
ژنراتورها تو پایتون یه نوع شیء قابلتکرار (iterable) هستن که مقادیر رو یکییکی و بهصورت تنبل (lazy) تولید میکنن، یعنی به جای ذخیره کل دادهها تو حافظه، هر مقدار رو فقط موقع نیاز میسازن. این باعث میشه برای دادههای بزرگ یا حتی دنبالههای بینهایت عالی باشن.
🟠 دو روش اصلی برای ساخت ژنراتورها:
1️⃣ Generator Expressions:
شبیه List Comprehension، ولی با () به جای [].
2️⃣ توابع ژنراتور:با کلمه کلیدی yield تو تابع.
💯 @PythonForYou 🧑💻👩💻
1️⃣ Generator Expressions
شبیه List Comprehension، ولی به جای فهرست، یه ژنراتور تولید میکنن که مقادیر رو یکییکی میده.
squares_gen = (x**2 for x in range(5))
for num in squares_gen:
print(num)
# Khoroji:
# 0
# 1
# 4
# 9
# 16
🔹 مقایسه با فهرست:
squares_list = [x**2 for x in range(5)]
print(squares_list) # Khoroji: [0, 1, 4, 9, 16]
# Ama generator:
squares_gen = (x**2 for x in range(5))
print(squares_gen) # Khoroji: <generator object <genexpr> at ...>
💡 نکته ریز:
🔻 ژنراتورها فقط یهبار قابل پیمایشان. بعد از پیمایش، خالی میشن:
squares_gen = (x**2 for x in range(5))
print(list(squares_gen)) # Khoroji: [0, 1, 4, 9, 16]
print(list(squares_gen)) # Khoroji: [] (chon khali shode)
💯 @PythonForYou 🧑💻👩💻
2️⃣ توابع ژنراتور با yield
با yield تو یه تابع، میتونی ژنراتور بسازی که مقادیر رو یکییکی برگردونه و حالت تابع رو حفظ کنه.
✨ مثال ساده:
def my_generator():
yield 1
yield 2
yield 3
gen = my_generator()
for num in gen:
print(num)
# Khoroji:
# 1
# 2
# 3
✨ مثال پیشرفتهتر (فیبوناچی):
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
for num in fibonacci(6):
print(num)
# Khoroji:
# 0
# 1
# 1
# 2
# 3
# 5
💡 نکته ریز:
درواقع yield اجرای تابع رو متوقف میکنه و مقدار رو برمیگردونه، ولی حالت تابع رو حفظ میکنه.
برعکس return که تابع رو کامل تموم میکنه، yield منتظر فراخوانی بعدی میمونه.
💯 @PythonForYou 🧑💻👩💻
❓ چرا ژنراتورها؟ مزایا و کاربردها 🤔
🔸 صرفهجویی تو حافظه:
ژنراتورها مقادیر رو یکییکی تولید میکنن، نه یهجا:
import sys
gen = (x for x in range(1000000))
print(sys.getsizeof(gen)) # ~104 bytes
lst = [x for x in range(1000000)]
print(sys.getsizeof(lst)) # ~9000000 bytes
🔸 پشتیبانی از دادههای بینهایت:
میتونی دنبالههای نامحدود بسازی:
def infinite_numbers():
num = 0
while True:
yield num
num += 1
gen = infinite_numbers()
for _ in range(5):
print(next(gen))
# Khoroji: 0, 1, 2, 3, 4
🔸 ترکیب با توابع داخلی:
ژنراتورها با sum، max و غیره خوب کار میکنن:
print(sum(x for x in range(100))) # Khoroji: 4950
💯 @PythonForYou 🧑💻👩💻