وبلاگ رسانگار
با ما حرفه ای باشید

سرور مجازی NVMe

پایتون: بررسی کنید که آیا متغیر یک دیکشنری است یا خیر

0 2
زمان لازم برای مطالعه: 3 دقیقه


معرفی

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

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

در این آموزش نگاهی به این خواهیم داشت چگونه بررسی کنیم که آیا یک متغیر یک فرهنگ لغت در پایتون است یا خیر، با استفاده از type() و isinstance() توابع، و همچنین is اپراتور:

توسعه دهندگان معمولا استفاده می کنند type() و isاگرچه، اینها می توانند در زمینه های خاصی محدود شوند، در این صورت، بهتر است از آن استفاده کنید isinstance() تابع.

بررسی کنید که آیا متغیر یک دیکشنری با است type()

ما می توانیم استفاده کنیم type() تابعی برای دریافت فوری نوع هر متغیر. برای یک متغیر از نوع Dictionary، باید برگردد <class 'dict'>:

squares = {1: 1, 2: 4, 3: 9}
print(type(squares))

این منجر به:

<class 'dict'>

بررسی کنید که آیا متغیر یک دیکشنری با است است اپراتور

در پایتون، is یک اپراتور هویت است. بررسی می کند که آیا هر دو عملوند با یکدیگر یکسان هستند یا خیر. یکسان بودن نشان می دهد که آنها به یک مکان حافظه اشاره می کنند.

ما می توانیم استفاده کنیم is عملگر با نتیجه a type() تماس با متغیر و dict کلاس خروجی خواهد داشت True فقط در صورتی که type() به همان محل حافظه اشاره می کند dict کلاس در غیر این صورت خروجی خواهد داشت False.

به عنوان یک بررسی سلامت عقل، می توانیم از آن استفاده کنیم id() تابع برای دریافت آدرس شی در حافظه و تأیید مقایسه:

squares = {1: 1, 2: 4, 3: 9}
print(type(squares) is dict)  
print("memory address of type(squares):", id(type(squares)))
print("memory address of dict:", id(dict))  

این کد خروجی زیر را تولید می کند روی یک مفسر پایتون:

True
memory address of type(squares): 1609576584
memory address of dict: 1609576584

توجه داشته باشید: آدرس حافظه ممکن است برای شما متفاوت باشد، اما شناسه یکسانی باید برای هر دو موجود باشد type(squares) و dict.

یکی از اخطارهای این روش این است که اگر متغیر از نوع زیر کلاسی باشد، کار نمی کند. dict. به عنوان مثال، اگر کد قبلی کار نمی کند squares متغیر یک بود دیکشنری سفارشی بجای:

from collections import OrderedDict

squares = OrderedDict(((1, 1), (2, 4), (3, 9)))
print(type(squares) is dict)  
print("memory address of type(squares):", id(type(squares)))
print("memory address of dict:", id(dict))  

این خروجی:

False
memory address of type(squares): 9464512
memory address of dict: 9481952

اگر کد شما برای کار کردن لازم است روی زیر کلاس های دیکشنری ها، پس ترجیح می دهید از آن استفاده کنید isinstance() روش.

بررسی کنید که آیا متغیر یک دیکشنری با است instance()

همانطور که دیدیم، is اپراتور باز خواهد گشت True زمانی که آدرس حافظه هر دو شیء یکسان باشد. اگر دیکشنری از نوع به ارث رسیده از کلاس داشته باشیم dict، باز می گردد False. به عنوان مثال، دیکشنری از یک زیر کلاس از dict پسندیدن OrderedDict یا defaultdict به همان آدرس حافظه اشاره نخواهد کرد dict.

در اینجا ما آن را داریم isinstance() برای نجات عمل کند. این تابع دو آرگومان می گیرد. یک شی و یک کلاس اگر شی نمونه ای از کلاس یا زیر کلاس های آن باشد، برمی گردد True. اگر شیء نمونه ای از کلاس داده شده، خواه مستقیم یا غیر مستقیم نباشد، برمی گردد False.

در اینجا یک مثال کد برای بررسی اینکه آیا متغیر یک دیکشنری است با استفاده از isinstance() تابع:

from collections import OrderedDict


squares = {1: 1, 2: 4, 3: 9}
print(isinstance(squares, dict))  


cubes = OrderedDict(((1, 1), (2, 8)))
print(isinstance(cubes, dict))  

این کد خروجی زیر را تولید می کند روی یک مفسر پایتون:

True
True

نتیجه

این آموزش راه هایی را نشان می دهد که از طریق آنها می توانیم بررسی کنیم که آیا یک متغیر یک دیکشنری است یا خیر. ما برای اولین بار دیده ایم type() تابعی که خروجی دارد <class 'dict'> برای هر شی دیکشنری سپس ما شاهد استفاده از is عملگر برای بررسی اینکه آیا نوع متغیر به آن اشاره دارد یا خیر dict در محل حافظه این برمی گردد True یا False بر این اساس.

در نهایت، ما آن را دیده ایم is در شناسایی اشیاء دیکشنری ارثی شکست می خورد. وقتی می خواهیم اشیاء ارثی را بگیریم، می توانیم از آن استفاده کنیم isinstance() تابع. برمی گردد True اگر شی به طور مستقیم یا غیر مستقیم نمونه ای از کلاس داده شده باشد (dict در این مقاله)، و False در غیر این صورت.

همانطور که هر دو این روش بازگشت True یا False، می توانیم به راحتی از آنها در دستورات شرطی استفاده کنیم. مگر اینکه صراحتاً بخواهید زیر کلاس‌های آن را رد کنید dict، isinstance() تابع مطمئن ترین راه برای بررسی اینکه آیا یک متغیر یک دیکشنری است یا خیر است.

(برچسب‌ها به ترجمه)# python



منتشر شده در 1403-01-12 09:37:04

امتیاز شما به این مطلب
دیدگاه شما در خصوص مطلب چیست ؟

آدرس ایمیل شما منتشر نخواهد شد.

لطفا دیدگاه خود را با احترام به دیدگاه های دیگران و با توجه به محتوای مطلب درج کنید