🐍 آموزش جامع Python — پست ۶۴
ترکیب
میتوانیم در هر شاخه از
🔹 مثال با
اگر:
هر دو شرط اول درست هستند، بنابراین
🔹 مثال با
اگر یکی از دو مقایسه
⚠️ نکته مهم
در شرطهای ترکیبی، از پرانتز برای مشخص کردن منطق استفاده کنید:
ابتدا:
سپس:
🧠 خلاصه
🎯 تمرین
شرطی بنویسید که اگر:
پیام
پست ۶۴ از دوره جامع Python 🐍
ترکیب
if و elif با چند شرطمیتوانیم در هر شاخه از
if و elif چند شرط را با and و or ترکیب کنیم.🔹 مثال با
andage = 25
has_id = True
if age >= 18 and has_id:
print("Access granted")
elif age >= 18 and not has_id:
print("ID required")
else:
print("Access denied")
اگر:
age >= 18 → True
has_id → True
هر دو شرط اول درست هستند، بنابراین
Access granted چاپ میشود.🔹 مثال با
orusername = "admin"
if username == "admin" or username == "root":
print("Privileged user")
else:
print("Normal user")
اگر یکی از دو مقایسه
True باشد، شرط اجرا میشود.⚠️ نکته مهم
در شرطهای ترکیبی، از پرانتز برای مشخص کردن منطق استفاده کنید:
age = 20
has_id = True
is_member = False
if age >= 18 and (has_id or is_member):
print("Access granted")
ابتدا:
has_id or is_member
True or False → True
سپس:
age >= 18 and True
True and True → True
🧠 خلاصه
and → همه شرطها باید درست باشند
or → حداقل یک شرط درست باشد
() → گروهبندی شرطها
🎯 تمرین
شرطی بنویسید که اگر:
سن حداقل 18 باشد
و
کاربر عضو باشد یا مدیر باشد
پیام
Access granted را چاپ کند.پست ۶۴ از دوره جامع Python 🐍
🐍 آموزش جامع Python — پست ۶۵
شرطهای تو در تو با
گاهی یک شرط فقط زمانی باید بررسی شود که شرط دیگری قبلاً درست بوده باشد. در این حالت از
🔹 مثال
ابتدا سن بررسی میشود:
پس
سپس:
بنابراین خروجی:
🔹 شرط تو در تو با
خروجی:
⚠️ نکته مهم
در شرطهای تو در تو، تورفتگی (
🧠 خلاصه
یعنی شرط دوم فقط وقتی بررسی میشود که شرط اول
🎯 تمرین
برنامهای بنویسید که:
پست ۶۵ از دوره جامع Python 🐍
شرطهای تو در تو با
ifگاهی یک شرط فقط زمانی باید بررسی شود که شرط دیگری قبلاً درست بوده باشد. در این حالت از
if تو در تو استفاده میکنیم.🔹 مثال
age = 20
has_id = True
if age >= 18:
if has_id:
print("Access granted")
else:
print("ID required")
else:
print("Too young")
ابتدا سن بررسی میشود:
age >= 18 → True
پس
if داخلی اجرا میشود.سپس:
has_id → True
بنابراین خروجی:
Access granted
🔹 شرط تو در تو با
elifscore = 85
if score >= 50:
if score >= 90:
print("Excellent")
elif score >= 75:
print("Good")
else:
print("Passed")
else:
print("Failed")
خروجی:
Good
⚠️ نکته مهم
در شرطهای تو در تو، تورفتگی (
indentation) بسیار مهم است.if condition:
if another_condition:
print("...")
if دوم داخل if اول قرار دارد.🧠 خلاصه
if
if
code
یعنی شرط دوم فقط وقتی بررسی میشود که شرط اول
True باشد.🎯 تمرین
برنامهای بنویسید که:
اگر کاربر وارد شده بود:
اگر مدیر بود → Admin
در غیر این صورت → User
در غیر این صورت:
Login required
پست ۶۵ از دوره جامع Python 🐍
🐍 آموزش جامع Python — پست ۶۶
ترکیب
در پست قبل با شرطهای تو در تو آشنا شدیم.
حالا میتوانیم داخل شرطهای تو در تو از
🔹 مثال
ابتدا:
پس وارد شرط داخلی میشویم.
سپس:
بنابراین:
🔹 مثال با
برای
⚠️ نکته مهم
در شرطهای تو در تو، هر سطح از شرط باید تورفتگی مناسب داشته باشد:
🧠 خلاصه
🎯 تمرین
برنامهای بنویسید که:
پست ۶۶ از دوره جامع Python 🐍
ترکیب
if تو در تو با and و orدر پست قبل با شرطهای تو در تو آشنا شدیم.
حالا میتوانیم داخل شرطهای تو در تو از
and و or هم استفاده کنیم.🔹 مثال
is_logged_in = True
is_member = True
is_admin = False
if is_logged_in:
if is_admin or is_member:
print("Access granted")
else:
print("Membership required")
else:
print("Please login")
ابتدا:
is_logged_in → True
پس وارد شرط داخلی میشویم.
سپس:
is_admin or is_member
False or True → True
بنابراین:
Access granted
🔹 مثال با
andage = 20
has_id = True
is_member = True
if age >= 18:
if has_id and is_member:
print("Full access")
else:
print("Requirements not met")
else:
print("Too young")
برای
Full access هر دو شرط داخلی باید True باشند.⚠️ نکته مهم
در شرطهای تو در تو، هر سطح از شرط باید تورفتگی مناسب داشته باشد:
if condition:
if another_condition:
print("...")
🧠 خلاصه
if اول → شرط اصلی
if دوم → شرط وابسته
and / or → ترکیب شرطهای داخلی
🎯 تمرین
برنامهای بنویسید که:
اگر کاربر وارد شده بود:
اگر سن حداقل 18 بود:
اگر عضو یا مدیر بود → Access granted
در غیر این صورت → Membership required
در غیر این صورت → Too young
در غیر این صورت:
Please login
پست ۶۶ از دوره جامع Python 🐍
🐍 آموزش جامع Python — پست ۶۷
تبدیل شرطهای تو در تو به شرط ترکیبی
گاهی یک شرط تو در تو را میتوان با
🔹 حالت تو در تو
میتوانیم همین منطق را سادهتر بنویسیم:
در این حالت، استفاده از
🔹 یک مثال دیگر
شرط تو در تو:
نسخه ترکیبی:
⚠️ نکته مهم
هر شرط تو در تو را نمیتوان بدون بررسی به
اگر شرط داخلی فقط زمانی معنا دارد که شرط بیرونی اجرا شده باشد، ساختار تو در تو میتواند مناسبتر باشد.
🧠 خلاصه
هدف فقط کوتاه کردن کد نیست؛ خوانایی و منطق درست برنامه مهمتر است.
🎯 تمرین
کد زیر را بدون
پست ۶۷ از دوره جامع Python 🐍
تبدیل شرطهای تو در تو به شرط ترکیبی
گاهی یک شرط تو در تو را میتوان با
and یا or سادهتر نوشت.🔹 حالت تو در تو
age = 20
has_id = True
if age >= 18:
if has_id:
print("Access granted")
میتوانیم همین منطق را سادهتر بنویسیم:
if age >= 18 and has_id:
print("Access granted")
در این حالت، استفاده از
and باعث میشود کد کوتاهتر و خواناتر شود.🔹 یک مثال دیگر
شرط تو در تو:
is_logged_in = True
is_admin = True
if is_logged_in:
if is_admin:
print("Admin panel")
نسخه ترکیبی:
if is_logged_in and is_admin:
print("Admin panel")
⚠️ نکته مهم
هر شرط تو در تو را نمیتوان بدون بررسی به
and یا or تبدیل کرد.اگر شرط داخلی فقط زمانی معنا دارد که شرط بیرونی اجرا شده باشد، ساختار تو در تو میتواند مناسبتر باشد.
🧠 خلاصه
شرطهای مستقل → معمولاً and / or
شرط وابسته → ممکن است nested if مناسبتر باشد
هدف فقط کوتاه کردن کد نیست؛ خوانایی و منطق درست برنامه مهمتر است.
🎯 تمرین
کد زیر را بدون
if تو در تو بازنویسی کنید:age = 25
is_member = True
if age >= 18:
if is_member:
print("Access granted")
پست ۶۷ از دوره جامع Python 🐍
🐍 آموزش جامع Python — پست ۶۸
ترتیب بررسی شرطها در
وقتی چند شرط با
🔹 مثال
خروجی:
چرا؟
چون شرط اول:
است و Python دیگر
🔹 ترتیب درست
شرطهای خاصتر را قبل از شرطهای عمومیتر قرار دهید:
خروجی:
⚠️ نکته مهم
در
🧠 خلاصه
ترتیب شرطها میتواند نتیجه برنامه را تغییر دهد.
🎯 تمرین
کد زیر را اصلاح کنید تا برای
پست ۶۸ از دوره جامع Python 🐍
ترتیب بررسی شرطها در
if و elifوقتی چند شرط با
if و elif داریم، Python آنها را از بالا به پایین بررسی میکند.🔹 مثال
score = 95
if score >= 50:
print("Passed")
elif score >= 90:
print("Excellent")
خروجی:
Passed
چرا؟
چون شرط اول:
95 >= 50 → True
است و Python دیگر
elif را بررسی نمیکند.🔹 ترتیب درست
شرطهای خاصتر را قبل از شرطهای عمومیتر قرار دهید:
score = 95
if score >= 90:
print("Excellent")
elif score >= 50:
print("Passed")
else:
print("Failed")
خروجی:
Excellent
⚠️ نکته مهم
در
if / elif / else:1. از بالا شروع میشود.
2. اولین شرط True اجرا میشود.
3. شرطهای بعدی دیگر بررسی نمیشوند.
🧠 خلاصه
شرط خاصتر
↓
شرط عمومیتر
↓
else
ترتیب شرطها میتواند نتیجه برنامه را تغییر دهد.
🎯 تمرین
کد زیر را اصلاح کنید تا برای
score = 95 مقدار Excellent چاپ شود:score = 95
if score >= 50:
print("Passed")
elif score >= 90:
print("Excellent")
پست ۶۸ از دوره جامع Python 🐍
🐍 آموزش جامع Python — پست ۶۹
انتخاب حالتها با
در Python میتوان برای بررسی چند مقدار مشخص، بهجای زنجیرهای از
🔹 ساختار
🔹 مثال ساده
خروجی:
Python مقدار
🔹
علامت
یعنی اگر هیچ
🔹 مثال کاربردی
⚠️ نکته مهم
همچنین
🧠 خلاصه
🎯 تمرین
برنامهای بنویسید که مقدار
پست ۶۹ از دوره جامع Python 🐍
انتخاب حالتها با
match و caseدر Python میتوان برای بررسی چند مقدار مشخص، بهجای زنجیرهای از
if و elif از match و case استفاده کرد.🔹 ساختار
match value:
case pattern:
code
🔹 مثال ساده
day = 2
match day:
case 1:
print("Monday")
case 2:
print("Tuesday")
case 3:
print("Wednesday")
case _:
print("Unknown day")
خروجی:
Tuesday
Python مقدار
day را با caseها مقایسه میکند.🔹
case _علامت
_ برای حالت پیشفرض استفاده میشود:case _:
print("Unknown day")
یعنی اگر هیچ
case دیگری تطبیق نداشت، این بخش اجرا شود.🔹 مثال کاربردی
command = "start"
match command:
case "start":
print("Starting...")
case "stop":
print("Stopping...")
case "restart":
print("Restarting...")
case _:
print("Unknown command")
⚠️ نکته مهم
match و case از Python 3.10 به بعد در دسترس هستند.همچنین
match فقط جایگزین سادهای برای تمام ifها نیست؛ قابلیتهای پیشرفتهتری برای Pattern Matching دارد که بعداً میتوانیم بررسی کنیم.🧠 خلاصه
match → مقداری که میخواهیم بررسی کنیم
case → حالتهای مختلف
_ → حالت پیشفرض
🎯 تمرین
برنامهای بنویسید که مقدار
operation را بررسی کند:"add" → Addition
"sub" → Subtraction
"mul" → Multiplication
"div" → Division
سایر موارد → Unknown operation
پست ۶۹ از دوره جامع Python 🐍
🐍 آموزش جامع Python — پست ۷۰
Pattern Matching در
در پست قبل با
حالا یکی از قابلیتهای مهم
🔹 مثال با چند مقدار
خروجی:
چون مقدار:
با الگوی:
مطابقت دارد و مقدار
🔹 گرفتن چند مقدار
خروجی:
در اینجا
⚠️ نکته مهم
این قابلیت را Pattern Matching مینامیم.
🧠 خلاصه
🎯 تمرین
کد زیر را طوری کامل کنید که برای هر حالت پیام مناسب چاپ شود:
خروجی را قبل از اجرا پیشبینی کنید.
پست ۷۰ از دوره جامع Python 🐍
Pattern Matching در
matchدر پست قبل با
match و case آشنا شدیم.حالا یکی از قابلیتهای مهم
match را میبینیم: بررسی چند مقدار و الگو بهصورت همزمان.🔹 مثال با چند مقدار
point = (0, 5)
match point:
case (0, 0):
print("Origin")
case (0, y):
print("On Y axis")
case (x, 0):
print("On X axis")
case (x, y):
print("Other point")
خروجی:
On Y axis
چون مقدار:
(0, 5)
با الگوی:
case (0, y):
مطابقت دارد و مقدار
y برابر 5 میشود.🔹 گرفتن چند مقدار
data = ("Ali", 20)
match data:
case (name, age):
print(name)
print(age)خروجی:
Ali
20
در اینجا
name و age از مقدار داخل data استخراج میشوند.⚠️ نکته مهم
match فقط برای مقایسه ساده نیست؛ میتواند ساختار داده را هم بررسی و مقدارهای آن را استخراج کند.این قابلیت را Pattern Matching مینامیم.
🧠 خلاصه
match → بررسی مقدار و الگو
case → تعریف الگو
(x, y) → تطبیق ساختار و استخراج مقدارها
🎯 تمرین
کد زیر را طوری کامل کنید که برای هر حالت پیام مناسب چاپ شود:
point = (10, 0)
match point:
case (0, 0):
print("Origin")
case (x, 0):
print("On X axis")
case (0, y):
print("On Y axis")
case _:
print("Other point")
خروجی را قبل از اجرا پیشبینی کنید.
پست ۷۰ از دوره جامع Python 🐍
👍1
🐍 آموزش جامع Python — پست ۷۱
استفاده از شرط در
در
به این شرط اضافی Guard میگوییم.
🔹 مثال
خروجی:
چون:
پس
🔹 مثال دیگر
خروجی:
⚠️ نکته مهم
ساختار کلی:
ابتدا
🧠 خلاصه
این قابلیت زمانی مفید است که فقط تطبیق مقدار کافی نباشد.
🎯 تمرین
کد زیر را طوری تغییر دهید که فقط وقتی
پست ۷۱ از دوره جامع Python 🐍
استفاده از شرط در
case با ifدر
match میتوانیم علاوه بر الگو، یک شرط اضافی هم برای case تعیین کنیم.به این شرط اضافی Guard میگوییم.
🔹 مثال
point = (10, 5)
match point:
case (x, y) if x == y:
print("On diagonal")
case (x, y):
print("Other point")
خروجی:
Other point
چون:
x = 10
y = 5
x == y → False
پس
case اول انتخاب نمیشود و case دوم اجرا میشود.🔹 مثال دیگر
age = 20
match age:
case age if age >= 18:
print("Adult")
case _:
print("Minor")
خروجی:
Adult
⚠️ نکته مهم
ساختار کلی:
case pattern if condition:
code
ابتدا
pattern باید مطابقت داشته باشد، سپس شرط if بررسی میشود.🧠 خلاصه
case pattern → بررسی الگو
if condition → بررسی شرط اضافی
این قابلیت زمانی مفید است که فقط تطبیق مقدار کافی نباشد.
🎯 تمرین
کد زیر را طوری تغییر دهید که فقط وقتی
x و y برابر هستند، پیام Equal چاپ شود:point = (5, 5)
match point:
case (x, y) if x == y:
print("Equal")
case _:
print("Not equal")
پست ۷۱ از دوره جامع Python 🐍
🐍 آموزش جامع Python — پست ۷۲
چند الگو در یک
در
🔹 مثال
اگر مقدار
چون
🔹 مثال با چند مقدار
خروجی:
⚠️ نکته مهم
علامت
مثلاً:
یعنی مقدار باید با
🧠 خلاصه
یعنی اگر مقدار با
🎯 تمرین
کدی بنویسید که:
پست ۷۲ از دوره جامع Python 🐍
چند الگو در یک
caseدر
match میتوانیم چند مقدار یا الگوی مختلف را با | داخل یک case بررسی کنیم.🔹 مثال
command = "start"
match command:
case "start" | "run":
print("Starting...")
case "stop" | "exit":
print("Stopping...")
case _:
print("Unknown command")
اگر مقدار
command برابر "run" باشد، خروجی:Starting...
چون
"start" یا "run" هر کدام میتوانند با این case مطابقت داشته باشند.🔹 مثال با چند مقدار
day = 6
match day:
case 1 | 2 | 3 | 4 | 5:
print("Weekday")
case 6 | 7:
print("Weekend")
case _:
print("Invalid day")
خروجی:
Weekend
⚠️ نکته مهم
علامت
| در اینجا یعنی:این الگو OR آن الگو
مثلاً:
case "start" | "run":
یعنی مقدار باید با
"start" یا "run" مطابقت داشته باشد.🧠 خلاصه
case A | B:
یعنی اگر مقدار با
A یا B مطابقت داشت، این case اجرا شود.🎯 تمرین
کدی بنویسید که:
"jpg" یا "png" → Image
"mp3" یا "wav" → Audio
"mp4" یا "mkv" → Video
سایر موارد → Unknown
پست ۷۲ از دوره جامع Python 🐍
🐍 آموزش جامع Python — پست ۷۳
تطبیق ساختار دادهها با
یکی از قابلیتهای قدرتمند
🔹 تطبیق لیست
خروجی:
Python تشخیص میدهد که
🔹 تطبیق تعداد متفاوت
خروجی:
🔹 گرفتن بقیه مقدارها با
خروجی:
⚠️ نکته مهم
در Pattern Matching، شکل داده هم میتواند بخشی از الگو باشد:
یعنی انتظار داریم داده ساختاری شامل دو عنصر داشته باشد.
🧠 خلاصه
🎯 تمرین
خروجی کد زیر را پیشبینی کنید:
پست ۷۳ از دوره جامع Python 🐍
تطبیق ساختار دادهها با
matchیکی از قابلیتهای قدرتمند
match این است که میتوانیم ساختار دادهها را بررسی کنیم.🔹 تطبیق لیست
data = [10, 20]
match data:
case [x, y]:
print("Two values:", x, y)
case _:
print("Different structure")
خروجی:
Two values: 10 20
Python تشخیص میدهد که
data شامل دو مقدار است و آنها را در x و y قرار میدهد.🔹 تطبیق تعداد متفاوت
data = [10, 20, 30]
match data:
case [x]:
print("One value")
case [x, y]:
print("Two values")
case [x, y, z]:
print("Three values")
خروجی:
Three values
🔹 گرفتن بقیه مقدارها با
*data = [1, 2, 3, 4]
match data:
case [first, *rest]:
print(first)
print(rest)
خروجی:
1
[2, 3, 4]
*rest تمام مقدارهای باقیمانده را دریافت میکند.⚠️ نکته مهم
در Pattern Matching، شکل داده هم میتواند بخشی از الگو باشد:
case [x, y]:
یعنی انتظار داریم داده ساختاری شامل دو عنصر داشته باشد.
🧠 خلاصه
[x, y] → دو مقدار
[x, y, z] → سه مقدار
[first, *rest] → اولین مقدار + بقیه
🎯 تمرین
خروجی کد زیر را پیشبینی کنید:
data = [5, 10, 15, 20]
match data:
case [first, *rest]:
print(first)
print(rest)
پست ۷۳ از دوره جامع Python 🐍
🐍 آموزش جامع Python — پست ۷۴
Pattern Matching با
در
🔹 مثال ساده
خروجی:
Python کلیدهای
🔹 بررسی یک کلید خاص
لازم نیست تمام کلیدهای دیکشنری را در الگو بنویسیم:
خروجی:
🔹 ترکیب با شرط
میتوانیم بعد از Pattern Matching از
⚠️ نکته مهم
در Pattern Matching با
مثلاً این الگو:
میتواند با این دیکشنری هم مطابقت داشته باشد:
🧠 خلاصه
🎯 تمرین
کدی بنویسید که دیکشنری زیر را بررسی کند:
اگر
در غیر این صورت:
پست ۷۴ از دوره جامع Python 🐍
Pattern Matching با
dictدر
match میتوانیم ساختار یک دیکشنری (dict) را هم بررسی کنیم.🔹 مثال ساده
user = {"name": "Ali", "age": 20}
match user:
case {"name": name, "age": age}:
print(name)
print(age)
case _:
print("Invalid data")خروجی:
Ali
20
Python کلیدهای
name و age را بررسی میکند و مقدارهای آنها را در متغیرهای name و age قرار میدهد.🔹 بررسی یک کلید خاص
لازم نیست تمام کلیدهای دیکشنری را در الگو بنویسیم:
user = {"name": "Ali", "age": 20, "admin": True}
match user:
case {"admin": True}:
print("Admin user")
case _:
print("Normal user")خروجی:
Admin user
🔹 ترکیب با شرط
میتوانیم بعد از Pattern Matching از
if هم استفاده کنیم:user = {"name": "Ali", "age": 20}
match user:
case {"name": name, "age": age} if age >= 18:
print(f"{name} is an adult")
case _:
print("Other user")⚠️ نکته مهم
در Pattern Matching با
dict، وجود کلیدهای اضافه معمولاً مانع تطبیق نمیشود.مثلاً این الگو:
case {"name": name}:میتواند با این دیکشنری هم مطابقت داشته باشد:
{"name": "Ali", "age": 20}🧠 خلاصه
case {"name": name} → استخراج مقدار name
case {"admin": True} → بررسی مقدار یک کلید🎯 تمرین
کدی بنویسید که دیکشنری زیر را بررسی کند:
user = {
"name": "Sara",
"age": 25,
"admin": True
}اگر
admin برابر True بود، چاپ کند:Admin
در غیر این صورت:
Normal user
پست ۷۴ از دوره جامع Python 🐍
🐍 آموزش جامع Python — پست ۷۵
تطبیق اشیاء با
در پستهای قبل دیدیم که
حالا میخواهیم ببینیم چطور میتوانیم ساختار یک شیء را هم بررسی کنیم.
🔹 مثال
برای این بخش از یک کلاس ساده استفاده میکنیم:
خروجی:
🔹 شرط روی مقدار استخراجشده
میتوانیم بعد از تطبیق، شرط هم قرار دهیم:
خروجی:
⚠️ نکته مهم
هر مقدار موقعیتی به کدام ویژگی کلاس مربوط شود.
در مثال ما:
🧠 خلاصه
🎯 تمرین
کلاس زیر را بسازید:
سپس با
پست ۷۵ از دوره جامع Python 🐍
تطبیق اشیاء با
matchدر پستهای قبل دیدیم که
match میتواند با لیست و دیکشنری کار کند.حالا میخواهیم ببینیم چطور میتوانیم ساختار یک شیء را هم بررسی کنیم.
🔹 مثال
برای این بخش از یک کلاس ساده استفاده میکنیم:
class User:
__match_args__ = ("name", "age")
def __init__(self, name, age):
self.name = name
self.age = age
user = User("Ali", 20)
match user:
case User(name, age):
print(name)
print(age)
case _:
print("Unknown user")
خروجی:
Ali
20
🔹 شرط روی مقدار استخراجشده
میتوانیم بعد از تطبیق، شرط هم قرار دهیم:
match user:
case User(name, age) if age >= 18:
print(f"{name} is an adult")
case User(name, age):
print(f"{name} is a minor")
خروجی:
Ali is an adult
⚠️ نکته مهم
__match_args__ مشخص میکند وقتی مینویسیم:case User(name, age):
هر مقدار موقعیتی به کدام ویژگی کلاس مربوط شود.
در مثال ما:
name → user.name
age → user.age
🧠 خلاصه
match میتواند علاوه بر مقدارهای ساده و ساختارهایی مثل list و dict، با اشیاء کلاسها نیز Pattern Matching انجام دهد.🎯 تمرین
کلاس زیر را بسازید:
class Product:
__match_args__ = ("name", "price")
def __init__(self, name, price):
self.name = name
self.price = price
سپس با
match بررسی کنید:price >= 100 → Expensive
price < 100 → Cheap
پست ۷۵ از دوره جامع Python 🐍
👍1
🐍 آموزش جامع Python — پست ۷۶
محدوده متغیرها |
تا اینجا بیشتر متغیرها را در سطح اصلی برنامه تعریف کردیم.
حالا باید با مفهوم Scope یا محدوده دسترسی متغیرها آشنا شویم.
🔹 متغیر در محدوده اصلی
متغیر
🔹 متغیر داخل شرط
در Python، ایجاد شدن متغیر داخل
🔹 متغیر داخل تابع
اینجا
اگر خارج از تابع بنویسیم:
با خطا مواجه میشویم، چون
🔹 متغیر سراسری
تابع میتواند متغیر سراسری
⚠️ نکته مهم
وجود
🧠 خلاصه
در پستهای بعدی Scope و نحوه کار متغیرها در توابع را دقیقتر بررسی میکنیم.
🎯 تمرین
خروجی کد زیر را پیشبینی کنید:
پست ۷۶ از دوره جامع Python 🐍
محدوده متغیرها |
Scopeتا اینجا بیشتر متغیرها را در سطح اصلی برنامه تعریف کردیم.
حالا باید با مفهوم Scope یا محدوده دسترسی متغیرها آشنا شویم.
🔹 متغیر در محدوده اصلی
name = "Ali"
print(name)
متغیر
name در محدوده اصلی برنامه قرار دارد و از همان محدوده قابل دسترسی است.🔹 متغیر داخل شرط
if True:
age = 20
print(age)
در Python، ایجاد شدن متغیر داخل
if یک Scope جداگانه ایجاد نمیکند؛ بنابراین age در این مثال قابل دسترسی است.🔹 متغیر داخل تابع
def show_name():
name = "Ali"
print(name)
show_name()
اینجا
name داخل تابع تعریف شده است.اگر خارج از تابع بنویسیم:
def show_name():
name = "Ali"
show_name()
print(name)
با خطا مواجه میشویم، چون
name یک متغیر محلی (Local) است.🔹 متغیر سراسری
name = "Ali"
def show_name():
print(name)
show_name()
تابع میتواند متغیر سراسری
name را بخواند.⚠️ نکته مهم
وجود
if بهتنهایی Scope جدید ایجاد نمیکند، اما تابع Scope محلی ایجاد میکند.🧠 خلاصه
Global → محدوده اصلی برنامه
Local → محدوده داخل تابع
if → Scope جداگانه ایجاد نمیکند
در پستهای بعدی Scope و نحوه کار متغیرها در توابع را دقیقتر بررسی میکنیم.
🎯 تمرین
خروجی کد زیر را پیشبینی کنید:
x = 10
if True:
y = 20
print(x)
print(y)
پست ۷۶ از دوره جامع Python 🐍
🐍 آموزش جامع Python — پست ۷۷
تغییر متغیر سراسری با
در پست قبل با Global و Local Scope آشنا شدیم.
حالا میبینیم اگر بخواهیم داخل یک تابع، مقدار یک متغیر سراسری را تغییر دهیم، چه اتفاقی میافتد.
🔹 مشکل چیست؟
خروجی:
چون
🔹 استفاده از
با
خروجی:
🔹 مثال کاربردی
خروجی:
هر بار که تابع اجرا میشود، همان متغیر سراسری
⚠️ نکته مهم
استفاده زیاد از
در برنامههای واقعی، اغلب بهتر است بهجای تغییر مستقیم متغیرهای سراسری، از پارامترها و مقدار بازگشتی (
🧠 خلاصه
🎯 تمرین
خروجی کد زیر را پیشبینی کنید:
پست ۷۷ از دوره جامع Python 🐍
تغییر متغیر سراسری با
globalدر پست قبل با Global و Local Scope آشنا شدیم.
حالا میبینیم اگر بخواهیم داخل یک تابع، مقدار یک متغیر سراسری را تغییر دهیم، چه اتفاقی میافتد.
🔹 مشکل چیست؟
count = 10
def increase():
count = 20
increase()
print(count)
خروجی:
10
چون
count = 20 داخل تابع، یک متغیر محلی جدید ایجاد میکند و متغیر سراسری را تغییر نمیدهد.🔹 استفاده از
globalبا
global به Python میگوییم منظورمان همان متغیر سراسری است:count = 10
def increase():
global count
count = 20
increase()
print(count)
خروجی:
20
🔹 مثال کاربردی
score = 0
def add_score():
global score
score += 10
add_score()
add_score()
print(score)
خروجی:
20
هر بار که تابع اجرا میشود، همان متغیر سراسری
score تغییر میکند.⚠️ نکته مهم
استفاده زیاد از
global معمولاً باعث میشود کد سختتر قابل مدیریت و آزمایش باشد.در برنامههای واقعی، اغلب بهتر است بهجای تغییر مستقیم متغیرهای سراسری، از پارامترها و مقدار بازگشتی (
return) استفاده کنیم که در فصل توابع بهطور کامل یاد میگیریم.🧠 خلاصه
متغیر داخل تابع → Local
متغیر خارج تابع → Global
global → اجازه تغییر متغیر Global داخل تابع
🎯 تمرین
خروجی کد زیر را پیشبینی کنید:
number = 5
def change():
global number
number += 10
change()
change()
print(number)
پست ۷۷ از دوره جامع Python 🐍
🐍 آموزش جامع Python — پست ۷۸
قانون
وقتی Python با یک نام متغیر مواجه میشود، باید پیدا کند که مقدار آن از کجا میآید.
برای این کار از ترتیب LEGB استفاده میکند.
🔹 L — Local
ابتدا داخل محدوده فعلی، معمولاً داخل تابع، جستوجو میشود:
خروجی:
چون
🔹 E — Enclosing
اگر تابعی داخل تابع دیگری باشد، Python در تابع بیرونی هم جستوجو میکند:
خروجی:
🔹 G — Global
اگر در محدودههای محلی پیدا نشود، Python در محدوده اصلی برنامه جستوجو میکند:
خروجی:
🔹 B — Built-in
در نهایت Python در نامهای داخلی خودش جستوجو میکند.
مثلاً:
🧠 ترتیب LEGB
Python این محدودهها را به همین ترتیب بررسی میکند.
⚠️ نکته مهم
اگر یک نام در چند محدوده وجود داشته باشد، نزدیکترین محدوده اولویت دارد.
خروجی
🎯 تمرین
خروجی کد زیر را قبل از اجرا پیشبینی کنید:
پست ۷۸ از دوره جامع Python 🐍
قانون
LEGB در Scopeوقتی Python با یک نام متغیر مواجه میشود، باید پیدا کند که مقدار آن از کجا میآید.
برای این کار از ترتیب LEGB استفاده میکند.
🔹 L — Local
ابتدا داخل محدوده فعلی، معمولاً داخل تابع، جستوجو میشود:
name = "Global"
def show():
name = "Local"
print(name)
show()
خروجی:
Local
چون
name محلی وجود دارد.🔹 E — Enclosing
اگر تابعی داخل تابع دیگری باشد، Python در تابع بیرونی هم جستوجو میکند:
def outer():
name = "Outer"
def inner():
print(name)
inner()
outer()
خروجی:
Outer
🔹 G — Global
اگر در محدودههای محلی پیدا نشود، Python در محدوده اصلی برنامه جستوجو میکند:
name = "Global"
def show():
print(name)
show()
خروجی:
Global
🔹 B — Built-in
در نهایت Python در نامهای داخلی خودش جستوجو میکند.
مثلاً:
print(len("Python"))len یک نام Built-in است.🧠 ترتیب LEGB
L → Local
E → Enclosing
G → Global
B → Built-in
Python این محدودهها را به همین ترتیب بررسی میکند.
⚠️ نکته مهم
اگر یک نام در چند محدوده وجود داشته باشد، نزدیکترین محدوده اولویت دارد.
name = "Global"
def show():
name = "Local"
print(name)
show()
خروجی
Local است، نه Global.🎯 تمرین
خروجی کد زیر را قبل از اجرا پیشبینی کنید:
x = "Global"
def outer():
x = "Outer"
def inner():
x = "Inner"
print(x)
inner()
outer()
پست ۷۸ از دوره جامع Python 🐍
1
🐍 آموزش جامع Python — پست ۷۹
تغییر متغیر تابع بیرونی با
در پست قبل با بخش Enclosing در قانون
حالا میبینیم اگر بخواهیم داخل یک تابع داخلی، متغیر تابع بیرونی را تغییر دهیم، از
🔹 مثال ساده
خروجی:
بدون
باعث میشود Python آن را بهعنوان استفاده از یک متغیر محلی در
🔹 چند بار تغییر مقدار
خروجی:
هر بار
⚠️ تفاوت
مثلاً:
به متغیر سراسری اشاره میکند، اما:
به متغیر موجود در تابع بیرونی اشاره میکند.
🧠 خلاصه
🎯 تمرین
کد زیر را کامل کنید تا هر بار اجرای
خروجی مورد انتظار:
پست ۷۹ از دوره جامع Python 🐍
تغییر متغیر تابع بیرونی با
nonlocalدر پست قبل با بخش Enclosing در قانون
LEGB آشنا شدیم.حالا میبینیم اگر بخواهیم داخل یک تابع داخلی، متغیر تابع بیرونی را تغییر دهیم، از
nonlocal استفاده میکنیم.🔹 مثال ساده
def outer():
count = 0
def inner():
nonlocal count
count += 1
inner()
print(count)
outer()
خروجی:
1
بدون
nonlocal، دستور:count += 1
باعث میشود Python آن را بهعنوان استفاده از یک متغیر محلی در
inner در نظر بگیرد و خطا ایجاد شود.🔹 چند بار تغییر مقدار
def counter():
count = 0
def increase():
nonlocal count
count += 1
return count
print(increase())
print(increase())
print(increase())
counter()
خروجی:
1
2
3
هر بار
inner اجرا میشود، همان count متعلق به outer تغییر میکند.⚠️ تفاوت
global و nonlocalglobal → متغیر در محدوده اصلی برنامه
nonlocal → متغیر در تابع بیرونی
مثلاً:
global count
به متغیر سراسری اشاره میکند، اما:
nonlocal count
به متغیر موجود در تابع بیرونی اشاره میکند.
🧠 خلاصه
Local → داخل تابع فعلی
Enclosing → تابع بیرونی
global → محدوده اصلی برنامه
nonlocal → تغییر متغیر تابع بیرونی
🎯 تمرین
کد زیر را کامل کنید تا هر بار اجرای
increase() مقدار count را یک واحد افزایش دهد:def counter():
count = 0
def increase():
# کد را اینجا بنویسید
count += 1
print(count)
increase()
increase()
increase()
counter()
خروجی مورد انتظار:
1
2
3
پست ۷۹ از دوره جامع Python 🐍
👍1
🐍 آموزش جامع Python — پست ۸۰
ذخیره تابع در متغیر
در Python، تابعها خودشان یک مقدار (Object) هستند.
بنابراین میتوانیم یک تابع را داخل یک متغیر قرار دهیم و بعد از آن متغیر برای اجرای تابع استفاده کنیم.
🔹 مثال ساده
خروجی:
اینجا:
به این معنی است که
🔹 نکته مهم درباره
تفاوت این دو را دقت کنید:
یعنی خود تابع را در متغیر قرار بده.
اما:
یعنی تابع را همین الان اجرا کن و نتیجه اجرای آن را در متغیر قرار بده.
🔹 مثال با مقدار بازگشتی
خروجی:
🧠 خلاصه
بعد از این:
تابع
🎯 تمرین
تابعی به نام
سپس:
و با استفاده از
پست ۸۰ از دوره جامع Python 🐍
ذخیره تابع در متغیر
در Python، تابعها خودشان یک مقدار (Object) هستند.
بنابراین میتوانیم یک تابع را داخل یک متغیر قرار دهیم و بعد از آن متغیر برای اجرای تابع استفاده کنیم.
🔹 مثال ساده
def greet():
print("Hello!")
my_function = greet
my_function()
خروجی:
Hello!
اینجا:
my_function = greet
به این معنی است که
my_function به همان تابع greet اشاره میکند.🔹 نکته مهم درباره
()تفاوت این دو را دقت کنید:
my_function = greet
یعنی خود تابع را در متغیر قرار بده.
اما:
my_function = greet()
یعنی تابع را همین الان اجرا کن و نتیجه اجرای آن را در متغیر قرار بده.
🔹 مثال با مقدار بازگشتی
def add(a, b):
return a + b
operation = add
result = operation(10, 5)
print(result)
خروجی:
15
🧠 خلاصه
greet → خود تابع
greet() → اجرای تابع
my_function = greet
بعد از این:
my_function()
تابع
greet اجرا میشود.🎯 تمرین
تابعی به نام
square بنویسید که یک عدد دریافت کند و مربع آن را برگرداند.سپس:
operation = square
و با استفاده از
operation تابع را اجرا کنید.پست ۸۰ از دوره جامع Python 🐍
26👍1
🐍 آموزش جامع Python — پست ۸۱
ارسال تابع به تابع دیگر
در Python میتوانیم یک تابع را بهعنوان آرگومان به تابع دیگری ارسال کنیم.
این قابلیت یکی از ویژگیهای مهم توابع در Python است.
🔹 مثال ساده
خروجی:
اینجا:
خود تابع
🔹 تابع با آرگومان
خروجی:
در اینجا
⚠️ نکته مهم
این دو با هم فرق دارند:
ارسال تابع
اما:
ابتدا
🧠 خلاصه
🎯 تمرین
دو تابع بنویسید:
سپس:
خروجی مورد انتظار:
پست ۸۱ از دوره جامع Python 🐍
ارسال تابع به تابع دیگر
در Python میتوانیم یک تابع را بهعنوان آرگومان به تابع دیگری ارسال کنیم.
این قابلیت یکی از ویژگیهای مهم توابع در Python است.
🔹 مثال ساده
def greet():
return "Hello Python"
def execute(function):
print(function())
execute(greet)
خروجی:
Hello Python
اینجا:
execute(greet)
خود تابع
greet را ارسال کردهایم، نه نتیجه اجرای آن.🔹 تابع با آرگومان
def square(x):
return x * x
def calculate(function, number):
return function(number)
result = calculate(square, 5)
print(result)
خروجی:
25
در اینجا
calculate هر تابعی را که بتواند یک عدد دریافت کند، میتواند اجرا کند.⚠️ نکته مهم
این دو با هم فرق دارند:
calculate(square, 5)
ارسال تابع
squareاما:
calculate(square(5), 5)
ابتدا
square(5) اجرا میشود و نتیجه آن ارسال میشود؛ بنابراین در این مثال نوع آرگومان با چیزی که calculate انتظار دارد سازگار نیست.🧠 خلاصه
تابع میتواند:
• در متغیر ذخیره شود
• به تابع دیگری ارسال شود
• توسط تابع دیگری اجرا شود
🎯 تمرین
دو تابع بنویسید:
def double(x):
return x * 2
def apply(function, number):
# کامل کنید
سپس:
print(apply(double, 10))
خروجی مورد انتظار:
20
پست ۸۱ از دوره جامع Python 🐍
🐍 آموزش جامع Python — پست ۸۲
تابع کوتاه با
در Python میتوانیم برای کارهای ساده، تابعی کوتاه را با
🔹 ساختار
مثلاً:
خروجی:
این کد تقریباً معادل این است:
🔹 چند آرگومان
خروجی:
⚠️ نکته مهم
اگر منطق تابع پیچیده باشد، معمولاً
🔹 استفاده همراه با تابع دیگر
خروجی:
اینجا تابع
🧠 خلاصه
🎯 تمرین
یک
خروجی مورد انتظار:
پست ۸۲ از دوره جامع Python 🐍
تابع کوتاه با
lambdaدر Python میتوانیم برای کارهای ساده، تابعی کوتاه را با
lambda تعریف کنیم.🔹 ساختار
lambda arguments: expression
مثلاً:
square = lambda x: x * x
print(square(5))
خروجی:
25
این کد تقریباً معادل این است:
def square(x):
return x * x
🔹 چند آرگومان
add = lambda a, b: a + b
print(add(10, 5))
خروجی:
15
⚠️ نکته مهم
lambda برای توابع ساده و کوتاه مناسب است.اگر منطق تابع پیچیده باشد، معمولاً
def خواناتر و مناسبتر است.🔹 استفاده همراه با تابع دیگر
def calculate(function, number):
return function(number)
result = calculate(lambda x: x * 2, 10)
print(result)
خروجی:
20
اینجا تابع
lambda مستقیماً به calculate ارسال شده است.🧠 خلاصه
def → تعریف معمولی تابع
lambda → تعریف کوتاه یک تابع ساده
🎯 تمرین
یک
lambda بنویسید که عدد را به توان ۳ برساند:cube = ...
print(cube(4))
خروجی مورد انتظار:
64
پست ۸۲ از دوره جامع Python 🐍
🐍 آموزش جامع Python — پست ۸۳
اعمال یک تابع روی همه اعضا با
گاهی میخواهیم یک عملیات یکسان را روی تمام اعضای یک مجموعه انجام دهیم.
🔹 مثال ساده
خروجی:
تابع
🔹 با تابع معمولی
خروجی:
🔹 چرا
در Python 3،
برای تبدیل آن به لیست:
استفاده میکنیم.
⚠️ نکته مهم
خروجی:
🧠 خلاصه
یعنی تابع را روی اعضای
🎯 تمرین
خروجی را قبل از اجرا حدس بزنید.
پست ۸۳ از دوره جامع Python 🐍
اعمال یک تابع روی همه اعضا با
map()گاهی میخواهیم یک عملیات یکسان را روی تمام اعضای یک مجموعه انجام دهیم.
map() برای همین کار استفاده میشود.🔹 مثال ساده
numbers = [1, 2, 3, 4]
result = map(lambda x: x * 2, numbers)
print(list(result))
خروجی:
[2, 4, 6, 8]
تابع
lambda روی تکتک اعضای numbers اجرا شده است.🔹 با تابع معمولی
def square(x):
return x * x
numbers = [2, 3, 4, 5]
result = map(square, numbers)
print(list(result))
خروجی:
[4, 9, 16, 25]
🔹 چرا
list()؟در Python 3،
map() یک iterator برمیگرداند و نتیجهها را بهصورت مستقیم به شکل لیست نمایش نمیدهد.برای تبدیل آن به لیست:
list(result)
استفاده میکنیم.
⚠️ نکته مهم
map() داده اصلی را تغییر نمیدهد:numbers = [1, 2, 3]
result = list(map(lambda x: x * 10, numbers))
print(numbers)
print(result)
خروجی:
[1, 2, 3]
[10, 20, 30]
🧠 خلاصه
map(function, iterable)
یعنی تابع را روی اعضای
iterable اعمال کن.🎯 تمرین
numbers = [5, 10, 15, 20]
result = map(lambda x: x + 5, numbers)
print(list(result))
خروجی را قبل از اجرا حدس بزنید.
پست ۸۳ از دوره جامع Python 🐍
🐍 آموزش جامع Python — پست ۸۴
فیلتر کردن دادهها با
در پست قبل با
اما اگر بخواهیم فقط اعضایی را نگه داریم که یک شرط خاص را دارند، از
🔹 مثال ساده
خروجی:
تابع
اگر نتیجه
🔹 با تابع معمولی
خروجی:
🔹 تفاوت
مثلاً:
⚠️ نکته
🎯 تمرین
خروجی را قبل از اجرا حدس بزنید.
پست ۸۴ از دوره جامع Python 🐍
فیلتر کردن دادهها با
filter()در پست قبل با
map() آشنا شدیم که برای تبدیل اعضای یک مجموعه استفاده میشود.اما اگر بخواهیم فقط اعضایی را نگه داریم که یک شرط خاص را دارند، از
filter() استفاده میکنیم.🔹 مثال ساده
numbers = [1, 2, 3, 4, 5, 6]
result = filter(lambda x: x % 2 == 0, numbers)
print(list(result))
خروجی:
[2, 4, 6]
تابع
lambda برای هر عدد بررسی میکند که زوج است یا نه.اگر نتیجه
True باشد، آن مقدار در نتیجه باقی میماند.🔹 با تابع معمولی
def is_positive(x):
return x > 0
numbers = [-2, 0, 3, -1, 5]
result = filter(is_positive, numbers)
print(list(result))
خروجی:
[3, 5]
🔹 تفاوت
map() و filter()map() → مقدارها را تبدیل میکند
filter() → مقدارها را انتخاب یا حذف میکند
مثلاً:
numbers = [1, 2, 3, 4]
list(map(lambda x: x * 2, numbers))
# [2, 4, 6, 8]
list(filter(lambda x: x % 2 == 0, numbers))
# [2, 4]
⚠️ نکته
filter() هم مانند map() در Python 3 یک iterator برمیگرداند؛ بنابراین برای ساختن لیست میتوانیم از list() استفاده کنیم.🎯 تمرین
numbers = [10, 15, 20, 25, 30]
result = filter(lambda x: x >= 20, numbers)
print(list(result))
خروجی را قبل از اجرا حدس بزنید.
پست ۸۴ از دوره جامع Python 🐍
1