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

متغیرها در پایتون

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

بر اساس نوع داده متغیر، فضای حافظه به آن اختصاص داده می‌شود. بنابراین، با تخصیص انواع داده‌های مختلف به متغیرهای پایتون، می‌توانید اعداد صحیح، اعداد اعشاری یا کاراکترها را در این متغیرها ذخیره کنید.

آدرس‌های حافظه

آیتم‌های داده مربوط به انواع مختلف داده، در حافظه کامپیوتر ذخیره می‌شوند. موقعیت‌های حافظه کامپیوتر دارای یک شماره یا آدرس هستند که در داخل به صورت باینری (دودویی) نمایش داده می‌شوند. داده‌ها نیز به صورت باینری ذخیره می‌شوند زیرا کامپیوتر بر اساس اصل نمایش باینری کار می‌کند. در دیاگرام زیر، یک رشته May و یک عدد 18 به عنوان مقادیر ذخیره‌شده در موقعیت‌های حافظه نشان داده شده‌اند.

memory

اگر با زبان اسمبلی آشنا باشید، این آیتم‌های داده و آدرس حافظه را تبدیل کرده و یک دستور به زبان ماشین می‌دهید. با این حال، این کار برای همه آسان نیست. مترجم زبان مانند مفسر پایتون این نوع تبدیل را انجام می‌دهد. این مترجم، شیء را در یک موقعیت حافظه که به صورت تصادفی انتخاب شده ذخیره می‌کند. تابع داخلی id() در پایتون، آدرسی را که شیء در آن ذخیره شده است برمی‌گرداند.

>>> "May"
May
>>> id("May")
2167264641264

>>> 18
18
>>> id(18)
140714055169352

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

در مثال بالا، بیایید موقعیت May را با نام month و موقعیتی را که 18 در آن ذخیره شده با نام age برچسب‌گذاری کنیم. پایتون از عملگر انتساب (=) برای پیوند دادن یک شیء با برچسب استفاده می‌کند.

>>> month="May"
>>> age=18

شیء داده (May) و نام آن (month) دارای id() یکسانی هستند. همچنین id() عدد 18 و age نیز یکسان است.

>>> id(month)
2167264641264
>>> id(age)
140714055169352

این برچسب یک شناسه (Identifier) است. معمولاً به آن متغیر می‌گویند. یک متغیر پایتون، نامی نمادین است که نقش مرجع یا اشاره‌گر به یک شیء را ایفا می‌کند.

ایجاد متغیرها در پایتون

متغیرهای پایتون برای رزرو فضای حافظه یا به اصطلاح ایجاد متغیر، نیازی به اعلام صریح (Explicit Declaration) ندارند. متغیر پایتون زمانی که مقداری را به آن اختصاص می‌دهید، به طور خودکار ایجاد می‌شود. از علامت مساوی (=) برای تخصیص مقادیر به متغیرها استفاده می‌شود.

عملوند سمت چپ عملگر = نام متغیر است و عملوند سمت راست عملگر = مقداری است که در متغیر ذخیره می‌شود. برای مثال −

مثال برای ایجاد متغیرهای پایتون

این مثال انواع مختلفی از متغیرها (یک عدد صحیح، یک عدد اعشاری و یک رشته) را ایجاد می‌کند.

counter = 100          # Creates an integer variable
miles   = 1000.0       # Creates a floating point variable
name    = "Zara Ali"   # Creates a string variable

چاپ متغیرهای پایتون

پس از ایجاد یک متغیر در پایتون و اختصاص مقدار به آن، می‌توانیم آن را با استفاده از تابع print() چاپ کنیم. کد زیر ادامه مثال قبلی است و نحوه چاپ متغیرهای مختلف در پایتون را نشان می‌دهد:

مثال برای چاپ متغیرهای پایتون

این مثال متغیرها را چاپ می‌کند.

