آموزش کامل مفاهیم اولیه پایتون [خلاصه شده]
منبع: https://rasanika.com
این روز ها دانش برنامه نویسی Python می تواند کاربرد های بسیار زیادی داشته باشد، از ساخت نرم افزار های مختلف تا هوش مصنوعی و یادگیری ماشینی، زبان پایتون می تواند انتخاب مناسبی باشد. در این پست با مفاهیم اولیه کدنویسی پایتون بصورت مختصر آشنا خواهیم شد و در ادامه این سری آموزشی، یک پروژه با پایتون خواهیم ساخت.
قبل از شروع کدنویسی، اول به یک محیط توسعه مناسب برای پایتون نیاز داریم که نحوه نصب و راه اندازی چنین محیطی را قبلا در پست زیر یاد گرفتیم:
نصب و راه اندازی محیط برنامه نویسی Python
rasanika.comاولین قدم برای شروع کدنویسی پایتون، راه اندازی یک محیط توسعه مناسب برای کار با پایتون است. در این پست با نصب و آماده سازی محیط برنامه نویسی پایتون آشنا خواهیم شد. ویرایشگری که برای کدنویسی استفاده خوا
اجرای کد در Command Line
پس از نصب پایتون برای اجرای کد پایتون می توانید ترمینال ویژوال استودیو کد یا cmd ویندوز را باز کرده و دستور python
را تایپ کنید. با اجرای این دستور یک Command Line برای شما باز می شود که داخل آن می توانید کد پایتون بنویسید.
C:\Users\...>python
Python 3.11.4 (tags/v3.11.4:d2340ef, Jun 7 2023, 05:45:37) [MSC v.1934 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
برای امتحان می توانید کد print("Hello")
را بنویسید و اینتر بزنید تا اجرا شود (عبارت Hello نمایش داده می شود):
>>> print("Hello")
Hello
برای خروج از این حالت عبارت exit()
را اجرا کنید.
ساختار و Syntax کد پایتون
استفاده از Command Line برای امتحان کردن و اجرای سریع برخی از کد ها می تواند کاربرد داشته باشد ولی اکثر اوقات کد پایتون را داخل یک فایل با پسوند .py
خواهیم نوشت و با دستور زیر محتوای آن فایل را اجرا خواهیم کرد:
python myfile.py
برای مثال یک فایل به اسم myfile.py
ایجاد کنید و کد print("Hello")
را داخل آن بنویسید، سپس با اجرای دستور بالا، عبارت Hello پرینت یا نمایش داده می شود.
تورفتگی یا Indentation در پایتون
در زبان پایتون برخلاف بیشتر زبان های برنامه نویسی، قرار دادن فاصله در ابتدای کد یا همان فرورفتگی کد، معنی خاصی دارد و برای مشخص کردن یک بلوک کد استفاده می شود. در ادامه با این موضوع بیشتر آشنا خواهیم شد.
کامنت های پایتون
در پایتون سطر هایی که با # شروع شوند، اجرا نمی شوند. به این سطر ها کامنت گفته می شود و فقط برای توضیح کدهای نوشته شده استفاده می شوند. کامنت ها را در انتهای کد نیز می توانیم بنویسیم:
#این یه کامنته
print("Hello")
print("Hello") #اینم یه کامنته
(اجرای سریع مثال ها)
در ادامه برای یادگیری بهتر حتما سعی کنید مثال های هر بخش را خودتان اجرا کنید. حتی می توانید مثال ها را تغییر دهید و نتیجه تغییرات را نیز ببینید.
برای اجرای سریع می توانید ویژوال استودیو کد را باز کرده و یک فایل .py ایجاد کنید، سپس کد هر مثال را داخل آن کپی کرده و با دستور python your_file_name.py
داخل ترمینال ویژوال استودیو کد، این فایل را اجرا کنید:
متغیر های پایتون
متغیر ها (Variables) برای نگهداری و ذخیره اطلاعات در حافظه استفاده می شوند. در پایتون برای تعریف یک متغیر فقط کافی است اسم متغیر را نوشته و یک مقدار به آن بدهیم:
myNumber = 12345
print(myNumber)
اسم یک متغیر (در اینجا myNumber) نمی تواند شامل خط تیره یا فاصله باشد و به حروف بزرگ و کوچک حساس است.
اختصاص چند مقدار به صورت همزمان به چند متغیر:
x, y, z = 11, 22, 33
print(x)
print(y)
print(z)
اختصاص یک مقدار به صورت همزمان به چند متغیر:
x = y = z = 11
print(x)
print(y)
print(z)
ساختار های داده پایتون
ساختار های داده (Data Types) در برنامه نویسی اهمیت زیادی دارند. متغیر ها می توانند انواع مختلفی از داده ها را ذخیره کنند که برای امورات مختلف طراحی شده اند. به طور پیشفرض، داده ها در پایتون می توانند ساختار های زیر را داشته باشند:
نوع داده | کاربرد |
| اطلاعات متنی |
| اطلاعات عددی |
| آرایه ها و اطلاعات دنباله ای |
| نگاشت و نقشه برداری اطلاعات |
| انواع ست ها |
| نوع داده بولی (درست/نادرست) |
| اطلاعات باینری |
| ناموجود بودن |
برای به دست آوردن ساختار هر مقداری در پایتون می توانیم از تابع type()
استفاده کنیم:
my_number = 5
print(type(my_number))
نمونه تعریف ساختار های داده مختلف:
تعریف | نوع |
| str |
| int |
| float |
| complex |
| list |
| tuple |
| range |
| dict |
| set |
| frozenset |
| bool |
| bytes |
| bytearray |
| memoryview |
| NoneType |
عملگر های پایتون
عملگر ها (Operators) همانطور که از اسمشان پیداست، برای انجام عملیات مختلف روی داده ها استفاده می شوند. برای مثال عملگر +
برای جمع دو عدد می تواند استفاده شود:
print(10 + 5)
عملگر های حسابی (Arithmetic)
برای انجام عملیات پرکاربرد ریاضی روی اعداد استفاده می شوند:
عملگر | نام | مثال |
| جمع |
|
| تفریق |
|
| ضرب |
|
| تقسیم |
|
| Modulus (باقیمانده) |
|
| توان |
|
| تقسیم صحیح |
|
عملگر های تخصیص مقدار (Assignment)
برای تعیین مقدار متغیر ها استفاده می شوند:
عملگر | مثال | همان |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
عملگر های مقایسه (Comparison)
برای مقایسه دو مقدار استفاده می شوند:
عملگر | نام | مثال |
| مساوی |
|
| نامساوی |
|
| بزرگتر از |
|
| کوچکتر از |
|
| بزرگتر یا مساوی |
|
| کوچکتر یا مساوی |
|
عملگر های منطقی (Logical)
معمولا برای ترکیب عملیات مقایسه ای استفاده می شوند:
عملگر | توضیح | مثال |
| هر دو طرف برقرار باشد |
|
| فقط یک طرف برقرار باشد |
|
| معکوس نتیجه |
|
عملگر های هویت (Identity)
برای مقایسه آبجکت ها استفاده می شوند. نه تنها مقدار دو آبجکت، بلکه اینکه دقیقا همان آبجکت در حافظه هستند یا نه:
عملگر | توضیح | مثال |
| هر دو متغیر یک آبجکت هستند |
|
| هر کدام آبجکت متفاوتی است |
|
شرط if…else پایتون
با استفاده از شرط if در پایتون می توانیم کد موردنظر مان را تنها درصورت برقرار بودن یک شرط اجرا کنیم. در مثال زیر کد print فقط درصورتی اجرا خواهد شد که متغیر b بزرگتر از متغیر a باشد (که هست):
a = 33
b = 200
if b > a:
print("b is greater than a")
به فاصله یا فرورفتگی قبل از print توجه کنید، این فرورفتگی مشخص می کند که این کد داخل if قرار دارد و فقط درصورت برقرار بودن شرط if اجرا می شود.
شرط if می تواند شامل بخش های elif و else هم باشد تا اولین شرطی که برقرار است، کد های مربوط به آن اجرا شود:
a = 10
b = 10
if b > a:
print("b is greater than a")
elif a == b:
print("a and b are equal")
else:
print("a is greater than b")
در مثال بالا شرط a == b
برقرار است و فقط کد مربوط به آن اجرا خواهد شد. اگر هیچ یک از شرط ها برقرار نبود، کد مربوط به else اجرا می شد. همچنین می توانیم بیش از یک elif بنویسیم و اولین شرطی که برقرار باشد اجرا می شود.
از عملگر های منطقی مثل and
هم می توانیم برای ترکیب شرط ها استفاده کنیم:
a = 200
b = 33
c = 500
if a > b and c > a:
print("Both conditions are True")
چند مثال دیگر را بررسی می کنیم:
نسخه if..else کوتاه شده:
a = 2
b = 330
print("A") if a > b else print("B")
یک if داخل یک if دیگر:
x = 41
if x > 10:
print("Above ten,")
if x > 20:
print("and also above 20!")
else:
print("but not above 20.")
حلقه های while و for پایتون
با استفاده از یک حلقه می توانیم یک بلوک کد را به صورت مکرر تا زمانی که شرط موردنظر ما برقرار باشد، اجرا کنیم. برای مثال یک حلقه while در پایتون به این صورت نوشته می شود:
i = 1
while i < 6:
print(i)
i += 1
در مثال بالا اگر متغیر i را در هر حلقه افزایش نمی دادیم i += 1
، یک حلقه بی نهایت ایجاد می شد و داخل حلقه گیر می افتادیم.
برای خروج از یک حلقه، حتی با وجود اینکه شرط آن همچنان True
باشد، می توانیم از عبارت break
استفاده کنیم:
i = 1
while i < 6:
print(i)
if i == 3:
break
i += 1
برای متوقف کردن حلقه فعلی و ادامه از حلقه بعدی نیز می توانیم از عبارت continue
استفاده کنیم:
i = 0
while i < 6:
i += 1
if i == 3:
continue
print(i)
در مثال بالا کد print برای i مقدار 3 اجرا نخواهد شد.
حلقه for هم مثل while است ولی بجای شرط، یک مقدار قابل تکرار (iterable) دریافت می کند و به ازای تمام اعضای آن، کد موردنظر ما را اجرا می کند. مثلا لیست ها iterable هستند:
fruits = ["apple", "banana", "cherry"]
for x in fruits:
print(x)
عبارت های break
و continue
هم مثل حلقه while می توانند داخل حلقه for هم استفاده شوند. چند مثال دیگر:
حلقه روی تمام حروف یک رشته:
for x in "banana":
print(x)
حلقه تو در تو:
adj = ["red", "big", "tasty"]
fruits = ["apple", "banana", "cherry"]
for x in adj:
for y in fruits:
print(x, y)
توابع پایتون
یک تابع یا Function در واقع یک بلوک کد است که فقط زمانی اجرا می شود که فراخوانی شود. می تواند چند ورودی دریافت کند و یک خروجی برگرداند.
نحوه تعریف و فراخوانی (اجرا) یک تابع ساده به صورت زیر است:
def my_function():
print("Hello from a function")
my_function()
اگر بخواهیم تابع ورودی داشته باشد به این صورت می توانیم تعریف و فراخوانی کنیم:
def my_function(fname, lname):
print(fname + " " + lname)
my_function("Reza", "Akbari")
my_function("Test", "Testi")
my_function("Aaa", "Bbb")
به صورت پیشفرض تابع هر تعداد ورودی که دارد، دقیقا با همان تعداد ورودی هم باید فراخوانی شود، اگر بخواهیم تعداد ورودی ها دلخواه باشد می توانیم کاراکتر *
را قبل نام ورودی بنویسیم:
def my_function(*kids):
print("The youngest child is " + kids[2])
my_function("Emil", "Tobias", "Linus")
هنگام فراخوانی یک تابع، می توانیم اسم ورودی را دقیقا مشخص کنیم، در این حالت ترتیب ورودی ها اهمیتی نخواهد داشت:
def my_function(child3, child2, child1):
print("The youngest child is " + child3)
my_function(child1 = "Emil", child2 = "Tobias", child3 = "Linus")
ورودی ها می توانند اختیاری هم باشند، برای اینکار می توانیم یک مقدار پیشفرض به ورودی موردنظر بدهیم. در این صورت می توانیم تابع را بدون آن ورودی هم اجرا کنیم:
def my_function(country = "Iran"):
print("I am from " + country)
my_function("Sweden")
my_function("India")
my_function()
my_function("Brazil")
و در آخر یک تابع می تواند خروجی هم داشته باشد که با کلیدواژه return
مشخص می شود:
def my_function(x, y):
if x > y:
return "x is greater than y"
else:
return "x is not greater than y"
print(my_function(3, 2))
print(my_function(5, 6))
print(my_function(9, 9))
در پست زیر مثال های بیشتری از توابع پایتون را می توانید ببینید:
rasanika.comتابع قطعه کدی است که فقط زمانی اجرا می شود که فراخوانی گردد. شما می توانید داده ها را (به عنوان پارامتر) به یک تابع منتقل کنید. یک تابع می تواند در خروجی، داده ها را برگرداند. ایجاد یک تابع در پایتون
توابع لامبدا
در پایتون یک تابع لامبدا (Lambda) به نوعی تابع کوتاه گفته می شود که به فرمت lambda arguments : expression
تعریف باشد. توابع لامبدا می توانند چندین ورودی با فقط یک اکسپرشن (خط کد) داشته باشند. مثال:
x = lambda a, b : a * b
print(x(5, 6))
برای درک بهتر یک تابع لامبدا و کاربرد آن، به مثال زیر توجه کنید:
def make(n):
return lambda a : a * n
doubler = make(2)
tripler = make(3)
print(doubler(11))
print(tripler(11))
در این مثال تابع make
خودش یک تابع بر اساس ورودی اش بر می گرداند. به این صورت می توانیم توابع دلخواه بر اساس مقدار ورودی بسازیم و استفاده کنیم.
کلاس و آبجکت در پایتون
پایتون یک زبان برنامه نویسی شی گرا (Object Oriented Programming Language) است. تقریبا همه چیز در پایتون آبجکت (شی) محسوب می شود و دارای ویژگی است. کلاس هم در واقع نقشه و ساختار یک آبجکت را تعریف می کند.
یک کلاس و آبجکت مربوط به آن را به صورت زیر می توانیم تعریف کنیم:
class MyCar:
brand = "BMW"
car = MyCar()
print(car.brand)
در مثال فوق brand
ویژگی آبجکت محسوب می شود. یک کلاس می تواند یک تابع خاص به اسم __init__
داشته باشد که لحظه ساخت آبجکت آن کلاس، این فراخوانی می شود. اولین پارامتر (ورودی) این تابع، همیشه خود آبجکت است و پارامتر های بیشتری هم می تواند داشته باشد:
class MyCar:
def __init__(self, brand):
self.brand = brand
car1 = MyCar("Benz")
car2 = MyCar("BMW")
print(car1.brand)
print(car2.brand)
برای کلاس ها می توانیم متد (تابع) های بیشتری هم تعریف کنیم:
class MyCar:
def __init__(self, brand):
self.brand = brand
def updateBrand(self, newBrand):
self.brand = newBrand
def printBrand(self):
print(self.brand)
car1 = MyCar("Benz")
car1.printBrand()
car1.updateBrand("BMW")
car1.printBrand()
car1.brand = "IKCO"
car1.printBrand()
در برنامه نویسی شی گرا، مفهومی به نام ارث بری یا Inheritance وجود دارد که به وسیله آن کلاس ها می توانند ویژگی های کلاس های دیگر را به ارث ببرند:
class Human:
def __init__(me, name):
me.name = name
class Programmer(Human):
def __init__(me, name, skills):
super().__init__(name)
me.skills = skills
dev1 = Programmer("Reza", ["python", "html", "css"])
print(dev1.name)
print(dev1.skills)
در مثال بالا خط super().__init__(name)
داخل کلاس Programmer در واقع تابع __init__
کلاس بالاتر یعنی Human را اجرا می کند، که به وسیله آن مقدار ویژگی name اختصاص داده می شود.
دامنه یا اسکوپ پایتون
به یک متغیر فقط داخل دامنه و حوزه ای که داخل آن تعریف شده است می توان دسترسی پیدا کرد. برای مثال کد زیر خطا می دهد چون نمی توانیم به متغیر x خارج از تابع دسترسی پیدا کنیم:
def myfunc():
x = 300
myfunc()
print(x) # ⚠ خطا می دهد
البته می توانیم به متغیر های تعریف شده در اسکوپ (حوزه) های بالاتر دسترسی پیدا کنیم:
x = 300
def myfunc():
y = 200
def myinnerfunc():
print(x)
print(y)
myinnerfunc()
myfunc()
اگر یک متغیر با همان اسم هم در اسکوپ محلی و هم در اسکوپ بالاتر تعریف شده باشد، اولویت با اسکوپ محلی است:
x = 300
def myfunc():
x = 200
print(x)
myfunc()
print(x)
ماژول های پایتون
می توانید ماژول (Module) ها را کتابخانه های کد تصور کنید، کدها و توابعی که از فایل های دیگر وارد برنامه خودمان می کنیم. برای وارد کردن یک ماژول از کلیدواژه import
می توانیم استفاده کنیم. به عنوان مثال یک فایل با اسم speak.py
(داخل فولدر فعلی) ایجاد کرده و داخل آن یک تابع مثل زیر قرار دهید:
def sayHi(name):
print("Hello " + name)
حالا داخل example.py
یا هر فایل تمرینی که داشتید، به این صورت می توانید فایل speak.py
را اضافه کرده و تابع داخل آن را فراخوانی کنید:
import speak
speak.sayHi("Reza")
به متغیر ها، کلاس ها و کدهای دیگر این ماژول هم به همین صورت می توانیم دسترسی داشته باشیم. اگر فقط بخواهیم یک متغیر، کلاس یا تابع را از کل ماژول وارد کنیم، می توانیم به این صورت بنویسم:
from speak import sayHi
sayHi("Reza")
همچنین تعدادی ماژول داخلی در خود پایتون وجود دارد مثل math یا datetime که برای کار های مختلف می توانیم استفاده کنیم. مثل:
import datetime
x = datetime.date.today()
print(x)
کار با PIP در پایتون
همانطور که متوجه شدید ماژول ها این امکان را به ما می دهند که از کدهای قبلا نوشته شده، داخل کد خودمان استفاده کنیم. به همه فایل های موردنیاز یک ماژول، بسته یا Package گفته می شود. PIP نیز یک مدیر بسته (Package Manager) برای پایتون است که به وسیله آن می توانیم کتابخانه های مختلف را دانلود و داخل کد خودمان وارد نماییم.
برای اینکه بفهمیم PIP روی سیستم ما نصب شده یا نه (به صورت پیشفرض همراه با پایتون نصب می شود) می توانیم دستور زیر را اجرا کنیم:
pip --version
اگر نسخه PIP نمایش داده شود یعنی نصب شده است در غیر این صورت می توانید از آدرس https://pypi.org/project/pip آن را دانلود و نصب کنید.
برای نصب یک پکیج از طریق PIP می توانیم دستور pip install
را اجرا کنیم، مثلا:
pip install jdatetime
با اجرای دستور بالا، ماژول jdatetime
که یک کتابخانه برای کار با تاریخ شمسی است، برای ما دانلود و نصب می شود و به این صورت می توانیم از آن استفاده کنیم:
import jdatetime
x = jdatetime.date.today()
print(x)
برای حذف یک پکیج نیز می توانیم از دستور pip uninstall
مثل بالا استفاده کنیم.
مدیریت خطا در پایتون
مدیریت خطا در پایتون با استفاده از بلوک try…except انجام می شود. به مثال زیر توجه کنید:
try:
print(x)
except:
print("An exception occurred")
کد بالا چون x تعریف نشده است، خطا می دهد ولی چون داخل try
قرار دارد، با بروز خطا، بخش except
اجرا می شود. یک بلوک try علاوه بر except می تواند شامل بخش های else و finally هم باشد. بخش else درصورتی اجرا می شود که هیچ خطایی رخ ندهد و بخش finally در هر صورت چه خطایی رخ دهد و چه ندهد، اجرا می شود.
همچنین داخل except می توانیم نوع خطا را نیز دریافت کنیم. مثال:
try:
print(x)
except Exception as e:
print("Error: " + str(e))
else:
print("No Error")
finally:
print("Finished")
اگر بخواهیم یک خطا به وسیله خودمان رخ بدهد می توانیم از کلیدواژه raise
استفاده کنیم:
x = -1
if x < 0:
raise Exception("Sorry, x can not be less than zero")
ترفند های کوچک ولی کاربردی
لیست متد ها و ویژگی های یک آبجکت، ماژول و … می توانید از
dir()
استفاده کنید:
class Human:
name = "Reza"
job = "Developer"
def startCoding():
print("coding...")
man = Human()
print(dir(man))
برای دریافت ایندکس آیتم ها موقع حلقه for می توانید از
enumerate()
استفاده کنید:
data = ["apple", "banana", "orange", "cherry"]
for i, name in enumerate(data):
print(i, name)
با تکنیک List Comprehension می توانید یک لیست را به سرعت فیلتر کنید:
fruits = ["apple", "banana", "cherry", "kiwi", "mango"]
newlist = [x for x in fruits if "a" in x]
print(newlist)
ترکیب این روش با dir()
جهت فیلتر ویژگی های عمومی:
class Human:
name = "Reza"
job = "Developer"
def startCoding():
print("coding...")
man = Human()
print([ x for x in dir(man) if not x.startswith("_") ])
برای تعویض سریع مقادیر دو متغیر با یکدیگر می توانید از این تکنیک استفاده کنید:
x, y = 10, 20
print(x, y)
x, y = y, x
print(x, y)
با استفاده از
sorted()
می توانید لیست ها را به سرعت مرتب سازی کنید:
data = [3, 5, 1, 10, 9]
print(sorted(data, reverse=True))
برای مرتب سازی لیست های پیچیده تر می توانید از لامبدا استفاده کنید:
data = [{"name": "Max", "age": 6},
{"name": "Lisa", "age": 20},
{"name": "Ben", "age": 9}
]
sorted_data = sorted(data, key=lambda x: x["age"])
print(sorted_data)
برای حذف آیتم های تکراری از لیست می توانید آن را تبدیل به ست کنید چون یک ست نمی تواند آیتم های تکراری داشته باشد:
my_list = [1,2,3,4,5,6,7,7,7]
print(set(my_list))
برای ترکیب سریع متغیر ها با رشته ها می توانید از فرمت f-Strings استفاده کنید:
i = 10
print(f"{i} squared is {i*i}")
برای ترکیب دو دیکشنری با یکدیگر می توانید از
**
استفاده کنید:
d1 = {'name': 'Alex', 'age': 25}
d2 = {'name': 'Reza', 'city': 'New York'}
merged_dict = {**d1, **d2}
print(merged_dict)
قدم بعدی و ادامه
تا این بخش از سری آموزشی پایتون، با نحوه نصب و راه اندازی محیط توسعه و همچنین با مفاهیم اولیه برنامه نویسی زبان پایتون آشنا شدیم. در ادامه این سری یک پروژه کامل با استفاده از پایتون برنامه نویسی و آپلود خواهیم کرد. اگر نظر یا پیشنهادی داشتید حتما با ما در میان بگذارید.
درصورتی که به یادگیری کامل پایتون علاقه مند هستید، مجموعه آموزشی زیر را از دست ندهید:
rasanika.comبرنامه نویسی پایتون را از صفر شروع کرده و به مرور تبدیل به یک توسعه دهنده پایتون حرفه ای شوید.