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

یکی از ویژگی‌های برجسته زبان پایتون این است که زبانی با نوع‌دهی پویا است. زبان‌های مبتنی بر کامپایلر مانند C/C++ و جاوا، دارای نوع‌دهی ایستا هستند. بیایید تفاوت بین نوع‌دهی ایستا و نوع‌دهی پویا را بررسی کنیم.

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

بیایید قطعه کد زیر را از یک برنامه جاوا بررسی کنیم −

public class MyClass {
   public static void main(String args[]) {
      int var;
      var="Hello";

      System.out.println("Value of var = " + var);
   }
}

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

/MyClass.java:4: error: incompatible types: String cannot be converted to int
   x="Hello";
     ^
1 error

چرا پایتون زبانی با نوع‌دهی پویا نامیده می‌شود؟

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

در جاوا، نوع متغیر تعیین می‌کند که چه مقادیری را می‌تواند ذخیره کند و چه مقادیری را نمی‌تواند. در پایتون، قضیه برعکس است. در اینجا، نوع داده (یعنی شیء) است که نوع متغیر را تعیین می‌کند. برای شروع، بیایید یک رشته را در متغیر ذخیره کنیم و نوع آن را بررسی کنیم.

>>> var="Hello"
>>> print ("id of var is ", id(var))
id of var is 2822590451184
>>> print ("type of var is ", type(var))
type of var is <class 'str'>

بنابراین، var از نوع رشته‌ای است. بااین‌حال، این نوع به‌صورت دائمی به متغیر اختصاص داده نشده است. متغیر فقط یک برچسب است و می‌توان آن را به شیئی با هر نوع دیگری، مثلاً یک عدد اعشاری، اختصاص داد. در این صورت، آن شیء با شناسه متفاوتی ذخیره می‌شود که از طریق تابع id() قابل مشاهده است −

>>> var=25.50
>>> print ("id of var is ", id(var))
id of var is 2822589562256
>>> print ("type of var is ", type(var))
type of var is <class 'float'>

یا می‌توان آن را به یک تاپل اختصاص داد. در این حالت، برچسب var به شیء دیگری اشاره می‌کند.

>>> var=(10,20,30)
>>> print ("id of var is ", id(var))
id of var is 2822592028992
>>> print ("type of var is ", type(var))
type of var is <class 'tuple'>

می‌توانیم ببینیم که هر بار var به شیء جدیدی اشاره می‌کند، نوع آن نیز تغییر می‌کند. به همین دلیل، پایتون یک زبان با نوع‌دهی پویا است.

ویژگی نوع‌دهی پویای پایتون باعث می‌شود این زبان در مقایسه با C/C++ و جاوا انعطاف‌پذیرتر باشد. بااین‌حال، این ویژگی احتمال بروز خطا در زمان اجرای برنامه را افزایش می‌دهد؛ بنابراین، برنامه‌نویس باید با دقت عمل کند.

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