آموزش پایتون - متغیرها و انواع داده

در این سری از مقالات قصد دارم نکات کلیدی که در زبان پایتون وجود دارد را ارائه کنم. در این مجموعه تلاش شده اطلاعات مختصر و کوتاه باشند و بر مهمترین نکات مورد نیاز تمرکز شود. 

بعد از گذراندن این دوره شما قادر خواهید بود که از هر کتابخانه پایتون استفاده کنید و بسته‌های پایتونی که خودتان نوشته‌اید را اجرا کنید.

عناوین دوره:

  1. مقدمه
  2. نصب و راه‌اندازی
  3. متغیرها و انواع داده
  4. عبارت‌های کنترلی
  5. توابع و ماژول‌ها
  6. هویت اشیاء
  7. مدیریت خطا
  8. برنامه‌نویسی شی‌گرا
  9. بسته‌بندی و انتشار کد

متغیرها 

نوع و حوزه

متغیرها اطلاعاتی را که در برنامه شما مورد استفاده قرار می‌گیرند، ذخیره می‌کنند. این اطلاعات می‌تواند یک عدد صحیح، متن، کالکشن و غیره باشد. متغیرها برای نگه داشتن ورودی کاربر، وضعیت‌های محلی در برنامه شما و غیره به کار می‌روند. به هر متغیر اسمی داده می‌شود تا بتوان آن‌ها را در کد ارجاع داد. مفهوم اساسی که باید درک شود این است که همه چیز در پایتون یک شی محسوب می‌شود.

پایتون از انواع استاندارد داده، اعم از اعداد، رشته‌ها، مجموعه‌ها (sets)، لیست‌ها، tuples و dictionaries پشتیبانی می‌کند. جزئیات هر یک از آن‌ها را به تفصیل شرح خواهم داد.

برای تخصیص یک مقدار به یک متغیر تنها کافیست از علامت = استفاده کنید. به عمل تخصیص مقدار در پایتون binding می‌گویند. 

x = 2
x = "Hello World!"

توجه داشته باشید که چگونه یک مقدار صحیح و بعد یک مقدار رشته‌ای را به  متغیر x اختصاص دادم. این به این دلیل امکان پذیر است که انواع داده‌ها به طور پویا به زبان پایتون وارد می‌شوند. به همین دلیل است که پایتون به عنوان یک زبان برنامه‌نویسی پویا شناخته می‌شود.

شما می‌توانید از تابع type برای مشاهده نوع یک متغیر استفاده کنید:

type("Hello")

>> str

اگر می‌خواهید همان مقدار را به بیش از یک متغیر تخصیص دهید، می‌توانید از تخصیص زنجیره‌وار استفاده کنید:

x = y = 1

متغیرها در پایتون می‌توانند حوزه محلی یا سراسری داشته باشند. برای نمونه متغیری که در یک تابع تعریف می‌شود در خارج از آن غیر قابل دسترس است:

def f():
	variable = "Hello"
f()
print(variable)

>> NameError: name 'variable' is not defined

همچنین برای دسترسی به متغیرهایی که خارج از بدنه یک تابع تعریف شده‌اند می‌توان از کلیدواژه global استفاده کنید:

variable = "Bye!"

def f():
    global variable
    variable = "Hello"

f()
print(variable)

>> "Hello"

اگرچه در ادامه در مورد مفهوم ماژول‌ها صحبت خواهد شد ولی درصورتیکه بخواهید از متغیرهای سراسری در چندین ماژول استفاده کنید می‌توانید در یک فایل مانند env.py متغیرهای خود را تعریف کرده سپس آنرا در ماژول‌های دیگر ایمپورت کنید.

عملگرها

عملگرهای ریاضی از بالاترین تا پایین‌ترین اولویت:

symbol    Operation	       	 Example
==========================================
**		  Exponent	       	 2 ** 3 = 8
%		  Remainder	         22 % 8 = 6
//        Integer division   22 // 8 = 2 
/	 	  Division		   	 22 / 8 = 2.75
/ 		  Multiplication     3 * 3 = 9
-		  Subtraction        5 - 2 = 3
+		  Addition		     2 + 2 = 4 

بعضی از این عملگرها بر روی رشته‌ها نیز اعمال می‌شوند:

'A' + 'B' = 'AB' 
'A' * 3 = 'AAA'

همانطور که گفته شد داده‌ در پایتون علاوه بر اعداد صحیح و اعشاری و رشته‌ها، انواع استاندارد دیگری وجود دارد. یکی از این نوع داده‌ها مجموعه‌ها هستند. یک مجموعه در پایتون شامل گروهی از داده‌های نامنظم بدون تکرار است:

Image for post
Image for post

همانطور که مشاهده می‌کنید مجموعه مرتب شده و موارد تکراری حذف شده است. توجه کنید که مجموعه‌ها امکان ایندکس شدن ندارند.

برخی از عملگرهای مهم در مجموعه‌ها بصورت زیر است:

add: افزودن مورد به مجموعه

remove: حذف مورد از مجموعه

discard: حذف مورد از مجموعه، تفاوت آن با remove در آن است که اگر عضو مورد نظر باشد آنرا حذف می‌کند در صورتیکه در عملگر remove با خطا مواجه می‌شویم.

pop: بازگرداندن یک عنصر از مجموعه، در صورت خالی بودن مجموعه خطا خواهد داد