counter = 100          # Creates an integer variable
miles   = 1000.0       # Creates a floating point variable
name    = "Zara Ali"   # Creates a string variable

print (counter)
print (miles)
print (name)

در اینجا، مقادیر 100، 1000.0 و "Zara Ali" به ترتیب به متغیرهای counter، miles و name اختصاص یافته‌اند. هنگام اجرای برنامه پایتون بالا، نتیجه زیر تولید می‌شود −

100
1000.0
Zara Ali

حذف متغیرهای پایتون

می‌توانید مرجع یک شیء عددی را با استفاده از دستور del حذف کنید. ساختار دستور del به صورت زیر است −

del var1[,var2[,var3[....,varN]]]]

با استفاده از دستور del می‌توانید یک شیء یا چند شیء را حذف کنید. برای مثال −

del var
del var_a, var_b

مثال

مثال‌های زیر نشان می‌دهند که چگونه می‌توانیم یک متغیر را حذف کنیم و اگر تلاش کنیم از یک متغیر حذف‌شده استفاده کنیم، مفسر پایتون خطا می‌دهد:

counter = 100
print (counter)

del counter
print (counter)

این کد نتیجه زیر را تولید خواهد کرد:

100
Traceback (most recent call last):
  File "main.py", line 7, in <module>
    print (counter)
NameError: name 'counter' is not defined

دریافت نوع یک متغیر

می‌توانید نوع داده یک متغیر پایتون را با استفاده از تابع داخلی type() در پایتون به صورت زیر به دست آورید.

مثال: چاپ نوع متغیرها

x = "Zara"
y =  10
z =  10.10

print(type(x))
print(type(y))
print(type(z))

این کد نتیجه زیر را تولید خواهد کرد:

<class 'str'>
<class 'int'>
<class 'float'>

تبدیل نوع (Casting) متغیرهای پایتون

می‌توانید نوع داده یک متغیر را با کمک تبدیل نوع (Casting) به صورت زیر مشخص کنید:

مثال

این مثال حساسیت به حروف کوچک و بزرگ را در متغیرها نشان می‌دهد.

x = str(10)    # x will be '10'
y = int(10)    # y will be 10 
z = float(10)  # z will be 10.0

print( "x =", x )
print( "y =", y )
print( "z =", z )

این کد نتیجه زیر را تولید خواهد کرد:

x = 10
y = 10
z = 10.0

حساسیت متغیرهای پایتون به حروف کوچک و بزرگ (Case-Sensitivity)

متغیرهای پایتون به حروف کوچک و بزرگ حساس هستند، به این معنی که Age و age دو متغیر کاملاً متفاوت محسوب می‌شوند:

age = 20
Age = 30

print( "age =", age )
print( "Age =", Age )

این کد نتیجه زیر را تولید خواهد کرد:

age = 20
Age = 30

متغیرهای پایتون - مقداردهی چندگانه

پایتون اجازه می‌دهد تا بیش از یک متغیر را در یک دستور مقداردهی اولیه کنید. در حالت زیر، سه متغیر دارای مقدار یکسانی هستند.

>>> a=10
>>> b=10
>>> c=10

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

>>> a=b=c=10
>>> print (a,b,c)
10 10 10

در حالت زیر، سه متغیر با مقادیر متفاوت داریم.

>>> a=10
>>> b=20
>>> c=30

این دستورات انتساب جداگانه را می‌توان در یک دستور ترکیب کرد. کافی است نام متغیرها را با کاما در سمت چپ، و مقادیر را با کاما در سمت راست عملگر = قرار دهید.

>>> a,b,c = 10,20,30
>>> print (a,b,c)
10 20 30

بیایید چند مثال را در حالت اسکریپت امتحان کنیم: −

a = b = c = 100

print (a)
print (b)
print (c)

این کد نتیجه زیر را تولید می‌کند:

100
100
100

