My folder vip
🐍 فصل ششم — پایتون مقدماتی — control flow —————————————- Control Flow یعنی کنترل جریان اجرای برنامه. تا قبل از این، برنامه معمولاً خطبهخط اجرا میشد: print("A") print("B") print("C") اما با شرطها میتوانیم بگوییم: اگر این اتفاق افتاد، این کار را انجام بده؛…
🔐 مثال کاربردی برای مسیر امنیت
فرض کن میخواهیم بررسی کنیم یک IP در لیست IPهای مجاز هست یا نه:
اینجا شرط داریم:
که نتیجهاش
این نوع منطق را بعداً در اسکریپتهای شبکه و امنیت خیلی زیاد میبینی.
فرض کن میخواهیم بررسی کنیم یک IP در لیست IPهای مجاز هست یا نه:
allowed_ips = {
"192.168.1.10",
"192.168.1.20",
"192.168.1.30"
}
ip = input("Enter IP: ")
if ip in allowed_ips:
print("Access Granted")
else:
print("Access Denied")اینجا شرط داریم:
ip in allowed_ips
که نتیجهاش
True یا False میشود.این نوع منطق را بعداً در اسکریپتهای شبکه و امنیت خیلی زیاد میبینی.
🐍 فصل هفتم — پایتون مقدماتی — Control Flow Loops
—————————————-
Loop یعنی حلقه؛ یعنی یک قسمت از برنامه را چندین بار اجرا کنیم.
مثلاً به جای اینکه 5 بار بنویسیم:
میتوانیم از حلقه استفاده کنیم.
==========================
1️⃣ حلقه
مثلاً:
خروجی:
نحوه کار
Python میگوید:
ساختار کلی:
یعنی:
===================
2️⃣
مثلاً:
اگر بخواهیم هم Key و هم Value را بگیریم:
خروجی:
باعث میشود Key و Value را با هم دریافت کنیم.
یعنی تقریباً:
==============
3️⃣
یکی از مهمترین چیزهایی که در
مثلاً:
خروجی:
⚠️ نکته مهم:
یعنی:
پس 5 خودش چاپ نمیشود.
======================
4️⃣ حلقه
مثلاً:
اینجا:
شروع میشود.
هر بار:
یک واحد به آن اضافه میشود.
پس:
وقتی به
دیگر
====================
⚠️ چرا
اگر این را ننویسیم:
حلقه هیچوقت به 10 نمیرسد!
چون
پس یک Infinite Loop یا حلقه بینهایت خواهیم داشت.
==================
5️⃣
مثلاً:
اینجا شرط همیشه:
است.
بنابراین حلقه خودش هیچوقت تمام نمیشود.
برای متوقف کردن چنین حلقهای معمولاً از
===================
6️⃣ مثال گرفتن نام 10 دانشآموز
اینجا:
لیست خالی است.
بعد:
نام را داخل یک متغیر موقت میگیریم.
و:
نام را به لیست اضافه میکنیم.
در نهایت 10 نفر داریم.
===================
🛑 7️⃣
مثلاً همان برنامه دانشآموزها را در نظر بگیر.
فرض کن میگوییم اگر کاربر
حالا اگر کاربر وارد کند:
وقتی
اجرا میشود و کل حلقه تمام میشود.
نتیجه:
خود
🧠 حفظ کن:
===================
🔄 8️⃣
مثلاً:
فرض کنیم:
وقتی
اجرا میشود.
یعنی:
پس
تفاوت اصلی:
ولی:
===========
9️⃣ مثال خیلی ساده برای تفاوت
خروجی:
وقتی به
—————-
خروجی:
وقتی به
=====================
🟡 10️⃣
مثلاً:
خروجی:
حتی تکرار را هم رد نمیکند.
فقط یک دستور خالی است.
pass
کجا کاربرد دارد؟
گاهی هنوز نمیدانیم قرار است داخل یک شرط یا تابع چه کدی بنویسیم.
مثلاً:
if score > 90:
pass
else:
print("Try again")
یعنی:
اگر نمره بیشتر از 90 شد، فعلاً هیچ کاری نکن.
بعداً میتوانیم کد واقعی را جای pass بگذاریم.
—————————————-
Loop یعنی حلقه؛ یعنی یک قسمت از برنامه را چندین بار اجرا کنیم.
مثلاً به جای اینکه 5 بار بنویسیم:
print("Hello")
print("Hello")
print("Hello")
print("Hello")
print("Hello")میتوانیم از حلقه استفاده کنیم.
==========================
1️⃣ حلقه
forfor زمانی خیلی کاربردی است که بخواهیم روی اعضای یک مجموعه یکییکی حرکت کنیم.مثلاً:
miveha = ("apple", "banana", "cherry")
for mive in miveha:
print(mive)خروجی:
apple
banana
cherry
نحوه کار
Python میگوید:
miveha
↓
apple → print
banana → print
cherry → print
ساختار کلی:
for variable in collection:
code
یعنی:
برای هر عضو داخل collection، این کد را اجرا کن.
===================
2️⃣
for روی Dictionaryمثلاً:
person = {
"name": "Ali",
"age": 25
}اگر بخواهیم هم Key و هم Value را بگیریم:
for key, value in person.items():
print(f"{key} = {value}")
خروجی:
name = Ali
age = 25
.items() چیست؟person.items()
باعث میشود Key و Value را با هم دریافت کنیم.
یعنی تقریباً:
name → Ali
age → 25
==============
3️⃣
range()یکی از مهمترین چیزهایی که در
for استفاده میشود:range()
مثلاً:
for i in range(5):
print(i)
خروجی:
0
1
2
3
4
⚠️ نکته مهم:
range(5) از 0 تا قبل از 5 است.یعنی:
0, 1, 2, 3, 4
پس 5 خودش چاپ نمیشود.
======================
4️⃣ حلقه
whilewhile یعنی:تا زمانی که شرط درست است، حلقه را ادامه بده.
مثلاً:
counter = 0
while counter < 10:
print("Hello bro")
counter += 1
اینجا:
counter = 0
شروع میشود.
هر بار:
counter += 1
یک واحد به آن اضافه میشود.
پس:
0
1
2
3
...
9
وقتی به
10 برسد:counter < 10
دیگر
False میشود و حلقه تمام میشود.====================
⚠️ چرا
counter += 1 مهم است؟اگر این را ننویسیم:
counter = 0
while counter < 10:
print("Hello")
حلقه هیچوقت به 10 نمیرسد!
چون
counter همیشه 0 باقی میماند.پس یک Infinite Loop یا حلقه بینهایت خواهیم داشت.
==================
5️⃣
while Trueمثلاً:
while True:
print("Hello bro")
اینجا شرط همیشه:
True
است.
بنابراین حلقه خودش هیچوقت تمام نمیشود.
برای متوقف کردن چنین حلقهای معمولاً از
break استفاده میکنیم.===================
6️⃣ مثال گرفتن نام 10 دانشآموز
students = []
counter = 0
while counter < 10:
student = input("Enter name: ")
students.append(student)
counter += 1
print(students)
for name in students:
print(name)
اینجا:
students = []
لیست خالی است.
بعد:
student = input(...)
نام را داخل یک متغیر موقت میگیریم.
و:
students.append(student)
نام را به لیست اضافه میکنیم.
در نهایت 10 نفر داریم.
===================
🛑 7️⃣
breakbreak یعنی:کلاً از حلقه خارج شو.
مثلاً همان برنامه دانشآموزها را در نظر بگیر.
فرض کن میگوییم اگر کاربر
0 وارد کرد، دیگر اسم بیشتری نگیریم:students = []
while True:
student = input("Enter name: ")
if student == "0":
break
students.append(student)
print(students)
حالا اگر کاربر وارد کند:
Ali
Reza
Mohammad
0
وقتی
0 وارد شود:if student == "0":
break
اجرا میشود و کل حلقه تمام میشود.
نتیجه:
['Ali', 'Reza', 'Mohammad']
خود
0 هم وارد لیست نمیشود.🧠 حفظ کن:
break
↓
خروج کامل از حلقه 🛑
===================
🔄 8️⃣
continuecontinue با break فرق دارد.continue میگوید:این تکرار را رها کن و برو سراغ تکرار بعدی.
مثلاً:
students = []
while len(students) < 5:
student = input("Enter name: ")
if student == "0":
continue
students.append(student)
print(students)
فرض کنیم:
Ali
0
Reza
Mohammad
...
وقتی
0 وارد شود:continue
اجرا میشود.
یعنی:
این ورودی را بیخیال شو و دوباره برو اول حلقه.
پس
0 به لیست اضافه نمیشود، ولی حلقه تمام هم نمیشود.تفاوت اصلی:
break
↓
کل حلقه تمام میشود 🛑
ولی:
continue
↓
فقط این دور از حلقه رد میشود
↓
دور بعدی 🔄
===========
9️⃣ مثال خیلی ساده برای تفاوت
break و continuebreakfor i in range(5):
if i == 3:
break
print(i)
خروجی:
0
1
2
وقتی به
3 رسید، کل حلقه تمام شد.—————-
continuefor i in range(5):
if i == 3:
continue
print(i)
خروجی:
0
1
2
4
وقتی به
3 رسید:فقط چاپ 3 را رد کرد و رفت سراغ 4
=====================
🟡 10️⃣
passpass یعنی:فعلاً هیچ کاری انجام نده.
مثلاً:
for i in range(5):
if i == 3:
pass
print(i)
خروجی:
0
1
2
3
4
pass حلقه را متوقف نمیکند.حتی تکرار را هم رد نمیکند.
فقط یک دستور خالی است.
pass
کجا کاربرد دارد؟
گاهی هنوز نمیدانیم قرار است داخل یک شرط یا تابع چه کدی بنویسیم.
مثلاً:
if score > 90:
pass
else:
print("Try again")
یعنی:
اگر نمره بیشتر از 90 شد، فعلاً هیچ کاری نکن.
بعداً میتوانیم کد واقعی را جای pass بگذاریم.
My folder vip
🐍 فصل هفتم — پایتون مقدماتی — Control Flow Loops —————————————- Loop یعنی حلقه؛ یعنی یک قسمت از برنامه را چندین بار اجرا کنیم. مثلاً به جای اینکه 5 بار بنویسیم: print("Hello") print("Hello") print("Hello") print("Hello") print("Hello") میتوانیم از حلقه استفاده…
🔐 یک مثال امنیتی
فرض کن میخواهیم IPها را بررسی کنیم:
خروجی:
IP دوم را Skip کردیم.
اگر به جای
به محض رسیدن به IP دوم، کل اسکن متوقف میشد.
این منطق در اسکریپتهای شبکه و امنیت خیلی کاربردی است. 🔥
فرض کن میخواهیم IPها را بررسی کنیم:
ips = [
"192.168.1.10",
"192.168.1.20",
"192.168.1.30"
]
for ip in ips:
if ip == "192.168.1.20":
continue
print(f"Scanning {ip}")
خروجی:
Scanning 192.168.1.10
Scanning 192.168.1.30
IP دوم را Skip کردیم.
اگر به جای
continue مینوشتیم:break
به محض رسیدن به IP دوم، کل اسکن متوقف میشد.
این منطق در اسکریپتهای شبکه و امنیت خیلی کاربردی است. 🔥
👍1
🐍 فصل هشتم — پایتون مقدماتی —Functions
—————————————-
1️⃣ Function چیست؟
Function یا تابع یک بخش از کد است که یک کار مشخص انجام میدهد و میتوانیم هر وقت خواستیم آن را صدا بزنیم.
مثلاً:
خروجی:
یعنی به جای اینکه این 4 خط را هر بار تکرار کنیم، یک بار داخل تابع مینویسیم و هر چند بار خواستیم:
صدا میزنیم.
🧠 مفهوم اصلی
———————-
2️⃣ ساختار Function
ساختار کلی:
مثلاً:
⚠️ صرفاً تعریف تابع باعث اجرای آن نمیشود.
برای اجرا باید آن را Call کنیم:
——————————
3️⃣ تابع با Parameter
میتوانیم اطلاعاتی را به تابع بدهیم.
مثلاً:
اینجا:
یعنی
اگر:
باشد،
———————————
4️⃣
این قسمت خیلی مهم است. 🔥
مثلاً:
حالا:
خروجی:
اینجا اتفاقی که افتاده:
پس:
یعنی نتیجهای که تابع
————————
⚠️ تفاوت
این دو را خیلی خوب یاد بگیر.
فقط نتیجه را نمایش میدهد:
اینجا
عملاً:
———————
نتیجه را برمیگرداند:
اینجا:
🧠 حفظی:
——————————-
5️⃣
مثلاً:
خروجی:
چون بعد از
——————————
6️⃣
حالا میرسیم به کدی که نوشتی:
اینجا
مثلاً:
نتیجه:
یا:
نتیجه:
—————————-
مثلاً:
تقریباً میتوانیم تصور کنیم:
یعنی
بعد:
یکییکی اعداد را جمع میکند.
———————-
7️⃣ مثال کاربردی
فرض کن میخواهیم مجموع چند نمره را حساب کنیم:
خروجی:
—————————
🧵 بخش دوم — String Methods
حالا میرسیم به متدهای مهم String.
فرض کنیم:
8️⃣
همه حروف را کوچک میکند:
مثلاً:
تبدیل میشود به:
9️⃣
همه حروف را بزرگ میکند:
🔟 دسترسی به کاراکتر
اولین کاراکتر را میدهد.
⚠️ Index از 0 شروع میشود.
مثلاً:
پس:
1️⃣1️⃣
بررسی میکند رشته با چه چیزی شروع میشود:
اگر شروع شود:
اگر شروع نشود:
1️⃣2️⃣
بررسی میکند رشته با چه چیزی تمام میشود:
1️⃣3️⃣
موقعیت یک عبارت را پیدا میکند:
خروجی:
چون
1️⃣4️⃣
مثل
اما اگر پیدا نشود:
❌ Error میدهد.
تفاوت:
این یکی را برای امتحان حتماً حفظ کن. 🔥
1️⃣5️⃣
رشته را بر اساس یک جداکننده تقسیم میکند.
مثلاً:
خروجی:
یعنی هر جا
1️⃣6️⃣
برای جدا کردن رشته بر اساس خطهای جدید استفاده میشود.
مثلاً:
خروجی:
—————————————-
1️⃣ Function چیست؟
Function یا تابع یک بخش از کد است که یک کار مشخص انجام میدهد و میتوانیم هر وقت خواستیم آن را صدا بزنیم.
مثلاً:
def print_1_4():
print("1")
print("2")
print("3")
print("4")
print_1_4()
خروجی:
1
2
3
4
یعنی به جای اینکه این 4 خط را هر بار تکرار کنیم، یک بار داخل تابع مینویسیم و هر چند بار خواستیم:
print_1_4()
صدا میزنیم.
🧠 مفهوم اصلی
یک بار بنویس، هر چند بار خواستی استفاده کن.
———————-
2️⃣ ساختار Function
ساختار کلی:
def function_name():
# code
مثلاً:
def hello():
print("Hello")
⚠️ صرفاً تعریف تابع باعث اجرای آن نمیشود.
برای اجرا باید آن را Call کنیم:
hello()
——————————
3️⃣ تابع با Parameter
میتوانیم اطلاعاتی را به تابع بدهیم.
مثلاً:
def plus(x):
print(x)
plus(5)
اینجا:
x → Parameter
5 → Argument
یعنی
x یک جای خالی است که هنگام اجرای تابع مقدار میگیرد.اگر:
plus(10)
باشد،
x میشود 10.———————————
4️⃣
return چیست؟این قسمت خیلی مهم است. 🔥
return یعنی:نتیجه تابع را به جایی که تابع را صدا زدهایم برگردان.
مثلاً:
def plus(x):
return x + 10
حالا:
a = plus(5)
print(a)
خروجی:
15
اینجا اتفاقی که افتاده:
plus(5)
↓
5 + 10
↓
15
↓
a
پس:
a = plus(5)
یعنی نتیجهای که تابع
return کرده داخل a ذخیره میشود.————————
⚠️ تفاوت
print و returnاین دو را خیلی خوب یاد بگیر.
printفقط نتیجه را نمایش میدهد:
def plus(x):
print(x + 10)
a = plus(5)
اینجا
15 چاپ میشود، اما تابع چیزی برای ذخیره کردن در a برنمیگرداند.عملاً:
a = None
———————
returnنتیجه را برمیگرداند:
def plus(x):
return x + 10
a = plus(5)
print(a)
اینجا:
a = 15
🧠 حفظی:
print → نمایش بده 🖥
return → نتیجه را برگردان ↩️
——————————-
5️⃣
return اجرای تابع را تمام میکندمثلاً:
def test():
print("A")
return
print("B")
خروجی:
A
چون بعد از
return دیگر ادامه تابع اجرا نمیشود.——————————
6️⃣
*argsحالا میرسیم به کدی که نوشتی:
def sum_all(*args):
total = 0
for num in args:
total += num
return total
اینجا
*args یعنی:تابع میتواند هر تعداد آرگومان دریافت کند.
مثلاً:
print(sum_all(1, 2, 3))
نتیجه:
6
یا:
print(sum_all(10, 20, 30, 40, 50))
نتیجه:
150
—————————-
*args داخل تابع چه شکلی است؟مثلاً:
sum_all(10, 20, 30)
تقریباً میتوانیم تصور کنیم:
args = (10, 20, 30)
یعنی
args به شکل یک Tuple در اختیار تابع قرار میگیرد.بعد:
for num in args:
total += num
یکییکی اعداد را جمع میکند.
———————-
7️⃣ مثال کاربردی
فرض کن میخواهیم مجموع چند نمره را حساب کنیم:
def sum_scores(*scores):
total = 0
for score in scores:
total += score
return total
result = sum_scores(18, 19, 15, 20)
print(result)
خروجی:
72
—————————
🧵 بخش دوم — String Methods
حالا میرسیم به متدهای مهم String.
فرض کنیم:
name = "python programming"
8️⃣
lower()همه حروف را کوچک میکند:
print(name.lower())
مثلاً:
PYTHON
تبدیل میشود به:
python
9️⃣
upper()همه حروف را بزرگ میکند:
print(name.upper())
🔟 دسترسی به کاراکتر
print(name[0])
اولین کاراکتر را میدهد.
⚠️ Index از 0 شروع میشود.
مثلاً:
python
012345
پس:
name[0] # p
name[1] # y
name[2] # t
1️⃣1️⃣
startswith()بررسی میکند رشته با چه چیزی شروع میشود:
print(name.startswith("py"))اگر شروع شود:
True
اگر شروع نشود:
False
1️⃣2️⃣
endswith()بررسی میکند رشته با چه چیزی تمام میشود:
print(name.endswith("ing"))1️⃣3️⃣
find()موقعیت یک عبارت را پیدا میکند:
name = "python programming"
print(name.find("py"))
خروجی:
0
چون
py از Index صفر شروع شده.1️⃣4️⃣
index()مثل
find() موقعیت عبارت را پیدا میکند:print(name.index("py"))اما اگر پیدا نشود:
name.index("xyz")❌ Error میدهد.
تفاوت:
find()
↓
پیدا نشد → -1
index()
↓
پیدا نشد → Error
این یکی را برای امتحان حتماً حفظ کن. 🔥
1️⃣5️⃣
split()رشته را بر اساس یک جداکننده تقسیم میکند.
مثلاً:
name = "ali,reza,mohammad"
print(name.split(","))
خروجی:
['ali', 'reza', 'mohammad']
یعنی هر جا
, دید، رشته را جدا کن.1️⃣6️⃣
splitlines()برای جدا کردن رشته بر اساس خطهای جدید استفاده میشود.
مثلاً:
text = "Ali\nReza\nMohammad"
print(text.splitlines())
خروجی:
['Ali', 'Reza', 'Mohammad']
1️⃣7️⃣
فاصلههای ابتدا و انتهای رشته را حذف میکند.
نتیجه:
میتوانیم کاراکتر مشخص هم بدهیم:
نتیجه:
strip()فاصلههای ابتدا و انتهای رشته را حذف میکند.
name = " ali "
print(name.strip())
نتیجه:
ali
میتوانیم کاراکتر مشخص هم بدهیم:
text = ",,,ali,,,"
print(text.strip(","))
نتیجه:
ali
1️⃣8️⃣
فقط از سمت راست حذف میکند.
نتیجه:
1️⃣9️⃣
حروف بزرگ را کوچک و حروف کوچک را بزرگ میکند:
نتیجه:
⚠️
یعنی:
2️⃣0️⃣
برای جایگزین کردن یک بخش از رشته:
خروجی:
مثلاً:
خروجی:
rstrip()فقط از سمت راست حذف میکند.
text = "ali,,,"
print(text.rstrip(","))
نتیجه:
ali
1️⃣9️⃣
swapcase()حروف بزرگ را کوچک و حروف کوچک را بزرگ میکند:
text = "Ali PYTHON"
print(text.swapcase())
نتیجه:
aLI python
⚠️
swapcase() معمولاً آرگومان نمیگیرد.یعنی:
text.swapcase()
2️⃣0️⃣
replace()برای جایگزین کردن یک بخش از رشته:
name = "ali"
print(name.replace("a", "A"))
خروجی:
Ali
مثلاً:
text = "I like Python"
print(text.replace("Python", "Linux"))
خروجی:
I like Linux
My folder vip
1️⃣8️⃣ rstrip() فقط از سمت راست حذف میکند. text = "ali,,," print(text.rstrip(",")) نتیجه: ali 1️⃣9️⃣ swapcase() حروف بزرگ را کوچک و حروف کوچک را بزرگ میکند: text = "Ali PYTHON" print(text.swapcase()) نتیجه: aLI python ⚠️ swapcase() معمولاً آرگومان نمیگیرد.…
🔐 مثال کاربردی در امنیت
فرض کن ورودی کاربر را میگیریم و میخواهیم Username را استاندارد کنیم:
اگر کاربر وارد کند:
نتیجه:
این نوع پاکسازی و استانداردسازی ورودیها در برنامههای واقعی خیلی کاربردی است.
فرض کن ورودی کاربر را میگیریم و میخواهیم Username را استاندارد کنیم:
username = input("Enter username: ")
username = username.strip().lower()
print(username)اگر کاربر وارد کند:
ALI
نتیجه:
ali
این نوع پاکسازی و استانداردسازی ورودیها در برنامههای واقعی خیلی کاربردی است.
🐍 فصل نهم — پایتون مقدماتی varuable scope
—————————————-
1️⃣ Variable Scope چیست؟
در پایتون متغیرها میتوانند محدودههای مختلفی داشته باشند؛ مثلاً:
————————
2️⃣ Local Variable — متغیر محلی
متغیری که داخل یک تابع تعریف میشود، بهصورت پیشفرض Local است.
مثلاً:
خروجی:
اینجا متغیر
اگر بیرون تابع به آن دسترسی پیدا کنیم:
❌ خطا میگیریم:
چون
نکته: متغیر Local معمولاً فقط در محدوده تابعی که داخل آن تعریف شده، قابل دسترسی است.
————————
3️⃣ Global Variable — متغیر سراسری
متغیری که خارج از توابع تعریف میشود، در سطح ماژول Global است.
مثلاً:
خروجی:
چون تابع میتواند متغیر Global را بخواند.
اما اگر بخواهیم مقدار Global را داخل تابع تغییر دهیم چه؟
اینجا از کلمه کلیدی
خروجی:
با
پس مقدار متغیر اصلی تغییر میکند.
⚠️ دقت کن: اگر فقط بخواهیم مقدار Global را بخوانیم، معمولاً نیازی به
————————-
4️⃣ Nonlocal — متغیر در تابع بیرونی
حالا میرسیم به قسمت مهم جزوهات! 🔥
فرض کن یک تابع داریم که داخل آن، تابع دیگری تعریف شده است.
خروجی:
بیایم خطبهخط بررسی کنیم:
ابتدا تابع
بعد تابع
داخل آن داریم:
یعنی:
سپس:
در هر بار فراخوانی، مقدار
پس:
فراخوانی
مقدار count
بار اول
1
بار دوم
2
بار سوم
3
اگر
اگر داخل
پایتون خطای
بنابراین برای تغییر متغیر تابع بیرونی از
———————-
5️⃣ تفاوت Global و Nonlocal
این قسمت امتحانیه! 🎯
کلمه کلیدی
کاربرد
تغییر متغیر در سطح ماژول
تغییر متغیر در تابع بیرونیِ نزدیکتر
بدون این کلمات
انتساب به نام متغیر داخل تابع معمولاً آن را Local میکند
مثال ساده:
خروجی:
چرا؟
———————
—————————————-
1️⃣ Variable Scope چیست؟
Scope یعنی محدودهای از برنامه که در آن میتوانیم به یک متغیر دسترسی داشته باشیم.در پایتون متغیرها میتوانند محدودههای مختلفی داشته باشند؛ مثلاً:
Local → متغیر محلی داخل تابعGlobal → متغیر سراسری در سطح ماژولNonlocal → متغیر مربوط به تابع بیرونی در توابع تو در تو————————
2️⃣ Local Variable — متغیر محلی
متغیری که داخل یک تابع تعریف میشود، بهصورت پیشفرض Local است.
مثلاً:
def my_func():
x = 10
print(x)
my_func()
خروجی:
10
اینجا متغیر
x داخل تابع تعریف شده و در محدوده همان تابع قابل دسترسی است.اگر بیرون تابع به آن دسترسی پیدا کنیم:
def my_func():
x = 10
my_func()
print(x)
❌ خطا میگیریم:
NameError
چون
x یک متغیر Local است و بیرون از تابع تعریف نشده.نکته: متغیر Local معمولاً فقط در محدوده تابعی که داخل آن تعریف شده، قابل دسترسی است.
————————
3️⃣ Global Variable — متغیر سراسری
متغیری که خارج از توابع تعریف میشود، در سطح ماژول Global است.
مثلاً:
x = 10
def my_func():
print(x)
my_func()
خروجی:
10
چون تابع میتواند متغیر Global را بخواند.
اما اگر بخواهیم مقدار Global را داخل تابع تغییر دهیم چه؟
اینجا از کلمه کلیدی
global استفاده میکنیم.x = 5
def my_func():
global x
x = 10
my_func()
print(x)
خروجی:
10
با
global x به پایتون میگوییم که منظورمان همان متغیر x در سطح ماژول است، نه یک متغیر محلی جدید.پس مقدار متغیر اصلی تغییر میکند.
⚠️ دقت کن: اگر فقط بخواهیم مقدار Global را بخوانیم، معمولاً نیازی به
global نداریم؛ این کلمه برای انتساب مجدد به متغیر Global استفاده میشود.————————-
4️⃣ Nonlocal — متغیر در تابع بیرونی
حالا میرسیم به قسمت مهم جزوهات! 🔥
nonlocal در توابع تو در تو (Nested Functions) کاربرد دارد.فرض کن یک تابع داریم که داخل آن، تابع دیگری تعریف شده است.
def outer():
count = 0
def inner():
nonlocal count
count += 1
print(count)
inner()
inner()
inner()
outer()
خروجی:
1
2
3
بیایم خطبهخط بررسی کنیم:
ابتدا تابع
outer() اجرا میشود:count = 0
بعد تابع
inner() تعریف میشود.داخل آن داریم:
nonlocal count
یعنی:
منظورم متغیر
countمتعلق به تابع بیرونی است؛ نمیخواهم یک متغیر محلی جدید بسازم.
سپس:
count += 1
در هر بار فراخوانی، مقدار
count یکی افزایش پیدا میکند.پس:
فراخوانی
مقدار count
بار اول
1
بار دوم
2
بار سوم
3
اگر
nonlocal را حذف کنیم چه میشود؟اگر داخل
inner() بنویسیم:def inner():
count += 1
پایتون خطای
UnboundLocalError میدهد؛ چون count را بهدلیل انتساب داخل تابع، Local در نظر میگیرد، اما قبل از مقداردهی محلی، تلاش میکنیم مقدارش را بخوانیم.بنابراین برای تغییر متغیر تابع بیرونی از
nonlocal استفاده میکنیم.———————-
5️⃣ تفاوت Global و Nonlocal
این قسمت امتحانیه! 🎯
کلمه کلیدی
کاربرد
globalتغییر متغیر در سطح ماژول
nonlocalتغییر متغیر در تابع بیرونیِ نزدیکتر
بدون این کلمات
انتساب به نام متغیر داخل تابع معمولاً آن را Local میکند
مثال ساده:
x = 10
def outer():
y = 20
def inner():
global x
nonlocal y
x = 100
y = 200
inner()
print(y)
outer()
print(x)
خروجی:
200
100
چرا؟
x با global به متغیر سطح ماژول اشاره میکند.y با nonlocal به متغیر تابع outer() اشاره میکند.———————
🐍 فصل دهم — پایتون مقدماتی Lambda Functions
—————————————-
1️⃣ اول از همه: تابع معمولی در Python
تا الان یاد گرفتیم با
خروجی:
این تابع یک عدد میگیرد و مربع آن را برمیگرداند.
اما اگر بخواهیم یک تابع خیلی کوچک و ساده بنویسیم، میتوانیم از Lambda استفاده کنیم.
———————
2️⃣ Lambda چیست؟
ساختار کلی:
مثلاً تابع بالا را با Lambda بنویسیم:
خروجی:
مقایسه تابع معمولی و Lambda
با def:
با lambda:
هر دو نتیجه یکسانی دارند.
نکته مهم امتحانی
در Lambda:
از کلمه کلیدی
میتواند چند پارامتر داشته باشد.
فقط یک عبارت (Expression) دارد.
نتیجه عبارت بهصورت خودکار برگردانده میشود؛ نیازی به
مثلاً:
خروجی:
————————
3️⃣ قبل از Lambda، تابع
تابع
مثلاً فرض کن لیستی از اعداد داریم و میخواهیم همه را دو برابر کنیم.
روش معمولی با for:
خروجی:
حالا با
خروجی:
یعنی:
در این مثال:
تقریباً یعنی:
نکته: در Python 3،
———————-
4️⃣ ترکیب
اینجا قدرت Lambda مشخص میشود! 🔥
بهجای اینکه تابع جداگانه با
میتوانیم مستقیم از Lambda استفاده کنیم:
خروجی:
این کد را چطور بخوانیم؟
یعنی:
———————-
5️⃣ تابع
حالا فرض کنیم لیستی داریم و میخواهیم فقط اعداد زوج را از آن جدا کنیم.
اینجا از
روش معمولی با for:
خروجی:
روش با
خروجی:
————————-
6️⃣ ترکیب
حالا تابع
خروجی:
این کد یعنی چه؟
یعنی:
——————————-
—————————————-
1️⃣ اول از همه: تابع معمولی در Python
تا الان یاد گرفتیم با
def تابع تعریف کنیم:def square(x):
return x * x
print(square(5))
خروجی:
25
این تابع یک عدد میگیرد و مربع آن را برمیگرداند.
اما اگر بخواهیم یک تابع خیلی کوچک و ساده بنویسیم، میتوانیم از Lambda استفاده کنیم.
———————
2️⃣ Lambda چیست؟
lambda یک روش برای ساختن تابع کوچک و بدون نام (Anonymous Function) است.ساختار کلی:
lambda parameters: expression
مثلاً تابع بالا را با Lambda بنویسیم:
square = lambda x: x * x
print(square(5))
خروجی:
25
مقایسه تابع معمولی و Lambda
با def:
def square(x):
return x * x
با lambda:
square = lambda x: x * x
هر دو نتیجه یکسانی دارند.
نکته مهم امتحانی
در Lambda:
از کلمه کلیدی
lambda استفاده میکنیم.میتواند چند پارامتر داشته باشد.
فقط یک عبارت (Expression) دارد.
نتیجه عبارت بهصورت خودکار برگردانده میشود؛ نیازی به
return نیست.مثلاً:
add = lambda a, b: a + b
print(add(10, 20))
خروجی:
30
————————
3️⃣ قبل از Lambda، تابع
map()تابع
map() برای اجرای یک تابع روی تکتک اعضای یک مجموعه قابل پیمایش (Iterable) استفاده میشود.مثلاً فرض کن لیستی از اعداد داریم و میخواهیم همه را دو برابر کنیم.
روش معمولی با for:
numbers = [1, 2, 3, 4, 5]
result = []
for num in numbers:
result.append(num * 2)
print(result)
خروجی:
[2, 4, 6, 8, 10]
حالا با
map():def double(x):
return x * 2
numbers = [1, 2, 3, 4, 5]
result = map(double, numbers)
print(list(result))
خروجی:
[2, 4, 6, 8, 10]
map() دقیقاً چه کار میکند؟map(function, iterable)
یعنی:
تابع را روی هر عضو از مجموعه اجرا کن.
در این مثال:
map(double, numbers)
تقریباً یعنی:
double(1)
double(2)
double(3)
double(4)
double(5)
نکته: در Python 3،
map() یک Iterator برمیگرداند؛ برای دیدن همه نتایج به شکل لیست، از list() استفاده میکنیم.———————-
4️⃣ ترکیب
map() با lambdaاینجا قدرت Lambda مشخص میشود! 🔥
بهجای اینکه تابع جداگانه با
def تعریف کنیم:def double(x):
return x * 2
میتوانیم مستقیم از Lambda استفاده کنیم:
numbers = [1, 2, 3, 4, 5]
result = map(lambda x: x * 2, numbers)
print(list(result))
خروجی:
[2, 4, 6, 8, 10]
این کد را چطور بخوانیم؟
map(lambda x: x * 2, numbers)
یعنی:
هر عدد از
numbersرا بگیر، در 2 ضرب کن و نتیجه را تولید کن.
———————-
5️⃣ تابع
filter()حالا فرض کنیم لیستی داریم و میخواهیم فقط اعداد زوج را از آن جدا کنیم.
اینجا از
filter() استفاده میکنیم.filter() اعضایی را نگه میدارد که نتیجه تابع شرطی برایشان True باشد.روش معمولی با for:
numbers = [1, 2, 3, 4, 5, 6]
result = []
for num in numbers:
if num % 2 == 0:
result.append(num)
print(result)
خروجی:
[2, 4, 6]
روش با
filter():def is_even(x):
return x % 2 == 0
numbers = [1, 2, 3, 4, 5, 6]
result = filter(is_even, numbers)
print(list(result))
خروجی:
[2, 4, 6]
————————-
6️⃣ ترکیب
filter() با lambdaحالا تابع
is_even() را حذف میکنیم و مستقیماً Lambda مینویسیم:numbers = [1, 2, 3, 4, 5, 6]
result = filter(lambda x: x % 2 == 0, numbers)
print(list(result))
خروجی:
[2, 4, 6]
این کد یعنی چه؟
filter(lambda x: x % 2 == 0, numbers)
یعنی:
از بین اعداد، فقط عددهایی را نگه دار که باقیمانده تقسیمشان بر 2 برابر صفر باشد.
——————————-
My folder vip
🐍 فصل دهم — پایتون مقدماتی Lambda Functions —————————————- 1️⃣ اول از همه: تابع معمولی در Python تا الان یاد گرفتیم با def تابع تعریف کنیم: def square(x): return x * x print(square(5)) خروجی: 25 این تابع یک عدد میگیرد و مربع آن را برمیگرداند. اما…
🔐 8️⃣ مثال کاربردی در شبکه و امنیت
فرض کن لیستی از پورتها داریم و میخواهیم پورتهای بالاتر از 1024 را جدا کنیم:
ports = [21, 22, 80, 443, 8080, 3306]
high_ports = filter(lambda port: port > 1024, ports)
print(list(high_ports))
خروجی:
[8080, 3306]
حالا با map() میتوانیم پورتها را به رشته تبدیل کنیم:
ports = [22, 80, 443]
result = map(lambda port: f"Port: {port}", ports)
print(list(result))
خروجی:
['Port: 22', 'Port: 80', 'Port: 443']
اینها مثالهای سادهای از پردازش دادهها در اسکریپتهای شبکه هستند.
🐍 فصل یازدهم — پایتون مقدماتی Modules
—————————————-
Modules | ماژولها و کتابخانهها
توی این فصل یاد میگیریم چطور از کدهایی که دیگران نوشتهاند استفاده کنیم و چطور کدهای خودمون رو در فایلهای جداگانه قرار بدیم تا بتونیم در پروژههای مختلف ازشون استفاده کنیم.
۱. ماژول (Module) چیست؟
ماژول در پایتون، بهطور ساده، یک فایل پایتون با پسوند
مثلاً فرض کن یک تابع برای ضرب دو عدد نوشتیم. بهجای اینکه هر بار این تابع رو در برنامههای مختلف بنویسیم، میتونیم اون رو داخل یک فایل قرار بدیم و هر جا خواستیم ازش استفاده کنیم.
مثال:
فایل
حالا در یک فایل پایتون دیگه، مثلاً
خروجی:
نکته: برای اینکه پایتون فایل
——————-
۲. کتابخانه (Library) چیست؟
کتابخانه مجموعهای از کدهای آماده است که برای انجام کارهای مشخصی در اختیار برنامهنویس قرار میگیره.
کتابخانهها میتونن شامل چندین ماژول و بخش مختلف باشن.
برای مثال، پایتون ابزارهای آماده زیادی برای کار با تاریخ، ریاضیات، فایلها و شبکه در اختیارمون قرار میده.
——————-
۳. استفاده از ماژولهای آماده با
برای استفاده از یک ماژول، از دستور
مثال اول: ماژول math
ماژول
خروجی:
توضیح:
چرا نوشتیم
چون تابع
———————
۴. کار با ماژول datetime
ماژول
مثال:
خروجی نمونه:
دقت کن که در کد جزوه،
اینجا:
——————-
۵. تغییر نام ماژول با
گاهی اسم یک ماژول طولانیه یا میخوایم در کد کوتاهتر بنویسیم.
برای این کار از
در این مثال، بهجای نوشتن
مثال دیگر:
خروجی:
—————
۶. وارد کردن یک تابع مشخص از ماژول
فرض کن فقط به تابع
میتونیم فقط همون تابع رو وارد کنیم:
خروجی:
در این حالت دیگه نیازی نیست بنویسیم:
چون تابع
وارد کردن چند تابع مشخص
—————
۷. استفاده از
این دستور همه نامهایی رو که ماژول برای وارد کردن در دسترس قرار داده، وارد فضای نام فعلی برنامه میکنه.
اما استفاده از
روشهای زیر معمولاً خواناتر هستن:
یا:
————————
۸. مثال عملی — ساخت ماژول شخصی
فرض کن میخوایم چند تابع ریاضی بسازیم و در برنامههای مختلف ازشون استفاده کنیم.
فایل اول:
فایل دوم:
حالا میتونیم کل ماژول رو وارد کنیم:
خروجی:
یا فقط تابع موردنیاز رو وارد کنیم:
خروجی:
نکته: هر دو فایل
—————————
—————————————-
Modules | ماژولها و کتابخانهها
توی این فصل یاد میگیریم چطور از کدهایی که دیگران نوشتهاند استفاده کنیم و چطور کدهای خودمون رو در فایلهای جداگانه قرار بدیم تا بتونیم در پروژههای مختلف ازشون استفاده کنیم.
۱. ماژول (Module) چیست؟
ماژول در پایتون، بهطور ساده، یک فایل پایتون با پسوند
.py است که میتونه شامل متغیر، تابع و کلاس باشه.مثلاً فرض کن یک تابع برای ضرب دو عدد نوشتیم. بهجای اینکه هر بار این تابع رو در برنامههای مختلف بنویسیم، میتونیم اون رو داخل یک فایل قرار بدیم و هر جا خواستیم ازش استفاده کنیم.
مثال:
فایل
mymath.py:def multiply(a, b):
return a * b
حالا در یک فایل پایتون دیگه، مثلاً
main.py، میتونیم از ماژول خودمون استفاده کنیم:import mymath
result1 = mymath.multiply(3, 4)
print(result1)
خروجی:
12
نکته: برای اینکه پایتون فایل
mymath.py رو پیدا کنه، معمولاً باید در مسیر قابلدسترسی برای پایتون، مثل پوشه فعلی پروژه، قرار داشته باشه.——————-
۲. کتابخانه (Library) چیست؟
کتابخانه مجموعهای از کدهای آماده است که برای انجام کارهای مشخصی در اختیار برنامهنویس قرار میگیره.
کتابخانهها میتونن شامل چندین ماژول و بخش مختلف باشن.
برای مثال، پایتون ابزارهای آماده زیادی برای کار با تاریخ، ریاضیات، فایلها و شبکه در اختیارمون قرار میده.
——————-
۳. استفاده از ماژولهای آماده با
importبرای استفاده از یک ماژول، از دستور
import استفاده میکنیم.مثال اول: ماژول math
ماژول
math توابع و مقادیر ریاضی آمادهای داره.import math
print(math.sqrt(25))
print(math.pi)
خروجی:
5.0
3.141592653589793
توضیح:
math.sqrt(25) جذر ۲۵ رو محاسبه میکنه.math.pi مقدار تقریبی عدد پی رو برمیگردونه.چرا نوشتیم
math.sqrt؟چون تابع
sqrt داخل ماژول math قرار داره.———————
۴. کار با ماژول datetime
ماژول
datetime برای کار با تاریخ و زمان استفاده میشه.مثال:
import datetime
today = datetime.date.today()
print(today)
خروجی نمونه:
2026-09-21
دقت کن که در کد جزوه،
tody() اشتباه تایپی بود و شکل صحیحش today() هست.اینجا:
datetime ماژول ماست.date برای کار با تاریخ استفاده میشه.today() تاریخ امروز رو برمیگردونه.——————-
۵. تغییر نام ماژول با
asگاهی اسم یک ماژول طولانیه یا میخوایم در کد کوتاهتر بنویسیم.
برای این کار از
as استفاده میکنیم.import datetime as dt
today = dt.date.today()
print(today)
در این مثال، بهجای نوشتن
datetime، از اسم کوتاهتر dt استفاده میکنیم.مثال دیگر:
import math as m
print(m.sqrt(36))
خروجی:
6.0
—————
۶. وارد کردن یک تابع مشخص از ماژول
فرض کن فقط به تابع
sqrt از ماژول math نیاز داریم.میتونیم فقط همون تابع رو وارد کنیم:
from math import sqrt
print(sqrt(49))
خروجی:
7.0
در این حالت دیگه نیازی نیست بنویسیم:
math.sqrt(49)
چون تابع
sqrt رو مستقیماً وارد کردیم.وارد کردن چند تابع مشخص
from math import sqrt, pi
print(sqrt(64))
print(pi)
—————
۷. استفاده از
from module import *این دستور همه نامهایی رو که ماژول برای وارد کردن در دسترس قرار داده، وارد فضای نام فعلی برنامه میکنه.
from math import *
print(sqrt(81))
print(pi)
اما استفاده از
import * معمولاً پیشنهاد نمیشه؛ چون ممکنه نام توابع یا متغیرها با هم تداخل پیدا کنه و مشخص نباشه هر تابع از کجا اومده.روشهای زیر معمولاً خواناتر هستن:
import math
یا:
from math import sqrt
————————
۸. مثال عملی — ساخت ماژول شخصی
فرض کن میخوایم چند تابع ریاضی بسازیم و در برنامههای مختلف ازشون استفاده کنیم.
فایل اول:
mymath.pydef add(a, b):
return a + b
def multiply(a, b):
return a * b
def subtract(a, b):
return a - b
فایل دوم:
main.pyحالا میتونیم کل ماژول رو وارد کنیم:
import mymath
print(mymath.add(10, 5))
print(mymath.multiply(3, 4))
خروجی:
15
12
یا فقط تابع موردنیاز رو وارد کنیم:
from mymath import add
print(add(10, 5))
خروجی:
15
نکته: هر دو فایل
mymath.py و main.py رو در یک پوشه قرار بده تا این مثال بهسادگی اجرا بشه.—————————
My folder vip
🐍 فصل یازدهم — پایتون مقدماتی Modules —————————————- Modules | ماژولها و کتابخانهها توی این فصل یاد میگیریم چطور از کدهایی که دیگران نوشتهاند استفاده کنیم و چطور کدهای خودمون رو در فایلهای جداگانه قرار بدیم تا بتونیم در پروژههای مختلف ازشون استفاده…
ارتباط ماژولها با امنیت و شبکه
ماژولها کمک میکنن کدهای امنیتی و شبکهای خودمون رو مرتب و قابل استفاده مجدد بنویسیم.
برای مثال، ماژول
خروجی:
این کد مشخص میکنه آدرس واردشده از نوع IPv4 هست.
در پروژههای بزرگتر، میتونیم توابع مربوط به اسکن شبکه، پردازش لاگها یا اعتبارسنجی IP رو در ماژولهای جداگانه قرار بدیم و در برنامه اصلی ازشون استفاده کنیم.
ماژولها کمک میکنن کدهای امنیتی و شبکهای خودمون رو مرتب و قابل استفاده مجدد بنویسیم.
برای مثال، ماژول
ipaddress در پایتون برای کار با آدرسهای IP و شبکهها استفاده میشه:import ipaddress
ip = ipaddress.ip_address("192.168.1.10")
print(ip.version)
خروجی:
4
این کد مشخص میکنه آدرس واردشده از نوع IPv4 هست.
در پروژههای بزرگتر، میتونیم توابع مربوط به اسکن شبکه، پردازش لاگها یا اعتبارسنجی IP رو در ماژولهای جداگانه قرار بدیم و در برنامه اصلی ازشون استفاده کنیم.
🐍 فصل دوازدهم — پایتون مقدماتی Work With Files
—————————————-
توی این فصل یاد میگیریم چطور با پایتون فایل بسازیم، اطلاعات داخل فایل رو بخونیم، داخلش بنویسیم و در نهایت فایل رو بهدرستی ببندیم.
مثلاً فرض کن میخوایم با پایتون یک فایل لاگ برای ثبت رویدادهای یک سرور ایجاد کنیم؛ اینجا کار با فایلها به دردمون میخوره.
————————-
۱. باز کردن فایل با
برای باز کردن یک فایل در پایتون از تابع
در این مثال:
————————
حالتهای مهم باز کردن فایل
حالت
کاربرد
خواندن فایل؛ فایل باید از قبل وجود داشته باشه
نوشتن؛ اگر فایل وجود نداشته باشه ساخته میشه، اگر وجود داشته باشه محتویات قبلی پاک میشه
اضافه کردن محتوا به انتهای فایل، بدون پاک کردن محتوای قبلی
حالت باینری؛ معمولاً همراه حالتهای دیگه استفاده میشه
ایجاد فایل جدید؛ اگر فایل از قبل وجود داشته باشه خطا میده
مثلاً:
اینجا فایل تصویری رو در حالت خواندن باینری باز میکنیم.
نکته:
———————
۲. خواندن اطلاعات فایل با
فرض کنیم فایل
برای خوندن کل محتویات فایل:
خروجی:
تابع
خواندن تعداد مشخصی از کاراکترها
خروجی:
عدد
——————————-
۳. بستن فایل با
بعد از کار با فایل، باید اون رو ببندیم:
چرا؟
چون فایل باز، منابع سیستم رو درگیر میکنه و بستن اون باعث میشه منابع آزاد بشن.
اما یک روش بهتر و حرفهایتر هم وجود داره که جلوتر میبینیم.
——————
۴. خواندن فایل خطبهخط با
روش اول: استفاده از
متد
هر بار که
روش دوم: استفاده از
متد
خروجی نمونه:
دقت کن که
روش سوم: استفاده از حلقه
برای خواندن فایل خطبهخط، میتونیم مستقیماً روی فایل حلقه بزنیم:
اینجا پایتون هر بار یک خط از فایل رو به متغیر
اصلاح نکته جزوه: این کد:
درست نیست؛ چون
———————
۵. متد
وقتی از فایل خط میخونیم، ممکنه انتهای هر خط کاراکتر
برای حذف فاصلهها و کاراکترهای خالی ابتدا و انتهای رشته از
خروجی:
نکته مهم:
نه:
حالت دوم فقط به خود متد اشاره میکنه و اون رو اجرا نمیکنه.
———————-
۶. نوشتن داخل فایل با
برای نوشتن در فایل از حالت
اگر فایل وجود نداشته باشه، ساخته میشه.
اگر از قبل وجود داشته باشه، محتویات قبلی اون پاک میشه و اطلاعات جدید نوشته میشه.
نوشتن چند خط در فایل
محتوای فایل:
_————————
۷. اضافه کردن محتوا به انتهای فایل با
فرض کن داخل فایل
در این حالت از
این دستور، متن
تفاوت مهم:
——————————
۸. روش حرفهای باز کردن فایل با
در پایتون، استفاده از
دیگه نیازی به نوشتن
مثال نوشتن با
بعد از خروج از بلوک
—————————————-
توی این فصل یاد میگیریم چطور با پایتون فایل بسازیم، اطلاعات داخل فایل رو بخونیم، داخلش بنویسیم و در نهایت فایل رو بهدرستی ببندیم.
مثلاً فرض کن میخوایم با پایتون یک فایل لاگ برای ثبت رویدادهای یک سرور ایجاد کنیم؛ اینجا کار با فایلها به دردمون میخوره.
————————-
۱. باز کردن فایل با
open()برای باز کردن یک فایل در پایتون از تابع
open() استفاده میکنیم.file = open("ali.txt", "r")در این مثال:
open() فایل رو باز میکنه.ali.txt اسم فایله."r" حالت باز کردن فایل برای خواندنه (Read).————————
حالتهای مهم باز کردن فایل
حالت
کاربرد
"r"خواندن فایل؛ فایل باید از قبل وجود داشته باشه
"w"نوشتن؛ اگر فایل وجود نداشته باشه ساخته میشه، اگر وجود داشته باشه محتویات قبلی پاک میشه
"a"اضافه کردن محتوا به انتهای فایل، بدون پاک کردن محتوای قبلی
"b"حالت باینری؛ معمولاً همراه حالتهای دیگه استفاده میشه
"x"ایجاد فایل جدید؛ اگر فایل از قبل وجود داشته باشه خطا میده
مثلاً:
file = open("image.jpg", "rb")اینجا فایل تصویری رو در حالت خواندن باینری باز میکنیم.
نکته:
"b" بهتنهایی معمولاً حالت کاملی برای باز کردن فایل نیست؛ معمولاً با "r" یا "w" ترکیب میشه، مثل "rb" و "wb".———————
۲. خواندن اطلاعات فایل با
read()فرض کنیم فایل
ali.txt این محتوا رو داره:Hello Ali
Welcome to Python
برای خوندن کل محتویات فایل:
file = open("ali.txt", "r")
content = file.read()
print(content)
file.close()خروجی:
Hello Ali
Welcome to Python
تابع
read() محتوای فایل رو میخونه و بهصورت رشته (str) برمیگردونه.خواندن تعداد مشخصی از کاراکترها
file = open("ali.txt", "r")
content = file.read(5)
print(content)
file.close()خروجی:
Hello
عدد
5 یعنی پنج کاراکتر اول فایل خونده بشه.——————————-
۳. بستن فایل با
close()بعد از کار با فایل، باید اون رو ببندیم:
file.close()
چرا؟
چون فایل باز، منابع سیستم رو درگیر میکنه و بستن اون باعث میشه منابع آزاد بشن.
اما یک روش بهتر و حرفهایتر هم وجود داره که جلوتر میبینیم.
——————
۴. خواندن فایل خطبهخط با
readline() و readlines()روش اول: استفاده از
readline()متد
readline() هر بار یک خط از فایل رو میخونه.file = open("ali.txt", "r")
line1 = file.readline()
line2 = file.readline()
print(line1)
print(line2)
file.close()هر بار که
readline() اجرا میشه، به خط بعدی میره.روش دوم: استفاده از
readlines()متد
readlines() تمام خطوط فایل رو میخونه و به شکل یک لیست برمیگردونه.file = open("ali.txt", "r")
lines = file.readlines()
print(lines)
file.close()خروجی نمونه:
['Hello Ali\n', 'Welcome to Python\n']
دقت کن که
\n نشاندهنده کاراکتر رفتن به خط بعدیه.روش سوم: استفاده از حلقه
for (پیشنهادی)برای خواندن فایل خطبهخط، میتونیم مستقیماً روی فایل حلقه بزنیم:
file = open("ali.txt", "r")
for line in file:
print(line.strip())
file.close()اینجا پایتون هر بار یک خط از فایل رو به متغیر
line میده.اصلاح نکته جزوه: این کد:
for line in content.readline():
درست نیست؛ چون
content معمولاً خروجی read() و یک رشته است و readline() متد فایل محسوب میشه. برای خواندن خطبهخط، از for line in file: یا file.readlines() استفاده کن.———————
۵. متد
strip() چیست؟وقتی از فایل خط میخونیم، ممکنه انتهای هر خط کاراکتر
\n وجود داشته باشه.برای حذف فاصلهها و کاراکترهای خالی ابتدا و انتهای رشته از
strip() استفاده میکنیم:text = " Hello Ali\n"
print(text.strip())
خروجی:
Hello Ali
نکته مهم:
strip() فقط وقتی اجرا بشه که با پرانتز نوشته شده باشه.line.strip()
نه:
line.strip
حالت دوم فقط به خود متد اشاره میکنه و اون رو اجرا نمیکنه.
———————-
۶. نوشتن داخل فایل با
write()برای نوشتن در فایل از حالت
"w" استفاده میکنیم.file = open("ali.txt", "w")
file.write("Hi")
file.close()اگر فایل وجود نداشته باشه، ساخته میشه.
اگر از قبل وجود داشته باشه، محتویات قبلی اون پاک میشه و اطلاعات جدید نوشته میشه.
نوشتن چند خط در فایل
file = open("ali.txt", "w")
file.write("Hello Ali\n")
file.write("Welcome to Python\n")
file.write("End")
file.close()محتوای فایل:
Hello Ali
Welcome to Python
End
\n باعث میشه متن بعدی از خط جدید شروع بشه._————————
۷. اضافه کردن محتوا به انتهای فایل با
aفرض کن داخل فایل
ali.txt از قبل اطلاعاتی داریم و نمیخوایم پاک بشن.در این حالت از
"a" (Append) استفاده میکنیم:file = open("ali.txt", "a")
file.write("\nEnd\n")
file.close()این دستور، متن
End رو به انتهای فایل اضافه میکنه.تفاوت مهم:
"w" محتویات قبلی رو پاک میکنه و از اول مینویسه."a" محتوای جدید رو به انتهای فایل اضافه میکنه.——————————
۸. روش حرفهای باز کردن فایل با
withدر پایتون، استفاده از
with open() روش پیشنهادی برای کار با فایله؛ چون بعد از پایان بلوک، فایل بهصورت خودکار بسته میشه.with open("ali.txt", "r") as file:
content = file.read()
print(content)دیگه نیازی به نوشتن
file.close() نیست.مثال نوشتن با
withwith open("ali.txt", "w") as file:
file.write("Hello Ali\n")
file.write("Python is great")بعد از خروج از بلوک
with، فایل بهصورت خودکار بسته میشه.
My folder vip
🐍 فصل دوازدهم — پایتون مقدماتی Work With Files —————————————- توی این فصل یاد میگیریم چطور با پایتون فایل بسازیم، اطلاعات داخل فایل رو بخونیم، داخلش بنویسیم و در نهایت فایل رو بهدرستی ببندیم. مثلاً فرض کن میخوایم با پایتون یک فایل لاگ برای ثبت رویدادهای…
۹. مثال کاربردی امنیتی — ثبت لاگ
فرض کن میخوایم نتیجه یک بررسی امنیتی رو داخل فایل ثبت کنیم.
هر بار که این کد اجرا بشه، پیام جدید به انتهای فایل
این روش میتونه برای ذخیره رویدادهای برنامه، خطاها یا نتایج بررسیهای امنیتی استفاده بشه.
فرض کن میخوایم نتیجه یک بررسی امنیتی رو داخل فایل ثبت کنیم.
with open("security.log", "a") as file:
file.write("Login attempt detected\n")هر بار که این کد اجرا بشه، پیام جدید به انتهای فایل
security.log اضافه میشه.این روش میتونه برای ذخیره رویدادهای برنامه، خطاها یا نتایج بررسیهای امنیتی استفاده بشه.
🐍 فصل سیزدهم — پایتون مقدماتی Error Handling
—————————————-
رسیدیم به یکی از مباحث مهم پایتون که هم در برنامهنویسی روزمره و هم در توسعه ابزارهای امنیتی خیلی کاربرد داره.
فرض کن کاربر باید یک عدد وارد کنه، اما بهجای عدد، حروف وارد میکنه. اگر برنامه ما مدیریت خطا نداشته باشه، ممکنه متوقف بشه و یک پیام خطای فنی نمایش بده.
با Error Handling میتونیم خطاهای قابلپیشبینی رو مدیریت کنیم تا برنامه بهجای متوقف شدن ناگهانی، رفتار مناسبی داشته باشه.
——————-
۱. خطا (Error / Exception) چیست؟
هنگام اجرای برنامه ممکنه اتفاقی بیفته که اجرای عادی برنامه رو مختل کنه.
مثلاً:
این برنامه دو مشکل احتمالی داره:
اگر کاربر بهجای عدد، متن وارد کنه، با
اگر کاربر عدد صفر وارد کنه، با
در حالت عادی، این خطاها میتونن اجرای برنامه رو متوقف کنن.
————————
۲. دستور try و except
برای مدیریت خطاها از
ساختار کلی:
یعنی پایتون کد داخل
مثال ساده
حالا اگر کاربر ورودی نامعتبر وارد کنه یا عدد صفر بده، برنامه بهجای نمایش خطای خام، پیام خودمون رو نمایش میده.
اما یک نکته مهم: استفاده از
————————-
۳. مدیریت ValueError
خطای
مثلاً:
پایتون نمیتونه رشته
مثال کاربردی
اگر کاربر بهجای عدد، مثلاً
در این مثال، خطای
—————————
۴. مدیریت چند خطای مختلف
میتونیم برای هر نوع خطا، پیام جداگانهای نمایش بدیم.
—————————
۶. مدیریت خطای FileNotFoundError
فرض کن برنامه ما میخواد یک فایل رو بخونه، اما فایل وجود نداره.
اگر فایل
روش بهتر، استفاده از
——————
۷. استفاده از else و finally
علاوه بر
بخش else
بخش
بخش finally
بخش
—————————————-
رسیدیم به یکی از مباحث مهم پایتون که هم در برنامهنویسی روزمره و هم در توسعه ابزارهای امنیتی خیلی کاربرد داره.
فرض کن کاربر باید یک عدد وارد کنه، اما بهجای عدد، حروف وارد میکنه. اگر برنامه ما مدیریت خطا نداشته باشه، ممکنه متوقف بشه و یک پیام خطای فنی نمایش بده.
با Error Handling میتونیم خطاهای قابلپیشبینی رو مدیریت کنیم تا برنامه بهجای متوقف شدن ناگهانی، رفتار مناسبی داشته باشه.
——————-
۱. خطا (Error / Exception) چیست؟
هنگام اجرای برنامه ممکنه اتفاقی بیفته که اجرای عادی برنامه رو مختل کنه.
مثلاً:
number = int(input("Enter a number: "))
result = 100 / number
print(result)این برنامه دو مشکل احتمالی داره:
اگر کاربر بهجای عدد، متن وارد کنه، با
ValueError مواجه میشیم.اگر کاربر عدد صفر وارد کنه، با
ZeroDivisionError مواجه میشیم.در حالت عادی، این خطاها میتونن اجرای برنامه رو متوقف کنن.
————————
۲. دستور try و except
برای مدیریت خطاها از
try و except استفاده میکنیم.ساختار کلی:
try:
# کدی که ممکن است خطا ایجاد کند
except:
# کدی که هنگام بروز خطا اجرا میشود
یعنی پایتون کد داخل
try رو اجرا میکنه. اگر خطایی رخ بده که با except مطابقت داشته باشه، وارد بخش except میشه.مثال ساده
try:
number = int(input("Enter a number: "))
result = 100 / number
print(result)
except:
print("An error occurred!")
حالا اگر کاربر ورودی نامعتبر وارد کنه یا عدد صفر بده، برنامه بهجای نمایش خطای خام، پیام خودمون رو نمایش میده.
اما یک نکته مهم: استفاده از
except خالی معمولاً پیشنهاد نمیشه؛ چون ممکنه خطاهای غیرمنتظره رو هم پنهان کنه. بهتره خطاهای مشخص رو مدیریت کنیم.————————-
۳. مدیریت ValueError
خطای
ValueError زمانی رخ میده که نوع داده از نظر کلی قابلقبوله، اما مقدار ارائهشده برای عملیات موردنظر معتبر نیست.مثلاً:
number = int("hello")پایتون نمیتونه رشته
"hello" رو به عدد صحیح تبدیل کنه؛ بنابراین ValueError ایجاد میشه.مثال کاربردی
try:
number = int(input("Enter a number: "))
result = 100 / number
print(result)
except ValueError:
print("Lotfan adad vared konid!")
اگر کاربر بهجای عدد، مثلاً
hello وارد کنه، پیام زیر نمایش داده میشه:Lotfan adad vared konid!
در این مثال، خطای
ValueError مدیریت میشه؛ اما اگر کاربر صفر وارد کنه، همچنان ZeroDivisionError رخ میده.—————————
۴. مدیریت چند خطای مختلف
میتونیم برای هر نوع خطا، پیام جداگانهای نمایش بدیم.
try:
number = int(input("Enter a number: "))
result = 100 / number
print(result)
except ValueError:
print("Lotfan adad sahih vared konid!")
except ZeroDivisionError:
print("Adad nemitavanad sefr bashad!")
—————————
۶. مدیریت خطای FileNotFoundError
فرض کن برنامه ما میخواد یک فایل رو بخونه، اما فایل وجود نداره.
try:
file = open("data.txt", "r")
content = file.read()
print(content)
file.close()
except FileNotFoundError:
print("File not found!")
اگر فایل
data.txt وجود نداشته باشه، بهجای نمایش خطای خام، پیام مناسب نمایش داده میشه.روش بهتر، استفاده از
with هست تا فایل بهصورت خودکار بسته بشه:try:
with open("data.txt", "r") as file:
content = file.read()
print(content)
except FileNotFoundError:
print("File not found!")
——————
۷. استفاده از else و finally
علاوه بر
try و except، دو بخش دیگه هم داریم.بخش else
بخش
else زمانی اجرا میشه که داخل try هیچ خطایی رخ نداده باشه.try:
number = int(input("Enter a number: "))
except ValueError:
print("Invalid input!")
else:
print("Your number is:", number)
بخش finally
بخش
finally در پایان اجرای ساختار مدیریت خطا اجرا میشه؛ چه خطا رخ داده باشه، چه رخ نداده باشه.try:
number = int(input("Enter a number: "))
except ValueError:
print("Invalid input!")
finally:
print("Program finished!")
finally برای کارهایی مثل آزادسازی منابع یا پاکسازی وضعیت برنامه کاربرد داره.
My folder vip
🐍 فصل سیزدهم — پایتون مقدماتی Error Handling —————————————- رسیدیم به یکی از مباحث مهم پایتون که هم در برنامهنویسی روزمره و هم در توسعه ابزارهای امنیتی خیلی کاربرد داره. فرض کن کاربر باید یک عدد وارد کنه، اما بهجای عدد، حروف وارد میکنه. اگر برنامه…
نکته امنیتی مهم 🔐
درسته که مدیریت خطا میتونه از نمایش جزئیات فنی ناخواسته به کاربر جلوگیری کنه؛ اما پنهان کردن خطا بهتنهایی به معنی امن شدن برنامه نیست.
برای مثال، در یک برنامه تحت وب، نمایش جزئیات خطا مثل مسیرهای داخلی سرور، اطلاعات اتصال دیتابیس یا Stack Trace ممکنه اطلاعات غیرضروری در اختیار مهاجم قرار بده.
روش اصولی:
به کاربر پیام ساده و غیرحساس نمایش بده.
خطای فنی رو در لاگ داخلی ثبت کن.
اطلاعات محرمانه مثل رمز عبور، توکن و کلیدهای API رو در لاگ ذخیره نکن.
خطاهای مشخص رو مدیریت کن؛ از
مثلاً:
این روش هم تجربه کاربر رو بهتر میکنه و هم از پنهان شدن ناخواسته خطاهای غیرمنتظره جلوگیری میکنه.
درسته که مدیریت خطا میتونه از نمایش جزئیات فنی ناخواسته به کاربر جلوگیری کنه؛ اما پنهان کردن خطا بهتنهایی به معنی امن شدن برنامه نیست.
برای مثال، در یک برنامه تحت وب، نمایش جزئیات خطا مثل مسیرهای داخلی سرور، اطلاعات اتصال دیتابیس یا Stack Trace ممکنه اطلاعات غیرضروری در اختیار مهاجم قرار بده.
روش اصولی:
به کاربر پیام ساده و غیرحساس نمایش بده.
خطای فنی رو در لاگ داخلی ثبت کن.
اطلاعات محرمانه مثل رمز عبور، توکن و کلیدهای API رو در لاگ ذخیره نکن.
خطاهای مشخص رو مدیریت کن؛ از
except خالی برای پنهان کردن همه خطاها استفاده نکن.مثلاً:
try:
number = int(input("Enter a number: "))
result = 100 / number
except ValueError:
print("Please enter a valid number.")
except ZeroDivisionError:
print("Number cannot be zero.")
این روش هم تجربه کاربر رو بهتر میکنه و هم از پنهان شدن ناخواسته خطاهای غیرمنتظره جلوگیری میکنه.
🐍 فصل چهاردهم — پایتون مقدماتی OOP
—————————————-
برنامهنویسی شیگرا
رسیدیم به یکی از مفاهیم مهم برنامهنویسی پایتون! 😎
برنامهنویسی شیگرا (OOP) روشی برای طراحی برنامه است که در اون کدها رو بر اساس کلاسها (Class) و اشیا (Object) سازماندهی میکنیم.
برای اینکه بهتر متوجه بشی، مثال رو با موضوعی مرتبط با شبکه و امنیت پیش میبریم.
———————————
۱. برنامهنویسی شیگرا (OOP) چیست؟
فرض کن میخوایم یک برنامه برای مدیریت سرورها بنویسیم.
هر سرور میتونه ویژگیهایی داشته باشه، مثل:
نام سرور
آدرس IP
سیستمعامل
همچنین میتونه کارهایی انجام بده، مثل:
نمایش اطلاعات سرور
روشن یا خاموش شدن
بررسی وضعیت
در OOP، ما این ویژگیها و رفتارها رو داخل یک ساختار به نام Class قرار میدیم.
————————
۲. کلاس (Class) چیست؟
کلاس مثل یک نقشه یا قالب برای ساخت اشیاست.
مثلاً نقشه یک خودرو مشخص میکنه خودرو چه ویژگیهایی داره؛ اما خود نقشه، یک خودرو واقعی نیست.
در پایتون هم کلاس مشخص میکنه اشیایی که از اون ساخته میشن چه ویژگیها و رفتارهایی داشته باشن.
مثال: ساخت کلاس Server
بیا قسمتهای مختلف رو بررسی کنیم.
با کلمه کلیدی
این کلاس قالبی برای ساخت اشیای سرور خواهد بود.
این متد هنگام ساخت یک شیء جدید اجرا میشه و معمولاً برای مقداردهی اولیه ویژگیهای اون استفاده میشه.
مثلاً وقتی یک سرور میسازیم، میتونیم نام، IP و سیستمعاملش رو مشخص کنیم.
کلمه
مثلاً:
یعنی مقدار
این یک متد (Method) است؛ یعنی تابعی که داخل کلاس تعریف شده و اطلاعات سرور رو نمایش میده.
———————-
۳. شیء (Object) و اینستنس (Instance) چیست؟
وقتی از روی یک کلاس، یک شیء واقعی میسازیم، به اون شیء یک Instance از کلاس میگیم.
به زبان ساده:
Class = قالب یا نقشه
Object / Instance = نمونه ساختهشده از روی قالب
حالا از کلاس
در اینجا:
هر Instance ویژگیهای خودش رو داره.
برای مثال:
خروجی:
میتونیم متد کلاس رو هم اجرا کنیم:
خروجی:
نکته: در پایتون، ساخت شیء از روی کلاس رو معمولاً Instantiation میگن.
——————-
۴. ارثبری (Inheritance) چیست؟
ارثبری یکی از قابلیتهای مهم OOP است.
با استفاده از Inheritance میتونیم یک کلاس جدید بسازیم که ویژگیها و متدهای کلاس دیگهای رو به ارث ببره.
مثلاً فرض کن کلاس
LinuxServer
WindowsServer
هر دو سرور ویژگیهای عمومی مثل نام، IP و سیستمعامل دارن؛ پس لازم نیست همه کدها رو از اول بنویسیم.
میتونیم از کلاس
در این حالت:
————————
—————————————-
برنامهنویسی شیگرا
رسیدیم به یکی از مفاهیم مهم برنامهنویسی پایتون! 😎
برنامهنویسی شیگرا (OOP) روشی برای طراحی برنامه است که در اون کدها رو بر اساس کلاسها (Class) و اشیا (Object) سازماندهی میکنیم.
برای اینکه بهتر متوجه بشی، مثال رو با موضوعی مرتبط با شبکه و امنیت پیش میبریم.
———————————
۱. برنامهنویسی شیگرا (OOP) چیست؟
فرض کن میخوایم یک برنامه برای مدیریت سرورها بنویسیم.
هر سرور میتونه ویژگیهایی داشته باشه، مثل:
نام سرور
آدرس IP
سیستمعامل
همچنین میتونه کارهایی انجام بده، مثل:
نمایش اطلاعات سرور
روشن یا خاموش شدن
بررسی وضعیت
در OOP، ما این ویژگیها و رفتارها رو داخل یک ساختار به نام Class قرار میدیم.
————————
۲. کلاس (Class) چیست؟
کلاس مثل یک نقشه یا قالب برای ساخت اشیاست.
مثلاً نقشه یک خودرو مشخص میکنه خودرو چه ویژگیهایی داره؛ اما خود نقشه، یک خودرو واقعی نیست.
در پایتون هم کلاس مشخص میکنه اشیایی که از اون ساخته میشن چه ویژگیها و رفتارهایی داشته باشن.
مثال: ساخت کلاس Server
class Server:
def __init__(self, name, ip, os):
self.name = name
self.ip = ip
self.os = os
def show_info(self):
print(f"Server: {self.name}")
print(f"IP: {self.ip}")
print(f"OS: {self.os}")
بیا قسمتهای مختلف رو بررسی کنیم.
class Server:با کلمه کلیدی
class یک کلاس به نام Server تعریف میکنیم.این کلاس قالبی برای ساخت اشیای سرور خواهد بود.
__init__()این متد هنگام ساخت یک شیء جدید اجرا میشه و معمولاً برای مقداردهی اولیه ویژگیهای اون استفاده میشه.
مثلاً وقتی یک سرور میسازیم، میتونیم نام، IP و سیستمعاملش رو مشخص کنیم.
selfکلمه
self به شیء فعلی اشاره میکنه.مثلاً:
self.name = name
یعنی مقدار
name رو داخل ویژگی name همین شیء ذخیره کن.show_info()این یک متد (Method) است؛ یعنی تابعی که داخل کلاس تعریف شده و اطلاعات سرور رو نمایش میده.
———————-
۳. شیء (Object) و اینستنس (Instance) چیست؟
وقتی از روی یک کلاس، یک شیء واقعی میسازیم، به اون شیء یک Instance از کلاس میگیم.
به زبان ساده:
Class = قالب یا نقشه
Object / Instance = نمونه ساختهشده از روی قالب
حالا از کلاس
Server دو سرور مختلف میسازیم:server1 = Server("Web-Server", "192.168.1.10", "Ubuntu")
server2 = Server("DB-Server", "192.168.1.20", "Windows")در اینجا:
Server کلاس ماست.server1 یک Instance از کلاس Server است.server2 هم یک Instance دیگر از همون کلاس است.هر Instance ویژگیهای خودش رو داره.
برای مثال:
print(server1.name)
print(server2.name)
خروجی:
Web-Server
DB-Server
میتونیم متد کلاس رو هم اجرا کنیم:
server1.show_info()
خروجی:
Server: Web-Server
IP: 192.168.1.10
OS: Ubuntu
نکته: در پایتون، ساخت شیء از روی کلاس رو معمولاً Instantiation میگن.
——————-
۴. ارثبری (Inheritance) چیست؟
ارثبری یکی از قابلیتهای مهم OOP است.
با استفاده از Inheritance میتونیم یک کلاس جدید بسازیم که ویژگیها و متدهای کلاس دیگهای رو به ارث ببره.
مثلاً فرض کن کلاس
Server رو داریم؛ حالا میخوایم دو نوع سرور تعریف کنیم:LinuxServer
WindowsServer
هر دو سرور ویژگیهای عمومی مثل نام، IP و سیستمعامل دارن؛ پس لازم نیست همه کدها رو از اول بنویسیم.
میتونیم از کلاس
Server ارثبری کنیم.در این حالت:
Server = کلاس والد (Parent / Base Class)LinuxServer = کلاس فرزند (Child / Derived Class)WindowsServer = کلاس فرزند (Child / Derived Class)————————
۵. مثال کامل ارثبری در پایتون
حالا از کلاس فرزند، یک Instance میسازیم:
خروجی:
این کد چطور کار میکنه؟
۱.
با قرار دادن نام کلاس والد داخل پرانتز، مشخص میکنیم که
۲.
با
در این مثال، متد
۳.
این ویژگی مخصوص کلاس فرزند است و توزیع لینوکس سرور رو ذخیره میکنه.
۴.
چون
پس لازم نیست اون متد رو دوباره بنویسیم!
——————
۶. چرا ارثبری مهم است؟
فرض کن برای هر نوع سرور، تمام ویژگیها و متدهای مشترک رو دوباره تعریف کنیم.
با زیاد شدن تعداد کلاسها، کدمون تکراری و نگهداریش سخت میشه.
Inheritance کمک میکنه:
کدهای مشترک رو فقط یک بار بنویسیم.
کلاسهای تخصصیتر بسازیم.
کدها رو مرتبتر و قابل نگهداریتر کنیم.
قابلیتهای کلاس والد رو در کلاس فرزند گسترش بدیم.
البته هر جا کلاسها رابطه منطقی والد و فرزندی ندارن، استفاده از ارثبری لزوماً انتخاب مناسبی نیست.
class Server:
def __init__(self, name, ip):
self.name = name
self.ip = ip
def show_info(self):
print(f"Name: {self.name}")
print(f"IP: {self.ip}")
class LinuxServer(Server):
def __init__(self, name, ip, distro):
super().__init__(name, ip)
self.distro = distro
def show_linux_info(self):
self.show_info()
print(f"Distro: {self.distro}")
حالا از کلاس فرزند، یک Instance میسازیم:
linux1 = LinuxServer(
"Web-Server",
"192.168.1.10",
"Ubuntu"
)
linux1.show_linux_info()
خروجی:
Name: Web-Server
IP: 192.168.1.10
Distro: Ubuntu
این کد چطور کار میکنه؟
۱.
class LinuxServer(Server):با قرار دادن نام کلاس والد داخل پرانتز، مشخص میکنیم که
LinuxServer از Server ارثبری میکنه.۲.
super().__init__(name, ip)با
super() به پیادهسازی کلاس والد دسترسی پیدا میکنیم.در این مثال، متد
__init__() کلاس Server رو اجرا میکنیم تا ویژگیهای name و ip مقداردهی بشن.۳.
self.distro = distroاین ویژگی مخصوص کلاس فرزند است و توزیع لینوکس سرور رو ذخیره میکنه.
۴.
self.show_info()چون
LinuxServer از Server ارثبری کرده، میتونه از متد show_info() کلاس والد استفاده کنه.پس لازم نیست اون متد رو دوباره بنویسیم!
——————
۶. چرا ارثبری مهم است؟
فرض کن برای هر نوع سرور، تمام ویژگیها و متدهای مشترک رو دوباره تعریف کنیم.
با زیاد شدن تعداد کلاسها، کدمون تکراری و نگهداریش سخت میشه.
Inheritance کمک میکنه:
کدهای مشترک رو فقط یک بار بنویسیم.
کلاسهای تخصصیتر بسازیم.
کدها رو مرتبتر و قابل نگهداریتر کنیم.
قابلیتهای کلاس والد رو در کلاس فرزند گسترش بدیم.
البته هر جا کلاسها رابطه منطقی والد و فرزندی ندارن، استفاده از ارثبری لزوماً انتخاب مناسبی نیست.
🐍 فصل پانزدهم — پایتون مقدماتی regex
—————————————-
خب رسیدیم به یکی از مباحث بسیار کاربردی پایتون، مخصوصاً برای امنیت شبکه، پنتست، تحلیل لاگ و پردازش دادهها. 🔐
فقط اول یک اصلاح مهم: Regex مربوط به رمزنگاری (Encryption) نیست. ریجکس ابزاری برای جستوجو، شناسایی و بررسی الگوهای متنیه.
——————————
۱. Regex چیست؟
Regex مخفف Regular Expression است.
به زبان ساده، Regex به ما اجازه میده داخل متن، دنبال یک الگوی مشخص بگردیم.
مثلاً فرض کن یک فایل لاگ داریم که داخلش هزاران خط اطلاعات وجود داره. میخوایم تمام آدرسهای IP یا ایمیلها رو از داخلش پیدا کنیم.
بهجای اینکه تکتک خطوط رو بررسی کنیم، با Regex میتونیم الگوی موردنظر رو مشخص کنیم و پایتون اون رو جستوجو کنه.
کاربردهای Regex
جستوجو در متن
اعتبارسنجی ایمیل و شماره تلفن
استخراج آدرسهای IP از لاگها
بررسی فرمت رمز عبور
پیدا کردن الگوهای مشکوک در لاگهای امنیتی
پردازش و پاکسازی دادههای متنی
در پایتون، ماژول داخلی
—————-
۲. جستوجو در متن با
متد
مثال جزوه
خروجی:
چرا؟
چون کلمه
مثال دوم
خروجی:
——————
۳. آشنایی با نمادهای مهم Regex
حالا بریم سراغ نمادهایی که در جزوهات نوشتی.
مثال:
خروجی:
اگر بخوایم اعداد چندرقمی رو یکجا پیدا کنیم:
خروجی:
—————-
مثال:
خروجی:
علامت
نکته: در پایتون،
—————————
علامت
اگر بخوایم خود علامت
خروجی:
نقطه (
مثال:
خروجی:
چون نقطه میتونه با کاراکتر
مثالهای دیگه:
اما
——————
مثال ترکیبی
خروجی:
چون تمام حروف و اعداد پشت سر هم، با الگوی
———————
۵. اعتبارسنجی ایمیل با Regex
حالا بریم سراغ مثال ایمیل که در جزوهات نوشتی.
هدف اینه که بررسی کنیم آیا ایمیل واردشده، با یک الگوی مشخص مطابقت داره یا نه.
نسخه اصلاحشده کد
مثال ورودی و خروجی
ورودی:
خروجی:
ورودی:
خروجی:
چون در ایمیل دوم علامت
——————-
—————————————-
خب رسیدیم به یکی از مباحث بسیار کاربردی پایتون، مخصوصاً برای امنیت شبکه، پنتست، تحلیل لاگ و پردازش دادهها. 🔐
فقط اول یک اصلاح مهم: Regex مربوط به رمزنگاری (Encryption) نیست. ریجکس ابزاری برای جستوجو، شناسایی و بررسی الگوهای متنیه.
——————————
۱. Regex چیست؟
Regex مخفف Regular Expression است.
به زبان ساده، Regex به ما اجازه میده داخل متن، دنبال یک الگوی مشخص بگردیم.
مثلاً فرض کن یک فایل لاگ داریم که داخلش هزاران خط اطلاعات وجود داره. میخوایم تمام آدرسهای IP یا ایمیلها رو از داخلش پیدا کنیم.
بهجای اینکه تکتک خطوط رو بررسی کنیم، با Regex میتونیم الگوی موردنظر رو مشخص کنیم و پایتون اون رو جستوجو کنه.
کاربردهای Regex
جستوجو در متن
اعتبارسنجی ایمیل و شماره تلفن
استخراج آدرسهای IP از لاگها
بررسی فرمت رمز عبور
پیدا کردن الگوهای مشکوک در لاگهای امنیتی
پردازش و پاکسازی دادههای متنی
در پایتون، ماژول داخلی
re برای کار با Regex استفاده میشه و نیازی به نصب جداگانه نداره.import re
—————-
۲. جستوجو در متن با
re.search()متد
re.search() در یک متن، دنبال اولین تطابق با الگوی مشخصشده میگرده.مثال جزوه
import re
text = "hi"
pattern = "rain"
match = re.search(pattern, text)
if match:
print("Find")
print(f"From character {match.start()} to {match.end()}")
else:
print("Not found")
خروجی:
Not found
چرا؟
چون کلمه
rain داخل متن hi وجود نداره.مثال دوم
import re
text = "Hello rain world"
pattern = "rain"
match = re.search(pattern, text)
if match:
print("Find")
print(f"From character {match.start()} to {match.end()}")
else:
print("Not found")
خروجی:
Find
From character 6 to 10
——————
۳. آشنایی با نمادهای مهم Regex
حالا بریم سراغ نمادهایی که در جزوهات نوشتی.
\d — پیدا کردن عدد\d هر رقم عددی رو شناسایی میکنه.مثال:
import re
text = "My age is 25"
result = re.findall(r"\d", text)
print(result)
خروجی:
['2', '5']
اگر بخوایم اعداد چندرقمی رو یکجا پیدا کنیم:
print(re.findall(r"\d+", text))
خروجی:
['25']
—————-
\w — کاراکترهای کلمهای\w معمولاً حروف، اعداد و زیرخط (_) رو شناسایی میکنه.مثال:
import re
text = "ali_123!"
result = re.findall(r"\w", text)
print(result)
خروجی:
['a', 'l', 'i', '_', '1', '2', '3']
علامت
! پیدا نمیشه؛ چون جزو کاراکترهای \w نیست.نکته: در پایتون،
\w بهصورت پیشفرض کاراکترهای حرفی Unicode، از جمله بسیاری از حروف فارسی، رو هم شامل میشه.—————————
\+ — پیدا کردن علامت + بهصورت واقعیعلامت
+ در Regex یک معنی ویژه داره؛ یعنی «یک یا چند بار تکرار».اگر بخوایم خود علامت
+ رو جستوجو کنیم، باید قبلش بکاسلش بذاریم:import re
text = "5+3"
result = re.search(r"\+", text)
if result:
print("Plus found")
خروجی:
Plus found
. — هر کاراکترنقطه (
.) در Regex معمولاً به معنی هر کاراکتری بهجز خط جدید (\n) است.مثال:
import re
text = "cat"
result = re.findall(r"c.t", text)
print(result)
خروجی:
['cat']
چون نقطه میتونه با کاراکتر
a تطبیق پیدا کنه.مثالهای دیگه:
c.t → cat
c.t → cot
c.t → c7t
اما
c.t با ct تطبیق پیدا نمیکنه؛ چون نقطه باید با یک کاراکتر تطبیق داشته باشه.——————
مثال ترکیبی
import re
text = "Ali123"
result = re.findall(r"\w+", text)
print(result)
خروجی:
['Ali123']
چون تمام حروف و اعداد پشت سر هم، با الگوی
\w+ تطبیق پیدا میکنن.———————
۵. اعتبارسنجی ایمیل با Regex
حالا بریم سراغ مثال ایمیل که در جزوهات نوشتی.
هدف اینه که بررسی کنیم آیا ایمیل واردشده، با یک الگوی مشخص مطابقت داره یا نه.
نسخه اصلاحشده کد
import re
def is_valid_email(email):
pattern = r"^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$"
return re.fullmatch(pattern, email) is not None
email = input("Enter email: ")
if is_valid_email(email):
print("Valid email")
else:
print("Invalid email")
مثال ورودی و خروجی
ورودی:
ali123@gmail.com
خروجی:
Valid email
ورودی:
ali123gmail.com
خروجی:
Invalid email
چون در ایمیل دوم علامت
@ وجود نداره.——————-
My folder vip
🐍 فصل پانزدهم — پایتون مقدماتی regex —————————————- خب رسیدیم به یکی از مباحث بسیار کاربردی پایتون، مخصوصاً برای امنیت شبکه، پنتست، تحلیل لاگ و پردازش دادهها. 🔐 فقط اول یک اصلاح مهم: Regex مربوط به رمزنگاری (Encryption) نیست. ریجکس ابزاری برای جستوجو،…
چرا از
چون نقطه در Regex معنای خاصی داره و تقریباً هر کاراکتری رو تطبیق میده.
اما ما در ایمیل به یک نقطه واقعی نیاز داریم؛ بنابراین مینویسیم:
چرا از
مثلاً:
حرف
این کار باعث میشه بکاسلشها در رشته، بهصورت خام نگه داشته بشن و برای نوشتن Regex خواناتر باشن.
نکته مهم: این الگو یک بررسی مقدماتی برای فرمت ایمیله، نه اعتبارسنجی کامل استاندارد ایمیل. ممکنه بعضی آدرسهای معتبر رو رد کنه یا بعضی آدرسهای نامعتبر رو بپذیره. برای اطمینان از واقعی بودن ایمیل، معمولاً باید تأییدیه ارسال بشه.
—————
مثال
خروجی:
——————
\. استفاده کردیم؟چون نقطه در Regex معنای خاصی داره و تقریباً هر کاراکتری رو تطبیق میده.
اما ما در ایمیل به یک نقطه واقعی نیاز داریم؛ بنابراین مینویسیم:
\.
چرا از
r قبل از رشته استفاده کردیم؟مثلاً:
pattern = r"\d+"
حرف
r یعنی Raw String.این کار باعث میشه بکاسلشها در رشته، بهصورت خام نگه داشته بشن و برای نوشتن Regex خواناتر باشن.
نکته مهم: این الگو یک بررسی مقدماتی برای فرمت ایمیله، نه اعتبارسنجی کامل استاندارد ایمیل. ممکنه بعضی آدرسهای معتبر رو رد کنه یا بعضی آدرسهای نامعتبر رو بپذیره. برای اطمینان از واقعی بودن ایمیل، معمولاً باید تأییدیه ارسال بشه.
—————
مثال
findall():import re
text = "User1 logged in. User2 logged in."
users = re.findall(r"User\d", text)
print(users)
خروجی:
['User1', 'User2']
——————
My folder vip
چرا از \. استفاده کردیم؟ چون نقطه در Regex معنای خاصی داره و تقریباً هر کاراکتری رو تطبیق میده. اما ما در ایمیل به یک نقطه واقعی نیاز داریم؛ بنابراین مینویسیم: \. چرا از r قبل از رشته استفاده کردیم؟ مثلاً: pattern = r"\d+" حرف r یعنی Raw String. این کار…
کاربرد Regex در امنیت سایبری 🔐
فرض کن در یک فایل لاگ، آدرسهای IP زیادی وجود داره و میخوایم اونها رو استخراج کنیم.
خروجی:
این Regex ظاهری شبیه IPv4 رو پیدا میکنه، اما بهتنهایی معتبر بودن IP رو تضمین نمیکنه؛ برای اعتبارسنجی دقیق IPv4 بهتره از ماژول
در تحلیل لاگها، Regex میتونه به استخراج IP، شناسایی الگوهای درخواست مشکوک و فیلتر کردن دادهها کمک کنه.
فرض کن در یک فایل لاگ، آدرسهای IP زیادی وجود داره و میخوایم اونها رو استخراج کنیم.
import re
text = """
Login from 192.168.1.10
Login from 10.0.0.5
"""
ips = re.findall(r"\b\d{1,3}(?:\.\d{1,3}){3}\b", text)
print(ips)
خروجی:
['192.168.1.10', '10.0.0.5']
این Regex ظاهری شبیه IPv4 رو پیدا میکنه، اما بهتنهایی معتبر بودن IP رو تضمین نمیکنه؛ برای اعتبارسنجی دقیق IPv4 بهتره از ماژول
ipaddress استفاده کنیم.در تحلیل لاگها، Regex میتونه به استخراج IP، شناسایی الگوهای درخواست مشکوک و فیلتر کردن دادهها کمک کنه.