clear: مجموعه را خالی می‌کند.

intersection: اشتراک دو مجموعه

difference: تفاضل دو مجموعه

union:‌اجتماع دو مجموعه

set.add(-5)
>> {-5, -1, 1, 2, 3, 5, 8, 9}

set.remove(-5)
>> {-1, 1, 2, 3, 5, 8, 9}

set.discard(-5)
>> {-1, 1, 2, 3, 5, 8, 9}

set.pop()
>> 1

set.clear()

set = {1,2,3}
set.intersection({3,4})
>> 3

set = {1,2,3}
set.difference({3,4})
>> {1,2}

set = {1,2,3}
set.union({3,4})
>> {1,2,3,4}

لیست‌ها (Lists):

list یک ساختار اطلاعاتی است که می‌تواند یک دنباله از مقادیر از هر نوعی را نگه دارد. لیست‌ها براساس اعداد صحیح از 0 تا یک شماره کوچکتر از طول لیست، ایندکس می‌شوند:

a = ['A', 5]
a[0] = 'A'

در پایتون لیست‌ها خاصیت‌های جالب توجهی از خود نشان می‌دهند، برای نمونه عملگرهای ریاضی چون جمع و ضرب در آن‌ها وجود دارد:

[5] * 2 = [5, 5, 5]
[1, 2] + [2, 3] = [1, 2, 2, 3]

یکی دیگر از قابلیت‌های جالب لیست‌ها برش زدن در آنها است. به این صورت که از دو نقطه (:) در ایندکس یک لیست استفاده می‌شود. برای درک عملکرد آن به مثالهای زیر توجه کنید:

# list[from:to:step]
a = [1, 2, 3, 4, 5]

a[1:3] = [2, 3]
x[:3] = [1, 2, 3]
x[1:] = [2, 3, 4, 5]
x[::2] = [1, 3, 5]
x[1::2] = [2, 4]

ایندکس منفی عملکردی وارونه دارد، به اینصورت که شمارش ایندکس از انتهای لیست انجام می‌شود، به مثالهای زیر توجه کنید:

a = [1, 2, 3, 4, 5]
a[:-1] = [1, 2, 3, 4]
x[-2:] = [4, 5]
x[-3:-1] = x[2, 4] = [3, 4]
x[0] = x[-len(x)] = 1
x[::-1] = [5, 4, 3, 2, 1]

عملگرهای مهم در لیست‌ها:

append: افزودن یک عضو به انتهای لیست

pop: یک عنصر را از لیست حذف می‌کند و آنرا برمی‌گرداند

extend: لیست دیگری به انتهای لیست اضافه می‌کند

sort: لیست را مرتب می‌کند

x.append(6) = [1, 2, 3, 4, 5, 6]
x.pop(5) = [1, 2, 3, 4]
x.extend([0, 7, 8]) = [1, 2, 3, 4, 5, 0, 7, 8]
x.sort() = [0, 1, 2, 3, 4, 5, 7, 8]

توجه داشته باشید که رشته‌ها نیز مانند لیست‌ها خاصیت ایندکس را دارند.

Tuples: شبیه لیست هستند به این معنی که آن‌ها می‌توانند یک رشته از داده‌ها از هر نوعی را ذخیره کنند. tuples سریع‌تر از لیست‌ها می‌باشند. برخلاف لیست‌ها، tuples تغییر ناپذیرند.

words = "spam", "eggs", "sausages"
words = ("spam", "eggs", "sausages")
words[0] = "spam"
words[::-1] = ('sausages', 'eggs', 'spam')

Dictionaries: یکی از مهمترین ساختارهای اطلاعات در پایتون می‌باشند. آن‌ها می‌توانند دیتا را بصورت جفت کلید و مقدار ذخیره کنند. مقادیر در dictionary می‌توانند هر نوع ساختار اطلاعاتی در پایتون باشند. به مثال‌های زیر توجه کنید:

dct = {'a': 1, 'b': [1,2,3], 0: 'A', 1: True}

for key in dct:
  print(key, dct[key])

>> output
a 1
b [1, 2, 3]
0 A
1 True

برخی از توابع مهم در dictionary ها 

items نمایش تمامی مواردی که در دیکشنری وجود دارد

(get(key, default در صورت وجود مقداری که به کلید key نسبت داده شده آن را باز می‌گرداند در غیر این صورت مقدار default را باز می‌گرداند.

(pop(key, default در صورت وجود مقداری که به کلید key نسبت داده شده آن را از دیکشنری حذف می‌کند در غیر این صورت مقدار default را باز می‌گرداند.

popitem یک مورد را بصورت رندوم از دیکشنری حذف می‌کند

update دو دیکشنری را در هم ادغام می‌کند

dct1 = {'a': 1, 'b': [1,2,3]}
dct2 = { 0: 'A', 1: True}

dct1.get('a') = 1
dct1.get('c', 'test') = 'test'

dct2.pop(0) = 'A'
dct2.items() = {1, True}

dct1.popitem() = ('b', [1, 2, 3])
dct1.items() = {'a', 1 }

dct1['b'] = 2
dct1 = {'a': 1, 'b': 2}

dct1.update(dct2)
dct1 = {'a': 1, 'b': 2, 1: True}

در این بخش با متغیرها و انواع داده‌ در پایتون آشنا شدیم در بخش بعدی مفهوم عبارت‌های بولی را ارائه خواهیم داد.