متغیر نام یا شناسه ای (Identifiers) است که به یک شی (Object) نگاشت داده می شود. فضای نام (Namespace) نیز یک دیگشنری است که کلید ها در آن نام متغیر و مقدار هر کلید نام شی است. بنابراین فضای نام نگاشتی از نام متغیر به شی است. عبارت ها یا دستورهای پایتون می توانند به فضای نام محلی (Local Namespace) و فضای نام سراسری (Global Namespace) دسترسی داشته باشند.

با توجه به مطالب بالا نام ها در پایتون در دو دسته فضای نام سراسری و فضای نام محلی قرار می گیرند. نام های سراسری درون ماژول ها و نام های محلی درون توابع قرار دارند. مطلب مهمی که باید گفت این است که بین نام های محتلف در فضای نام های مختلف هیچ ارتباطی وجود ندارد.

ممکن است در دو ماژول تابع هم نام وجود داشته باشد. در مبحث تعریف و استفاده از ماژول ها گفته شد که برای دسترسی به هر کدام از موارد درون ماژول به صورت module_name.function_name یا module_name.class_name استفاده می شود. به عبارتی اگر در دو ماژول یک تابع به نام maximize وجود داشته باشد از طریق نام ماژول تعیین می شود که از کدام تابع استفاده کرده ایم.

هر نامی (هر متغیری) که درون بدنه یک تابع یا بدنه متد (تابع) عضو یک کلاس تعریف شود در فضای نام محلی آن تابع قرار دارد و آنرا متغیر محلی (Local Variable) می گویند. اگر چندین تابع درون یک فایل وجود داشته باشد و تمامی متغیرهایی که خارج از بدنه این توابع تعریف می شوند فضای نام سراسری دارند و می توان از آنها در توابع استفاده کرد. به این متغیرها، متغیرهای سراسری (Global Variable) می گویند.

در مطلب ماژول ها گفته شد که هر ماژول فایلی با پسوند py. است که در آن می توان متغیرها، توابع و کلاس ها را تعریف کرد. تمامی نام هایی که درون یک ماژول تعریف می شوند در فضای نام سراسری قرار دارند و با ضمیمه کردن (import کردن) آن ماژول به نام های درون آن دسترسی داشت. منظور از نام های درون ماژول نام کلاس ها و توابع و متغیرهای سراسری است که درون آن ماژول تعریف کرده ایم

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

تابع ()dir

از تابع ()dir می توان برای پیدا کردن لیست نام هایی که درون یک ماژول تعریف شده اند استفاده کنیم. به طور مثال برای پیدا کردن لیست نام های تعریف شده درون ماژول os می توانیم به صورت زیر عمل کنیم.

خروجی قطعه کد ۱ مطابق زیر است که در آن __name__ به نام ماژول و __file__ به نام و مسیر فایل مربوط به ماژول اشاره دارد. لیست فوق نام تمامی متغیر ها، کلاس ها و متدهای کلاس هایی که درون ماژول os تعریف شده اند را نشان می دهد.

توابع ()globals و ()locals

 از توابع ()locals و ()globals می توان برای نمایش فهرست نام های تعریف شده در فضای نام محلی و فضای نام سراسری استفاده کرد بسته به اینکه در کجا این دو تابع را فراخوانی کرده باشیم. اگر تابع ()locals را درون یک تابع فراخوانی کنیم، خروجی این تابع لیستی از نام هایی است که درون تابع قابل دسترسی است. اگر تابع ()globals را درون یک تابع فرخوانی کنیم، خروجی این تابع لیستی از نام های سراسری است که درون تابع قابل دسترسی هستند.

به عنوان مثال در قطعه کد ۳ ماژول os ضمیمه شده است. بنابراین تمامی نام های درون آن در فضای نام سراسری قرار می گیرند. در خط ۳ یک متغیر خارج از بدنه تابع تعریف شده است. چون متغیر global_name خارج از بدنه تابع تعریف شده پس در فضای نام سراسری قرار می گیرد. در خط ۱۵ توسط تابع ()globals لیست تمامی نام های درون فضای نام سراسری نشان داده می شود که متغیر global_name و ماژول os جز لیست هستند.

در خط ۶ متغیر local_name درون بدنه تابع تعریف می شود و چون این متغیر درون تابع تعریف شده است، در فضای نام محلی قرار می گیرد. لیست نام های درون فضای نام محلی تابع ()func توسط دستور خط ۸ نشان داده می شوند. همچنین در خط ۱۱ تابع ()globals درون تابع ()func فراخوانی شده است و خروجی کد مشابه زیر خواهد بود.