در اینجا، یک شیء عدد صحیح با مقدار 100 ایجاد می‌شود و هر سه متغیر به همان موقعیت حافظه ارجاع داده می‌شوند. همچنین می‌توانید چندین شیء را به چندین متغیر اختصاص دهید. برای مثال −

a,b,c = 1,2,"Zara Ali"

print (a)
print (b)
print (c)

این کد نتیجه زیر را تولید می‌کند:

1
2
Zara Ali

در اینجا، دو شیء عدد صحیح با مقادیر 1 و 2 به ترتیب به متغیرهای a و b و یک شیء رشته‌ای با مقدار "Zara Ali" به متغیر c اختصاص داده می‌شوند.

متغیرهای پایتون - قراردادهای نام‌گذاری

هر متغیر در پایتون باید نامی منحصر‌به‌فرد مانند a، b یا c داشته باشد. نام متغیر می‌تواند باسنماد و با معنامفهوم باشد مانند color، age، name و غیره. قواعد مشخصی وجود دارد که هنگام نام‌گذاری متغیر در پایتون باید رعایت شوند:

  • نام متغیر باید با یک حرف یا کاراکتر خط زیرین (_) شروع شود.
  • نام متغیر نمی‌تواند با عدد یا هر کاراکتر خاصی مانند $، (، *، % و غیره شروع شود.
  • نام متغیر فقط می‌تواند شامل کاراکترهای حروف و اعداد و خط زیرین باشد (A-z، 0-9 و _ ).
  • نام‌های متغیر در پایتون به حروف کوچک و بزرگ حساس هستند، به این معنی که Name و NAME دو متغیر متفاوت در پایتون هستند.
  • کلمات کلیدی رزروشده در پایتون را نمی‌توان برای نام‌گذاری متغیر استفاده کرد.

اگر نام متغیر شامل چند کلمه باشد، باید از این الگوهای نام‌گذاری استفاده کنیم −

  • حالت کوهان شتری (Camel case) − حرف اول کلمه اول کوچک است، اما حرف اول هر کلمه بعدی با حرف بزرگ شروع می‌شود. برای مثال: kmPerHour، pricePerLitre

  • حالت پاسکال (Pascal case) − حرف اول هر کلمه با حرف بزرگ شروع می‌شود. برای مثال: KmPerHour، PricePerLitre

  • حالت ماری (Snake case) − از یک کاراکتر خط زیرین (_) برای جدا کردن کلمات استفاده می‌شود. برای مثال: km_per_hour، price_per_litre

مثال

موارد زیر نام‌های معتبر برای متغیر در پایتون هستند:

counter = 100
_count  = 100
name1 = "Zara"
name2 = "Nuha"
Age  = 20
zara_salary = 100000

print (counter)
print (_count)
print (name1)
print (name2)
print (Age)
print (zara_salary)

این کد نتیجه زیر را تولید خواهد کرد:

100
100
Zara
Nuha
20
100000

مثال

موارد زیر نام‌های نامعتبر برای متغیر در پایتون هستند:

1counter = 100
$_count  = 100
zara-salary = 100000

print (1counter)
print ($count)
print (zara-salary)

این کد نتیجه زیر را تولید خواهد کرد:

File "main.py", line 3
    1counter = 100
           ^
SyntaxError: invalid syntax

مثال

وقتی از یک متغیر برای شناسایی یک شیء داده استفاده می‌کنید، می‌توان بارها بدون نیاز به مقدار id() آن از آن استفاده کرد. در اینجا، ما متغیرهای height (ارتفاع) و width (عرض) یک مستطیل را داریم. می‌توانیم مساحت و محیط را با این متغیرها محاسبه کنیم.

>>> width=10
>>> height=20
>>> area=width*height
>>> area
200
>>> perimeter=2*(width+height)
>>> perimeter
60

استفاده از متغیرها به‌ویژه هنگام نوشتن اسکریپت‌ها یا برنامه‌ها سودمند است. اسکریپت زیر نیز از متغیرهای بالا استفاده می‌کند.

#! /usr/bin/python3

width = 10
height = 20
area = width*height
perimeter = 2*(width+height)
print ("Area = ", area)
print ("Perimeter = ", perimeter)

اسکریپت بالا را با پسوند .py ذخیره کرده و از خط فرمان اجرا کنید. نتیجه به این صورت خواهد بود −

Area = 200
Perimeter = 60

متغیرهای محلی (Local Variables) در پایتون

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

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

مثال

در ادامه مثالی برای نشان دادن نحوه استفاده از متغیرهای محلی آورده شده است:

def sum(x,y):
   sum = x + y
   return sum
print(sum(5, 10))

این کد نتیجه زیر را تولید خواهد کرد −

15

متغیرهای سراسری (Global Variables) در پایتون

هر متغیری که خارج از یک تابع ایجاد شود، در داخل هر تابعی قابل دسترسی است و بنابراین دارای حوزه سراسری (Global Scope) است.

مثال

در ادامه مثالی از متغیرهای سراسری آورده شده است −

x = 5
y = 10
def sum():
   sum = x + y
   return sum
print(sum())

این کد نتیجه زیر را تولید خواهد کرد −

15

ثابت‌ها (Constants) در پایتون

پایتون ثابت‌هایی که به صورت رسمی تعریف شده باشند ندارد، با این حال می‌توانید با استفاده از نام‌های کاملاً حروف بزرگ همراه با خط زیرین، مشخص کنید که با یک متغیر مانند یک ثابت رفتار شود. برای مثال، نام PI_VALUE نشان می‌دهد که شما نمی‌خواهید این متغیر بازتعریف شود یا به هر نحوی تغییر کند.

قرارداد نام‌گذاری با استفاده از تمام حروف بزرگ گاهی اوقات به عنوان screaming snake case نامیده می‌شود - که در آن حروف بزرگ (screaming) و خط زیرین (snakes) قرار دارند.

مقایسه متغیرها در پایتون و C/C++

مفهوم متغیر در پایتون متفاوت از زبان‌های C/C++ کار می‌کند. در C/C++، متغیر یک خانه نام‌گذاری‌شده از حافظه است. اگر a=10 و همچنین b=10 باشد، هر دو موقعیت‌های متفاوتی از حافظه هستند. فرض کنیم آدرس حافظه آن‌ها به ترتیب 100 و 200 باشد.

named memory location

اگر مقدار متفاوتی به "a" اختصاص داده شود - مثلاً 50، مقدار 10 در آدرس 100 جایگزین می‌شود.

Image-20

یک متغیر پایتون به خود شیء اشاره دارد نه به موقعیت حافظه. یک شیء فقط یک بار در حافظه ذخیره می‌شود. متغیرهای متعدد در واقع برچسب‌های متعددی برای همان شیء هستند.

address_100

دستور a=50 یک شیء int جدید به مقدار 50 در موقعیت دیگری از حافظه ایجاد می‌کند و شیء 10 را که "b" به آن اشاره می‌کند دست‌نخورده باقی می‌گذارد.

address_150

علاوه بر این، اگر مقدار دیگری را به b اختصاص دهید، شیء 10 بدون ارجاع می‌ماند.

address_200

مکانیسم زباله‌روب (Garbage Collector) پایتون، حافظه اشغال‌شده توسط هر شیء بدون ارجاع را آزاد می‌کند.

عملگر هویت is در پایتون اگر هر دو عملوند مقدار id() یکسانی داشته باشند، مقدار True را برمی‌گرداند.

>>> a=b=10
>>> a is b
True
>>> id(a), id(b)
(140731955278920, 140731955278920)

پیشرفت مطالعه: وضعیت خوانده‌شدن این درس فقط در همین مرورگر ذخیره می‌شود؛ بدون نیاز به حساب کاربری.