Professional Documents
Culture Documents
Python 3.10
Python 3.10
10
شهــــروز صفــــری
مقدمه
زبان برنامه نویسی Pythonیک زبان چند منظورهی سطح باالست که در سال 1989توسط Guido van Rossum
طراحی و در سال 1991معرفی شد .
زبانهای برنامه نویسی موجود از دو روش برای تبدیل زبان سطح باال (زبانی که نزدیک به زبان محاوره ای است ) به زبان
ماشین (صفر و یک) استفاده می کنند
( Compiler -مترجم) :تبدیل کل Source Codeبه یک فایل باینری و سپس اجرای آن
زبانهای خانوادهی ( Cمانند C++و C#و ). . .زبان Javaو Xamarinو . . .از روش Compileاستفاده می کنند و
زبان های Pythonو Jscriptو PHPو Rubyو . . .از روش Interpretعمل می کنند .
1
Python مزیت های
کدهای مستقل از سیستم عامل هستند: Cross-Platform -
)Jetbrains.com( PyCharm -
)Microsoft.com( VS Code -
2
تعریف متغیرها و نوع دادهها در Python
-اعداد Numbers
باشد .
* نکته :نام متغیر نمیتواند یکی از کلمات کلیدی یا رزرو شده باشد
: )String( str -برای انتساب متن از " ( )Double Quotationیا ' ()Single Quotation
استفاده می کنیم .
3
-نوع داده دوحالته ( : )Booleanاین نوع فقط شامل Trueیا Falseمی شود .
* نکته :بعضی از نوع دادهها قابل تبدیل به نوع دادههای دیگر هستند که توسط توابع تبدیل انجام می شود و به این
عملیات Castingمی گوئیم .
مثال :
int(2.8) → 2
int("4") → 4
float(2) → 2.0
hex(15) →0xf
عملگرها در Python
عملگرها به هفت دسته تقسیم میشوند :
4
Assignment Operators عملگرهای انتساب: دسته چهارم
%= /= *= -= += =
^= |= &= **= //=
:= <<= >>=
not in in
------------------------------------------------------------------------------
is not is
------------------------------------------------------------------------------
5
چند عالمت پر کاربرد در Python
( ) : Parentheses or Round Bracket
[ ] : Bracket or Square Bracket
{ } : Braces or Curly Bracket
< > : Angle Bracket
نوشتن کلمات بدون فاصله و با ترکیب حروف کوچک و بزرگ CamelCase :
6
مجموعههای تکرار پذیر Iterable Collections
لیست ها دارای ترتیب هستند و قابلیت تغییر دارند و هر عضو یک شاخص دارد .
]…List = [Item1,Item2,
مثال :
( ) List Slicing * نکته :امکان دسترسی به چند عضو فراهم است ]numbers[1:3
]List [a:b:c
: cگام :bپایان : aشروع
7
متدهای List
-------------------------------------------------------------------------------------------------
Tuples چندتاییها
چندتایی مشابه لیست است با این تفاوت که بعد از ایجاد شدن قابلیت تغییر ندارند
data[0]=1
* نکته :چندتایی امکان اضافه کردن مستقیم اعضا را ندارد ولی با تعریف مجدد می توانیم عضو اضافه کنیم
8
)data=data+('Ali',
کاما در آخر ضروری است .
متدهای Tuple
-------------------------------------------------------------------------------------------------
}…Set = {Item1,Item2,
مثال :
* نکته :تغییر یک عضو امکان پذیر نیست ولی حذف و اضافه کردن عضو امکان پذیر هست
9
متدهای Set
* نکته :برای جستجوی یک عنصر در setمتدی وجود ندارد و برای اینکار از عملگر inاستفاده میکنیم .
عملکرد متد
10
Dictionaries واژه نامهها
دیکشنری یکی دیگر از مجموعه های تکرار پذیر است که شامل دوتایی های کلید و مقدار می باشد که با :جدا می شوند
Key: Value
Unordered – Mutable – Indexable – Unique
نحوه تعریف دیکشنری :
* نکته :کلیدها می توانند متنی یا عددی باشند ولی نباید تکراری باشند
]'student['surname )'student.get('surname
* نکته :برای اضافه کردن عضو جدید باید یک کلید و مقدار آن را تعریف کنیم
student["std_code"] = 12856
متدهای Dictionary
11
Strings رشته های متنی
متغیرهای رشته ای نوعی Iterableهستند که می توان در بین کاراکترهای آن حرکت کرد
"s="Hello, World
s[0] → H
s[2:5] → llo
s[::-1] → dlroW ,olleH
متدهای string
12
Decision Control Flow ساختارهای تصمیم
تک خطیif دستور
if شرط: Expr1
else : Expr2
مثال
a=5
if a >= 8 : b=2
else : b=3
Expr1
Expr2
…
else :
Expr1
Expr2
…
Expr1
Expr2
…
elif شرط:
…
13
elif شرط:
…
else :
…
مثال
a=100
if a == 10 :
b=a+1
elif a == 50 :
b=a+2
elif a == 90 :
b=a+3
else :
b = 100
14
Match Case دستور
استفاده کنیمmatch های تو در تو می توانیم از ساختارif به جای استفاده از
match متغییر:
case شرط:
Expr1
Expr2
...
case شرط:
Expr1
...
case _ :
Expr1
...
: مثال
a=500
match a:
case 100:
print(a+1)
case 200 | 300:
print(a+2)
case a if a>400 :
print(a+3)
case _ : #case else
print(a+4)
15
ساختارهای تکرار Loop Control Flow
حلقه for
:تکرار پذیر inشمارنده for
Expr1
Expr2
…
break / continue
…
else:
Expr1
…
* نکته :تکرار پذیر می تواند از انواع Listیا Tupleیا Stringیا سایر Iterableهای Pythonباشد.
* نکته :دستور elseدر انتهای حلقه اجرا میشود مگر اینکه دستور breakاجرا شود
16
حلقه While
:شرط while
Expr1
Expr2
…
break / continue
…
else:
Expr1
…
* نکته :در بدنه whileباید دستوراتی نوشته شوند که شرط Falseشود در غیر اینصورت حلقه بی نهایت بار تکرار
خواهد شد .
* نکته :دستور elseدر انتهای حلقه اجرا میشود مگر اینکه دستور breakاجرا شود
مثال
a=1
while a<=20:
)print(a
a+=1
17
List , Set , Dict Comprehension تکمیل لیست و مجموعه و دیکشنری
جدید بسازیم که با تغییرات روی منبع اصلی ایجادDict یاSet یاList می توانیم یکif و شرطfor با ترکیب حلقه
. می شود
numbers = [1,2,3,4,5,6]
double_numbers = [n*2 for n in numbers] → [2,4,6,8,10,12]
even = [n for n in numbers if n%2==0] → [2,4,6]
intersect = [n for n in numbers if n in double_numbers] → [2,4,6]
. استفاده کنیمzip می توانیم از تابعSet یاTuple یاList برای ترکیب دو: * نکته
18
Comment درج توضیح
برای درج توضیح چند سطری از """ یا ''' استفاده میکنیم )Triple Quotations( .
19
Built-in Functions توابع استاندارد
توابع استاندارد یا توابع درونی مجموعهای از توابع هستند که به صورت پایه در مفسر Pythonنصب شدهاند و برای
استفاده از آنها نیازی به Importکتابخانه نیست .
برای مشاهده لیست کامل توابع استاندارد می توانید به صفحهی زیر مراجعه کنید
https://docs.python.org/3/library/functions.html
در ادامه چند تابع مهم را بررسی می کنیم
تابع print
این تابع برای مشاهده مقدار متغیرها و متنها روی صفحه نمایش استفاده می شوند .
مثال :
)"print("test
)print(5,7,9 →579 به صورت پیش فرض بین مقادیر یک فاصله قرار می گیرد
* نکته :در تابع printمی توانیم از ( f stringمخفف )Formatted Stringاستفاده کنیم .
"name="Reza
avg=20
)"}print(f "The name is : {name} and Average is : {avg
* نکته :در f stringمی توانیم به تعداد کاراکتر دلخواه پرش ایجاد کنیم
برای پرش توابع )( rjustو )( ljustهم در دسترس هستند و برای قرار دادن صفرهای پیش از رقم از ) zfill(nاستفاده
می کنیم .
تابع input
این تابع برای دریافت ورودی از صفحه کلید استفاده می شود
Messageیک متن دلخواه است که قبل از دریافت ورودی نمایش داده می شود و درج آن اجباری نیست .
21
تابع type
مشاهده نوع داده یک متغیر
a=5
>"print(type(a)) → <class "int
---------------------------------------------------------------
تابع len
مشاهده طول یک Iterable
---------------------------------------------------------------
تابع range
ایجاد یک محدوده از اعداد که به صورت یک Iterableبرگشت می شود .
---------------------------------------------------------------
توابع Casting
توابع castingبه توابعی گفته می شود که برای تبدیل یک نوع متغیر به نوع دیگر استفاده می شوند
تابع sum
)sum(Iterable , init
مثال
]nums=[4,6,8,7
)sum(nums → 25
)sum(nums, 20 → 45
22
توابع minو max
)max(Iterable
)min(Iterable
---------------------------------------------------------------
تابع dir
مشاهده متدهای یک Object
)dir(a
---------------------------------------------------------------
تابع id
مشاهده آدرس نگهداری متغیر در حافظه
---------------------------------------------------------------
ord('A') → 65
chr(65) → A
---------------------------------------------------------------
تابع zip
این تابع دو Iterableرا به دوتایی های Tupleتبدیل می کند .تکرار شونده ها می توانند از انواع مختلف باشند ،مثال
یک Listو یک Setو حتی نیاز نیست طول آنها برابر باشد .
]a=[5,6,3,9
}b={1,2,3,4
])c=list(zip(a, b)) → [(5,1),(6,2),(3,3),(9,4
23
تعریف تابع User-Defined Functions
یک تابع مجموعه ای دستورات Pythonاست که فرآیند مشخصی را پیاده سازی می کند
def mul(x,y):
m=x*y
return m
* نکته :در هنگام فراخوانی یک تابع متغیرهای به جای پارامترها قرار می گیرند
) mul(10 , 5
* نکته :تعداد پارامترها از نسخه 3.5به بعد محدودیت ندارد
24
پارامترها به صورت پیش فرض اجباری هستند برای اختیاری شدن آرگومانها کافیست یک مقدار اولیه به آنها نسبت دهیم
pass
def test(*a):
for i in a:
)print(i**2
-----------------------------
)test(2, 4, 7, 6, 9
25
مثال :
; )def test(**a
for x in a.values():
)print(x**2
-------------------------------
)test(a=5,b=6,c=7
در هنگام استفاده از **kwargsمتدهای )( .valuesو )( .keysدر بدنه تابع پر استفاده خواهند بود تا بتوانیم کلیدها و
مقادیر Dictرا جداگانه پردازش کنیم .
در حالت کلی کلیدهایی که در هنگام فراخوانی برای تعریف مقادیر استفاده می شوند مهم نیستند و Dictبا همان کلیدها
ساخته می شود .برای اینکه کلیدها نامهای مشخصی داشته باشند باید در بدنه تابع کلیدها چک شوند
def test(**numbers):
]'myargs = ['oper', 'check', 'do
if myargs != list(numbers.keys()) :
)'raise Exception('Wrong Arguments
))(return sum(numbers.values
-------------------------------
)test(oper=9,check=10,do=5
در مثال باال دستور raise Exceptionبرای ایجاد یک خطای دلخواه و توقف ادامه برنامه استفاده شده است .
* نکته :آرگومانهای اجباری و اختیاری هم امکان فراخوانی با نام را دارند و در واقع Key Wordedهستند .
26
قلمرو متغیرها
برای متغیرهایی که درون و بیرون تابع ها استفاده می شوند قلمرو تعریف می شود
متغیرهایی که در برنامه اصلی تعریف می شوند از نوع Globalهستند .به همین جهت نیازی به استفاده از کلمه کلیدی
globalقبل از نام آنها نیست
def test():
)print(a+5
-------------------------
a=5
)print(a →5
)(test → 10
متغیرهای Globalدر همهی تابع ها قابل استفاده هستند ولی اگر درون یک تابع متغیری با همان نام تعریف شود متغیر
درون تابع اولویت دارد .
def test():
a=10
)print(a+5
-------------------------
a=5
)print(a →5
)(test → 15
* نکته :متغیرهای Globalدر درون تابع ها قابل استفاده هستند ولی قابل تغییر نیستند ،یعنی اگر در تابع مقداری به
آنها نسبت داده شود برنامه با خطا روبرو خواهد
حال اگر بخواهیم یک متغیر Globalرا درون تابع تغییر دهیم باید درون تابع با کلمه کلیدی globalآنرا تعریف کنیم .
27
مثال :
def test():
global a
a=a+5
)print(a
-------------------------
a=5
)print(a →5
)(test → 10
)print(a → 10
* نکته :کلمه کلیدی localنداریم و متغیرهای درون تابع ها به صورت خودکار Localتعریف می شوند و پس از پایان
تابع حذف می شوند .
def out():
a=5
)print(a →5
def in():
nonlocal a
a=a+5
)print(a →10
28
تعریف تابع یک خطی Lambda
lambdaیک تابع تک خطی است که فقط یک خط دستور در آن می توان نوشت و یک مقدار برگشتی به متغیر نسب
داده شده به آن برگشت می شود ولی تعداد پارامترهای آن محدودیتی ندارد .
نحوه تعریف
)…func (arg1,arg2,
مثال
: High Order Functionتابعی که تابع دیگر را به عنوان آرگومان قبول می کند .
29
Modules نصب و استفاده از ماژولها
ماژول یک فایل .pyاست که شامل کدهای نوشته شده به زبان Pythonاست که یکی از ویژگیهای اصلی و قدرتمند در
زبان Pythonبه شمار می رود .
در هر پروژه Pythonمی توانیم از ماژولهای استاندارد و یا تعریف شده توسط کاربر استفاده کنیم .این ماژولها برای
سرعت بخشیدن به پروژه جاری و دوری از نوشتن کدهای طوالنی برای فرآیندها ،بسیار موثر هستند .
ماژولهای استاندارد Pythonدر هنگام نصب Interpreterبه صورت خودکار نصب می شوند و در فولدر Libدر محل
نصب ( Pythonدر Windowsمعموال در )C:\Program Filesقرار می گیرند .
ماژولهای تعریف شده توسط کاربر در محلی که فایلهای پروژه جاری قرار دارند ذخیره می شوند
import MaduleName
* نکته :نیازی به تایپ .pyدر انتهای نام ماژول نیست .
در بدنه برنامه برای دسترسی به عناصر ماژول (توابع ،متغیرها و ). . .از نام ماژول و عالمت )Dot( .استفاده می کنیم .
import math
a=math.pi
)b=math.gcd(500,150
30
نام ماژول در سه محل جستجو می شود و اگر وجود نداشته باشد خطا اتفاق می افتد
)3فولدرهایی که در مسیر پیش فرض سیستم عامل تعریف شدهاند ()Environment Variables
* نکته :برای استفاده راحت تر از ماژول در برنامه اصلی می توانیم برای آن یک نام مستعار تعریف کنیم
)print(pi
* نکته :برای استفاده از همهی توابع و متغیرهای یک ماژول از * استفاده می کنیم
این موضوع باعث می شود تا فراخوانی تابعها آسانتر باشد ولی از خوانایی برنامه کاسته می شود .
* نکته :در هنگام استفاده از چند ماژول که به صورت والد و فرزند تعریف شدهاند باید مراقب باشیم که یک ماژول والد در
فرزند خودش importنشود .
31
Python Packages مدیریت بسته ها
بسته یا Packageیک فولدر و زیر فولدرهای آن هستند که ماژولها را در خود ذخیره کردهاند .
Game
steps.py
همانطور که مشاهده می شود فولدر اصلی شامل چند زیر فولدر است و هر فولدر دربرگیرنده چند ماژول خواهد بود .
* نکته :هر فولدر شامل یک فایل __init__.pyاست که عملیات شروع اجرای بسته ( )Initializationرا بر عهده
دارد .این فایل می تواند خالی باشد.
import Game.Levels.start
)Game.Levels.start.difficulty(2
برای راحت تر شدن استفاده می توانیم از روش زیر را به کار بگیریم
برای مشاهده آخرین نسخهی Packageها و بسته های جدید به PyPi.orgمراجعه می کنیم
نصب یک بسته
pip install PackageName
برای حذف بسته از Uninstallاستفاده می کنیم
-------------------------------------------------------------------------
بسته jupyterیک توزیع از Pythonاست که روی Browserاجرا می شود و شامل امکاناتی مانند رسم نمودار است و
pip install jupyter محیط گرافیکی دارد .
برای استفاده از jupyterپس از نصب بسته ،در خط فرمان دستور زیر را اجرا میکنیم :
jupyter notebook
-------------------------------------------------------------------------
33
ایجاد فایل اجرایی از یک فایل
pyinstaller file.py
pyinstaller --onefile file.py
-------------------------------------------------------------------------
import os بسته : OSدر این بسته متدهای دسترسی به فایلها و فولدرها و عملیات سیستم عامل قرار دارند
-------------------------------------------------------------------------
بسته NumPyیک بسته کاربردی در Pythonاست که برای محاسبات عددی پیشرفته و مدیریت ماتریسهای همگن
pip install numpy چند بعدی و حل معادالت خطی استفاده می شود.
-------------------------------------------------------------------------
pip install scipy بسته : SciPyدر این بسته توابع راضی پیشرفته و محاسبات علمی و فنی قرار دارند.
-------------------------------------------------------------------------
pip install matplotlib بسته : MatPlotLibاین بسته برای رسم نمودارها و خروجی گرافیکی استفاده می شود
بسته TKinterو : wxPythonاین بسته ها شامل توابع و عناصر ایجاد فرمها و کنترل ها هستند
-------------------------------------------------------------------------
-------------------------------------------------------------------------
-------------------------------------------------------------------------
-------------------------------------------------------------------------
34
مدیریت فایلها File I/O
برای ذخیره دائمی مقادیر متغیرها و استفاده در دفعات بعدی باید آنها را در یک فایل ذخیره کنیم
ایجاد یک فایل
* نکته :اگر آدرس فایل درج نشود فایل در آدرس جاری ایجاد می شود .
C:\\test\\test.txt
C:/test/test.txt
* نکته :در سیستم عامل های Linuxو MacOSروش آدرس دهی متفاوت است
/home/username/Documents/test.txt
برای مشاهده آدرس فولدر جاری در Terminalاز دستور pwdاستفاده میکنیم.
حالتهای Mode
)write( : wفقط برای نوشتن (در صورت وجود فایل آنرا بازنویسی می کند)
)Exclusive Creation( : xفقط برای نوشتن (در صورت وجود فایل خطا اتفاق می افتد)
)Binary Mode( : bباز کردن در حالت ( Byte Likeبرای فایلهای Imageو Exeو)...
35
حالتهای Encoding
این آرگومان برای تعیین روشهای کد گذاری استفاده می شود .روش کد گذاری به سیستم عامل بستگی دارد
مثال
)"txt=open("test.txt", "r
)"img=open("Image.jpg", "rb
)"file=open("C:\\test\\test.txt", "wt", encoding="utf-8
)"prog=open("C:/run/prog.exe", "r+b
)"in MacOS : file= open("/Users/username/Documents/test.txt" , "w+
* نکته :در حالتهای rو wاشاره گر ( )Pointerفایل در ابتدای فایل قرار می گیرد و در حالت aدر انتهای آن
متدهای File
)file.read(size
آرگومان Sizeبرحسب Byteاست و در صورت عدم درج ،همهی فایل خوانده می شود و در یک strقرار می گیرد
-------------------------------------------------------------------------------------------------
)(file.readline
خواندن یک سطر تا رسیدن به ( \nشامل )\nو برگشت به صورت str
-------------------------------------------------------------------------------------------------
)(file.readlines
خواندن همهی سطرها و قراردادن در یک list
-------------------------------------------------------------------------------------------------
)"file.write("String
نوشتن متن درون فایل (برای ایجاد سطر باید \nدرج شود )
36
)file.writelines(list
نوشتن یک لیست در فایل که عناصر لیست باید strباشند
-------------------------------------------------------------------------------------------------
)(file.close
بستن فایل ،هرچند که با رسید برنامه به خط آخر فایلها بسته میشوند ولی در صورت بروز خطا ممکن است فایل باز بماند
-------------------------------------------------------------------------------------------------
)file.seek(offset, whence
پرش به یک موقعیت مشخص در فایل بر حسب بایت
پارامتر Offsetاجباری است و یک مقدار عددی است که میزان پرش برحسب بایت را مشخص میکند( .در صورت عدم
درج موقعیت فعلی برگشت میشود)
پارامتر whenceاختیاری است و میتواند دارای یکی از سه مقدار 0و 1و 2باشد .
عدد صفر که پیش فرض متد است یعنی مالک offsetبرای پرش ابتدای فایل باشد
-------------------------------------------------------------------------------------------------
* نکته :اگر در هنگام خواندن و نوشتن فایل خطایی اتفاق بیافتد ممکن است )( file.closeاجرا نشود و در نتیجه فایل
باز بماند و ذخیره نشود
در حالت عملیات مربوط به فایل را در بلوک withمینویسیم با رسیدن بلوک به انتها فایل به صورت خودکار بسته و
ذخیره میشود.
37
عملیات روی فایلها و فولدرها Directories and Files
برای اجرای عملیات روی فایلها در سطح سیستم عامل از ماژول osاستفاده می کنیم
import os
متدهای os
)(os.getcwd آدرس فولدر جاری به صورت رشته
import shutil
)"shutil.rmtree("Folder Name
38
رفع خطا Errors and Exceptions
خطای نوع سوم توسط Interpreterقابل تشخیص نیست و باید الگوریتم برنامه و روش حل مسئله چک شود
در هنگام اتفاق افتادن خطاهای Syntaxو Runtimeزبان Pythonیک عملیات raise Exceptionرا اجرا می کند
و ادامه اجرای برنامه متوقف خواهد شد .
* نکته :برای ایجاد یک خطای دلخواه در هر جای برنامه از کد زیر استفاده می کنیم :
try:
Expr1
Expr2
...
except:
دستوراتی که در اثر
finally:
دستوراتی که در هر صورت اجرا خواهند شد
39
: مثال. نوع خطا را مشخص کنیمexcept می توانیم در جلوی دستور
except(ValueError):
...
)CamelCase( خطاها به صورت ترکیبی از حروف کوچک و بزرگ. برای این منظور باید خطاهای استاندارد را بدانیم
نوشته می شوند
: مثال
try:
a=int(input('Enter a Number : '))
b=a**2
print(f ' Square of the Number is : {b} ')
except(ValueError, NameError, TypeError):
print( " Wrong Number " )
اجراexcept هیچ خطایی درج نشود با اتفاق افتادن هر خطایی کدهای زیرexcept در صورتی که جلوی: * نکته
. خواهند شد
40
. استفاده کنیمsys در ماژولexc_info() برای مشاهده کالس خطا و علت آن می توانیم از متد: * نکته
: مثال
import sys
a=[4,5,6,3,'b',9,8,'e']
for x in a:
try:
print(f 'The Square of x is {x**2}')
except:
print(sys.exc_info())
41
)User-Defined Exception( ایجاد خطای سفارشی
. باشدException برای ایجاد یک خطای دلخواه باید یک کالس ایجاد کنیم که مشتق کالس
در مثال زیر نحوه تعریف و استفاده از خطاهای سفارشی مشاهده می شود
: مثال
class ValueIsSmall(Exception):
pass
class ValueIsLarge(Exception):
pass
while True:
try:
n=int(input('Enter a Numer : '))
if n<100 : raise ValueIsSmall
if n>100 : raise ValueIsLarge
print('You Guessed Correct')
break
except ValueIsSmall:
print('Value is Small')
except ValueIsLarge:
print('Value is Large')
except :
print('Wrong Number , Try Again . . . ')
42